PHP phonebook with map (Active Directory, LDAP -> MySQL, PHP)

Overview

LDAP phonebook

🇷🇺 🇺🇸
Development ветка
Вопросы предпочтительнее задавать в Issues, а не по почте

Корпоративный телефонный справочник с отображением контактов на карте офиса

Контакты делятся на два типа:

  • Импортированные из AD
  • Локальные

Импортированные контакты нельзя редактировать, их можно только скрывать из списка и указывать расположение на карте. Все изменения нужно производить в AD, после чего провести повторную синхронизацию, при которой будут добавлены новые и обновлены существующие контакты.

Функциональные возможности:

  • Импорт контактов и фото из AD
  • Показать/скрыть любой контакт
  • Добавлять, редактировать и удалять локальные контакты
  • Указать расположение контакта на плане офиса. Удобно для ориентирования в большой компании
  • Экспорт в .xml файл для использования в приложении PhoneBook для Windows
  • Бекап всех контактов с координатами в XML
  • Восстановление контактов из XML бекапа
  • Скрытие всех контактов, которые были отключены в AD

Карты хранятся в файлах templates/map[1-5].png

Системные требования

  • Apache (nginx)
  • MariaDB (MySQL)
  • PHP
  • Active Directory (опционально)
  • memcaсhed (опционально)
  • Kerberos (опционально)

Подключить модули расширения в php.ini или скомпилировать PHP с поддержкой LDAP

  • extension=php_ldap.dll
  • extension=php_fileinfo.dll

Установка

  • Открыть в браузере install.php и заполнить предлагаемые параметры
  • Заменить изображения карт templates/map[1-5].png своими схемами

Обновление

  • Сделайте резервную копию базы данных и файлов.
  • Переименуйте старую папку с файлами справочника.
  • Распакуйте дистрибутив справочника в старое расположение
  • Перенесите из старой версии файл inc.config.php, папку photos и карты из templ
  • Запустите скрипт обновления открыв в браузере upgrade.php
  • Скорее всего предварительно потребуется обновить конфигурационный файл inc.config.php добавив в него новые параметры по примеру из examples

Дополнительные настройки в inc.config.php (опционально)

Для включения LDAP аутентификации в LDAP_ADMIN_GROUP_DN нужно указать группу AD через которую предоставляется доступ:

// Группа в AD с пользователями имеющими доступ на редактирование справочника
define('LDAP_ADMIN_GROUP_DN', 'CN=Phonebook admin,OU=Admin Roles,OU=Groups,OU=Company,DC=domain,DC=local');

Изменить количество и названия карт:

define('PB_MAPS_COUNT', 5);
$map_names = array('Floor 1', 'Floor 3', 'Floor 6', 'Floor 14', 'Floor 25');

Изменить язык (cпасибо @Impuls2003):

define('APP_LANGUAGE', 'ru');

Изменения в новых версиях

10.10.2020

  • Параметры LDAP_HOST и LDAP_PORT заменены на LDAP_URI. Пример: ldaps://dc-01 ldap://dc-02:389
  • При обнолении пароли у учётных записей будут заменены на 'admin', т.к. функция PASSWORD больше не поддерживается MySQL. Их требуется сменить.
  • Теперь аутентифакация LDAP и локальная работают параллельно. Для активации LDAP аутентификации в LDAP_ADMIN_GROUP_DN нужно указать группу доступа AD.

This service import users info from LDAP/AD to MySQL DB

screenshot

Show all contacts on map

screenshot

Show selected contact on map

screenshot

Installation

screenshot

screenshot

screenshot

screenshot

screenshot


Corporate phone directory with contacts displayed on the office map

Contacts are divided into two types:

  • Imported from AD
  • Local

Imported contacts can not be edited, you can only hide them from the list and specify the location on the map. All that needs to be done in AD, then re-synchronize, which will be added new and updated.

