Формирования справочника дней рождений при помощи Active Directory
Как сформировать справочник сотрудников по дням рождений используя Active Directory?
Допустим у нас есть корпоративный портал и вы хотите на нем показывать у кого и когда дни рождения, руками это делать муторно и долго, если у вас 100+ сотрудников. Предложу один из вариантов решения. В AD, когда заводиться новый сотрудник (пользователь) в поле "Описание" я добавляю его дату рождения в формате дд-мм-гггг После этого, состряпываем небольшой скриптик который цепляемся к AD через LDAP и формирует список дней рождений.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<?php //вытаскиваем пользователей с днями рождения из AD //ip адрес или название сервера ldap(AD) $ldaphost = "192.168.120.1"; //или "mydomain.ru" //Порт подключения $ldapport = "389"; //Откуда начинаем искать $base = "ou=my_company,dc=office,dc=company,dc=local"; //Собственно говоря фильтр по которому будем аутентифицировать пользователя $filter = "sAMAccountName="; //Ваш домен, обязательно с собакой впереди. Необходим этот параметр //для авторизации через AD, по другому к сожалению работать не будет. $domain = "@office.company.local"; $login = "login"; $password = "passwd"; $attr = array("cn","mail","description"); //подсоединяемся к LDAP серверу $ldap = ldap_connect($ldaphost,$ldapport) or die("Cant connect to LDAP Server"); ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); $bind = ldap_bind($ldap,$login,$password); // Проверим, является ли пользователь членом указанной группы. $result = ldap_search($ldap,$base,"(&(objectCategory=user))",$attr); // Получаем количество результатов предыдущей проверки $result_ent = ldap_get_entries($ldap,$result); //собираем масси дней рождений $mass = array(); for ($j=0;$j<$result_ent['count'];$j++) { if (!empty($result_ent[$j]['description'][0])) { $k++; $mass[$k]['name'] = $result_ent[$j]['cn'][0]; $mass[$k]['mail'] = $result_ent[$j]['mail'][0]; $mass[$k]['day'] = date('d',strtotime($result_ent[$j]['description'][0])); $mass[$k]['mon'] = date('m',strtotime($result_ent[$j]['description'][0])); } } // сортируем массив по дате рождения function cmp2($a, $b) { $orderBy=array('mon'=>'asc', 'day'=>'asc'); $result= 0; foreach($orderBy as $key => $value ) { if( $a[$key] == $b[$key] ) continue; $result= ($a[$key] < $b[$key])? -1 : 1; if( $value=='desc' ) $result= -$result; break; } return $result; } usort($mass, 'cmp2'); //вытаскиваем текущий месяц $ThisMon = date('m'); //вытаскиваем текущий день $ThisDay = date('d'); //выбираем дни рождения в текущем месяце (с учетом текущего дня) foreach($mass as $v1) { if($v1['mon'] == $ThisMon && $v1['day'] >= $ThisDay) { echo $v1['day'].".".$v1['mon']." ".$v1['name']."<br>"; } } ?> |
Как вставить этот код на сайт
Смотря какой сайт, этот код будет работать только в локальной сети, в глобальной будет работать только если открыть порт снаружи внутрь.