Changeset 3947
- Timestamp:
- 04/01/11 15:34:08 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/reports/inc/class.ldap_functions.inc.php
r3530 r3947 45 45 $this->manager_contexts = $manager_acl['contexts']; 46 46 } 47 48 /* expressoAdmin: email lists : deve utilizar o ldap Host Master com o usuario e senha do CC*/49 /* ldap connection following referrals and using Master config, from setup */50 function ldapMasterConnect()51 {52 /*53 $common = new common();54 if ( (!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) &&55 (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_dn'])) &&56 (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_pw'])) )57 {58 $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_master_host']);59 ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);60 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);61 ldap_set_rebind_proc($ldap_connection, ldapRebind);62 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_master_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_master_root_pw']);63 }64 else65 {66 $ldap_connection = $common->ldapConnect($GLOBALS['phpgw_info']['server']['ldap_host'],67 $GLOBALS['phpgw_info']['server']['ldap_root_dn'],68 $GLOBALS['phpgw_info']['server']['ldap_root_pw'], true);69 }70 71 // If success, return follow_referral connection. Else, return normal connection.72 if ($ldap_connection)73 return $ldap_connection;74 else75 return $this->ldap;76 */77 78 // Este if é para utilizar o master. (para replicação)79 if ( (!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) && ($ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_master_host'])) )80 {81 ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);82 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);83 ldap_set_rebind_proc($ldap_connection, ldapRebind);84 if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )85 {86 if ( ! ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']) )87 {88 return false;89 }90 }91 return $ldap_connection;92 }93 else94 {95 $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);96 if ($ldap_connection)97 {98 ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);99 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);100 if ( ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']) )101 return $ldap_connection;102 }103 }104 105 return false;106 }107 108 function validate_fields($params)109 {110 /* ldap connection following referals and using Contac Center config*/111 if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))112 {113 $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);114 if ($ldap_connection)115 {116 ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);117 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);118 119 if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )120 ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);121 $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];122 }123 else124 {125 $result['status'] = false;126 $result['msg'] = $this->functions->lang('Connection with ldap fail') . ".";127 return $result;128 }129 }130 else131 {132 $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);133 ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);134 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);135 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);136 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];137 }138 139 $result['status'] = true;140 141 $params = unserialize($params['attributes']);142 $type = $params['type'];143 $uid = $params['uid'];144 $mail = $params['mail'];145 $mailalternateaddress = $params['mailalternateaddress'];146 $cpf = $params['cpf'];147 148 if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])149 {150 $result['status'] = false;151 $result['msg'] = $this->functions->lang('this login can not be used because is a system account') . ".";152 return $result;153 }154 155 if (($type == 'create_user') || ($type == 'rename_user'))156 {157 if ($this->current_config['expressoAdmin_prefix_org'] == 'true')158 {159 //Obtenho UID sem a organização. Na criação o uid já vem sem a organização160 $tmp_uid_without_org = split("-", $params['uid']);161 $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);162 array_pop($tmp_reverse_uid_without_org);163 $uid_without_org = implode("-", $tmp_reverse_uid_without_org);164 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";165 }166 else167 {168 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";169 }170 /*171 //UID172 if (($type == 'rename_user') && ($this->current_config['expressoAdmin_prefix_org'] == 'true'))173 {174 //Obtenho UID sem a organização. Na criação o uid já vem sem a organização175 $tmp_uid_without_org = split("-", $params['uid']);176 $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);177 array_pop($tmp_reverse_uid_without_org);178 $uid_without_org = implode("-", $tmp_reverse_uid_without_org);179 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";180 }181 else182 {183 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";184 }185 */186 187 $justthese = array("uid", "mail", "cn");188 $search = ldap_search($ldap_connection, $context, $filter, $justthese);189 $count_entries = ldap_count_entries($ldap_connection,$search);190 if ($count_entries > 0)191 {192 $entries = ldap_get_entries($ldap_connection, $search);193 194 for ($i=0; $i<$entries['count']; $i++)195 {196 $users .= $entries[$i]['cn'][0] . ' - ' . $entries[$i]['mail'][0] . "\n";197 }198 199 $result['status'] = false;200 $result['msg'] = $this->functions->lang('this login is already used by') . ":\n" . $users;201 return $result;202 }203 204 // GRUPOS205 $filter = "(&(phpgwAccountType=g)(cn=$uid))";206 $justthese = array("cn");207 $search = ldap_search($ldap_connection, $context, $filter, $justthese);208 $count_entries = ldap_count_entries($ldap_connection,$search);209 if ($count_entries > 0)210 {211 $result['status'] = false;212 $result['msg'] = $this->functions->lang('This login is being used by a group') . ".";213 return $result;214 }215 216 217 // UID em outras organizações, pesquiso apenas na maquina local e se utilizar prefix_org218 if ($this->current_config['expressoAdmin_prefix_org'] == 'true')219 {220 $ldap_connection2 = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);221 ldap_set_option($ldap_connection2,LDAP_OPT_PROTOCOL_VERSION,3);222 ldap_set_option($ldap_connection2, LDAP_OPT_REFERRALS, false);223 ldap_bind($ldap_connection2, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);224 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];225 226 //Obtenho UID sem a organização227 /*228 $tmp_uid_without_org = split("-", $params['uid']);229 if (count($tmp_uid_without_org) < 2)230 {231 $result['status'] = false;232 $result['msg'] = 'Novo login sem organização.';233 return $result;234 }235 $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);236 array_pop($tmp_reverse_uid_without_org);237 $uid_without_org = implode("-", $tmp_reverse_uid_without_org);238 */239 240 $filter = "(objectClass=organizationalUnit)";241 $justthese = array("ou");242 $search = ldap_list($ldap_connection2, $context, $filter, $justthese);243 $entries = ldap_get_entries($ldap_connection2 ,$search);244 245 foreach ($entries as $index=>$org)246 {247 $organization = $org['ou'][0];248 $organization = strtolower($organization);249 250 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";251 252 $justthese = array("uid");253 $search = ldap_search($ldap_connection2, $context, $filter, $justthese);254 $count_entries = ldap_count_entries($ldap_connection2,$search);255 if ($count_entries > 0)256 {257 $result['status'] = false;258 $result['msg'] = $this->functions->lang('this login is already used by a user in another organization') . ".";259 ldap_close($ldap_connection2);260 return $result;261 }262 }263 ldap_close($ldap_connection2);264 }265 }266 267 if ($type == 'rename_user')268 {269 return $result;270 }271 272 // MAIL273 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";274 $justthese = array("mail", "uid");275 $search = ldap_search($ldap_connection, $context, $filter, $justthese);276 $entries = ldap_get_entries($ldap_connection,$search);277 if ($entries['count'] == 1){278 if ($entries[0]['uid'][0] != $uid){279 $result['status'] = false;280 $result['msg'] = $this->functions->lang('this email address is being used by 1 user') . ": " . $entries[0]['uid'][0];281 return $result;282 }283 }284 else if ($entries['count'] > 1){285 $result['status'] = false;286 $result['msg'] = $this->functions->lang('this email address is being used by 2 or more users') . ".";287 return $result;288 }289 290 // MAILAlternateAddress291 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";292 $justthese = array("mail", "uid");293 $search = ldap_search($ldap_connection, $context, $filter, $justthese);294 $entries = ldap_get_entries($ldap_connection,$search);295 if ($entries['count'] == 1){296 if ($entries[0]['uid'][0] != $uid){297 $result['status'] = false;298 $result['msg'] = $this->functions->lang('alternative email is being used by 1 user') . ": " . $entries[0]['uid'][0];299 return $result;300 }301 }302 else if ($entries['count'] > 1){303 $result['status'] = false;304 $result['msg'] = $this->functions->lang('alternative email is being used by 2 or more users') . ".";305 return $result;306 }307 308 //Begin: Check CPF, only if the manager has access to this field.309 if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'manipulate_corporative_information'))310 {311 if (!empty($cpf))312 {313 if (!$this->functions->checkCPF($cpf))314 {315 $result['status'] = false;316 $result['msg'] = $this->functions->lang('Field CPF is invalid') . '.';317 return $result;318 }319 else320 {321 //retira caracteres que não são números.322 $cpf = ereg_replace("[^0-9]", "", $cpf);323 324 $local_ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);325 if ($ldap_connection)326 {327 ldap_set_option($local_ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);328 ldap_set_option($local_ldap_connection, LDAP_OPT_REFERRALS, false);329 ldap_bind($local_ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);330 }331 else332 {333 $result['status'] = false;334 $result['msg'] = $this->functions->lang('Connection with ldap fail') . ".";335 return $result;336 }337 338 $filter = "(&(phpgwAccountType=u)(cpf=$cpf))";339 $justthese = array("cn","uid");340 $search = ldap_search($local_ldap_connection, $context, $filter, $justthese);341 $entries = ldap_get_entries($local_ldap_connection,$search);342 343 if ( ($entries['count'] != 1) && (strcasecmp($uid, $entries[0]['uid'][0]) != 0) )344 {345 if ($entries['count'] > 0)346 {347 $result['question'] = $this->functions->lang('Field CPF used by') . ":\n";348 for ($i=0; $i<$entries['count']; $i++)349 {350 if (strcasecmp($uid, $entries[$i]['uid'][0]) != 0)351 $result['question'] .= "- " . $entries[$i]['cn'][0] . "\n";352 }353 $result['question'] .= $this->functions->lang("Do you want to continue anyway") . "?";354 return $result;355 }356 }357 ldap_close($local_ldap_connection);358 }359 }360 else if ($this->current_config['expressoAdmin_cpf_obligation'])361 {362 $result['status'] = false;363 $result['msg'] = $this->functions->lang('Field CPF must be completed') . '.';364 return $result;365 }366 }367 //End: Check CPF368 369 return $result;370 }371 372 function generate_login($params) {373 $params = unserialize($params['attributes']);374 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];375 $justthese = array("uid");376 $i=1;377 $login = array("status" => False,"msg" => lang("Login generator disabled"));378 379 if( (isset($this->current_config['expressoAdmin_loginGenScript'])) &&380 ($this->current_config['expressoAdmin_loginGenScript'])) {381 382 include_once "if.login.inc.php";383 include_once "class.".$this->current_config['expressoAdmin_loginGenScript'].384 ".inc.php";385 386 $classe = new ReflectionClass($this->current_config['expressoAdmin_loginGenScript']);387 388 if(!$classe->implementsInterface('login'))389 {390 return array(391 "status" => False,392 "msg" => lang("Login interface not implemented (contact suport)")393 );394 }395 396 $login = $classe->newInstance()->generate_login($params["first_name"],$params["second_name"],$this->ldap);397 398 /*399 If login exists, it concatenates a number to the end.400 resulting in a new login401 */402 $i = 1;403 while($i < 1000) // Limit of 1000 equal names404 {405 $search = ldap_search($this->ldap, $context, "(uid=".$login.")", $justthese);406 if (ldap_count_entries($this->ldap,$search) == 0)407 break;408 else409 {410 if ($i > 1) // If login have a number, remove the number and put the new one411 $login=substr($login,0,strlen($login)-strlen($i)).$i;412 else413 $login.=$i;414 $i++;415 }416 }417 }418 419 return array('status'=>true,'msg' => $login);420 }421 function validate_fields_group($params)422 {423 /* ldap connection following referals and using Contac Center config*/424 if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))425 {426 $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);427 if ($ldap_connection)428 {429 ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);430 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);431 if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )432 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);433 $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];434 }435 else436 {437 $result['status'] = false;438 $result['msg'] = $this->functions->lang('Connection with ldap fail') . ".";439 return $result;440 }441 }442 else443 {444 $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);445 ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);446 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);447 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);448 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];449 }450 451 $cn = $params['cn'];452 $result['status'] = true;453 454 if ($_SESSION['phpgw_info']['expresso']['global_denied_groups'][$cn])455 {456 $result['status'] = false;457 $result['msg'] = $this->functions->lang('This group name can not be used because is a System Account') . ".";458 return $result;459 }460 461 // CN462 $filter = "(&(phpgwAccountType=g)(cn=$cn))";463 $justthese = array("cn");464 $search = ldap_search($ldap_connection, $context, $filter, $justthese);465 $count_entries = ldap_count_entries($ldap_connection,$search);466 if ($count_entries > 0)467 {468 $result['status'] = false;469 $result['msg'] = $this->functions->lang('This name is already used') . ".";470 return $result;471 }472 473 // UID474 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";475 $justthese = array("uid");476 $search = ldap_search($ldap_connection, $context, $filter, $justthese);477 $count_entries = ldap_count_entries($ldap_connection,$search);478 if ($count_entries > 0)479 {480 $result['status'] = false;481 $result['msg'] = $this->functions->lang('This grupo name is already used by an user') . ".";482 return $result;483 }484 485 return $result;486 }487 488 function validate_fields_maillist($params)489 {490 /* ldap connection following referals and using Contac Center config*/491 if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))492 {493 $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);494 if ($ldap_connection)495 {496 ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);497 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);498 if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )499 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);500 $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];501 }502 else503 {504 $result['status'] = false;505 $result['msg'] = $this->functions->lang('Connection with ldap fail') . ".";506 return $result;507 }508 }509 else510 {511 $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);512 ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);513 ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);514 ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);515 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];516 }517 518 $uid = $params['uid'];519 $mail = $params['mail'];520 $result['status'] = true;521 522 if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])523 {524 $result['status'] = false;525 $result['msg'] = $this->functions->lang('This LOGIN can not be used because is a System Account') . ".";526 return $result;527 }528 529 // UID530 $filter = "(&(phpgwAccountType=l)(uid=$uid))";531 $justthese = array("uid");532 $search = ldap_search($ldap_connection, $context, $filter, $justthese);533 $count_entries = ldap_count_entries($ldap_connection,$search);534 if ($count_entries > 0)535 {536 $result['status'] = false;537 $result['msg'] = $this->functions->lang('this email list login is already used') . ".";538 return $result;539 }540 541 // MAIL542 $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";543 $justthese = array("mail");544 $search = ldap_search($ldap_connection, $context, $filter, $justthese);545 $count_entries = ldap_count_entries($ldap_connection,$search);546 if ($count_entries > 0)547 {548 $result['status'] = false;549 $result['msg'] = $this->functions->lang('this email address is already used') . ".";550 return $result;551 }552 553 return $result;554 }555 47 556 48 //Busca usuários de um contexto e já retorna as options do select; … … 591 83 } 592 84 593 //Busca usuários e listas de um contexto e já retorna as options do select;594 function get_available_users_and_maillist($params)595 {596 $context = $params['context'];597 $recursive = $params['recursive'];598 599 //Usado para retirar a própria lista das possibilidades de inclusão.600 $denied_uidnumber = $params['denied_uidnumber'];601 602 $justthese = array("cn", "uidNumber", "mail");603 604 $users_filter="(phpgwAccountType=u)";605 $lists_filter = $denied_uidnumber == '' ? "(phpgwAccountType=l)" : "(&(phpgwAccountType=l)(!(uidnumber=$denied_uidnumber)))";606 607 $users = Array();608 $lists = Array();609 610 /* folling referral connection */611 $ldap_conn_following_ref = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);612 if ($ldap_conn_following_ref)613 {614 ldap_set_option($ldap_conn_following_ref, LDAP_OPT_PROTOCOL_VERSION, 3);615 ldap_set_option($ldap_conn_following_ref, LDAP_OPT_REFERRALS, 1);616 617 if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )618 ldap_bind($ldap_conn_following_ref, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);619 }620 else621 return false;622 623 if ($recursive == 'true')624 {625 $lists_search = ldap_search($ldap_conn_following_ref, $context, $lists_filter, $justthese);626 $users_search = ldap_search($ldap_conn_following_ref, $context, $users_filter, $justthese);627 }628 else629 {630 $lists_search = ldap_list($ldap_conn_following_ref, $context, $lists_filter, $justthese);631 $users_search = ldap_list($ldap_conn_following_ref, $context, $users_filter, $justthese);632 }633 634 /* email lists */635 $lists_entries = ldap_get_entries($ldap_conn_following_ref, $lists_search);636 637 for ($i=0; $i<$lists_entries["count"]; $i++)638 {639 $l_tmp[$lists_entries[$i]["mail"][0]] = $lists_entries[$i]["cn"][0];640 }641 642 if (count($l_tmp))643 natcasesort($l_tmp);644 645 $i = 0;646 $lists = array();647 648 $options .= '<option value="-1" disabled>------------------------------ '.$this->functions->lang('email lists').' ------------------------------ </option>'."\n";649 if (count($l_tmp))650 {651 foreach ($l_tmp as $mail => $cn)652 {653 $options .= "<option value=$mail>$cn</option>";654 }655 unset($l_tmp);656 }657 658 /* users */659 $users_entries = ldap_get_entries($ldap_conn_following_ref, $users_search);660 for ($i=0; $i<$users_entries["count"]; $i++)661 {662 $u_tmp[$users_entries[$i]["mail"][0]] = $users_entries[$i]["cn"][0];663 }664 665 if (count($u_tmp))666 natcasesort($u_tmp);667 668 $i = 0;669 $users = array();670 671 $options .= '<option value="-1" disabled>----------------------------- '.$this->functions->lang('users').' ---------------------------- </option>'."\n";672 673 if (count($u_tmp))674 {675 foreach ($u_tmp as $mail => $cn)676 {677 $options .= "<option value=$mail class='line-above'>$cn</option>";678 }679 unset($u_tmp);680 }681 682 ldap_close($ldap_conn_following_ref);683 return $options;684 }685 686 85 function get_available_groups($params) 687 86 { … … 722 121 ldap_close($ldapMasterConnect); 723 122 return $options; 724 }725 726 function ldap_add_entry($dn, $entry)727 {728 $result = array();729 if (!@ldap_add ( $this->ldap, $dn, $entry ))730 {731 $result['status'] = false;732 $result['error_number'] = ldap_errno($this->ldap);733 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->ldap_add_entry ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_errno($this->ldap) . ldap_error($this->ldap);734 }735 else736 $result['status'] = true;737 738 return $result;739 }740 741 function ldap_save_photo($dn, $pathphoto, $photo_exist=false)742 {743 $fd = fopen($pathphoto, "r");744 $fsize = filesize($pathphoto);745 $jpegStr = fread($fd, $fsize);746 fclose ($fd);747 $attrs['jpegPhoto'] = $jpegStr;748 749 if ($photo_exist)750 $res = @ldap_mod_replace($this->ldap, $dn, $attrs);751 else752 $res = @ldap_mod_add($this->ldap, $dn, $attrs);753 754 if ($res)755 {756 $result['status'] = true;757 }758 else759 {760 $result['status'] = false;761 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->ldap_save_photo ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);762 }763 764 return $result;765 }766 767 function ldap_remove_photo($dn)768 {769 $attrs['jpegPhoto'] = array();770 $res = ldap_mod_del($this->ldap, $dn, $attrs);771 772 if ($res)773 {774 $result['status'] = true;775 }776 else777 {778 $result['status'] = false;779 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->ldap_remove_photo ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);780 }781 782 return $result;783 }784 785 // Pode receber tanto um único memberUid quanto um array de memberUid's786 function add_user2group($gidNumber, $memberUid)787 {788 $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";789 $justthese = array("dn");790 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);791 $entry = ldap_get_entries($this->ldap, $search);792 $group_dn = $entry[0]['dn'];793 $attrs['memberUid'] = $memberUid;794 795 $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);796 797 if ($res)798 {799 $result['status'] = true;800 }801 else802 {803 $result['status'] = false;804 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->add_user2group ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);805 }806 return $result;807 }808 809 function remove_user2group($gidNumber, $memberUid)810 {811 $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";812 $justthese = array("dn");813 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);814 $entry = ldap_get_entries($this->ldap, $search);815 $group_dn = $entry[0]['dn'];816 $attrs['memberUid'] = $memberUid;817 $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);818 819 if ($res)820 {821 $result['status'] = true;822 }823 else824 {825 $result['status'] = false;826 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->remove_user2group ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);827 }828 return $result;829 }830 831 function add_user2maillist($uid, $mail)832 {833 if ( !$ldapMasterConnect = $this->ldapMasterConnect() )834 {835 $result['status'] = false;836 $result['msg'] = $this->functions->lang('Ldap connection fail') . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);837 return $result;838 }839 840 $filter = "(&(phpgwAccountType=l)(uid=$uid))";841 $justthese = array("dn");842 $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);843 $entry = ldap_get_entries($ldapMasterConnect, $search);844 $group_dn = $entry[0]['dn'];845 $attrs['mailForwardingAddress'] = $mail;846 $res = @ldap_mod_add($ldapMasterConnect, $group_dn, $attrs);847 848 if ($res)849 {850 $result['status'] = true;851 }852 else853 {854 $result['status'] = false;855 if (ldap_errno($ldapMasterConnect) == '50')856 {857 $result['msg'] = $this->functions->lang('Error on the function') . ' ldap_functions->add_user2maillist' . ".\n" .858 $this->functions->lang('The user used for record on LPDA, must have write access') . ".\n";859 $this->functions->lang('The user') . ' ' . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . ' ' . $this->functions->lang('does not have this access') . ".\n";860 $this->functions->lang('Edit Global Catalog Config, in the admin module, and add an user with write access') . ".\n";861 }862 else863 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->add_user2maillist ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);864 }865 866 ldap_close($ldapMasterConnect);867 return $result;868 }869 870 function add_user2maillist_scl($dn, $array_emails)871 {872 $attrs['mailSenderAddress'] = $array_emails;873 874 $res = @ldap_mod_add($this->ldap, $dn, $attrs);875 876 if ($res)877 {878 $result['status'] = true;879 }880 else881 {882 $result['status'] = false;883 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->add_user2maillist_scp ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);884 }885 return $result;886 }887 888 function remove_user2maillist($uid, $mail)889 {890 if ( !$ldapMasterConnect = $this->ldapMasterConnect() )891 {892 $result['status'] = false;893 $result['msg'] = $this->functions->lang('Ldap connection fail') . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);894 return $result;895 }896 897 $filter = "(&(phpgwAccountType=l)(uid=$uid))";898 $justthese = array("dn");899 $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);900 $entry = ldap_get_entries($ldapMasterConnect, $search);901 $group_dn = $entry[0]['dn'];902 $attrs['mailForwardingAddress'] = $mail;903 $res = @ldap_mod_del($ldapMasterConnect, $group_dn, $attrs);904 905 if ($res)906 {907 $result['status'] = true;908 }909 else910 {911 $result['status'] = false;912 if (ldap_errno($ldapMasterConnect) == '50')913 {914 $result['msg'] = $this->functions->lang('Error on the function') . ' ldap_functions->remove_user2maillist' . ".\n" .915 $this->functions->lang('The user used for record on LPDA, must have write access') . ".\n";916 $this->functions->lang('The user') . ' ' . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . ' ' . $this->functions->lang('does not have this access') . ".\n";917 $this->functions->lang('Edit Global Catalog Config, in the admin module, and add an user with write access') . ".\n";918 }919 else920 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->remove_user2maillist ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);921 }922 ldap_close($ldapMasterConnect);923 return $result;924 }925 926 function remove_user2maillist_scl($dn, $array_emails)927 {928 $attrs['mailSenderAddress'] = $array_emails;929 $res = @ldap_mod_del($this->ldap, $dn, $attrs);930 931 if ($res)932 {933 $result['status'] = true;934 }935 else936 {937 $result['status'] = false;938 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->remove_user2maillist_scp ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);939 }940 return $result;941 }942 943 function replace_user2maillists($new_mail, $old_mail)944 {945 $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";946 $justthese = array("dn");947 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);948 $entries = ldap_get_entries($this->ldap, $search);949 $result['status'] = true;950 for ($i=0; $i<$entries['count']; $i++)951 {952 $attrs['mailforwardingaddress'] = $old_mail;953 $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);954 $attrs['mailforwardingaddress'] = $new_mail;955 $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);956 957 if ((!$res1) || (!$res2))958 {959 $result['status'] = false;960 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->replace_user2maillists ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);961 }962 }963 964 return $result;965 123 } 966 124 … … 1267 425 } 1268 426 1269 function get_maillist_scl_info($uidnumber) 1270 { 1271 foreach ($this->manager_contexts as $index=>$context) 1272 { 1273 $filter="(&(phpgwAccountType=l)(uidNumber=$uidnumber))"; 1274 $search = ldap_search($this->ldap, $context, $filter); 1275 $entry = ldap_get_entries($this->ldap, $search); 1276 1277 if ($entry['count']) 1278 { 1279 //Pega o dn do setor do usuario. 1280 $entry[0]['dn'] = strtolower($entry[0]['dn']); 1281 $sector_dn_array = explode(",", $entry[0]['dn']); 1282 for($i=1; $i<count($sector_dn_array); $i++) 1283 $sector_dn .= $sector_dn_array[$i] . ','; 1284 //Retira ultimo pipe. 1285 $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1)); 1286 1287 $result['dn'] = $entry[0]['dn']; 1288 $result['context'] = $sector_dn; 1289 $result['uidnumber'] = $entry[0]['uidnumber'][0]; 1290 $result['uid'] = $entry[0]['uid'][0]; 1291 $result['cn'] = $entry[0]['cn'][0]; 1292 $result['mail'] = $entry[0]['mail'][0]; 1293 $result['accountStatus'] = $entry[0]['accountstatus'][0]; 1294 $result['phpgwAccountVisible'] = $entry[0]['phpgwaccountvisible'][0]; 1295 $result['accountRestrictive'] = $entry[0]['accountrestrictive'][0]; 1296 $result['participantCanSendMail'] = $entry[0]['participantcansendmail'][0]; 1297 1298 //Senders 1299 for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++) 1300 { 1301 $justthese = array("cn", "uidnumber", "uid", "mail"); 1302 $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))"; 1303 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 1304 $user_entry = ldap_get_entries($this->ldap, $search); 1305 1306 $result['senders_info'][$user_entry[0]['mail'][0]]['uid'] = $user_entry[0]['uid'][0]; 1307 $result['senders_info'][$user_entry[0]['mail'][0]]['cn'] = $user_entry[0]['cn'][0]; 1308 $result['members'][] = $user_entry[0]['mail'][0]; 1309 } 1310 return $result; 1311 } 1312 } 1313 } 427 1314 428 1315 429 function group_exist($gidnumber) … … 1380 494 return $entry[0]['mail'][0]; 1381 495 } 1382 1383 1384 function change_user_context($dn, $newrdn, $newparent)1385 {1386 if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))1387 {1388 $return['status'] = false;1389 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->change_user_context ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1390 }1391 else1392 $return['status'] = true;1393 1394 return $return;1395 }1396 1397 function replace_user_attributes($dn, $ldap_mod_replace)1398 {1399 if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))1400 {1401 $return['status'] = false;1402 $return['error_number'] = ldap_errno($this->ldap);1403 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->replace_user_attributes ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1404 }1405 else1406 $return['status'] = true;1407 1408 return $return;1409 }1410 1411 function add_user_attributes($dn, $ldap_add)1412 {1413 if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))1414 {1415 $return['status'] = false;1416 $return['error_number'] = ldap_errno($this->ldap);1417 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->add_user_attributes ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1418 }1419 else1420 $return['status'] = true;1421 1422 return $return;1423 }1424 1425 function remove_user_attributes($dn, $ldap_remove)1426 {1427 if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))1428 {1429 $return['status'] = false;1430 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->remove_user_attributes ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1431 }1432 else1433 $return['status'] = true;1434 1435 return $return;1436 }1437 1438 function set_user_password($uid, $password)1439 {1440 $justthese = array("userPassword");1441 $filter="(&(phpgwAccountType=u)(uid=".$uid."))";1442 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1443 $entry = ldap_get_entries($this->ldap, $search);1444 $dn = $entry[0]['dn'];1445 $userPassword = $entry[0]['userpassword'][0];1446 $ldap_mod_replace['userPassword'] = $password;1447 $this->replace_user_attributes($dn, $ldap_mod_replace);1448 return $userPassword;1449 }1450 1451 function delete_user($user_info)1452 {1453 // Verifica acesso do gerente (OU) ao tentar deletar um usuário.1454 $manager_access = false;1455 foreach ($this->manager_contexts as $index=>$context)1456 {1457 if ( (strpos(strtolower($user_info['context']), strtolower($context))) || (strtolower($user_info['context']) == strtolower($context)) )1458 {1459 $manager_access = true;1460 break;1461 }1462 }1463 if (!$manager_access)1464 {1465 $return['status'] = false;1466 $result['msg'] = $this->functions->lang('You do not have access to delete this user') . ".";1467 return $return;1468 }1469 1470 $return['status'] = true;1471 $return['msg'] = "";1472 1473 // GROUPS1474 $attrs = array();1475 $attrs['memberuid'] = $user_info['uid'];1476 1477 if (count($user_info['groups_info']))1478 {1479 foreach ($user_info['groups_info'] as $group_info)1480 {1481 $gidnumber = $group_info['gidnumber'];1482 $justthese = array("dn");1483 $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";1484 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1485 $entry = ldap_get_entries($this->ldap, $search);1486 $dn = $entry[0]['dn'];1487 1488 if (!@ldap_mod_del($this->ldap, $dn, $attrs))1489 {1490 $return['status'] = false;1491 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_user from group ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1492 }1493 }1494 }1495 1496 //INSTITUTIONAL ACCOUNTS1497 $attrs = array();1498 $attrs['mailForwardingAddress'] = $user_info['mail'];1499 1500 $justthese = array("dn");1501 $filter="(&(phpgwAccountType=i)(mailforwardingaddress=".$user_info['mail']."))";1502 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1503 $entries = ldap_get_entries($this->ldap, $search);1504 1505 for ($i=0; $i<$entries['count']; $i++)1506 {1507 if ( !@ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs) )1508 {1509 $result['status'] = false;1510 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_user, institutional accounts ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1511 }1512 }1513 1514 // MAILLISTS1515 $attrs = array();1516 $attrs['mailForwardingAddress'] = $user_info['mail'];1517 1518 if (count($user_info['maillists_info']))1519 {1520 1521 if ( !$ldapMasterConnect = $this->ldapMasterConnect() )1522 {1523 $return['status'] = false;1524 $result['msg'] = $this->functions->lang('Connection with ldap_master fail') . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1525 return $return;1526 }1527 1528 foreach ($user_info['maillists_info'] as $maillists_info)1529 {1530 $uid = $maillists_info['uid'];1531 $justthese = array("dn");1532 $filter="(&(phpgwAccountType=l)(uid=".$uid."))";1533 $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1534 $entry = ldap_get_entries($ldapMasterConnect, $search);1535 $dn = $entry[0]['dn'];1536 1537 if (!@ldap_mod_del($ldapMasterConnect, $dn, $attrs))1538 {1539 $return['status'] = false;1540 if (ldap_errno($ldapMasterConnect) == '50')1541 {1542 $result['msg'] = $this->functions->lang('Error on the function') . ' ldap_functions->add_user2maillist' . ".\n" .1543 $this->functions->lang('The user used for record on LPDA, must have write access') . ".\n";1544 $this->functions->lang('The user') . ' ' . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . ' ' . $this->functions->lang('does not have this access') . ".\n";1545 $this->functions->lang('Edit Global Catalog Config, in the admin module, and add an user with write access') . ".\n";1546 }1547 else1548 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_user, email lists ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);1549 }1550 }1551 ldap_close($ldapMasterConnect);1552 }1553 1554 // UID1555 $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];1556 if (!@ldap_delete($this->ldap, $dn))1557 {1558 $return['status'] = false;1559 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_user, email lists ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($ldapMasterConnect);1560 }1561 /* jakjr */1562 return $return;1563 }1564 1565 function delete_maillist($uidnumber, $mail)1566 {1567 $return['status'] = true;1568 1569 $justthese = array("dn");1570 1571 // remove listas dentro de listas1572 $filter="(&(phpgwAccountType=l)(mailForwardingAddress=".$mail."))";1573 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1574 $entry = ldap_get_entries($this->ldap, $search);1575 $attrs['mailForwardingAddress'] = $mail;1576 for ($i=0; $i<=$entry['count']; $i++)1577 {1578 $dn = $entry[$i]['dn'];1579 @ldap_mod_del ( $this->ldap, $dn, $attrs);1580 }1581 1582 $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";1583 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1584 $entry = ldap_get_entries($this->ldap, $search);1585 $dn = $entry[0]['dn'];1586 1587 if (!@ldap_delete($this->ldap, $dn))1588 {1589 $return['status'] = false;1590 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_maillist ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1591 }1592 1593 return $return;1594 }1595 1596 function delete_group($gidnumber)1597 {1598 $return['status'] = true;1599 1600 $justthese = array("dn");1601 $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";1602 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1603 $entry = ldap_get_entries($this->ldap, $search);1604 $dn = $entry[0]['dn'];1605 1606 if (!@ldap_delete($this->ldap, $dn))1607 {1608 $return['status'] = false;1609 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_group ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1610 }1611 1612 return $return;1613 }1614 1615 function check_access_to_renamed($uid)1616 {1617 $justthese = array("dn");1618 $filter="(&(phpgwAccountType=u)(uid=$uid))";1619 1620 foreach ($this->manager_contexts as $index=>$context)1621 {1622 $search = ldap_search($this->ldap, $context, $filter, $justthese);1623 $entry = ldap_get_entries($this->ldap, $search);1624 if ($entry['count'])1625 return true;1626 }1627 return false;1628 }1629 1630 function check_rename_new_uid($uid)1631 {1632 if ( !$ldapMasterConnect = $this->ldapMasterConnect() )1633 return false;1634 1635 $justthese = array("dn");1636 $filter="(&(phpgwAccountType=u)(uid=$uid))";1637 1638 $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1639 $count_entries = @ldap_count_entries($ldapMasterConnect, $search);1640 1641 if ($count_entries)1642 return false;1643 1644 return true;1645 }1646 1647 function rename_uid($uid, $new_uid)1648 {1649 $return['status'] = true;1650 1651 $justthese = array("dn");1652 $filter="(&(phpgwAccountType=u)(uid=".$uid."))";1653 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1654 $entry = ldap_get_entries($this->ldap, $search);1655 $dn = $entry[0]['dn'];1656 1657 $explode_dn = ldap_explode_dn($dn, 0);1658 $rdn = "uid=" . $new_uid;1659 1660 $parent = array();1661 for ($j=1; $j<(count($explode_dn)-1); $j++)1662 $parent[] = $explode_dn[$j];1663 $parent = implode(",", $parent);1664 1665 $return['new_dn'] = $rdn . ',' . $parent;1666 1667 if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, true))1668 {1669 $return['status'] = false;1670 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->rename_uid ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1671 }1672 1673 //Grupos1674 $justthese = array("dn");1675 $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";1676 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1677 $entry = ldap_get_entries($this->ldap, $search);1678 $array_mod_add['memberUid'] = $new_uid;1679 $array_mod_del['memberUid'] = $uid;1680 1681 for ($i=0; $i<=$entry['count']; $i++)1682 {1683 $dn = $entry[$i]['dn'];1684 @ldap_mod_add ( $this->ldap, $dn, $array_mod_add);1685 @ldap_mod_del ( $this->ldap, $dn, $array_mod_del);1686 }1687 return $return;1688 }1689 1690 function rename_cn($cn, $new_cn)1691 {1692 $return['status'] = true;1693 1694 $justthese = array("dn");1695 $filter="(&(phpgwAccountType=g)(uid=".$cn."))";1696 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1697 $entry = ldap_get_entries($this->ldap, $search);1698 $dn = $entry[0]['dn'];1699 1700 $explode_dn = ldap_explode_dn($dn, 0);1701 $rdn = "cn=" . $new_cn;1702 1703 $parent = array();1704 for ($j=1; $j<(count($explode_dn)-1); $j++)1705 $parent[] = $explode_dn[$j];1706 $parent = implode(",", $parent);1707 1708 $return['new_dn'] = $rdn . ',' . $parent;1709 1710 if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))1711 {1712 $return['status'] = false;1713 }1714 1715 return $return;1716 }1717 1718 function exist_sambadomains($contexts, $sambaDomainName)1719 {1720 $justthese = array("dn");1721 $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";1722 1723 foreach ($contexts as $index=>$context)1724 {1725 $search = ldap_search($this->ldap, $context, $filter, $justthese);1726 $entry = ldap_get_entries($this->ldap, $search);1727 1728 if ($entry['count'])1729 return true;1730 }1731 return false;1732 }1733 1734 // Primeiro nilvel de organização.1735 function exist_sambadomains_in_context($params)1736 {1737 $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];1738 $array_dn = ldap_explode_dn ( $dn, 0 );1739 1740 $context = $params['context'];1741 $array_context = ldap_explode_dn ( $context, 0 );1742 1743 // Pego o setor no caso do contexto ser um sub-setor.1744 if (($array_dn['count']+1) < ($array_context['count']))1745 {1746 // inverto o array_dn para poder retirar o count1747 $array_dn_reverse = array_reverse ( $array_dn, false );1748 1749 //retiro o count1750 array_pop($array_dn_reverse);1751 1752 //incluo o setor no dn1753 array_push ( $array_dn_reverse, $array_context[ $array_context['count'] - 1 - $array_dn['count']]);1754 1755 // Volto a ordem natural1756 $array_dn = array_reverse ( $array_dn_reverse, false );1757 1758 // Implodo1759 $context = implode ( ",", $array_dn );1760 }1761 1762 $justthese = array("dn","sambaDomainName");1763 $filter="(objectClass=sambaDomain)";1764 $search = ldap_list($this->ldap, $context, $filter, $justthese);1765 $entry = ldap_get_entries($this->ldap, $search);1766 1767 for ($i=0; $i<$entry['count']; $i++)1768 {1769 $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];1770 }1771 1772 if ($entry['count'])1773 $return['status'] = true;1774 else1775 $return['status'] = false;1776 1777 return $return;1778 }1779 function exist_domain_name_sid($sambadomainname, $sambasid)1780 {1781 $context = $GLOBALS['phpgw_info']['server']['ldap_context'];1782 1783 $justthese = array("dn","sambaDomainName");1784 $filter="(&(objectClass=sambaDomain)(sambaSID=$sambasid)(sambaDomainName=$sambadomainname))";1785 $search = ldap_search($this->ldap, $context, $filter, $justthese);1786 $count_entries = ldap_count_entries($this->ldap, $search);1787 1788 if ($count_entries > 0)1789 return true;1790 else1791 return false;1792 }1793 1794 function add_sambadomain($sambadomainname, $sambasid, $context)1795 {1796 $result = array();1797 1798 $dn = "sambaDomainName=$sambadomainname,$context";1799 $entry['sambaSID'] = $sambasid;1800 $entry['objectClass'] = 'sambaDomain';1801 $entry['sambaAlgorithmicRidBase'] = '1000';1802 $entry['sambaDomainName'] = $sambadomainname;1803 1804 if (!@ldap_add ( $this->ldap, $dn, $entry ))1805 {1806 $return['status'] = false;1807 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->add_sambadomain ($dn)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1808 }1809 else1810 $return['status'] = true;1811 1812 return $return;1813 }1814 1815 function delete_sambadomain($sambadomainname)1816 {1817 $return['status'] = true;1818 $filter="(sambaDomainName=$sambadomainname)";1819 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);1820 $entry = ldap_get_entries($this->ldap, $search);1821 1822 if ($entry['count'] != 0)1823 {1824 $dn = $entry[0]['dn'];1825 1826 if (!@ldap_delete($this->ldap, $dn))1827 {1828 $return['status'] = false;1829 $result['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_sambadomain ($sambadomainname)" . ".\n" . $this->functions->lang('Server returns') . ': ' . ldap_error($this->ldap);1830 }1831 }1832 1833 return $return;1834 }1835 496 1836 497 function search_user($params) … … 1859 520 return $options; 1860 521 } 1861 1862 function create_institutional_accounts($params)1863 {1864 /* Begin: Access verification */1865 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'add_institutional_accounts'))1866 {1867 $return['status'] = false;1868 $return['msg'] = $this->functions->lang('You do not have right to create institutional accounts') . ".";1869 return $return;1870 }1871 1872 $access_granted = false;1873 foreach ($this->manager_contexts as $idx=>$manager_context)1874 {1875 if (stristr($params['context'], $manager_context))1876 {1877 $access_granted = true;1878 break;1879 }1880 }1881 if (!$access_granted)1882 {1883 $return['status'] = false;1884 $return['msg'] = $this->functions->lang('You do not have access to this organization') . ".";1885 return $return;1886 }1887 /* End: Access verification */1888 1889 /* Begin: Validation */1890 if ( (empty($params['cn'])) || (empty($params['mail'])) )1891 {1892 $result['status'] = false;1893 $result['msg'] = $this->functions->lang('Field mail or name is empty');1894 return $result;1895 }1896 1897 if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) )1898 {1899 $result['status'] = false;1900 $result['msg'] = $this->functions->lang('Field mail is not formed correcty') . '.';1901 return $result;1902 }1903 1904 $uid = 'institutional_account_' . $params['mail'];1905 $dn = "uid=$uid," . $params['context'];1906 1907 $filter = "(mail=".$params['mail'].")";1908 $justthese = array("cn");1909 $search = @ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);1910 $entries = @ldap_get_entries($this->ldap,$search);1911 if ($entries['count'] != 0)1912 {1913 $result['status'] = false;1914 $result['msg'] = $this->functions->lang('Field mail already in use');1915 return $result;1916 }1917 /* End: Validation */1918 1919 $info = array();1920 $info['cn'] = $params['cn'];1921 $info['sn'] = $params['cn'];1922 $info['uid'] = $uid;1923 $info['mail'] = $params['mail'];1924 $info['phpgwAccountType'] = 'i';1925 $info['objectClass'][] = 'inetOrgPerson';1926 $info['objectClass'][] = 'phpgwAccount';1927 $info['objectClass'][] = 'top';1928 $info['objectClass'][] = 'person';1929 $info['objectClass'][] = 'qmailUser';1930 $info['objectClass'][] = 'organizationalPerson';1931 1932 if ($params['accountStatus'] == 'on')1933 {1934 $info['accountStatus'] = 'active';1935 }1936 if ($params['phpgwAccountVisible'] == 'on')1937 {1938 $info['phpgwAccountVisible'] = '-1';1939 }1940 1941 if (!empty($params['owners']))1942 {1943 foreach($params['owners'] as $index=>$uidnumber)1944 {1945 $info['mailForwardingAddress'][] = $this->uidnumber2mail($uidnumber);1946 }1947 }1948 1949 $result = array();1950 if (!@ldap_add ( $this->ldap, $dn, $info ))1951 {1952 $result['status'] = false;1953 $result['msg'] = $this->functions->lang('Error on function') . ' ldap_functions->create_institutional_accounts';1954 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap);1955 }1956 else1957 $result['status'] = true;1958 1959 return $result;1960 }1961 1962 function save_institutional_accounts($params)1963 {1964 /* Begin: Access verification */1965 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts'))1966 {1967 $return['status'] = false;1968 $return['msg'] = $this->functions->lang('You do not have right to edit institutional accounts') . ".";1969 return $return;1970 }1971 $access_granted = false;1972 foreach ($this->manager_contexts as $idx=>$manager_context)1973 {1974 if (stristr($params['context'], $manager_context))1975 {1976 $access_granted = true;1977 break;1978 }1979 }1980 if (!$access_granted)1981 {1982 $return['status'] = false;1983 $return['msg'] = $this->functions->lang('You do not have access to this organization') . ".";1984 return $return;1985 }1986 /* End: Access verification */1987 1988 /* Begin: Validation */1989 if ( (empty($params['cn'])) || (empty($params['mail'])) )1990 {1991 $result['status'] = false;1992 $result['msg'] = $this->functions->lang('Field mail or name is empty') . '.';1993 return $result;1994 }1995 1996 if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) )1997 {1998 $result['status'] = false;1999 $result['msg'] = $this->functions->lang('Field mail is not formed correcty') . '.';2000 return $result;2001 }2002 2003 $uid = 'institutional_account_' . $params['mail'];2004 $dn = strtolower("uid=$uid," . $params['context']);2005 $anchor = strtolower($params['anchor']);2006 2007 $filter = "(mail=".$params['mail'].")";2008 $justthese = array("cn");2009 $search = @ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);2010 $entries = @ldap_get_entries($this->ldap,$search);2011 2012 if ( ($entries['count'] > 1) || (($entries['count'] == 1) && ($entries[0]['dn'] != $anchor)) )2013 {2014 $result['status'] = false;2015 $result['msg'] = $this->functions->lang('Field mail already in use.');2016 return $result;2017 }2018 /* End: Validation */2019 2020 $result = array();2021 $result['status'] = true;2022 2023 if ($anchor != $dn)2024 {2025 if (!@ldap_rename($this->ldap, $anchor, "uid=$uid", $params['context'], true))2026 {2027 $result['status'] = false;2028 $result['msg'] = $this->functions->lang('Error on function') . ' ldap_functions->save_institutional_accounts: ldap_rename';2029 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap);2030 }2031 }2032 2033 $info = array();2034 $info['cn'] = $params['cn'];2035 $info['sn'] = $params['cn'];2036 $info['uid'] = $uid;2037 $info['mail'] = $params['mail'];2038 2039 if ($params['accountStatus'] == 'on')2040 $info['accountStatus'] = 'active';2041 else2042 $info['accountStatus'] = array();2043 2044 if ($params['phpgwAccountVisible'] == 'on')2045 $info['phpgwAccountVisible'] = '-1';2046 else2047 $info['phpgwAccountVisible'] = array();2048 2049 if ($params['description'] != '')2050 $info['description'] = utf8_encode($params['description']);2051 else2052 $info['description'] = array();2053 2054 if (!empty($params['owners']))2055 {2056 foreach($params['owners'] as $index=>$uidnumber)2057 {2058 $mailForwardingAddress = $this->uidnumber2mail($uidnumber);2059 if ($mailForwardingAddress != '')2060 $info['mailForwardingAddress'][] = $mailForwardingAddress;2061 }2062 }2063 else2064 $info['mailForwardingAddress'] = array();2065 2066 if (!@ldap_modify ( $this->ldap, $dn, $info ))2067 {2068 $result['status'] = false;2069 $result['msg'] = $this->functions->lang('Error on function') . ' ldap_functions->save_institutional_accounts: ldap_modify';2070 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap);2071 }2072 2073 return $result;2074 }2075 2076 function get_institutional_accounts($params)2077 {2078 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'list_institutional_accounts'))2079 {2080 $return['status'] = false;2081 $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . ".";2082 return $return;2083 }2084 2085 $input = $params['input'];2086 $justthese = array("cn", "mail", "uid");2087 $trs = array();2088 2089 foreach ($this->manager_contexts as $idx=>$context)2090 {2091 $institutional_accounts = ldap_search($this->ldap, $context, ("(&(phpgwAccountType=i)(|(mail=$input*)(cn=*$input*)))"), $justthese);2092 $entries = ldap_get_entries($this->ldap, $institutional_accounts);2093 2094 for ($i=0; $i<$entries['count']; $i++)2095 {2096 $tr = "<tr class='normal' onMouseOver=this.className='selected' onMouseOut=this.className='normal'><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['cn'][0] . "</td><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['mail'][0] . "</td><td align='center' onClick=delete_institutional_accounts('".$entries[$i]['uid'][0]."')><img HEIGHT='16' WIDTH='16' src=./expressoAdmin1_2/templates/default/images/delete.png></td></tr>";2097 $trs[$tr] = $entries[$i]['cn'][0];2098 }2099 }2100 2101 $trs_string = '';2102 if (count($trs))2103 {2104 natcasesort($trs);2105 foreach ($trs as $tr=>$cn)2106 {2107 $trs_string .= $tr;2108 }2109 }2110 2111 $return['status'] = 'true';2112 $return['trs'] = $trs_string;2113 return $return;2114 }2115 2116 function get_institutional_account_data($params)2117 {2118 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts'))2119 {2120 $return['status'] = false;2121 $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . ".";2122 return $return;2123 }2124 2125 $uid = $params['uid'];2126 //$justthese = array("accountStatus", "phpgwAccountVisible", "cn", "mail", "mailForwardingAddress", "description");2127 2128 $institutional_accounts = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"));2129 $entrie = ldap_get_entries($this->ldap, $institutional_accounts);2130 2131 if ($entrie['count'] != 1)2132 {2133 $return['status'] = 'false';2134 $result['msg'] = $this->functions->lang('Problems loading datas') . '.';2135 }2136 else2137 {2138 $tmp_user_context = split(",", $entrie[0]['dn']);2139 $tmp_reverse_user_context = array_reverse($tmp_user_context);2140 array_pop($tmp_reverse_user_context);2141 $return['user_context'] = implode(",", array_reverse($tmp_reverse_user_context));2142 2143 $return['status'] = 'true';2144 $return['accountStatus'] = $entrie[0]['accountstatus'][0];2145 $return['phpgwAccountVisible'] = $entrie[0]['phpgwaccountvisible'][0];2146 $return['cn'] = $entrie[0]['cn'][0];2147 $return['mail'] = $entrie[0]['mail'][0];2148 $return['description'] = utf8_decode($entrie[0]['description'][0]);2149 2150 if ($entrie[0]['mailforwardingaddress']['count'] > 0)2151 {2152 $a_cn = array();2153 for ($i=0; $i<$entrie[0]['mailforwardingaddress']['count']; $i++)2154 {2155 $tmp = $this->mailforwardingaddress2uidnumber($entrie[0]['mailforwardingaddress'][$i]);2156 if (!$tmp) {}2157 else2158 $a_cn[$tmp['uidnumber']] = $tmp['cn'];2159 }2160 natcasesort($a_cn);2161 foreach($a_cn as $uidnumber => $cn)2162 {2163 $return['owners'] .= '<option value='. $uidnumber .'>' . $cn . '</option>';2164 }2165 }2166 }2167 2168 return $return;2169 }2170 2171 function mailforwardingaddress2uidnumber($mail)2172 {2173 $justthese = array("uidnumber","cn");2174 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=u)(mail=$mail))"), $justthese);2175 $entrie = ldap_get_entries($this->ldap, $search);2176 if ($entrie['count'] != 1)2177 return false;2178 else2179 {2180 $return['uidnumber'] = $entrie[0]['uidnumber'][0];2181 $return['cn'] = $entrie[0]['cn'][0];2182 return $return;2183 }2184 }2185 2186 function delete_institutional_account_data($params)2187 {2188 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'remove_institutional_accounts'))2189 {2190 $return['status'] = false;2191 $return['msg'] = $this->functions->lang('You do not have right to delete institutional accounts') . ".";2192 return $return;2193 }2194 2195 $uid = $params['uid'];2196 $return['status'] = true;2197 2198 $justthese = array("cn");2199 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"), $justthese);2200 $entrie = ldap_get_entries($this->ldap, $search);2201 if ($entrie['count'] > 1)2202 {2203 $return['status'] = false;2204 $return['msg'] = $this->functions->lang('More then one uid was found');2205 return $return;2206 }2207 if ($entrie['count'] == 0)2208 {2209 $return['status'] = false;2210 $return['msg'] = $this->functions->lang('No uid was found');2211 return $return;2212 }2213 2214 $dn = $entrie[0]['dn'];2215 if (!@ldap_delete($this->ldap, $dn))2216 {2217 $return['status'] = false;2218 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->delete_institutional_accounts: ldap_delete";2219 $return['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap);2220 return $return;2221 }2222 2223 return $return;2224 }2225 2226 function replace_mail_from_institutional_account($newMail, $oldMail)2227 {2228 $filter = "(&(phpgwAccountType=i)(mailforwardingaddress=$oldMail))";2229 $justthese = array("dn");2230 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);2231 $entries = ldap_get_entries($this->ldap, $search);2232 $result['status'] = true;2233 for ($i=0; $i<$entries['count']; $i++)2234 {2235 $attrs['mailforwardingaddress'] = $oldMail;2236 $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);2237 $attrs['mailforwardingaddress'] = $newMail;2238 $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);2239 2240 if ((!$res1) || (!$res2))2241 {2242 $result['status'] = false;2243 $return['msg'] = $this->functions->lang('Error on function') . " ldap_functions->replace_mail_from_institutional_account.";2244 }2245 }2246 2247 return $result;2248 }2249 522 } 2250 523 ?>
Note: See TracChangeset
for help on using the changeset viewer.