Functionality:

  • Import contacts and photos from AD
  • Show / hide any contact
  • Add, edit and delete local contacts
  • Indicate the location of the contact on the office plan. Convenient for orientation in a large company
  • Export to an .xml file for use in the Phonebook application for Windows
  • Backup all contacts with coordinates to XML file
  • Restore all contacts from XML file
  • Hide all contacts that was disabled in AD

Maps are stored in the files templates/map[1-5].png

System requirements

  • Apache
  • MariaDB (MySQL)
  • PHP
  • Active Directory (optional)

Plug-ins in php.ini or compile PHP with LDAP support

  • extension = php_ldap.dll
  • extension = php_fileinfo.dll

Installation

  • Open in the browser install.php and fill in the proposed parameters
  • Replace the images of the maps templates/map[1-5].png with their schemes

Dmitry V. Zimin [email protected] Ask in Issues before mail me.

Comments
  • Не синхронизирует LDAP

    Не синхронизирует LDAP

    При нажатии "Синхронизировать" выдает ошибку Exception: File: C:\pb\routes\contacts_sync.php[44]: ldap_parse_result return error: Success Trace: #0 C:\pb\modules\Router.php(103): contacts_sync(Object(Core), Array, Array) #1 C:\pb\pb.php(316): Router->process('contacts_sync', Array) #2 {main} Но в тоже время зайти как администратор с доменной учетной записью удается.

    opened by serdgserdg 13
  • IP Phone вместо Phone City

    IP Phone вместо Phone City

    Здравствуйте! Подскажите как и где исправить код, чтоб таблица pcity заполнялась данными из AD, а не в ручную. Хочу в это поле выводить IP телефон, но все мои попытки увенчались неудачей. Сама телефонная книга работает отлично. Спасибо за сие творение.

    opened by drewetmur 12
  • Добавить отображение номера комнаты

    Добавить отображение номера комнаты

    Добрый день. Как добавить вывод номера комнаты? Я пробовал использовать параметр physicalDeliveryOfficeName чтобы показывать данные из строки Office во вкладке General, но никаких данных он не выдает( У меня не используется строка Company, поэтому я поменял в файле pb.php $s_organization = @$account['physicalDeliveryOfficeName'][0];, но в таблице в столбце org ничего не появляется. Я пробовал менять на initials и инициалы появлялись. В файле inc.config я добавлял в "LDAP_ATTRS" значение physicalDeliveryOfficeName

    opened by epigraphe 12
  • Удаление старых контактов

    Удаление старых контактов

    Скажите, синхронизация с AD проходит только в сторону добавления контактов? Например при увольнении сотрудника мы отключаем уч. запись и перемещаем ее в отдельный OU за пределами компании. После синхронизации контакт остается в списке, хотя его даже нет в OU, на который нацелена книга. Если так, то как проще всего очистить мусорные контакты? Очистить всю БД (контакты используем только из AD) и синхронизировать? Спасибо.

    opened by thdonatello 11
  • Про регистрацию локальных пользователей

    Про регистрацию локальных пользователей

    Дмитрий, Здравствуйте! А Вы не планируете сделать опцию первичной регистрации для локальных пользователей, чтоб Телефонный справочник им открывался с доступом только для чтения, и ТОЛЬКО после ввода их Имени и Пароля, которые предварительно введены для них Администратором?

    opened by YuriySam 10
  • Дублируется информация в пустые поля контактов

    Дублируется информация в пустые поля контактов

    Добрый день. Описываю ситуацию, которую заметил и хотел бы решение как отключить эту зависимость: Есть Контакт №1, у которого заполнены все поля в форме добавления контакта. Есть Контакт №2, у которого заполнены 2 первых поля и много пустых полей. Есть Контакт №3, у которого заполнены 2 последних поля, а остальные пустые. Если, например, нажать кнопку Изменить Контакта №1, внести изменения в любое заполненное поле, потом нажать кнопку Сохранить и не обновлять страницу, то при нажатии кнопки Изменить у Контакта №2 все пустые поля "втихоря" заполняются информацией из полей Контакта №1, что редко замечаешь вообще, нажимаешь Сохранить и потом получается что e-mail, телефон и т.п. одинаковые у разных сотрудников. Контакт №3, например, заполнит пустые поля информацией из заполненных полей Контакта №2 и т.д. Когда массово меняю всем контактам адреса, например, то данная опция совершенно неудобна мне. Решение есть конечно, но неудобное, необходимо после изменения полей Контакта №1 и нажатия кнопки Сохранить, нажимать F5 и только после этого можно править поля других контактов и не боятся, что информация задублируется, но не всегда вспоминаешь об обновлении страницы после редактирования каждого контакта в массовом режиме. Где эта строчка кода, которая за это отвечает? Хотелось бы ее закомментировать, чтобы было удобно массово изменять контакты не обновляя страницу каждый раз и чтобы информация не подтягивалась туда-сюда лишняя. Спасибо.

    opened by jiki7 7
  • Первый запуск / install.php

    Первый запуск / install.php

    Привет. Благодарю за интересный проект, мне он очень понравился, но я не очень дружу с линейкой ОС линукс (только учусь). На CentOS 7 были развёрнуты Apache, PHP и MariaDB. Проверил работу, подсунув в каталог "/var/www/html" простенький index.php. Далее подсунул в эту же директорию ваш проект. При открытии сайта идёт переадресация на страницу install.php, но страница не открывается, появляется ошибка: Страница недоступна Сайт 192.168.11.11 пока не может обработать этот запрос. HTTP ERROR 500

    Прошу подсказать куда копать. Если есть полная инструкция по развёртыванию проекта, то буду признателен, если подскажете где её найти.

    opened by Grimturs 6
  • Отображение Контактов из AD

    Отображение Контактов из AD

    Приветствую. Нет придела совершенству, и хотел бы узнать как включить в данном чудесном справочнике отображение контактов из AD. Все пользователи отображаются корректно и все работает очень быстро и стабильно. Но увы, не отображаются контакты созданные в AD. Пользователи отображаются, контакты нет. Было бы замечательно если бы в адресную книгу попадали контакты без учетной записи в AD.

    opened by drewetmur 6
  • Администратор по Умолчанию (admin)

    Администратор по Умолчанию (admin)

    Здравствуйте. Работает на Ура. Все вытащил и А.Д. ну все что было прописано для каждого пользователя. Но есть не знаю проблема ли и так глюк.

    1. Так как подключается к А.Д. Админ по умолчанию но может войти?
    2. как и где подправить код чтобы показывать Дни рождения есть такая необходимость.

    И вот сейчас попробовал в файле inc.config.php убрать значение
    define('PB_USE_LDAP_AUTH', 0); и сразу админ смог зайти без проблем.

    opened by linuxmangr 5
  • Проблема с автоматическим скрытием отключенных юзеров

    Проблема с автоматическим скрытием отключенных юзеров

    Прошу помощи. При добавлении в crontab php -f /var/www/telbooks/pb.php -- --user "user" --password "pas" --path contacts_hide_disabled скрываются все контакты, где ошибка?

    opened by pochepin 4
  • Дни рождения в контактах импортированных из AD

    Дни рождения в контактах импортированных из AD

    Добрый день. Подскажите, пожалуйста, существует ли возможность редактировать контакты, импортированные из AD? Если нет, то подскажите какой атрибут импортируется из AD для подстановки в графу дня рождения?

    opened by Torin88 4
  • ошибка NotAllFilled

    ошибка NotAllFilled

    Имеется необходимость добавить в телефонный справочник дополнительную функцию "Регистрация переговорной комнаты" Добавил новую таблицу со столбцами "pb_ peregovorka" добавил в header дополнительное меню.

    создал файл для получения данных из базы . файл - routes/pk.php

    создал форму и заполнил ее. файл - templates/tpl.pk.php

    создал файл для редактирования и создания новых записей в таблицу. файл - routes/pk_edit.php

    основываясь на информации как в файлах user_save.php и contact_save.php создал для своих столбцов таблицы файл routes/pk_save.php

    добавил эти файлы в pb.php $core->Router->add_route('pk', 'pk'); $core->Router->add_route('pk_edit', 'pk_edit', TRUE); $core->Router->add_route('pk_save', 'pk_save', TRUE); в файле pb.js дописал unction on_saved(action, data) { if(action == 'permission_save') { //f_get_perms(data.pid); window.location = window.location; } else if(action == 'user_save') { window.location = window.location; } else if(action == 'pk_save') { window.location = window.location; } ***//

    В итоге данные из таблицы отображаются, форма для создания новых записей и форма редактирования открывается. Но при нажатии кнопки "OK" в форме отображается сообщение "NotAllFilled" Пробовал отключать эту проверку в созданных файлах но ничего не помогло.

    opened by serdgserdg 21
  • Мультиязычность

    Мультиязычность

    Приветствую. Прошу подсказать, как реализовать смену языка для пользователей сайта? Т.е. добавить кнопку выбора языка, которая бы меняла язык интерфейса и выгружала значений из других ячеек таблицы БД. Я примерно понимаю как это реализовать, в базу сам добавлю необходимые поля и загрузку/выгрузку значений, но опыта в php нет, поэтому прошу помощи.

    opened by Grimturs 1
  • Группировка, сортировка и отображение контактов

    Группировка, сортировка и отображение контактов

    Есть ли возможность добавить автоматическую сортировку и группировку контактов например по отделам с вложенным списком в них контактов. Для отображения списка только отделов и при клике на отделы отображения контактов только из данного отдела.

    opened by w1zeman 2
  • SSO

    SSO

    Спасибо Вам за труд! Как на счет расширить функционал поддержкой SSO и сделать доступ по группам AD? Подобное реализовано в dokuwiki. Имя пользователя показывать вместо кнопки "Вход" При логине пользователя, входящего в LDAP_ADMIN_GROUP_DN - открывать полный функционал, остальным только просмотр. Опционально пользователям можно разрешать изменение своих личных данных. Не вошедшим в систему показывать какой-либо урезанный список контактов. А на сами номера в таком случае можно повесить хороший экшн - набрать номер при нажатии. Видеть номера удобно, но набирать мобильники или в другие страны - много кнопок. Я в php не силен, но вот если будет авторизация плюс определение дополнительных атрибутов вошедшего пользователя, то originate в asterisk я прикручу, наверное.

    opened by thdonatello 1
Owner
null
Active State Helper for Laravel Blade

laravel-activehelper Active State Helper for Laravel Blade Lightweight and simple Introduction Basically we do like this. <li class="sidebar {{ Reques

Ahmad Irsyadul Ibad 4 Sep 25, 2022
Add Active Campaign API v3 to your Laravel application.

Laravel ActiveCampaign (WIP) This package provides a simple interface to the ActiveCampaign API v3. Currently the packages only supports the endpoints

Label84 10 Nov 28, 2022
Removes whitelisted unnecessary files (like tests/docs etc.) from vendor directory

Composer vendor cleanup This is a simple script for the Composer to remove unnecessary files (documentation/examples/tests etc.) from included vendor

Chris 2 Nov 14, 2022
Laravel-model-mapper - Map your model attributes to class properties with ease.

Laravel Model-Property Mapper This package provides functionality to map your model attributes to local class properties with the same names. The pack

Michael Rubel 15 Oct 29, 2022
Public API for the project coding.events. Made in PHP 8.0 with Lumen 8, PHP-FPM, NGINX and MySQL 8.

coding.events API Uma API feita apenas para passar o tempo, montando uma API para o site <coding.events>. Sinta-se livre para usar esse código como es

Kaique Garcia 3 Oct 9, 2022
Software para consultas veiculares construído com PHP, Laravel e MySQL

DespCar Um projeto de uso pessoal para um despachante veícular para consulta de carros através da placa Sobre o Projeto Construído Com PHP PHPUnit Lar

Angelo 3 Dec 1, 2021
Loja virtual fictícia para compra de produtos e estilização dos mesmos. Desenvolvido com as tecnologias: HTML, CSS, PHP, CODEIGNITER, JavaScript, Bootstrap e Mysql.

StampGeek Loja virtual fictícia para compra de produtos e estilização dos mesmos. Desenvolvido com as tecnologias: HTML, CSS, PHP, CODEIGNITER, JavaSc

Pablo Silva 1 Jan 13, 2022
PcTools is a proyect developed using {JavaScript,HTML5,CSS} for frontend and {PHP => Mysql} for backend.

PcTools-Proyect PcTools is a proyect developed using {JavaScript,HTML5,CSS} for frontend and {PHP => Mysql} for backend. Future Improvements # Replace

Ihab Fallahy 1 Feb 5, 2022
A super simple package allowing for use MySQL 'USE INDEX' and 'FORCE INDEX' statements.

Laravel MySQL Use Index Scope A super simple package allowing for use MySQL USE INDEX and FORCE INDEX statements. Requirements PHP ^7.4 | ^8.0 Laravel

Vasyl 29 Dec 27, 2022
Laravel Mysql Spatial Builder Extension

magutti-spatial V2 Laravel Builder Mysql Spatial Extension Laravel Builder extensions to calculate distances between two Spatial points using Mysql na

Marco Asperti 4 Oct 2, 2022
For using Laravel with a pre-existing MySQL Database

MySQL to Laravel This is a script to help with mapping an existing MySQL database to a new Laravel build. Place the script in the public folder of you

Chad Haney 17 Nov 29, 2022
An application with Laravel, Vue, Redis and Mysql

<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%2

André Franca 3 Dec 16, 2021
Source code behind the Laracasts Larabit: Using MySQL JSON Columns with Laravel

Using MySQL JSON Columns with Laravel This is the source code behind the Laracasts Larabit: Using MySQL JSON Columns with Laravel, and features all of

Andrew Schmelyun 2 Dec 24, 2021
🧾 Online test site with the human sciences theme. Using: HTML5, CSS3, Js., PHP7 and MySQL. 🚀

form-ciencias-humanas ?? Technologies Lunacy HTML5 CSS3 PHP7 MYSQL Animate.css Illustrations from icons8: Earth care from Anna Antipina Earth and Moon

Vinícius 1 Jan 9, 2022
Utilizamos select2 con MySQL - Laravel 8 - livewire y jetstream

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Informática DP 1 Jan 4, 2022
Laravel 4.* and 5.* service providers to handle PHP errors, dump variables, execute PHP code remotely in Google Chrome

Laravel 4.* service provider for PHP Console See https://github.com/barbushin/php-console-laravel/releases/tag/1.2.1 Use "php-console/laravel-service-

Sergey 73 Jun 1, 2022
States allows you to create PHP classes following the State Pattern in PHP.

States allows you to create PHP classes following the State Pattern in PHP. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements and this improve maintainability and workflows writing.

Teknoo Software 10 Nov 20, 2022
PHP components - collection of cross-project PHP classes

PHP components Collection of cross-project PHP classes. Install: $ composer require ansas/php-component Ansas\Component\Convert\ConvertPrice Convert "

null 1 Jan 5, 2022
Lavacharts is a graphing / charting library for PHP 5.4+ that wraps Google's Javascript Chart API.

Lavacharts 3.1.12 Lavacharts is a graphing / chart library for PHP5.4+ that wraps the Google Chart API. Stable: Dev: Developer Note Please don't be di

Kevin Hill 616 Dec 17, 2022