- Телефонный справочник из таблиц SQL Asterisk FreePBX (web-справочник, выгрузка в xml-файл для телефонов Grandstream)
- PhoneBook Application using MySQL and PHP
- Technologies Used
- Source code
- User Interface Walkthrough
- Landing Page
- Contact Details
- Update Contact
- Contact Creation
- Progress Bar
- Search Bar
- How to run the project
- Install MAMP/WAMP/LAMP stack
- Setup MySQL database
- PHP Back-end setup
- Front-end
- Technical details
- Gallery
- You May Also Enjoy
- Increase Minecraft FPS on Macbook Pro M1 chip
- Fix AVD emulator process has terminated
- Setup Algolia Search for Jekyll Github pages blog on Github
- Monitoring power usage and efficiency of M1 Mac CPU/GPU
- Создаём WEB адресный справочник PHP + LDAP
Телефонный справочник из таблиц SQL Asterisk FreePBX (web-справочник, выгрузка в xml-файл для телефонов Grandstream)
1) Подключение к серверу SQL для выполнения запросов:
mysql -u freepbxuser -p после нажатия Enter будет запрошен пароль для пользователя. После ввода пароля и нажатия Enter, будет выведено приглашение MySQL: mysql>_
Вывод списка имеющихся баз: SHOW DATABASES; Подключение к необходимой базе: USE dbtest; Просмотр всех таблиц из базы: SHOW tables; Просмотр содержания нужной таблицы: SELECT * FROM page; Просмотр структуры таблицы: DESCRIBE testtable;
3) Подлючение к sql из внешней сети:
CREATE USER 'ИМЯ-НОВОГО-ПОЛЬЗОВАТЕЛЯ'@'localhost' IDENTIFIED BY '. ПАРОЛЬ. '; GRANT ALL PRIVILEGES ON * . * TO 'ИМЯ-НОВОГО-ПОЛЬЗОВАТЕЛЯ'@'localhost'; GRANT SELECT ON * . * TO 'ИМЯ-НОВОГО-ПОЛЬЗОВАТЕЛЯ'@'localhost'; use mysql SELECT Host,User,Password FROM user; UPDATE user SET Host='%' WHERE User='ИМЯ-НОВОГО-ПОЛЬЗОВАТЕЛЯ' AND Host='localhost'; FLUSH PRIVILEGES;
70 User Manager Group 760 Иванов Иван 0 101 1 70 0
Шаг 1. Создание php-скрипта чтения sql-таблицы Asterisk и формирования xml-файла
Создаем два файла config.php и phonebook.php, указывая необходимые параметры.
"mysql:host=localhost;dbname=asterisk", "pb_file_gs" => "/var/www/html/phonebook/phonebook.xml", "username" => "freepbxuser", //Mysql login "password" => "пароль freepbxuser", //Mysql password "options" => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') );
prepare($sql); $q->execute(); $rows = $q->fetchAll(); //Грузим таблицу с группами $q2 = $db->prepare($sqlgrp); $q2->execute(); $rows2 = $q2->fetchAll(); unlink($config["pb_file_gs"]); // Удалим старый файл $fp = fopen($config["pb_file_gs"],"w+"); fputs($fp, ''); foreach($rows2 as $row) < // Пробежим по всем записям, добавляем группы fputs($fp,''); fputs($fp,''.$row['id'].' '); fputs($fp,''.$row['name'].' '); fputs($fp,' '); > foreach($rows as $row) < // Пробежим по всем записям, подготовив XML файл нужного вида if (strlen($row['username']) === 3) < $alln = $row['displayname']; //if ($alln = '') #alln = $row['username']; $ln = strstr($alln, ' ', true); $fn = strstr($alln, ' ', false); $fn = trim($fn); $i++; fputs($fp, ''.$i.' '.$ln.' '.$fn.' '.$row['username'].' 1 ' .$row['groupid']. ' '); > > fputs($fp,' '); fclose($fp); ?>
Шаг 2. Настраиваем телефон Grandstream для чтения телефонной книги из xml-файла
Внимание, важно при настройке «Phonebook Management» на телефоне Grandstream GXP16xx в поле «Путь к серверу XML» (Phonebook XML Server Path) указать только путь без имени файла.
- В поле «Enable Phonebook XML Download» выбрать «Enabled, use HTTP»
- В поле «Phonebook XML Server Path» указать путь к файлу xml, например: «192.168.0.220/phonebook»
Шаг 3. Создаем web-справочник телефонной книги
- Сначала загрузить из xml-файла и сформировать группы контактов
- Обрабатывать выбор группы и отображать контакты выбранной группы.
ТЕЛЕФОННЫЙ СПРАВОЧНИК Contact); $grp_cnt = count($xml->pbgroup); //Загрузка групп в список echo ' ГРУППЫ:
"; //Отображение списка контактов echo ''; echo " "; echo ""; echo ""; echo ""; echo "Фамилия "; echo "Имя "; echo "Номер "; //echo "Группа "; echo " "; echo ""; echo ""; for($i = 0; $i < $conts_cnt; $i++) < $Contacts = $xml->Contact[$i]; $FirstName = $Contacts->FirstName; $LastName = $Contacts->LastName; $phonenumber = $Contacts->Phone->phonenumber; echo ""; for($ig = 0; $ig < $grp_cnt; $ig++) < $Groups = $xml->pbgroup[$ig]; if (strcasecmp($Contacts->Group, $Groups->id) == 0) < if ($_COOKIE["sgrp"] == trim($Groups->name)) < echo "echo " "; > echo ""; echo "
"; echo ''; ?>
PhoneBook Application using MySQL and PHP
This is a simple phone book web application which supports:
- New contact creation
- Existing contact deletion
- Updating any existing contact
- Responsive User Interface
Technologies Used
Source code
Complete source code for this project is available at GitHub
User Interface Walkthrough
Landing Page
This is the landing page of my application which displays all existing contacts on the left with the Details pane on the right. The Update and Delete buttons are initially disabled.
Contact Details
Upon clicking on a particular contact, the update and delete functionality gets activated. We can also see the corresponding contact details for the clicked contact.
Update Contact
Clicking on the update button opens up a window where user can enter changed details. The changes are captured once user clicks on Save Changes button. We can add or delete phone, address or dates as required.
Contact Creation
Similarly, to create a new contact, user has to click on create contact button and choose Save Changes button to capture the new information.
Progress Bar
The yellow progress bar gives the user an idea of the size of contacts retrieved for each query.
Search Bar
The search window allows user to search with various combinations. Here we are searching by Zip code. Hence all contact in that zip code are shown. We now search for a combination of zip and area code. This returns the specific contact match both criteria. We can also search by last name if we need the results to be more specific. While searching for address, user has to input it with hyphens. This is to help us differentiate each entry as my logic is building sql queries dynamically. If there are more than one entry matching a first name, all of them are displayed. We can also search by date of birth, entered in the specified format. We can search by city and state as shown above.
How to run the project
Install MAMP/WAMP/LAMP stack
Setup MySQL database
- Create database inside MySQL named ‘dbproject’.
- Execute the ‘Create.SQL’ file on the previously created database.
- Import the CSV file (contact.csv) using MySQL workbench.
PHP Back-end setup
- Copy all the PHP files and index.html file from the root of the project into the htdocs folder of Apache installation. Learn more
Front-end
Technical details
This web application is written in PHP as back-end programming language and MySQL as the database. Bootstrap 4 is used to implement responsive UI. jQuery is used to handle the dynamic web page changes.
Backend is implemented as REST APIs. Each PHP file listens for requests on an endpoint and either serves the appropriate data or processes requested operation.
- contact_details.php API — Returns the Name, Address and Dates data for a contact in JSON format idenitified by Contact_ID.
- Data creation APIs — These are set of APIs which creates the object and inserts into respective tables.
Gallery
Updated: June 10, 2020
You May Also Enjoy
Increase Minecraft FPS on Macbook Pro M1 chip
January 6, 2023 6 minute read
How to increase Minecraft FPS and improve performance on Apple MacBook Pro with M1 Chip
Fix AVD emulator process has terminated
January 6, 2023 2 minute read
Fix AVD Emulator process has terminated issue on Windows 11
Setup Algolia Search for Jekyll Github pages blog on Github
January 6, 2023 4 minute read
Setup Algolia search on GitHub for a Jekyll blog
Monitoring power usage and efficiency of M1 Mac CPU/GPU
December 19, 2022 13 minute read
Monitoring power usage and efficiency of M1 Mac’s CPU/GPU Intro I recently got the 2021 Macbook Pro 16 inch with M1 Pro chip. It has been absolute beast for.
Создаём WEB адресный справочник PHP + LDAP
Так случилось, что у (относительно) большой кампании было много отдалённых офисов, в которых находилось приличное количество пользователей. Все офисы соединены в одну сеть с общим доменом, каждый офис был определён в Active Directory (далее по тексту AD) как Organization Unit (OU), в котором уже заводились пользователи.
Необходимо было дать пользователям возможность быстро и без особенных усилий получать контактные данные необходимого сотрудника из AD, а системных администраторов освободить от рутины редактирования текстового файла, который играл роль адресной книги.
Готовых подходящих вариантов для решения поставленной задачи не нашлось, поэтому пришлось делать всё своими руками и головой.
Начнём с того, что для начала нужно определиться что использовать, это просто — итоговый справочник должен быть доступен всем пользователям домена посредством браузера. Первое, что приходит на ум это PHP в связке с ldap, их и будем использовать. Большим плюсом использования PHP я считаю его относительную простоту — любой хоть немного понимающий системный администратор сможет внести, при необходимости, нужные правки в код, не особенно напрягаясь.
Итак, начнём. для начала зададим параметры подключения к домену:
$srv ="SERVER"; $srv_domain ="DOMAIN.COM"; $srv_login ="USERNAME@".$srv_domain; $srv_password ="PASSWORD";
Переменная $doscript нужна для того, чтобы хранить значение — определили ли мы OU, в котором будем искать пользователей или нет. Если не нашлось совпадений, перечисленных в «switch-case», то $doscript=false, главная часть скрипта выполняться не будет, а будет выведена стартовая страница «main_table.html» (о ней расскажу в самом конце).
Если же мы определили OU, тогда приступаем к дальнейшим действиям: начинаем рисовать пользователю страницу справочника:
Включаем стили для более приятного внешнего вида (да, их можно было подключить как css-файл, однако некоторые версии IE не хотят воспринимать стили, заданные таким образом, поэтому приходится писать прямо в скрипт):
* a a:hover #bold #table,tr,td /* Нечетные строки */#table tbody tr:nth-child(odd) /* Четные строки */ #table tbody tr:nth-child(even) #noborder #sp30px #smallsize #top #top:hover .smalltext .smalltext:hover .transition-rotate .transition-rotate:hover #lineheight
Со стилями покончено, теперь пишем заголовок вкладки и рисуем удобную ссылку возврата на главную страницу:
Определяем поисковые фильтры по AD, и получаем данные об OU:
$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //все пользователи, кроме отключенных. $filter2 ="(objectCategory=OrganizationalUnit)"; // для получения информации о OU $ds=ldap_connect($srv); if ($ds) < $r=ldap_bind($ds,$srv_login,$srv_password);; ldap_set_option($ds,LDAP_OPT_REFERRALS, 0); ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3); $sr=ldap_search($ds,$dn ,$filter ); ldap_sort($ds,$sr, "givenname"); $info = ldap_get_entries($ds, $sr); $sr2=ldap_search($ds,$dn ,$filter2 ); $placeinfo = ldap_get_entries($ds, $sr2); $PlaceName = $placeinfo[0]["l"][0]; // name of place $PlaceAddres = $placeinfo[0]["street"][0]; // address of place $PlaceMail = $placeinfo[0]["description"][0]; // mail of place $PlacePhone = $placeinfo[0]["st"][0]; // phone of plase
Далее оформляем верхнюю часть страницы:
Далее получаем в цикле и обрабатываем данные пользователей, при этом, чтобы скрыть некоторые (например служебные) учётные записи, просто прописываем «hide» в поле «комната» в реквизитах пользователя в AD, такие пользователи не будут отображаться в справочнике:
Кстати, если вам потребуется получить значение другого атрибута, то помните (это важно):
в запросе передаём имя атрибута строчными буквами, иначе не заработает.
И вставляем полученные данные в таблицу:
echo " ". $n+=1 ." ". $UserName ."
". $UserPosition ." "; // Имя пользователя и должность if ($UserMail !='-') echo "$UserMail "; // если у пользователя есть e-mail создаём ссылку на отправку письма else echo "-"; //если нет e-mail - ставим прочерк. echo " ". $UserIpPhone ." ". $UserMobile ." "; > > echo "";
Далее мы закрываем подключение по ldap, или выводим сообщение о невозможности подключения к серверу:
ldap_close($ds); > else echo "Unable to connect to LDAP server
"; echo '
';>
Файл «main_table.html» изнутри себя представляет простую html страницу с ссылками, и выглядит примерно так:
Places and offices
OU1 OU2