From 2ec71fdf2fa309e2bcc603c1c7d822690caeab77 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Fri, 30 May 2025 15:16:24 +0300 Subject: [PATCH 1/8] feat: Add user page tracker API endpoints and actions - Introduce API_USER_PAGE_TRACKER constant for user page tracking - Define actions for page view and page leave in EndpointConstants - Update CoreACL to include permissions for user page tracker actions - Improve AccessGroupsRightsController to handle excluded actions safely --- App/Controllers/AccessGroupsRightsController.php | 2 +- Lib/ACL/CoreACL.php | 5 +++++ Lib/EndpointConstants.php | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/App/Controllers/AccessGroupsRightsController.php b/App/Controllers/AccessGroupsRightsController.php index d4e8350..9f50379 100644 --- a/App/Controllers/AccessGroupsRightsController.php +++ b/App/Controllers/AccessGroupsRightsController.php @@ -255,7 +255,7 @@ private function getAvailableRESTControllersActions(): array if (in_array($annotation->getName(), $possibleHTTPMethods)) { $actionName = $annotation->getArgument(0); // Remove always allowed or always disallowed actions - if (!empty($actionName) and !in_array($actionName, $excludedActions[$controllerName])) { + if (!empty($actionName) and !in_array($actionName, $excludedActions[$controllerName]??[])) { $actions[$actionName] = false; } } diff --git a/Lib/ACL/CoreACL.php b/Lib/ACL/CoreACL.php index 2a9e6d9..5019375 100644 --- a/Lib/ACL/CoreACL.php +++ b/Lib/ACL/CoreACL.php @@ -254,6 +254,11 @@ public static function getAlwaysAllowed(): array{ RestEndpoints::ACTION_LIC_SEND_PBX_METRICS ], RestEndpoints::API_NCHAN => '*', + + RestEndpoints::API_USER_PAGE_TRACKER => [ + RestEndpoints::ACTION_USER_PAGE_TRACKER_PAGE_VIEW, + RestEndpoints::ACTION_USER_PAGE_TRACKER_PAGE_LEAVE + ] ]; } diff --git a/Lib/EndpointConstants.php b/Lib/EndpointConstants.php index 5df1198..e374e94 100644 --- a/Lib/EndpointConstants.php +++ b/Lib/EndpointConstants.php @@ -42,6 +42,7 @@ class EndpointConstants const API_SYSINFO = '/pbxcore/api/sysinfo'; const API_STORAGE = '/pbxcore/api/storage'; const API_ADVICE = '/pbxcore/api/advice'; + const API_USER_PAGE_TRACKER = '/pbxcore/api/user-page-tracker'; const API_SOME_ENDPOINT = '/pbxcore/api/someendpoint'; // CDR (Call Detail Records) API Actions @@ -94,6 +95,10 @@ class EndpointConstants const ACTION_SOUND_GET_PATH_BY_ID = 'getPathById'; const ACTION_SOUND_GET_FILES = 'getSoundFiles'; + // User Page Tracker API Actions + const ACTION_USER_PAGE_TRACKER_PAGE_VIEW = '/pageView'; + const ACTION_USER_PAGE_TRACKER_PAGE_LEAVE = '/pageLeave'; + // Generic Actions const ACTION_API_DELETE_RECORD = '/deleteRecord'; const ACTION_API_GET_REGISTRY = '/getRegistry'; From 980b14e8bb2aceaf844b1cccd9e5ce9e8df34221 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Sun, 1 Jun 2025 13:52:32 +0000 Subject: [PATCH 2/8] Translated using Weblate (German) Currently translated at 100.0% (152 of 152 strings) Translation: MIKOPBX/ModuleUsersUI Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleusersui/de/ --- Messages/de.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Messages/de.php b/Messages/de.php index 26af301..ee23894 100644 --- a/Messages/de.php +++ b/Messages/de.php @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License along with this program. * If not, see . */ - 'repModuleUsersUI' => 'Systemzugriffskontrolle – %repesent%', + 'repModuleUsersUI' => 'Systemzugriffskontrolle - %repesent%', 'mo_ModuleModuleUsersUI' => 'Systemzugriffskontrolle ', 'BreadcrumbModuleUsersUI' => 'Systemzugriffskontrolle ', 'SubHeaderModuleUsersUI' => 'Erstellung von Zugriffsgruppen, Einschränkung von Rechten, Domänenautorisierung', From 7dd17512a0a839012d9b62ca1e28a763e96867df Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Sun, 1 Jun 2025 13:45:05 +0000 Subject: [PATCH 3/8] Translated using Weblate (Turkish) Currently translated at 100.0% (152 of 152 strings) Translation: MIKOPBX/ModuleUsersUI Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleusersui/tr/ --- Messages/tr.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Messages/tr.php b/Messages/tr.php index 0a8ce8a..fe0e4c5 100644 --- a/Messages/tr.php +++ b/Messages/tr.php @@ -18,22 +18,22 @@ * If not, see . */ 'repModuleUsersUI' => 'Sistem Erişim Kontrolü - %repesent%', - 'mo_ModuleModuleUsersUI' => 'Sistem erişim kontrolü ', - 'BreadcrumbModuleUsersUI' => 'Sistem erişim kontrolü ', - 'SubHeaderModuleUsersUI' => 'Erişim gruplarının oluşturulması, hakların kısıtlanması, alan adı yetkilendirmesi', + 'mo_ModuleModuleUsersUI' => 'Sistem Erişimini Yönetme ', + 'BreadcrumbModuleUsersUI' => 'Sistem Erişimini Yönetme ', + 'SubHeaderModuleUsersUI' => 'Erişim grupları oluşturma, hakları kısıtlama, etki alanı yetkilendirme', 'BreadcrumbAccessGroups' => 'Bir erişim grubu kurma', 'SubHeaderAccessGroups' => 'Arayüz öğeleri ve REST API için hakların ayrıntılı ayarı', 'module_usersui_GeneralSettings' => 'Temel grup ayarları', - 'module_usersui_UsersFilter' => 'Grup kullanıcılarına erişme', - 'module_usersui_GroupRights' => 'Ayar izinleri', + 'module_usersui_UsersFilter' => 'Erişim Grubu Kullanıcıları', + 'module_usersui_GroupRights' => 'Hakların kurulması', 'module_usersui_GroupCDRFilter' => 'Konuşma geçmişi kısıtlamaları', 'module_usersui_ValidateNameIsEmpty' => 'Grup adını kontrol edin, boş', - 'module_usersuiConnected' => 'Modül bağlı', - 'module_usersuiDisconnected' => 'Modül devre dışı', - 'module_usersuiUpdateStatus' => 'Durum güncelleme', - 'module_usersui_ValidateServerNameIsEmpty' => 'Etki alanı denetleyicisi adresi doldurulmadı', - 'module_usersui_ValidateServerPortIsEmpty' => 'Etki alanı denetleyici bağlantı noktası doldurulmamış', - 'module_usersui_ValidateAdministrativeLoginIsEmpty' => 'Etki alanı kullanıcısı için oturum açma bilgileri doldurulmadı', + 'module_usersuiConnected' => 'Modül bağlandı', + 'module_usersuiDisconnected' => 'Modül devre dışı bırakıldı', + 'module_usersuiUpdateStatus' => 'Durum güncellemesi', + 'module_usersui_ValidateServerNameIsEmpty' => 'Etki alanı denetleyicisi adresi doldurulmamış', + 'module_usersui_ValidateServerPortIsEmpty' => 'Etki alanı denetleyicisi bağlantı noktası doldurulmadı', + 'module_usersui_ValidateAdministrativeLoginIsEmpty' => 'Alan adı kullanıcı girişi doldurulmadı', 'module_usersui_ValidateAdministrativePasswordIsEmpty' => 'Etki alanı kullanıcısı için parola doldurulmadı', 'module_usersui_ValidateBaseDNIsEmpty' => 'Etki alanı kökü doldurulmadı', 'module_usersui_ValidateUserIdAttributeIsEmpty' => 'Etki alanındaki kullanıcı adına sahip öznitelik doldurulmamış', From 6d27a0fc10b271ae216771b6e020b9ff08402acc Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Sun, 1 Jun 2025 13:49:04 +0000 Subject: [PATCH 4/8] Translated using Weblate (Romanian) Currently translated at 100.0% (152 of 152 strings) Translation: MIKOPBX/ModuleUsersUI Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleusersui/ro/ --- Messages/ro.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Messages/ro.php b/Messages/ro.php index 53343d0..f0bbc39 100644 --- a/Messages/ro.php +++ b/Messages/ro.php @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License along with this program. * If not, see . */ - 'repModuleUsersUI' => 'Control acces la sistem - %repesent%', + 'repModuleUsersUI' => 'Controlul accesului la sistem - %repesent%', 'mo_ModuleModuleUsersUI' => 'Control acces la sistem ', 'BreadcrumbModuleUsersUI' => 'Control acces la sistem ', 'SubHeaderModuleUsersUI' => 'Crearea de grupuri de acces, restrângerea drepturilor, autorizarea domeniului', From 4ab65e4c5098e4b1ff17a0066e0141ee71e136ff Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Sun, 1 Jun 2025 13:49:32 +0000 Subject: [PATCH 5/8] Translated using Weblate (Hungarian) Currently translated at 100.0% (152 of 152 strings) Translation: MIKOPBX/ModuleUsersUI Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleusersui/hu/ --- Messages/hu.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Messages/hu.php b/Messages/hu.php index 80c1689..63f291e 100644 --- a/Messages/hu.php +++ b/Messages/hu.php @@ -34,10 +34,10 @@ * You should have received a copy of the GNU General Public License along with this program. * If not, see . */ - 'repModuleUsersUI' => 'Rendszer hozzáférés-vezérlés - %repesent%', - 'mo_ModuleModuleUsersUI' => 'Rendszer hozzáférés-szabályozás ', - 'BreadcrumbModuleUsersUI' => 'Rendszer hozzáférés-szabályozás ', - 'SubHeaderModuleUsersUI' => 'Hozzáférési csoportok létrehozása, jogok korlátozása, domain jogosultság', + 'repModuleUsersUI' => 'Rendszerhozzáférés-vezérlés - %repesent%', + 'mo_ModuleModuleUsersUI' => 'Rendszerhozzáférés kezelése ', + 'BreadcrumbModuleUsersUI' => 'Rendszerhozzáférés kezelése ', + 'SubHeaderModuleUsersUI' => 'Hozzáférési csoportok létrehozása, jogok korlátozása, domain engedélyezése', 'BreadcrumbAccessGroups' => 'Hozzáférési csoport beállítása', 'SubHeaderAccessGroups' => 'Az interfész elemek és a REST API jogainak részletes konfigurálása', 'module_usersui_GeneralSettings' => 'Alapvető csoportbeállítások', From 0016525630cba40b65b55664b2ef36f2cedbc2b4 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Sun, 1 Jun 2025 13:53:06 +0000 Subject: [PATCH 6/8] Translated using Weblate (Finnish) Currently translated at 100.0% (152 of 152 strings) Translation: MIKOPBX/ModuleUsersUI Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleusersui/fi/ --- Messages/fi.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Messages/fi.php b/Messages/fi.php index b86b567..680120c 100644 --- a/Messages/fi.php +++ b/Messages/fi.php @@ -34,7 +34,7 @@ * You should have received a copy of the GNU General Public License along with this program. * If not, see . */ - 'repModuleUsersUI' => 'Järjestelmän kulunvalvonta - %repesent%', + 'repModuleUsersUI' => 'Järjestelmän käyttöoikeuksien hallinta - %repesent%', 'mo_ModuleModuleUsersUI' => 'Järjestelmän kulunvalvonta ', 'BreadcrumbModuleUsersUI' => 'Järjestelmän kulunvalvonta ', 'SubHeaderModuleUsersUI' => 'Käyttöoikeusryhmien luominen, oikeuksien rajoittaminen, verkkotunnuksen valtuutus', From 54330218141dd41812eee9f2a51c6ef571ffefa8 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Thu, 5 Jun 2025 14:54:20 +0300 Subject: [PATCH 7/8] feat: Add latest record date API action - Introduce ACTION_CDR_API_GET_LATEST_RECORD_DATE constant in EndpointConstants - Update CoreACL to include the new action for CDR API --- Lib/ACL/CoreACL.php | 3 ++- Lib/EndpointConstants.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Lib/ACL/CoreACL.php b/Lib/ACL/CoreACL.php index 5019375..7fb3cc7 100644 --- a/Lib/ACL/CoreACL.php +++ b/Lib/ACL/CoreACL.php @@ -80,7 +80,8 @@ public static function getLinkedControllerActions(): array RestEndpoints::API_CDR => [ RestEndpoints::ACTION_CDR_API_PLAYBACK_V2, RestEndpoints::ACTION_CDR_PLAYBACK, - RestEndpoints::ACTION_CDR_API_GET_RECORD_FILE_V2 + RestEndpoints::ACTION_CDR_API_GET_RECORD_FILE_V2, + RestEndpoints::ACTION_CDR_API_GET_LATEST_RECORD_DATE ] ] ], diff --git a/Lib/EndpointConstants.php b/Lib/EndpointConstants.php index e374e94..2d9e624 100644 --- a/Lib/EndpointConstants.php +++ b/Lib/EndpointConstants.php @@ -51,6 +51,7 @@ class EndpointConstants const ACTION_CDR_PLAYBACK = '/playback'; const ACTION_CDR_API_PLAYBACK_V2 = '/v2/playback'; const ACTION_CDR_API_GET_RECORD_FILE_V2 = '/v2/getRecordFile'; + const ACTION_CDR_API_GET_LATEST_RECORD_DATE = '/getLatestRecordDate'; // SIP API Actions const ACTION_SIP_API_GET_PEER = '/getSipPeer'; From 5075f2f40f1d7fcc34e6ea947ff48a86d80e41b6 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Mon, 28 Jul 2025 09:44:21 +0700 Subject: [PATCH 8/8] Fix module class loader --- Lib/UsersUILdapAuth.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Lib/UsersUILdapAuth.php b/Lib/UsersUILdapAuth.php index a99ed06..2de449e 100644 --- a/Lib/UsersUILdapAuth.php +++ b/Lib/UsersUILdapAuth.php @@ -24,7 +24,6 @@ use LdapRecord\Container; use MikoPBX\Common\Handlers\CriticalErrorsHandler; use MikoPBX\Common\Providers\LoggerAuthProvider; -use Modules\ModuleLdapSync\Lib\AnswerStructure; use Phalcon\Di\Injectable; include_once __DIR__ . '/../vendor/autoload.php';