This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
ModuleUsersGroups — модуль расширения для MikoPBX, реализующий управление группами сотрудников с контролем прав на звонки, изоляцией вызовов и управлением исходящими маршрутами. Модуль генерирует конфигурацию Asterisk dialplan и управляет данными через AstDB.
- PHP 7.4+ с Phalcon (поддержка v4 и v5+ через
Lib/MikoPBXVersion.php) - Наследует базовые классы MikoPBX:
ConfigClass,PbxExtensionBase,ModulesModelsBase,BaseController,BaseForm - Namespace:
Modules\ModuleUsersGroups\(PSR-4 от корня) - Frontend: Semantic UI + DataTables, JS на ES6+
Lib/UsersGroupsConf.php — центральный класс, наследует ConfigClass. Реализует хуки MikoPBX для генерации dialplan:
extensionGenAllPeersContext()— правила изоляции в контексте[all_peers]extensionGenContexts()— контекстыusers-group-isolate,users-group-dst-*,users-group-forbiddengenerateOutRoutContext()/generateOutRoutAfterDialContext()— ограничения исходящих маршрутов, подмена CallerIDoverridePJSIPOptions()— назначениеnamed_call_group/named_pickup_groupдля изоляции pickupmoduleRestAPICallback()— точка входа REST APIonAfterExecuteRestAPIRoute()— перехват сохранения сотрудника (API v2 и v3) для привязки к группе
Lib/UsersGroups.php — сервисный класс, заполняет AstDB (UsersGroups/{extension}) переменными канала: GR_PERM_ENABLE, GR_ID_{routeId}, GR_CID_{routeId}.
Lib/RestAPI/ — action-based REST API:
UsersGroupsManagementProcessor.php— роутер действий- Actions:
GetUserGroupAction,UpdateUserGroupAction,SetDefaultGroupAction,GetDefaultGroupAction,GetGroupsStatsAction,CleanupOrphanedMembersAction
UsersGroups— группа (name, description, patterns, isolate, isolatePickUp, defaultGroup)GroupMembers— связь группа↔пользователь (group_id, user_id). Один пользователь = одна группаAllowedOutboundRules— связь группа↔маршрут (group_id, rule_id, caller_id)
Важно: group_id в коде используется со сдвигом +1 при маппинге на named_call_group Asterisk (см. initUserList() и getSettings()).
Изоляция работает через контексты Asterisk:
- В
[all_peers]проверяются флагиsrcIsolateиdstIsolateчерезDIALPLAN_EXISTS - При запрете —
Goto(users-group-forbidden)с воспроизведением звукового файла - Исходящие маршруты: переменные из AstDB (
GR_VARS) определяют доступ к маршруту и подмену CallerID - Поддержка
FW_SOURCE_PEERдля переадресованных вызовов
App/Controllers/ModuleUsersGroupsController.php— единый контроллер (index/modify)App/Views/ModuleUsersGroups/— Volt-шаблоны с табами (groups, users, rules)public/assets/js/src/— исходники JS,public/assets/js/— собранные файлы
Сборка и публикация через GitHub Actions (.github/workflows/build.yml), использует shared workflow mikopbx/.github-workflows/.github/workflows/extension-publish.yml@master.
Зависимости PHP: composer install (минимальные — только mikopbx/core).
Тесты и линтеры не настроены в репозитории.
32 языковых файла в Messages/. Звуковые файлы Sounds/{lang}/forbidden.mp3 для голосовых уведомлений при запрете вызова.
- PHP 7.4 совместимость обязательна (нет
str_starts_with,match, union types и т.д.) - Модуль-специфичные POST-поля имеют префикс
mod_usrgr_ - Модуль встраивается в карточку сотрудника через
onVoltBlockCompileиonBeforeFormInitialize - При изменении моделей
AllowedOutboundRules,GroupMembers,UsersGroupsавтоматически вызываетсяreloadConfigs()(SIP + dialplan reload)