ldap_functions = new ldap_functions; $this->db_functions = new db_functions; $this->imap_functions = new imap_functions; $this->functions = new functions; $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin']; } function validate_fields($params) { return $this->ldap_functions->validate_fields_maillist($params); } function create($params) { // Verifica o acesso do gerente if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'add_maillists')) { $return['status'] = false; $return['msg'] = 'Você não tem acesso para adicionar listas de email.'; return $return; } $return['status'] = true; //Retira os uids duplicados se existir $array_tmp = array(); $array_tmp = array_unique($params['members']); $params['members'] = $array_tmp; // Pega ID do BD e incrementa de 1. $id = (($this->db_functions->get_next_id()) + 1); // Incrementa o id no BD. $this->db_functions->increment_id($id,'accounts'); // Cria array para incluir no LDAP $dn = 'uid=' . $params['uid'] . ',' . $params['context']; $maillist_info = array(); $maillist_info['uid'] = $params['uid']; $maillist_info['givenName'] = 'MailList'; $maillist_info['sn'] = $params['uid']; $maillist_info['cn'] = $params['cn']; $maillist_info['homeDirectory'] = '/home/false'; $maillist_info['loginShell'] = '/bin/false'; $maillist_info['mail'] = $params['mail']; $maillist_info['objectClass'][0] = 'posixAccount'; $maillist_info['objectClass'][1] = 'inetOrgPerson'; $maillist_info['objectClass'][2] = 'shadowAccount'; $maillist_info['objectClass'][3] = 'qmailuser'; $maillist_info['objectClass'][4] = 'phpgwAccount'; $maillist_info['objectClass'][5] = 'top'; $maillist_info['objectClass'][6] = 'person'; $maillist_info['objectClass'][7] = 'organizationalPerson'; $maillist_info['phpgwAccountExpires'] = '-1'; $maillist_info['phpgwAccountType'] = 'l'; $maillist_info['uidnumber'] = $id; $maillist_info['gidnumber'] = '0'; $maillist_info['userPassword'] = ''; $maillist_info['deliveryMode'] = 'forwardOnly'; if ($params['accountStatus'] == 'on') $maillist_info['accountStatus'] = 'active'; if ($params['phpgwAccountVisible'] == 'on') $maillist_info['phpgwAccountVisible'] = '-1'; foreach($params['members'] as $index=>$uidnumber) { $mail = $this->ldap_functions->uidnumber2mail($uidnumber); $maillist_info['mailForwardingAddress'][] = $mail; $this->db_functions->write_log("Adicionado usuario $mail a lista ".$params['cn']." no momento da criação",$dn,$uidnumber,'',''); } $result = $this->ldap_functions->ldap_add_entry($dn, $maillist_info); if (!$result['status']) { $return['status'] = false; $return['msg'] .= $result['msg']; } if ($return['status'] == true) { $this->db_functions->write_log('Criado lista de email','',$dn,'',''); } return $return; } function save($new_values) { // Verifica o acesso do gerente if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_maillists')) { $return['status'] = false; $return['msg'] = 'Você não tem acesso para editar listas de email.'; return $return; } $return['status'] = true; //Retira os uids duplicados se existir $array_tmp = array(); $array_tmp = array_unique($new_values['members']); $new_values['members'] = $array_tmp; $old_values = $this->get_info($new_values['uidnumber'], $new_values['manager_context']); $diff = array_diff($new_values, $old_values); $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context']; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // RENAME if ($diff['context'] || $diff['uid']) { $newrdn = 'uid=' . $new_values['uid']; $newparent = $new_values['context']; $result = $this->ldap_functions->change_user_context($dn, $newrdn, $newparent); if (!$result['status']) { $return['status'] = false; $return['msg'] .= $result['msg']; } else { $dn = $newrdn . ',' . $newparent; $this->db_functions->write_log('Renomeado login da lista','',$dn,$old_values['uid'],''); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // REPLACE MAIL & CN if ($new_values['mail'] != $old_values['mail']) { $ldap_mod_replace['mail'] = $new_values['mail']; $this->db_functions->write_log('Modificado email da lista','',$dn,'',''); } if ($new_values['cn'] != $old_values['cn']) { $ldap_mod_replace['cn'] = $new_values['cn']; $this->db_functions->write_log('Modificado common name da lista','',$dn,'',''); } if (count($ldap_mod_replace)) { $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace); if (!$result['status']) { $return['status'] = false; $return['msg'] .= $result['msg']; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // REMOVE ATTRS if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on')) $ldap_remove['accountStatus'] = array(); if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on')) $ldap_remove['phpgwAccountVisible'] = array(); if (count($ldap_remove)) { $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove); if (!$result['status']) { $return['status'] = false; $return['msg'] .= $result['msg']; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ADD ATTRS if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on')) $ldap_add['accountStatus'] = 'active'; if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on')) $ldap_add['phpgwAccountVisible'] = '-1'; if (count($ldap_add)) { $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add); if (!$result['status']) { $return['status'] = false; $return['msg'] .= $result['msg']; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // USERS if (!$new_values['members']) $new_values['members'] = array(); if (!$old_values['members']) $old_values['members'] = array(); $add_users = array_diff($new_values['members'], $old_values['members']); $remove_users = array_diff($old_values['members'], $new_values['members']); if (count($add_users)>0) { $array_emails_add = array(); foreach($add_users as $uidnumber) { $mail = $this->ldap_functions->uidnumber2mail($uidnumber); $array_emails_add[] = $mail; $this->db_functions->write_log("Adicionado usuario $mail a lista",$dn,$uidnumber,'',''); } $this->ldap_functions->add_user2maillist($new_values['uidnumber'], $array_emails_add); } if (count($remove_users)>0) { $array_emails_remove = array(); foreach($remove_users as $uidnumber) { $mail = $this->ldap_functions->uidnumber2mail($uidnumber); $array_emails_remove[] = $mail; $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'',''); } $this->ldap_functions->remove_user2maillist($new_values['uidnumber'], $array_emails_remove); } return $return; } function get_info($uidnumber, $context) { $maillist_info_ldap = $this->ldap_functions->get_maillist_info($uidnumber, $context); return $maillist_info_ldap; } function delete($params) { // Verifica o acesso do gerente if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'delete_maillists')) { $return['status'] = false; $return['msg'] = 'Você não tem acesso para excluir listas de email.'; return $return; } $return['status'] = true; $uidnumber = $params['uidnumber']; $uid = $this->ldap_functions->uidnumber2uid($uidnumber); //LDAP $result_ldap = $this->ldap_functions->delete_maillist($uidnumber); if (!$result_ldap['status']) { $return['status'] = false; $return['msg'] .= $result_ldap['msg']; } if ($return['status'] == true) { $this->db_functions->write_log('Deletado lista de email','',$uid,'',''); } return $return; } } ?>