From 9521f50a4b11f97ce3f8272a319a761a98887d33 Mon Sep 17 00:00:00 2001 From: apor Date: Fri, 27 Oct 2023 15:34:07 +0300 Subject: [PATCH 01/51] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BD=D0=B0=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/WorkerProvisioningServerPnP.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Lib/WorkerProvisioningServerPnP.php b/Lib/WorkerProvisioningServerPnP.php index 2447f77..5057c1f 100644 --- a/Lib/WorkerProvisioningServerPnP.php +++ b/Lib/WorkerProvisioningServerPnP.php @@ -70,9 +70,9 @@ public function getSettings($debug = false):void /** * Worker Entry point - * @param mixed $params + * @param mixed $argv */ - public function start($params): void + public function start($argv): void { $this->getSettings(); $result = PbxExtensionModules::findFirstByUniqid("ModuleAutoprovision"); @@ -80,22 +80,22 @@ public function start($params): void Processes::processWorker('', '', __CLASS__, 'stop'); return; } - $action = $params[1]??''; + $action = $argv[1]??''; // Общий воркер статует всегда все скрипты с компндой start if ($action === 'socket_server' || $action === 'start') { $this->client_queue = new BeanstalkClient(); $this->client_queue->subscribe('ping_' . self::class, [$this, 'pingCallBack']); $this->listen(); } elseif ($action === 'socket_client') { - $ip = $params[2] ?? '127.0.0.1'; - $port = (integer)($params[3] ?? 5062); - $mac = str_replace(':', '', $params[4] ?? '0015657322ff'); + $ip = $argv[2] ?? '127.0.0.1'; + $port = (integer)($argv[3] ?? 5062); + $mac = str_replace(':', '', $argv[4] ?? '0015657322ff'); self::testSocketClient($ip, $port, $mac); } elseif ($action === 'socket_client_notify') { - $ip_pbx = $params[2] ?? '127.0.0.1'; - $port_pbx = (integer)($params[3] ?? 5060); - $ip_phone = $params[4] ?? '172.16.32.138'; - $port_phone = (integer)($params[5] ?? 5062); + $ip_pbx = $argv[2] ?? '127.0.0.1'; + $port_pbx = (integer)($argv[3] ?? 5060); + $ip_phone = $argv[4] ?? '172.16.32.138'; + $port_phone = (integer)($argv[5] ?? 5062); self::socketClientNotify($ip_pbx, $port_pbx, $ip_phone, $port_phone); } elseif ($action === 'help') { echo "\n"; From 9e15290a4272e2aa5d3b2cd11c2ab836ff7dcb84 Mon Sep 17 00:00:00 2001 From: apor Date: Fri, 15 Dec 2023 15:04:45 +0300 Subject: [PATCH 02/51] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BD=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B8=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=20=D0=BF=D0=BE=20http.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleAutoprovisionController.php | 115 +++++++- App/Views/index.volt | 260 +++++++++++++++-- Lib/AutoprovisionConf.php | 14 +- Lib/RestAPI/Controllers/GetController.php | 224 +++++++++++++++ Lib/Transliterate.php | 115 ++++++++ Messages/ru.php | 37 ++- Models/OtherPBX.php | 55 ++++ Models/Templates.php | 57 ++++ Models/TemplatesUri.php | 47 ++++ Models/TemplatesUsers.php | 53 ++++ .../assets/js/module-autoprovision-index.js | 262 ++++++++++++++---- .../js/module-autoprovision-index.js.map | 1 + .../js/src/module-autoprovision-index.js | 181 +++++++++++- 13 files changed, 1330 insertions(+), 91 deletions(-) create mode 100644 Lib/Transliterate.php create mode 100644 Models/OtherPBX.php create mode 100644 Models/Templates.php create mode 100644 Models/TemplatesUri.php create mode 100644 Models/TemplatesUsers.php create mode 100644 public/assets/js/module-autoprovision-index.js.map diff --git a/App/Controllers/ModuleAutoprovisionController.php b/App/Controllers/ModuleAutoprovisionController.php index 2efc6ca..1b2aef9 100644 --- a/App/Controllers/ModuleAutoprovisionController.php +++ b/App/Controllers/ModuleAutoprovisionController.php @@ -7,9 +7,14 @@ */ namespace Modules\ModuleAutoprovision\App\Controllers; use MikoPBX\AdminCabinet\Controllers\BaseController; +use MikoPBX\Common\Models\Extensions; use MikoPBX\Modules\PbxExtensionUtils; use Modules\ModuleAutoprovision\App\Forms\ModuleAutoprovisionForm; use Modules\ModuleAutoprovision\Models\ModuleAutoprovision; +use Modules\ModuleAutoprovision\Models\OtherPBX; +use Modules\ModuleAutoprovision\Models\Templates; +use Modules\ModuleAutoprovision\Models\TemplatesUri; +use Modules\ModuleAutoprovision\Models\TemplatesUsers; class ModuleAutoprovisionController extends BaseController { @@ -33,13 +38,38 @@ public function indexAction(): void $footerCollection = $this->assets->collection('footerJS'); $footerCollection->addJs('js/pbx/main/form.js', true); $footerCollection->addJs("js/cache/{$this->moduleUniqueID}/module-autoprovision-index.js", true); + $footerCollection->addJs('js/vendor/semantic/modal.min.js', true); + $footerCollection->addJs('js/vendor/jquery.tablednd.min.js', true); + + + $headerCollectionCSS = $this->assets->collection('headerCSS'); + $headerCollectionCSS->addCss('css/vendor/semantic/modal.min.css', true); $settings = ModuleAutoprovision::findFirst(); if ($settings === null) { $settings = new ModuleAutoprovision(); } - $this->view->form = new ModuleAutoprovisionForm($settings); + $this->view->form = new ModuleAutoprovisionForm($settings); + + $templates = Templates::find()->toArray(); + array_unshift($templates, ['id' => 'emptyTemplateRow']); + $this->view->templates = $templates; + + $templatesUsers = TemplatesUsers::find()->toArray(); + array_unshift($templatesUsers, ['id' => 'emptyTemplateRow']); + $this->view->templatesUsers = $templatesUsers; + + $templatesUri = TemplatesUri::find()->toArray(); + array_unshift($templatesUri, ['id' => 'emptyTemplateRow']); + $this->view->templatesUri = $templatesUri; + + $otherPBX = OtherPBX::find()->toArray(); + array_unshift($otherPBX, ['id' => 'emptyTemplateRow']); + $this->view->otherPBX = $otherPBX; + + $this->view->users = Extensions::find(["type = 'SIP'", 'columns' => ['number', 'callerid', 'userid']])->toArray(); + $this->view->pick("{$this->moduleDir}/App/Views/index"); } @@ -75,7 +105,6 @@ public function saveAction():void } } } - if ($record->save() === false || $extension->save() === false) { $errors = $record->getMessages(); $this->flash->error(implode('
', $errors)); @@ -88,10 +117,92 @@ public function saveAction():void return; } + + $resultSaveTables = $this->saveAdditionalTables($data); + $this->flash->success($this->translation->_('ms_SuccessfulSaved') . $record->additional_params); $this->view->success = true; + $this->view->resultSaveTables = $resultSaveTables; + $this->db->commit(); } + private function saveAdditionalTables($data):array + { + $results = []; + $additionalTables = [ + 'templates' => Templates::class, + 'templates_uri' => TemplatesUri::class, + 'phone_settings'=> TemplatesUsers::class, + 'other_pbx' => OtherPBX::class, + ]; + + $tablesData = []; + foreach ($data as $key => $value) { + [$table, $column, $id] = explode('-', $key); + if(!array_key_exists($table, $additionalTables)){ + continue; + } + $tablesData[$table][$id][$column] = $value; + } + foreach ($tablesData as $table => $dataForWrite){ + foreach ($dataForWrite as $id => $rowData){ + if('emptyTemplateRow' === $id){ + continue; + } + $class = $additionalTables[$table]; + /** @var Templates $class */ + /** @var Templates $dbRowData */ + $dbRowData = $class::findFirst("id='$id'"); + if(!$dbRowData){ + $dbRowData = new $class(); + } + foreach ($rowData as $key => $value){ + $dbRowData->$key = $value; + } + $dbRowData->save(); + $results[$table][$id] = $dbRowData->id; + } + } + + return $results; + } + + /** + * Delete phonebook record + */ + public function deleteAction(): void + { + $table = $this->request->get('table'); + $className = $this->getClassName($table); + if(empty($className)) { + $this->view->success = false; + return; + } + $id = $this->request->get('id'); + $record = $className::findFirstById($id); + if ($record !== null && ! $record->delete()) { + $this->flash->error(implode('
', $record->getMessages())); + $this->view->success = false; + return; + } + $this->view->success = true; + } + /** + * Получение имени класса по имени таблицы + * @param $tableName + * @return string + */ + private function getClassName($tableName):string + { + if(empty($tableName)){ + return ''; + } + $className = "Modules\ModuleAutoprovision\Models\\$tableName"; + if(!class_exists($className)){ + $className = ''; + } + return $className; + } } \ No newline at end of file diff --git a/App/Views/index.volt b/App/Views/index.volt index 1bafd3a..0fdbcf0 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -1,36 +1,248 @@ -
- {{ t._('mod_Autoprovision_header',['extension':form.getValue('extension')]) }} -
-
- -
- - {{ form.render('extension') }} + -
- - {{ form.render('pbx_host') }} +
+
+ {{ t._('mod_Autoprovision_other_pbx_header') }} +
+ {{ t._('mod_Autoprovision_addNew') }} + + + + + + + + {% for pbx in otherPBX %} + + + + + + {% endfor %} + +
{{ t._('mod_Autoprovision_other_pbx_name') }}{{ t._('mod_Autoprovision_other_pbx_address') }}
-
-
-
- - {{ form.render('mac_white') }} -
-
- - {{ form.render('mac_black') }} -
+
+
+ {{ t._('mod_Autoprovision_header',['extension':form.getValue('extension')]) }} +
+
+ + {{ form.render('extension') }} +
+ +
+ + {{ form.render('pbx_host') }} +
+ +
+
+
+ + {{ form.render('mac_white') }} +
+
+ + {{ form.render('mac_black') }} +
+
+
+ +
+ + {{ form.render('additional_params') }}
+
+
{{ t._('mod_Autoprovision_templates_uri_header') }}
+ {{ t._('mod_Autoprovision_addNew') }} + + + + + + + + {% for template in templatesUri %} + + + + + + {% endfor %} + +
{{ t._('mod_Autoprovision_templates_uri_uri') }}{{ t._('mod_Autoprovision_templates_uri_template') }}
+
+
+
{{ t._('mod_Autoprovision_templates_users_header') }}
+ + {{ t._('mod_Autoprovision_addNew') }} + + + + + + + + + {% for template in templatesUsers %} + + + + + + + {% endfor %} + +
{{ t._('mod_Autoprovision_phone_settings_user') }}{{ t._('mod_Autoprovision_phone_settings_mac') }}{{ t._('mod_Autoprovision_templates_uri_template') }}
+
+ +
+
{{ t._('mod_Autoprovision_templates_header') }}
+ + {{ t._('mod_Autoprovision_addNew') }} + + + + + + + + {% for template in templates %} + + + + + + {% endfor %} -
- - {{ form.render('additional_params') }} +
+
{{ t._('mod_Autoprovision_template_name') }}
{{ partial("partials/submitbutton",['indexurl':'pbx-extension-modules/index/']) }} diff --git a/Lib/AutoprovisionConf.php b/Lib/AutoprovisionConf.php index 8bbf08c..da8c0f4 100644 --- a/Lib/AutoprovisionConf.php +++ b/Lib/AutoprovisionConf.php @@ -20,6 +20,8 @@ class AutoprovisionConf extends ConfigClass public const SIP_USER = 'apv-miko-pbx'; public const SIP_SECRET = 'apv-miko-pbx'; + public const BASE_URI = '/pbxcore/api/autoprovision-http'; + /** * Returns module workers to start it at WorkerSafeScript * @return array @@ -99,10 +101,16 @@ public function getImgFile($request):PBXApiResult{ */ public function getPBXCoreRESTAdditionalRoutes(): array { - return [ - [GetController::class, 'getConfig', '/pbxcore/api/autoprovision/getcfg', 'get', '/', true], - [GetController::class, 'getImg', '/pbxcore/api/autoprovision/getimg', 'get', '/', true], + $routes = [ + [GetController::class, 'getConfig', '/pbxcore/api/autoprovision/getcfg', 'get', '/', true], + [GetController::class, 'getImg', '/pbxcore/api/autoprovision/getimg', 'get', '/', true], ]; + $uri = ""; + for ($i = 1; $i <= 35; $i++) { + $uri .= "/{p$i}"; + $routes[] = [GetController::class, 'getConfigStatic', self::BASE_URI.$uri, 'get', '/', true]; + } + return $routes; } /** diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 872a811..20cfa2c 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -7,9 +7,233 @@ */ namespace Modules\ModuleAutoprovision\Lib\RestAPI\Controllers; +use MikoPBX\Common\Models\Extensions; +use MikoPBX\Common\Models\Sip; +use MikoPBX\Core\System\Network; use MikoPBX\PBXCoreREST\Controllers\Modules\ModulesControllerBase; +use Modules\ModuleAutoprovision\Lib\Transliterate; +use Modules\ModuleAutoprovision\Models\OtherPBX; +use Modules\ModuleAutoprovision\Models\Templates; +use Modules\ModuleAutoprovision\Models\TemplatesUri; +use Modules\ModuleAutoprovision\Lib\AutoprovisionConf; +use Modules\ModuleAutoprovision\Models\TemplatesUsers; +use GuzzleHttp\Client; +use Modules\ModuleUsersGroups\Models\GroupMembers; +use Modules\ModuleUsersGroups\Models\UsersGroups; +use Phalcon\Text; + class GetController extends ModulesControllerBase { + /** + * https://standards-oui.ieee.org/oui/oui.txt + */ + public const PHONES_MAC = [ + '000413' => 'SNOM', + '44DBD2' => 'YEALINK', + '0C383E' => 'FANVIL', + ]; + + /** + * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/1/2/3' + * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/phonebook' + */ + public function getConfigStatic(...$args):void + { + $uri = substr('/pbxcore'.$_REQUEST['_url'], strlen(AutoprovisionConf::BASE_URI)); + if($uri === '/phonebook'){ + $this->echoPhoneBook($uri); + $this->response->sendRaw(); + return; + } + $manager = $this->di->get('modelsManager'); + $parameters = [ + 'models' => [ + 'TemplatesUri' => TemplatesUri::class, + ], + 'conditions' => ':uri: LIKE TemplatesUri.uri', + 'bind' => [ + 'uri' => $uri, + ], + 'columns' => [ + 'id' => 'Templates.id', + 'template' => 'Templates.template', + 'name' => 'Templates.name', + 'uri' => 'TemplatesUri.uri', + ], + 'joins' => [ + 'TemplatesUri' => [ + 0 => Templates::class, + 1 => 'Templates.id = TemplatesUri.templateId', + 2 => 'Templates', + 3 => 'LEFT', + ], + ], + ]; + $result = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + if(!empty($result)){ + $this->response->setHeader('Content-Description', "config file"); + $this->response->setHeader('Content-Disposition', "attachment; filename=".basename($uri)); + $this->response->setHeader('Content-type', "text/plain"); + $this->response->setHeader('Content-Transfer-Encoding', "binary"); + $this->response->sendHeaders(); + echo $result[0]['template']; + $this->response->sendRaw(); + return; + } + $pattern = '/([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})/i'; + if (preg_match_all($pattern, $_REQUEST['_url'], $matches)) { + $parameters = [ + 'models' => [ + 'TemplatesUsers' => TemplatesUsers::class, + ], + 'conditions' => ':mac: LIKE TemplatesUsers.mac', + 'bind' => [ + 'mac' => $matches[0][0]??'', + ], + 'columns' => [ + 'id' => 'TemplatesUsers.id', + 'template' => 'Templates.template', + 'userId' => 'TemplatesUsers.userId', + ], + 'limit' => 1, + 'joins' => [ + 'TemplatesUsers' => [ + 0 => Templates::class, + 1 => 'Templates.id = TemplatesUsers.templateId', + 2 => 'Templates', + 3 => 'LEFT', + ], + ], + ]; + $result = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + if(!empty($result)) { + $parameters = [ + 'models' => [ + 'Extensions' => Extensions::class, + ], + 'conditions' => ':userid: = Extensions.userid', + 'bind' => [ + 'userid' => $result[0]['userId'], + ], + 'columns' => [ + '{SIP_USER_NAME}' => 'Extensions.callerid', + '{SIP_NUM}' => 'Extensions.number', + '{SIP_PASS}' => 'Sip.secret', + ], + 'ORDER' => 'mac DESC', + 'limit' => 1, + 'joins' => [ + 'Extensions' => [ + 0 => Sip::class, + 1 => 'Extensions.number = Sip.extension', + 2 => 'Sip', + 3 => 'LEFT', + ], + ], + ]; + $resultSip = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + $data = [ '{SIP_NUM}' => '', '{SIP_USER_NAME}' => '', '{SIP_PASS}' => '']; + if(!empty($resultSip)){ + $data = $resultSip[0]; + } + $config = str_replace(array_keys($data), array_values($data), $result[0]['template']); + $this->response->setHeader('Content-Description', "config file"); + $this->response->setHeader('Content-Disposition', "attachment; filename=".basename($uri)); + $this->response->setHeader('Content-type', "text/plain"); + $this->response->setHeader('Content-Transfer-Encoding', "binary"); + $this->response->sendHeaders(); + echo $config; + } + } + $this->response->sendRaw(); + } + + private function echoPhoneBook($uri):void + { + $phoneBook = ''; + $nameBook = $_REQUEST['name']??''; + if(empty($nameBook)){ + ['hostname' => $nameBook] = Network::getHostName(); + $otherPbx = OtherPBX::find()->toArray(); + $client = new Client(); + foreach ($otherPbx as $pbx){ + $address = trim($pbx['address']); + if($address === '127.0.0.1'){ + $nameBook = $pbx['name']; + continue; + } + try { + $response = $client->request('GET', "http://$address".AutoprovisionConf::BASE_URI.$uri."?name={$pbx['name']}", ['timeout' => 1, 'connect_timeout' => 1, 'read_timeout' => 1]);; + $code = $response->getStatusCode(); + }catch (\Exception $e){ + $code = 0; + } + if ($code === 200) { + $xmlContent = $response->getBody()->getContents(); + $isXmlValid = simplexml_load_string("$xmlContent"); + if ($isXmlValid !== false) { + $phoneBook.= $xmlContent.PHP_EOL; + } + } + } + unset($otherPbx); + } + + $bookUsers = []; + $tmpPhoneBookArray = [$nameBook=> '']; + if(class_exists('\Modules\ModuleUsersGroups\Models\UsersGroups')){ + $manager = $this->di->get('modelsManager'); + $parameters = [ + 'models' => [ + 'GroupMembers' => GroupMembers::class, + ], + 'columns' => [ + 'user_id' => 'GroupMembers.user_id', + 'name' => 'UsersGroups.name', + ], + 'joins' => [ + 'GroupMembers' => [ + 0 => UsersGroups::class, + 1 => 'UsersGroups.id = GroupMembers.group_id', + 2 => 'UsersGroups', + 3 => 'LEFT', + ], + ], + ]; + $groupsData = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + foreach ($groupsData as $group){ + $bookUsers[$group['user_id']] = $this->camelize($group['name']); + $tmpPhoneBookArray[$group['name']] = ''; + } + } + $users = Extensions::find(["type = 'SIP'", 'columns' => ['number', 'callerid', 'userid']])->toArray(); + foreach ($users as $userData) { + $book = $bookUsers[$userData['userid']]??$nameBook; + $tmpPhoneBookArray[$book].= "\t".''.PHP_EOL; + $tmpPhoneBookArray[$book].= "\t\t"."{$userData['callerid']}".PHP_EOL; + $tmpPhoneBookArray[$book].= "\t\t"."{$userData['number']}".PHP_EOL; + $tmpPhoneBookArray[$book].= "\t".''.PHP_EOL; + } + foreach ($tmpPhoneBookArray as $key => $value){ + $phoneBook.= "<{$key}IPPhoneDirectory>".PHP_EOL; + $phoneBook.= $value; + $phoneBook.= "".PHP_EOL; + } + $this->response->setHeader('Content-Description', "config file"); + $this->response->setHeader('Content-Disposition', "attachment; filename=".basename($uri).'.xml'); + $this->response->setHeader('Content-type', "text/plain"); + $this->response->setHeader('Content-Transfer-Encoding', "binary"); + $this->response->sendHeaders(); + echo $phoneBook; + } + + private function camelize($inputString){ + $inputString = preg_replace('/\s+/', '-', $inputString); + $inputString = Transliterate::ruToLat($inputString); + $inputString = preg_replace('/[^A-Za-z0-9-]/u', '', $inputString); + return Text::camelize($inputString); + } + /** */ public function getConfig(): void diff --git a/Lib/Transliterate.php b/Lib/Transliterate.php new file mode 100644 index 0000000..0d939e5 --- /dev/null +++ b/Lib/Transliterate.php @@ -0,0 +1,115 @@ +. + */ + +namespace Modules\ModuleAutoprovision\Lib; + +class Transliterate +{ + /** @const array */ + private const CYRILLIC_TO_ENGLISH_RULES = [ + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'е' => 'e', + 'ё' => 'e', + 'ж' => 'zh', + 'з' => 'z', + 'и' => 'i', + 'й' => 'y', + 'к' => 'k', + 'л' => 'l', + 'м' => 'm', + 'н' => 'n', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'ts', + 'ч' => 'ch', + 'ш' => 'sh', + 'щ' => 'sht', + 'ь' => '', + 'ы' => 'y', + 'ъ' => '', + 'э' => 'e', + 'ю' => 'yu', + 'я' => 'ya', + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Е' => 'E', + 'Ж' => 'Zh', + 'З' => 'Z', + 'И' => 'I', + 'Й' => 'Y', + 'К' => 'K', + 'Л' => 'L', + 'М' => 'M', + 'Н' => 'N', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'Ts', + 'Ч' => 'Ch', + 'Ш' => 'Sh', + 'Щ' => 'Sht', + 'Ь' => '', + 'Ы' => 'Y', + 'Ъ' => '', + 'Э' => 'E', + 'Ю' => 'Yu', + 'Я' => 'Ya', + "'" => '', + 'Ї' => 'Yi', // Some ukranian + 'ї' => 'i', // Some ukranian + ]; + + /** + * @param string $russianText + * + * @return string + */ + public static function ruToLat(string $russianText): string + { + $transliteratedText = ''; + + if ('' !== $russianText) { + $transliteratedText = \str_replace( + \array_keys(self::CYRILLIC_TO_ENGLISH_RULES), + \array_values(self::CYRILLIC_TO_ENGLISH_RULES), + $russianText + ); + } + + return $transliteratedText; + } +} \ No newline at end of file diff --git a/Messages/ru.php b/Messages/ru.php index 14addb7..c0677f5 100644 --- a/Messages/ru.php +++ b/Messages/ru.php @@ -17,12 +17,7 @@ * If not, see . */ -/** - * Copyright © MIKO LLC - All Rights Reserved - * Unauthorized copying of this file, via any medium is strictly prohibited - * Proprietary and confidential - * Written by Alexey Portnov, 10 2019 - */ +use Modules\ModuleAutoprovision\Lib\AutoprovisionConf; return [ 'repModuleAutoprovision' => 'Модуль - %repesent%', @@ -34,7 +29,35 @@ 'mod_Autoprovision_mac_black' => 'Черный список MAC адресов телефонов', 'mod_Autoprovision_mac_white' => 'Белый список MAC адресов телефонов', 'mod_Autoprovision_additional_params' => 'Дополнительные параметры', - 'mod_Autoprovision_header' => 'Если модуль включен, то на АТС становится доступна учетная запись SIP "apv-miko-pbx". + 'mod_Autoprovision_phone_settings_title' => 'Настройки телефонов', + 'mod_Autoprovision_phone_templates' => 'Шаблоны настроек', + 'mod_Autoprovision_general_settings' => 'Настройки URI', + 'mod_Autoprovision_pnp' => 'PnP Настройка', + 'mod_Autoprovision_addNew' => 'Добавить', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Шаблон', + 'mod_Autoprovision_phone_settings_user' => 'Сотрудник', + 'mod_Autoprovision_phone_settings_mac' => 'MAC Адрес', + 'mod_Autoprovision_template_name' => 'Наименование', + 'mod_Autoprovision_search_tags' => 'Поиск...', + 'mod_Autoprovision_filter_posts' => '', + 'mod_Autoprovision_edit_template' => 'Редактирование шаблона', + 'mod_Autoprovision_end_edit_template' => 'Завершить редактирование', + 'mod_Autoprovision_other_pbx' => 'Телефонная книга', + 'mod_Autoprovision_other_pbx_name' => 'Наименование АТС', + 'mod_Autoprovision_other_pbx_address' => 'Сетевой адрес АТС', + 'mod_Autoprovision_templates_header' => 'При описании шаблона допускается использовать параметры: {SIP_USER_NAME} - имя сотрудника {SIP_NUM} - внутренний номер (логин) {SIP_PASS} - пароль', + 'mod_Autoprovision_other_pbx_header' => 'Внимание! Телефонная книга должна быть доступна для каждой АТС по URI '.AutoprovisionConf::BASE_URI.'/phonebook
+Перечислите все адреса, АТС, с которых необходимо получить телефонную книгу.
', + + 'mod_Autoprovision_templates_users_header' => 'При описании MAC адреса допускается использовать символ % - означающий "любой набор символов"
+Шаблон 805e0c67% будет соответстовать 805e0c670001 и 805e0c670002', + + 'mod_Autoprovision_templates_uri_header'=> 'Внимание! Все URI строятся относительно базового значения '.AutoprovisionConf::BASE_URI.'
+При описании URI допускается использовать символ % - означающий "любой набор символов"
+URI /%/%/test.cfg будет соответстовать /1/2/test.cfg и /test/test3/test.cfg', + + 'mod_Autoprovision_header' => 'Если модуль включен, то на АТС становится доступна учетная запись SIP "apv-miko-pbx"
Для автоматической настройки телефона необходимо сбросить его к заводским настройками.
Если телефон подключается к АТС впервые, то он будет зарегистрирован на учетной записи "apv-miko-pbx".
Для настройки телефона необходимо с него позвонить на номер "%extension%", где XXX - это внутренний номер на АТС. diff --git a/Models/OtherPBX.php b/Models/OtherPBX.php new file mode 100644 index 0000000..dd8205d --- /dev/null +++ b/Models/OtherPBX.php @@ -0,0 +1,55 @@ +setSource('m_OtherPBX'); + parent::initialize(); + } +} \ No newline at end of file diff --git a/Models/Templates.php b/Models/Templates.php new file mode 100644 index 0000000..3aa6616 --- /dev/null +++ b/Models/Templates.php @@ -0,0 +1,57 @@ +setSource('m_Templates'); + parent::initialize(); + } +} \ No newline at end of file diff --git a/Models/TemplatesUri.php b/Models/TemplatesUri.php new file mode 100644 index 0000000..100c906 --- /dev/null +++ b/Models/TemplatesUri.php @@ -0,0 +1,47 @@ +setSource('m_TemplatesUri'); + parent::initialize(); + } +} \ No newline at end of file diff --git a/Models/TemplatesUsers.php b/Models/TemplatesUsers.php new file mode 100644 index 0000000..efb814f --- /dev/null +++ b/Models/TemplatesUsers.php @@ -0,0 +1,53 @@ +setSource('m_TemplatesUsers'); + parent::initialize(); + } +} \ No newline at end of file diff --git a/public/assets/js/module-autoprovision-index.js b/public/assets/js/module-autoprovision-index.js index cec4a97..9f18751 100644 --- a/public/assets/js/module-autoprovision-index.js +++ b/public/assets/js/module-autoprovision-index.js @@ -1,5 +1,11 @@ "use strict"; +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + /* * Copyright © MIKO LLC - All Rights Reserved * Unauthorized copying of this file, via any medium is strictly prohibited @@ -8,74 +14,228 @@ */ /* global globalRootUrl,Config, Form */ +var idUrl = 'module-autoprovision'; var moduleAutoprovision = { $formObj: $('#module-autoprovision-form'), - initialize: function () { - function initialize() { - // Динамическая проверка свободен ли внутренний номер - moduleAutoprovision.initializeForm(); - } + initialize: function initialize() { + // Динамическая проверка свободен ли внутренний номер + moduleAutoprovision.initializeForm(); + moduleAutoprovision.initInputElements(); + var body = $('body'); + body.on('click', '#add-new-template-button', function (e) { + var id = 'none_' + Date.now(); + var newRow = $('').attr('id', id); + var data = $('#templates #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#templates tbody').append(newRow); // Новые элементы нужно инициализировать на форме + + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + body.on('click', '#add-new-phone_settings-button', function (e) { + var id = 'none_' + Date.now(); + var newRow = $('').attr('id', id); + var data = $('#phone_settings #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#phone_settings tbody').append(newRow); // Новые элементы нужно инициализировать на форме + + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + body.on('click', '#add-new-templates_uri-button', function (e) { + var id = 'none_' + Date.now(); + var newRow = $('').attr('id', id); + var data = $('#templates_uri #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#templates_uri tbody').append(newRow); // Новые элементы нужно инициализировать на форме - return initialize; - }(), + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + body.on('click', '#add-new-other_pbx-button', function (e) { + var id = 'none_' + Date.now(); + var newRow = $('').attr('id', id); + var data = $('#other_pbx #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#other_pbx tbody').append(newRow); // Новые элементы нужно инициализировать на форме + + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + }, + initInputElements: function initInputElements() { + $('.menu .item').tab(); + $('div.dropdown').dropdown(); + $('input, textarea').change(function () { + $(this).attr('value', $(this).val()); + }); + }, /** * Применение настроек модуля после изменения данных формы */ - applyConfigurationChanges: function () { - function applyConfigurationChanges() { - $.api({ - url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleAutoprovision/reload"), - on: 'now', - successTest: function () { - function successTest(response) { - // test whether a JSON response is valid - return Object.keys(response).length > 0 && response.result === true; - } - - return successTest; - }(), - onSuccess: function () { - function onSuccess() {// moduleAutoprovision.testConnection(); - } - - return onSuccess; - }() - }); + applyConfigurationChanges: function applyConfigurationChanges() { + $.api({ + url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleAutoprovision/reload"), + on: 'now', + successTest: function successTest(response) { + return Object.keys(response).length > 0 && response.result === true; + }, + onSuccess: function onSuccess() {// moduleAutoprovision.testConnection(); + } + }); + }, + cbBeforeSendForm: function cbBeforeSendForm(settings) { + var result = settings; + result.data = moduleAutoprovision.$formObj.form('get values'); + return result; + }, + cbAfterSendForm: function cbAfterSendForm(response) { + for (var table in response.resultSaveTables) { + for (var key in response.resultSaveTables[table]) { + var syncTr = $("#".concat(table, " tr#").concat(key)); + var html = syncTr.html(); + syncTr.html(html.replace(new RegExp(key, "g"), response.resultSaveTables[table][key])); + syncTr.attr('id', response.resultSaveTables[table][key]); + $(".ui.modal[data-id=\"".concat(key, "\"][data-id-table=\"").concat(table, "\"]")).attr('data-id', response.resultSaveTables[table][key]); + } } - return applyConfigurationChanges; - }(), - cbBeforeSendForm: function () { - function cbBeforeSendForm(settings) { - var result = settings; - result.data = moduleAutoprovision.$formObj.form('get values'); - return result; + var templates = []; + $('#templates td[data-label="name"]').each(function (index, item) { + templates.push({ + id: $(item).parent().attr('id'), + name: $(item).find('input').val() + }); + }); + $('td[data-label="template"] div.scrolling.menu').each(function (index, item) { + $(item).empty(); + + var _iterator = _createForOfIteratorHelper(templates), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var element = _step.value; + var newRow = $('
').attr('data-value', element.id).attr('class', 'item').text(element.name); + $(item).append(newRow); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + }); + moduleAutoprovision.initInputElements(); + moduleAutoprovision.applyConfigurationChanges(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }, + initializeForm: function initializeForm() { + Form.$formObj = moduleAutoprovision.$formObj; + Form.url = "".concat(globalRootUrl, "module-autoprovision/save"); + Form.cbBeforeSendForm = moduleAutoprovision.cbBeforeSendForm; + Form.cbAfterSendForm = moduleAutoprovision.cbAfterSendForm; + Form.initialize(); + }, + showTemplateOptions: function showTemplateOptions(id) { + $('.ui.modal[data-id="' + id + '"][data-id-table="templates"]').modal({ + closable: true, + onApprove: function onApprove() { + var value = $(this).find("textarea").val(); + var resEl = $('textarea[name="templates-template-' + $(this).attr('data-id') + '"]'); + resEl.val(value); + Form.checkValues(); + return true; + } + }).modal('show'); + }, + removeTemplate: function removeTemplate(id, button) { + if (!$(button).find('i').hasClass('close')) { + return; } - return cbBeforeSendForm; - }(), - cbAfterSendForm: function () { - function cbAfterSendForm() { - moduleAutoprovision.applyConfigurationChanges(); + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'Templates', + id: id + }, + success: function success(response) { + $('#templates tr[id="' + id + '"]').remove(); + }, + error: function error(xhr, status, _error) { + console.debug("Ошибка запроса", status, _error); + } + }); + }, + removeUserTemplate: function removeUserTemplate(id, button) { + if (!$(button).find('i').hasClass('close')) { + return; } - return cbAfterSendForm; - }(), - initializeForm: function () { - function initializeForm() { - Form.$formObj = moduleAutoprovision.$formObj; - Form.url = "".concat(globalRootUrl, "module-autoprovision/save"); // Form.validateRules = moduleAutoprovision.validateRules; + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'TemplatesUsers', + id: id + }, + success: function success(response) { + $('#phone_settings tr[id="' + id + '"]').remove(); + }, + error: function error(xhr, status, _error2) { + console.debug("Ошибка запроса", status, _error2); + } + }); + }, + removeUriTemplate: function removeUriTemplate(id, button) { + if (!$(button).find('i').hasClass('close')) { + return; + } - Form.cbBeforeSendForm = moduleAutoprovision.cbBeforeSendForm; - Form.cbAfterSendForm = moduleAutoprovision.cbAfterSendForm; - Form.initialize(); + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'TemplatesUri', + id: id + }, + success: function success(response) { + $('#templates_uri tr[id="' + id + '"]').remove(); + }, + error: function error(xhr, status, _error3) { + console.debug("Ошибка запроса", status, _error3); + } + }); + }, + removePbxRow: function removePbxRow(id, button) { + if (!$(button).find('i').hasClass('close')) { + return; } - return initializeForm; - }() + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'OtherPBX', + id: id + }, + success: function success(response) { + $('#other_pbx tr[id="' + id + '"]').remove(); + }, + error: function error(xhr, status, _error4) { + console.debug("Ошибка запроса", status, _error4); + } + }); + } }; $(document).ready(function () { moduleAutoprovision.initialize(); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2R1bGUtYXV0b3Byb3Zpc2lvbi1pbmRleC5qcyJdLCJuYW1lcyI6WyJtb2R1bGVBdXRvcHJvdmlzaW9uIiwiJGZvcm1PYmoiLCIkIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVGb3JtIiwiYXBwbHlDb25maWd1cmF0aW9uQ2hhbmdlcyIsImFwaSIsInVybCIsIkNvbmZpZyIsInBieFVybCIsIm9uIiwic3VjY2Vzc1Rlc3QiLCJyZXNwb25zZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJyZXN1bHQiLCJvblN1Y2Nlc3MiLCJjYkJlZm9yZVNlbmRGb3JtIiwic2V0dGluZ3MiLCJkYXRhIiwiZm9ybSIsImNiQWZ0ZXJTZW5kRm9ybSIsIkZvcm0iLCJnbG9iYWxSb290VXJsIiwiZG9jdW1lbnQiLCJyZWFkeSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7OztBQU1BO0FBRUEsSUFBTUEsbUJBQW1CLEdBQUc7QUFDM0JDLEVBQUFBLFFBQVEsRUFBRUMsQ0FBQyxDQUFDLDRCQUFELENBRGdCO0FBRTNCQyxFQUFBQSxVQUYyQjtBQUFBLDBCQUVkO0FBQ1o7QUFDQUgsTUFBQUEsbUJBQW1CLENBQUNJLGNBQXBCO0FBQ0E7O0FBTDBCO0FBQUE7O0FBTzNCOzs7QUFHQUMsRUFBQUEseUJBVjJCO0FBQUEseUNBVUM7QUFDM0JILE1BQUFBLENBQUMsQ0FBQ0ksR0FBRixDQUFNO0FBQ0xDLFFBQUFBLEdBQUcsWUFBS0MsTUFBTSxDQUFDQyxNQUFaLG9EQURFO0FBRUxDLFFBQUFBLEVBQUUsRUFBRSxLQUZDO0FBR0xDLFFBQUFBLFdBSEs7QUFBQSwrQkFHT0MsUUFIUCxFQUdpQjtBQUNyQjtBQUNBLG1CQUFPQyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsUUFBWixFQUFzQkcsTUFBdEIsR0FBK0IsQ0FBL0IsSUFBb0NILFFBQVEsQ0FBQ0ksTUFBVCxLQUFvQixJQUEvRDtBQUNBOztBQU5JO0FBQUE7QUFPTEMsUUFBQUEsU0FQSztBQUFBLCtCQU9PLENBQ1g7QUFDQTs7QUFUSTtBQUFBO0FBQUEsT0FBTjtBQVdBOztBQXRCMEI7QUFBQTtBQXVCM0JDLEVBQUFBLGdCQXZCMkI7QUFBQSw4QkF1QlZDLFFBdkJVLEVBdUJBO0FBQzFCLFVBQU1ILE1BQU0sR0FBR0csUUFBZjtBQUNBSCxNQUFBQSxNQUFNLENBQUNJLElBQVAsR0FBY3BCLG1CQUFtQixDQUFDQyxRQUFwQixDQUE2Qm9CLElBQTdCLENBQWtDLFlBQWxDLENBQWQ7QUFDQSxhQUFPTCxNQUFQO0FBQ0E7O0FBM0IwQjtBQUFBO0FBNEIzQk0sRUFBQUEsZUE1QjJCO0FBQUEsK0JBNEJUO0FBQ2pCdEIsTUFBQUEsbUJBQW1CLENBQUNLLHlCQUFwQjtBQUNBOztBQTlCMEI7QUFBQTtBQStCM0JELEVBQUFBLGNBL0IyQjtBQUFBLDhCQStCVjtBQUNoQm1CLE1BQUFBLElBQUksQ0FBQ3RCLFFBQUwsR0FBZ0JELG1CQUFtQixDQUFDQyxRQUFwQztBQUNBc0IsTUFBQUEsSUFBSSxDQUFDaEIsR0FBTCxhQUFjaUIsYUFBZCwrQkFGZ0IsQ0FHaEI7O0FBQ0FELE1BQUFBLElBQUksQ0FBQ0wsZ0JBQUwsR0FBd0JsQixtQkFBbUIsQ0FBQ2tCLGdCQUE1QztBQUNBSyxNQUFBQSxJQUFJLENBQUNELGVBQUwsR0FBdUJ0QixtQkFBbUIsQ0FBQ3NCLGVBQTNDO0FBQ0FDLE1BQUFBLElBQUksQ0FBQ3BCLFVBQUw7QUFDQTs7QUF0QzBCO0FBQUE7QUFBQSxDQUE1QjtBQTBDQUQsQ0FBQyxDQUFDdUIsUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBTTtBQUN2QjFCLEVBQUFBLG1CQUFtQixDQUFDRyxVQUFwQjtBQUNBLENBRkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IMKpIE1JS08gTExDIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICogVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkXG4gKiBQcm9wcmlldGFyeSBhbmQgY29uZmlkZW50aWFsXG4gKiBXcml0dGVuIGJ5IEFsZXhleSBQb3J0bm92LCAxMiAyMDE4XG4gKi9cbi8qIGdsb2JhbCBnbG9iYWxSb290VXJsLENvbmZpZywgRm9ybSAqL1xuXG5jb25zdCBtb2R1bGVBdXRvcHJvdmlzaW9uID0ge1xuXHQkZm9ybU9iajogJCgnI21vZHVsZS1hdXRvcHJvdmlzaW9uLWZvcm0nKSxcblx0aW5pdGlhbGl6ZSgpIHtcblx0XHQvLyDQlNC40L3QsNC80LjRh9C10YHQutCw0Y8g0L/RgNC+0LLQtdGA0LrQsCDRgdCy0L7QsdC+0LTQtdC9INC70Lgg0LLQvdGD0YLRgNC10L3QvdC40Lkg0L3QvtC80LXRgFxuXHRcdG1vZHVsZUF1dG9wcm92aXNpb24uaW5pdGlhbGl6ZUZvcm0oKTtcblx0fSxcblxuXHQvKipcbiAgICAgKiDQn9GA0LjQvNC10L3QtdC90LjQtSDQvdCw0YHRgtGA0L7QtdC6INC80L7QtNGD0LvRjyDQv9C+0YHQu9C1INC40LfQvNC10L3QtdC90LjRjyDQtNCw0L3QvdGL0YUg0YTQvtGA0LzRi1xuICAgICAqL1xuXHRhcHBseUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCkge1xuXHRcdCQuYXBpKHtcblx0XHRcdHVybDogYCR7Q29uZmlnLnBieFVybH0vcGJ4Y29yZS9hcGkvbW9kdWxlcy9Nb2R1bGVBdXRvcHJvdmlzaW9uL3JlbG9hZGAsXG5cdFx0XHRvbjogJ25vdycsXG5cdFx0XHRzdWNjZXNzVGVzdChyZXNwb25zZSkge1xuXHRcdFx0XHQvLyB0ZXN0IHdoZXRoZXIgYSBKU09OIHJlc3BvbnNlIGlzIHZhbGlkXG5cdFx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhyZXNwb25zZSkubGVuZ3RoID4gMCAmJiByZXNwb25zZS5yZXN1bHQgPT09IHRydWU7XG5cdFx0XHR9LFxuXHRcdFx0b25TdWNjZXNzKCkge1xuXHRcdFx0XHQvLyBtb2R1bGVBdXRvcHJvdmlzaW9uLnRlc3RDb25uZWN0aW9uKCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9LFxuXHRjYkJlZm9yZVNlbmRGb3JtKHNldHRpbmdzKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gc2V0dGluZ3M7XG5cdFx0cmVzdWx0LmRhdGEgPSBtb2R1bGVBdXRvcHJvdmlzaW9uLiRmb3JtT2JqLmZvcm0oJ2dldCB2YWx1ZXMnKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXHRjYkFmdGVyU2VuZEZvcm0oKSB7XG5cdFx0bW9kdWxlQXV0b3Byb3Zpc2lvbi5hcHBseUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCk7XG5cdH0sXG5cdGluaXRpYWxpemVGb3JtKCkge1xuXHRcdEZvcm0uJGZvcm1PYmogPSBtb2R1bGVBdXRvcHJvdmlzaW9uLiRmb3JtT2JqO1xuXHRcdEZvcm0udXJsID0gYCR7Z2xvYmFsUm9vdFVybH1tb2R1bGUtYXV0b3Byb3Zpc2lvbi9zYXZlYDtcblx0XHQvLyBGb3JtLnZhbGlkYXRlUnVsZXMgPSBtb2R1bGVBdXRvcHJvdmlzaW9uLnZhbGlkYXRlUnVsZXM7XG5cdFx0Rm9ybS5jYkJlZm9yZVNlbmRGb3JtID0gbW9kdWxlQXV0b3Byb3Zpc2lvbi5jYkJlZm9yZVNlbmRGb3JtO1xuXHRcdEZvcm0uY2JBZnRlclNlbmRGb3JtID0gbW9kdWxlQXV0b3Byb3Zpc2lvbi5jYkFmdGVyU2VuZEZvcm07XG5cdFx0Rm9ybS5pbml0aWFsaXplKCk7XG5cdH0sXG59O1xuXG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcblx0bW9kdWxlQXV0b3Byb3Zpc2lvbi5pbml0aWFsaXplKCk7XG59KTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=module-autoprovision-index.js.map \ No newline at end of file diff --git a/public/assets/js/module-autoprovision-index.js.map b/public/assets/js/module-autoprovision-index.js.map new file mode 100644 index 0000000..65dd0b7 --- /dev/null +++ b/public/assets/js/module-autoprovision-index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/module-autoprovision-index.js"],"names":["idUrl","moduleAutoprovision","$formObj","$","initialize","initializeForm","initInputElements","body","on","e","id","Date","now","newRow","attr","data","html","replace","append","form","Form","setEvents","tab","dropdown","change","val","applyConfigurationChanges","api","url","Config","pbxUrl","successTest","response","Object","keys","length","result","onSuccess","cbBeforeSendForm","settings","cbAfterSendForm","table","resultSaveTables","key","syncTr","RegExp","templates","each","index","item","push","parent","name","find","empty","element","text","globalRootUrl","showTemplateOptions","modal","closable","onApprove","value","resEl","checkValues","removeTemplate","button","hasClass","ajax","type","success","remove","error","xhr","status","console","debug","removeUserTemplate","removeUriTemplate","removePbxRow","document","ready"],"mappings":"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","sourcesContent":["/*\n * Copyright © MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Alexey Portnov, 12 2018\n */\n/* global globalRootUrl,Config, Form */\nconst idUrl = 'module-autoprovision';\nconst moduleAutoprovision = {\n\t$formObj: $('#module-autoprovision-form'),\n\tinitialize() {\n\t\t// Динамическая проверка свободен ли внутренний номер\n\t\tmoduleAutoprovision.initializeForm();\n\t\tmoduleAutoprovision.initInputElements();\n\n\t\tlet body = $('body');\n\t\tbody.on('click', '#add-new-template-button', function (e) {\n\t\t\tlet id = 'none_'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet data =$('#templates #emptyTemplateRow').html();\n\t\t\tnewRow.html(data.replace(/emptyTemplateRow/g, id));\n\t\t\t$('#templates tbody').append(newRow);\n\t\t\t// Новые элементы нужно инициализировать на форме\n\t\t\tmoduleAutoprovision.initInputElements();\n\t\t\tmoduleAutoprovision.$formObj.form();\n\t\t\tForm.setEvents();\n\t\t});\n\n\t\tbody.on('click', '#add-new-phone_settings-button', function (e) {\n\t\t\tlet id = 'none_'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet data =$('#phone_settings #emptyTemplateRow').html();\n\t\t\tnewRow.html(data.replace(/emptyTemplateRow/g, id));\n\t\t\t$('#phone_settings tbody').append(newRow);\n\t\t\t// Новые элементы нужно инициализировать на форме\n\t\t\tmoduleAutoprovision.initInputElements();\n\t\t\tmoduleAutoprovision.$formObj.form();\n\t\t\tForm.setEvents();\n\t\t});\t\t\n\t\tbody.on('click', '#add-new-templates_uri-button', function (e) {\n\t\t\tlet id = 'none_'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet data =$('#templates_uri #emptyTemplateRow').html();\n\t\t\tnewRow.html(data.replace(/emptyTemplateRow/g, id));\n\t\t\t$('#templates_uri tbody').append(newRow);\n\t\t\t// Новые элементы нужно инициализировать на форме\n\t\t\tmoduleAutoprovision.initInputElements();\n\t\t\tmoduleAutoprovision.$formObj.form();\n\t\t\tForm.setEvents();\n\t\t});\n\t\tbody.on('click', '#add-new-other_pbx-button', function (e) {\n\t\t\tlet id = 'none_'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet data =$('#other_pbx #emptyTemplateRow').html();\n\t\t\tnewRow.html(data.replace(/emptyTemplateRow/g, id));\n\t\t\t$('#other_pbx tbody').append(newRow);\n\t\t\t// Новые элементы нужно инициализировать на форме\n\t\t\tmoduleAutoprovision.initInputElements();\n\t\t\tmoduleAutoprovision.$formObj.form();\n\t\t\tForm.setEvents();\n\t\t});\n\t},\n\tinitInputElements(){\n\t\t$('.menu .item').tab();\n\t\t$('div.dropdown').dropdown();\n\t\t$('input, textarea').change(function() {\n\t\t\t$(this).attr('value', $(this).val());\n\t\t});\n\t},\n\n\t/**\n * Применение настроек модуля после изменения данных формы\n */\n\tapplyConfigurationChanges() {\n\t\t$.api({\n\t\t\turl: `${Config.pbxUrl}/pbxcore/api/modules/ModuleAutoprovision/reload`,\n\t\t\ton: 'now',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn Object.keys(response).length > 0 && response.result === true;\n\t\t\t},\n\t\t\tonSuccess() {\n\t\t\t\t// moduleAutoprovision.testConnection();\n\t\t\t},\n\t\t});\n\t},\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = moduleAutoprovision.$formObj.form('get values');\n\t\treturn result;\n\t},\n\tcbAfterSendForm(response) {\n\t\tfor (let table in response.resultSaveTables) {\n\t\t\tfor (let key in response.resultSaveTables[table]) {\n\t\t\t\tlet syncTr = $(`#${table} tr#${key}`);\n\t\t\t\tlet html = syncTr.html();\n\t\t\t\tsyncTr.html(html.replace((new RegExp(key, \"g\")), response.resultSaveTables[table][key]));\n\t\t\t\tsyncTr.attr('id', response.resultSaveTables[table][key]);\n\t\t\t\t$(`.ui.modal[data-id=\"${key}\"][data-id-table=\"${table}\"]`).attr('data-id', response.resultSaveTables[table][key]);\n\t\t\t}\n\t\t}\n\t\tlet templates = [];\n\t\t$('#templates td[data-label=\"name\"]').each(function(index, item) {\n\t\t\ttemplates.push({\n\t\t\t\tid: $(item).parent().attr('id'),\n\t\t\t\tname: $(item).find('input').val()\n\t\t\t});\n\t\t});\n\t\t$('td[data-label=\"template\"] div.scrolling.menu').each(function(index, item) {\n\t\t\t$(item).empty();\n\t\t\tfor (let element of templates) {\n\t\t\t\tlet newRow \t= $('
')\n\t\t\t\t\t.attr('data-value', element.id)\n\t\t\t\t\t.attr('class', 'item')\n\t\t\t\t\t.text(element.name)\n\t\t\t\t;\n\t\t\t\t$(item).append(newRow);\n\t\t\t}\n\t\t});\n\t\tmoduleAutoprovision.initInputElements();\n\t\tmoduleAutoprovision.applyConfigurationChanges();\n\t\tmoduleAutoprovision.$formObj.form();\n\t\tForm.setEvents();\n\t},\n\tinitializeForm() {\n\t\tForm.$formObj = moduleAutoprovision.$formObj;\n\t\tForm.url = `${globalRootUrl}module-autoprovision/save`;\n\t\tForm.cbBeforeSendForm = moduleAutoprovision.cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = moduleAutoprovision.cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n\n\tshowTemplateOptions(id){\n\t\t$('.ui.modal[data-id=\"'+id+'\"][data-id-table=\"templates\"]').modal({\n\t\t\tclosable : true,\n\t\t\tonApprove : function(){\n\t\t\t\tlet value = $(this).find(\"textarea\").val();\n\t\t\t\tlet resEl = $('textarea[name=\"templates-template-'+$(this).attr('data-id')+'\"]');\n\t\t\t\tresEl.val(value);\n\t\t\t\tForm.checkValues()\n\t\t\t\treturn true;\n\t\t\t},\n\t\t}).modal('show');\n\t},\n\tremoveTemplate(id, button){\n\t\tif(!$(button).find('i').hasClass('close')){\n\t\t\treturn;\n\t\t}\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'Templates',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\t$('#templates tr[id=\"'+id+'\"]').remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.debug(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\tremoveUserTemplate(id, button){\n\t\tif(!$(button).find('i').hasClass('close')){\n\t\t\treturn;\n\t\t}\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'TemplatesUsers',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\t$('#phone_settings tr[id=\"'+id+'\"]').remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.debug(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\tremoveUriTemplate(id, button){\n\t\tif(!$(button).find('i').hasClass('close')){\n\t\t\treturn;\n\t\t}\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'TemplatesUri',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\t$('#templates_uri tr[id=\"'+id+'\"]').remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.debug(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\tremovePbxRow(id, button){\n\t\tif(!$(button).find('i').hasClass('close')){\n\t\t\treturn;\n\t\t}\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'OtherPBX',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\t$('#other_pbx tr[id=\"'+id+'\"]').remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.debug(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\n};\n\n\n$(document).ready(() => {\n\tmoduleAutoprovision.initialize();\n});\n"],"file":"module-autoprovision-index.js"} \ No newline at end of file diff --git a/public/assets/js/src/module-autoprovision-index.js b/public/assets/js/src/module-autoprovision-index.js index 0d79b79..3907c5d 100644 --- a/public/assets/js/src/module-autoprovision-index.js +++ b/public/assets/js/src/module-autoprovision-index.js @@ -5,12 +5,67 @@ * Written by Alexey Portnov, 12 2018 */ /* global globalRootUrl,Config, Form */ - +const idUrl = 'module-autoprovision'; const moduleAutoprovision = { $formObj: $('#module-autoprovision-form'), initialize() { // Динамическая проверка свободен ли внутренний номер moduleAutoprovision.initializeForm(); + moduleAutoprovision.initInputElements(); + + let body = $('body'); + body.on('click', '#add-new-template-button', function (e) { + let id = 'none_'+Date.now(); + let newRow = $('').attr('id', id); + let data =$('#templates #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#templates tbody').append(newRow); + // Новые элементы нужно инициализировать на форме + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + + body.on('click', '#add-new-phone_settings-button', function (e) { + let id = 'none_'+Date.now(); + let newRow = $('').attr('id', id); + let data =$('#phone_settings #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#phone_settings tbody').append(newRow); + // Новые элементы нужно инициализировать на форме + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + body.on('click', '#add-new-templates_uri-button', function (e) { + let id = 'none_'+Date.now(); + let newRow = $('').attr('id', id); + let data =$('#templates_uri #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#templates_uri tbody').append(newRow); + // Новые элементы нужно инициализировать на форме + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + body.on('click', '#add-new-other_pbx-button', function (e) { + let id = 'none_'+Date.now(); + let newRow = $('').attr('id', id); + let data =$('#other_pbx #emptyTemplateRow').html(); + newRow.html(data.replace(/emptyTemplateRow/g, id)); + $('#other_pbx tbody').append(newRow); + // Новые элементы нужно инициализировать на форме + moduleAutoprovision.initInputElements(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); + }); + }, + initInputElements(){ + $('.menu .item').tab(); + $('div.dropdown').dropdown(); + $('input, textarea').change(function() { + $(this).attr('value', $(this).val()); + }); }, /** @@ -21,7 +76,6 @@ const moduleAutoprovision = { url: `${Config.pbxUrl}/pbxcore/api/modules/ModuleAutoprovision/reload`, on: 'now', successTest(response) { - // test whether a JSON response is valid return Object.keys(response).length > 0 && response.result === true; }, onSuccess() { @@ -34,17 +88,136 @@ const moduleAutoprovision = { result.data = moduleAutoprovision.$formObj.form('get values'); return result; }, - cbAfterSendForm() { + cbAfterSendForm(response) { + for (let table in response.resultSaveTables) { + for (let key in response.resultSaveTables[table]) { + let syncTr = $(`#${table} tr#${key}`); + let html = syncTr.html(); + syncTr.html(html.replace((new RegExp(key, "g")), response.resultSaveTables[table][key])); + syncTr.attr('id', response.resultSaveTables[table][key]); + $(`.ui.modal[data-id="${key}"][data-id-table="${table}"]`).attr('data-id', response.resultSaveTables[table][key]); + } + } + let templates = []; + $('#templates td[data-label="name"]').each(function(index, item) { + templates.push({ + id: $(item).parent().attr('id'), + name: $(item).find('input').val() + }); + }); + $('td[data-label="template"] div.scrolling.menu').each(function(index, item) { + $(item).empty(); + for (let element of templates) { + let newRow = $('
') + .attr('data-value', element.id) + .attr('class', 'item') + .text(element.name) + ; + $(item).append(newRow); + } + }); + moduleAutoprovision.initInputElements(); moduleAutoprovision.applyConfigurationChanges(); + moduleAutoprovision.$formObj.form(); + Form.setEvents(); }, initializeForm() { Form.$formObj = moduleAutoprovision.$formObj; Form.url = `${globalRootUrl}module-autoprovision/save`; - // Form.validateRules = moduleAutoprovision.validateRules; Form.cbBeforeSendForm = moduleAutoprovision.cbBeforeSendForm; Form.cbAfterSendForm = moduleAutoprovision.cbAfterSendForm; Form.initialize(); }, + + showTemplateOptions(id){ + $('.ui.modal[data-id="'+id+'"][data-id-table="templates"]').modal({ + closable : true, + onApprove : function(){ + let value = $(this).find("textarea").val(); + let resEl = $('textarea[name="templates-template-'+$(this).attr('data-id')+'"]'); + resEl.val(value); + Form.checkValues() + return true; + }, + }).modal('show'); + }, + removeTemplate(id, button){ + if(!$(button).find('i').hasClass('close')){ + return; + } + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'Templates', + id: id + }, + success: function(response) { + $('#templates tr[id="'+id+'"]').remove(); + }, + error: function(xhr, status, error) { + console.debug("Ошибка запроса", status, error); + } + }); + }, + removeUserTemplate(id, button){ + if(!$(button).find('i').hasClass('close')){ + return; + } + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'TemplatesUsers', + id: id + }, + success: function(response) { + $('#phone_settings tr[id="'+id+'"]').remove(); + }, + error: function(xhr, status, error) { + console.debug("Ошибка запроса", status, error); + } + }); + }, + removeUriTemplate(id, button){ + if(!$(button).find('i').hasClass('close')){ + return; + } + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'TemplatesUri', + id: id + }, + success: function(response) { + $('#templates_uri tr[id="'+id+'"]').remove(); + }, + error: function(xhr, status, error) { + console.debug("Ошибка запроса", status, error); + } + }); + }, + removePbxRow(id, button){ + if(!$(button).find('i').hasClass('close')){ + return; + } + $.ajax({ + type: "POST", + url: globalRootUrl + idUrl + "/delete", + data: { + table: 'OtherPBX', + id: id + }, + success: function(response) { + $('#other_pbx tr[id="'+id+'"]').remove(); + }, + error: function(xhr, status, error) { + console.debug("Ошибка запроса", status, error); + } + }); + }, + }; From 8aa5699ca91f4131a3d477d0d38701c598da2144 Mon Sep 17 00:00:00 2001 From: apor Date: Fri, 15 Dec 2023 15:13:48 +0300 Subject: [PATCH 03/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83,=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=20=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=B3=D1=80=D1=83=D0=BF?= =?UTF-8?q?=D0=BF=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 20cfa2c..9e29aaf 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -10,6 +10,7 @@ use MikoPBX\Common\Models\Extensions; use MikoPBX\Common\Models\Sip; use MikoPBX\Core\System\Network; +use MikoPBX\Modules\PbxExtensionUtils; use MikoPBX\PBXCoreREST\Controllers\Modules\ModulesControllerBase; use Modules\ModuleAutoprovision\Lib\Transliterate; use Modules\ModuleAutoprovision\Models\OtherPBX; @@ -181,7 +182,8 @@ private function echoPhoneBook($uri):void $bookUsers = []; $tmpPhoneBookArray = [$nameBook=> '']; - if(class_exists('\Modules\ModuleUsersGroups\Models\UsersGroups')){ + if(class_exists('\Modules\ModuleUsersGroups\Models\UsersGroups') + && PbxExtensionUtils::isEnabled('ModuleUsersGroups')){ $manager = $this->di->get('modelsManager'); $parameters = [ 'models' => [ From fcf63d2c508cd7c3b4c028f0046af6356a7d3075 Mon Sep 17 00:00:00 2001 From: apor Date: Fri, 15 Dec 2023 15:22:29 +0300 Subject: [PATCH 04/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 9e29aaf..9df0f3f 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -217,6 +217,9 @@ private function echoPhoneBook($uri):void $tmpPhoneBookArray[$book].= "\t".''.PHP_EOL; } foreach ($tmpPhoneBookArray as $key => $value){ + if(empty($value)){ + continue; + } $phoneBook.= "<{$key}IPPhoneDirectory>".PHP_EOL; $phoneBook.= $value; $phoneBook.= "".PHP_EOL; From 795a34cb1489a87834e19e4168ce87960db0615b Mon Sep 17 00:00:00 2001 From: apor Date: Fri, 15 Dec 2023 22:57:34 +0300 Subject: [PATCH 05/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 9df0f3f..5c31196 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -151,9 +151,10 @@ public function getConfigStatic(...$args):void private function echoPhoneBook($uri):void { - $phoneBook = ''; + $phoneBook = ""; $nameBook = $_REQUEST['name']??''; if(empty($nameBook)){ + $phoneBook.= "".PHP_EOL; ['hostname' => $nameBook] = Network::getHostName(); $otherPbx = OtherPBX::find()->toArray(); $client = new Client(); From 3f326697695c7946438416c28b602877776ff92c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:13 +0000 Subject: [PATCH 06/51] Translated using Weblate (Czech) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/cs/ --- Messages/cs.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/cs.php b/Messages/cs.php index aec06b1..6eb618e 100644 --- a/Messages/cs.php +++ b/Messages/cs.php @@ -21,4 +21,23 @@
Pro konfiguraci telefonu z něj musíte zavolat na "%extension%", kde XXX je interní číslo ústředny.

Automatická konfigurace je možná pouze pro lokální síť podniku, pro telefony Yealink, Snom, Fanvil.', + 'mod_Autoprovision_templates_users_header' => 'Při popisu MAC adresy je povoleno používat symbol % – což znamená „jakákoli sada znaků“
+Šablona 805e0c67 % bude odpovídat 805e0c670001 a 805e0c670002', + 'mod_Autoprovision_phone_settings_title' => 'Nastavení telefonu', + 'mod_Autoprovision_phone_templates' => 'Šablony nastavení', + 'mod_Autoprovision_general_settings' => 'Nastavení URI', + 'mod_Autoprovision_pnp' => 'Nastavení PnP', + 'mod_Autoprovision_addNew' => 'Přidat', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Vzorek', + 'mod_Autoprovision_phone_settings_user' => 'Zaměstnanec', + 'mod_Autoprovision_phone_settings_mac' => 'MAC adresa', + 'mod_Autoprovision_template_name' => 'název', + 'mod_Autoprovision_search_tags' => 'Vyhledávání...', + 'mod_Autoprovision_edit_template' => 'Úprava šablony', + 'mod_Autoprovision_end_edit_template' => 'Dokončete úpravy', + 'mod_Autoprovision_other_pbx' => 'Telefonní seznam', + 'mod_Autoprovision_other_pbx_name' => 'Název telefonní ústředny', + 'mod_Autoprovision_other_pbx_address' => 'Síťová adresa PBX', + 'mod_Autoprovision_templates_header' => 'Při popisu šablony můžete použít následující parametry: {SIP_USER_NAME} - jméno zaměstnance {SIP_NUM} - interní číslo (login) {SIP_PASS} - heslo', ]; From 4b92716fae0a24c5cf34872e0d5df5b87ae52a3b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:08 +0000 Subject: [PATCH 07/51] Translated using Weblate (Danish) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/da/ --- Messages/da.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/da.php b/Messages/da.php index d1563a1..5cac8f5 100644 --- a/Messages/da.php +++ b/Messages/da.php @@ -21,4 +21,23 @@
For at konfigurere telefonen skal du ringe til "%extension%" fra den, hvor XXX er det interne nummer på PBX\'en.

Autokonfiguration er kun mulig for virksomhedens lokale netværk, for telefoner Yealink, Snom, Fanvil.', + 'mod_Autoprovision_pnp' => 'PnP-indstillinger', + 'mod_Autoprovision_addNew' => 'Tilføje', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Prøve', + 'mod_Autoprovision_phone_settings_user' => 'Medarbejder', + 'mod_Autoprovision_phone_settings_mac' => 'Mac-adresse', + 'mod_Autoprovision_template_name' => 'Navn', + 'mod_Autoprovision_phone_settings_title' => 'Telefonindstillinger', + 'mod_Autoprovision_phone_templates' => 'Indstillingsskabeloner', + 'mod_Autoprovision_general_settings' => 'URI-indstillinger', + 'mod_Autoprovision_search_tags' => 'Søg...', + 'mod_Autoprovision_edit_template' => 'Redigering af en skabelon', + 'mod_Autoprovision_end_edit_template' => 'Afslut redigeringen', + 'mod_Autoprovision_other_pbx' => 'Telefonbog', + 'mod_Autoprovision_other_pbx_name' => 'Navn på telefoncentralen', + 'mod_Autoprovision_other_pbx_address' => 'PBX netværksadresse', + 'mod_Autoprovision_templates_header' => 'Når du beskriver en skabelon, kan du bruge følgende parametre: {SIP_USER_NAME} - medarbejdernavn {SIP_NUM} - internt nummer (login) {SIP_PASS} - adgangskode', + 'mod_Autoprovision_templates_users_header' => 'Når du beskriver en MAC-adresse, er det tilladt at bruge symbolet % - hvilket betyder "ethvert sæt af tegn"
+Skabelonen 805e0c67% vil matche 805e0c670001 og 805e0c670002', ]; From d664fb6d6175c297f66ce9a7879a41a19c610639 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:06:54 +0000 Subject: [PATCH 08/51] Translated using Weblate (German) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/de/ --- Messages/de.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/de.php b/Messages/de.php index 9422b5b..eaf8280 100644 --- a/Messages/de.php +++ b/Messages/de.php @@ -21,4 +21,23 @@
Um das Telefon zu konfigurieren, müssen Sie von dort aus „%extension%“ anrufen, wobei XXX die interne Nummer der Telefonanlage ist.

Die automatische Konfiguration ist nur für das lokale Netzwerk des Unternehmens und für Telefone Yealink, Snom, Fanvil möglich.', + 'mod_Autoprovision_phone_settings_title' => 'Telefoneinstellungen', + 'mod_Autoprovision_phone_templates' => 'Einstellungsvorlagen', + 'mod_Autoprovision_general_settings' => 'URI-Einstellungen', + 'mod_Autoprovision_pnp' => 'PnP-Einstellungen', + 'mod_Autoprovision_addNew' => 'Hinzufügen', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Probe', + 'mod_Autoprovision_phone_settings_user' => 'Mitarbeiter', + 'mod_Autoprovision_phone_settings_mac' => 'MAC-Adresse', + 'mod_Autoprovision_template_name' => 'Name', + 'mod_Autoprovision_search_tags' => 'Suchen...', + 'mod_Autoprovision_edit_template' => 'Bearbeiten einer Vorlage', + 'mod_Autoprovision_end_edit_template' => 'Beenden Sie die Bearbeitung', + 'mod_Autoprovision_other_pbx' => 'Telefonbuch', + 'mod_Autoprovision_other_pbx_name' => 'Name der Telefonzentrale', + 'mod_Autoprovision_other_pbx_address' => 'PBX-Netzwerkadresse', + 'mod_Autoprovision_templates_header' => 'Bei der Beschreibung einer Vorlage können Sie folgende Parameter verwenden: {SIP_USER_NAME} – Mitarbeitername {SIP_NUM} – interne Nummer (Login) {SIP_PASS} – Passwort', + 'mod_Autoprovision_templates_users_header' => 'Bei der Beschreibung einer MAC-Adresse ist die Verwendung des Symbols % zulässig, was „beliebiger Zeichensatz“ bedeutet
+Die Vorlage 805e0c67% entspricht 805e0c670001 und 805e0c670002', ]; From 0469e922251cffc8928dc2f337c0832fc0076387 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:10 +0000 Subject: [PATCH 09/51] Translated using Weblate (English) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/en/ --- Messages/en.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/en.php b/Messages/en.php index 315c578..7d46dc0 100644 --- a/Messages/en.php +++ b/Messages/en.php @@ -21,4 +21,23 @@
To configure the phone, you need to call "%extension%" from it, where XXX is the internal number on the PBX.

Autoconfiguration is possible only for the local network of the enterprise, for phones Yealink, Snom, Fanvil.', + 'mod_Autoprovision_end_edit_template' => 'Finish editing', + 'mod_Autoprovision_phone_settings_title' => 'Phone settings', + 'mod_Autoprovision_phone_templates' => 'Settings templates', + 'mod_Autoprovision_general_settings' => 'URI Settings', + 'mod_Autoprovision_pnp' => 'PnP Settings', + 'mod_Autoprovision_addNew' => 'Add', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Sample', + 'mod_Autoprovision_phone_settings_user' => 'Employee', + 'mod_Autoprovision_phone_settings_mac' => 'MAC Address', + 'mod_Autoprovision_template_name' => 'Name', + 'mod_Autoprovision_search_tags' => 'Search...', + 'mod_Autoprovision_edit_template' => 'Editing a template', + 'mod_Autoprovision_other_pbx' => 'Phone book', + 'mod_Autoprovision_other_pbx_name' => 'Name of the telephone exchange', + 'mod_Autoprovision_other_pbx_address' => 'PBX network address', + 'mod_Autoprovision_templates_header' => 'When describing a template, you can use the following parameters: {SIP_USER_NAME} - employee name {SIP_NUM} - internal number (login) {SIP_PASS} - password', + 'mod_Autoprovision_templates_users_header' => 'When describing a MAC address, it is allowed to use the symbol % - meaning “any set of characters”
+The template 805e0c67% will match 805e0c670001 and 805e0c670002', ]; From d5c3ca214e97c92314300f1f804f4dfe86281659 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:40 +0000 Subject: [PATCH 10/51] Translated using Weblate (Spanish) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/es/ --- Messages/es.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/es.php b/Messages/es.php index 2d85708..8686bee 100644 --- a/Messages/es.php +++ b/Messages/es.php @@ -21,4 +21,23 @@
Para configurar el teléfono, debe llamar a "%extension%" desde él, donde XXX es el número interno de la PBX.

La configuración automática sólo es posible para la red local de la empresa, para teléfonos Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Ajustes de teléfono', + 'mod_Autoprovision_phone_templates' => 'Plantillas de configuración', + 'mod_Autoprovision_general_settings' => 'Configuración de URI', + 'mod_Autoprovision_pnp' => 'Configuración PnP', + 'mod_Autoprovision_addNew' => 'Agregar', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Muestra', + 'mod_Autoprovision_phone_settings_user' => 'Empleado', + 'mod_Autoprovision_phone_settings_mac' => 'Dirección MAC', + 'mod_Autoprovision_templates_header' => 'Al describir una plantilla, puede utilizar los siguientes parámetros: {SIP_USER_NAME} - nombre del empleado {SIP_NUM} - número interno (inicio de sesión) {SIP_PASS} - contraseña', + 'mod_Autoprovision_templates_users_header' => 'Al describir una dirección MAC, se permite utilizar el símbolo %, que significa "cualquier conjunto de caracteres"
+La plantilla 805e0c67% coincidirá con 805e0c670001 y 805e0c670002.', + 'mod_Autoprovision_template_name' => 'Nombre', + 'mod_Autoprovision_search_tags' => 'Buscar...', + 'mod_Autoprovision_edit_template' => 'Editar una plantilla', + 'mod_Autoprovision_end_edit_template' => 'Terminar de editar', + 'mod_Autoprovision_other_pbx' => 'Directorio telefónico', + 'mod_Autoprovision_other_pbx_name' => 'Nombre de la central telefónica', + 'mod_Autoprovision_other_pbx_address' => 'Dirección de red PBX', ]; From 82f620d7deb6ffbc1810b676d2d99709a7f183c8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:20 +0000 Subject: [PATCH 11/51] Translated using Weblate (French) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/fr/ --- Messages/fr.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/fr.php b/Messages/fr.php index fcaa67b..a438ae1 100644 --- a/Messages/fr.php +++ b/Messages/fr.php @@ -21,4 +21,23 @@
Pour configurer le téléphone, vous devez appeler "%extension%" depuis celui-ci, où XXX est le numéro interne du PBX.

L\'autoconfiguration n\'est possible que pour le réseau local de l\'entreprise, pour les téléphones Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Les paramètres du téléphone', + 'mod_Autoprovision_phone_templates' => 'Modèles de paramètres', + 'mod_Autoprovision_general_settings' => 'Paramètres d\'URI', + 'mod_Autoprovision_pnp' => 'Paramètres PnP', + 'mod_Autoprovision_addNew' => 'Ajouter', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Échantillon', + 'mod_Autoprovision_phone_settings_user' => 'Employé', + 'mod_Autoprovision_phone_settings_mac' => 'Adresse Mac', + 'mod_Autoprovision_template_name' => 'Nom', + 'mod_Autoprovision_search_tags' => 'Recherche...', + 'mod_Autoprovision_edit_template' => 'Modification d\'un modèle', + 'mod_Autoprovision_end_edit_template' => 'Terminer la modification', + 'mod_Autoprovision_other_pbx' => 'Annuaire', + 'mod_Autoprovision_other_pbx_name' => 'Nom du central téléphonique', + 'mod_Autoprovision_other_pbx_address' => 'Adresse du réseau PBX', + 'mod_Autoprovision_templates_header' => 'Lors de la description d\'un modèle, vous pouvez utiliser les paramètres suivants : {SIP_USER_NAME} - nom de l\'employé {SIP_NUM} - numéro interne (login) {SIP_PASS} - mot de passe', + 'mod_Autoprovision_templates_users_header' => 'Lors de la description d\'une adresse MAC, il est permis d\'utiliser le symbole % - signifiant « n\'importe quel jeu de caractères »
+Le modèle 805e0c67% correspondra à 805e0c670001 et 805e0c670002', ]; From e82844de6317a850f28ebe9d83de64fd23715d82 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:22 +0000 Subject: [PATCH 12/51] Translated using Weblate (Italian) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/it/ --- Messages/it.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/it.php b/Messages/it.php index 5616105..9eab7e3 100644 --- a/Messages/it.php +++ b/Messages/it.php @@ -21,4 +21,23 @@
Per configurare il telefono, è necessario chiamare da esso "%interno%", dove XXX è il numero interno del PBX.

La configurazione automatica è possibile solo per la rete locale dell\'azienda, per i telefoni Yealink, Snom, Fanvil.', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_search_tags' => 'Ricerca...', + 'mod_Autoprovision_templates_uri_template' => 'Campione', + 'mod_Autoprovision_phone_settings_user' => 'Dipendente', + 'mod_Autoprovision_phone_settings_mac' => 'Indirizzo MAC', + 'mod_Autoprovision_template_name' => 'Nome', + 'mod_Autoprovision_edit_template' => 'Modifica di un modello', + 'mod_Autoprovision_end_edit_template' => 'Termina la modifica', + 'mod_Autoprovision_other_pbx' => 'Rubrica telefonica', + 'mod_Autoprovision_other_pbx_name' => 'Nome della centrale telefonica', + 'mod_Autoprovision_other_pbx_address' => 'Indirizzo di rete PBX', + 'mod_Autoprovision_phone_settings_title' => 'Impostazioni del telefono', + 'mod_Autoprovision_phone_templates' => 'Modelli di impostazioni', + 'mod_Autoprovision_general_settings' => 'Impostazioni dell\'URI', + 'mod_Autoprovision_pnp' => 'Impostazioni PnP', + 'mod_Autoprovision_addNew' => 'Aggiungere', + 'mod_Autoprovision_templates_header' => 'Quando si descrive un modello, è possibile utilizzare i seguenti parametri: {SIP_USER_NAME} - nome del dipendente {SIP_NUM} - numero interno (login) {SIP_PASS} - password', + 'mod_Autoprovision_templates_users_header' => 'Quando si descrive un indirizzo MAC, è consentito utilizzare il simbolo % - che significa "qualsiasi insieme di caratteri"
+Il modello 805e0c67% corrisponderà a 805e0c670001 e 805e0c670002', ]; From 8f399f6ccacc642d4278d9344ec38935f0aed276 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:15 +0000 Subject: [PATCH 13/51] Translated using Weblate (Japanese) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/ja/ --- Messages/ja.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/ja.php b/Messages/ja.php index d4d73cb..2a58129 100644 --- a/Messages/ja.php +++ b/Messages/ja.php @@ -21,4 +21,23 @@
電話を設定するには、そこから「%extension%」に電話する必要があります。XXX は PBX の内部番号です。

自動構成は、企業のローカル ネットワーク、電話機Yealink、Snom、Fanvil でのみ可能です。', + 'mod_Autoprovision_phone_settings_title' => '電話の設定', + 'mod_Autoprovision_phone_templates' => '設定テンプレート', + 'mod_Autoprovision_general_settings' => 'URI設定', + 'mod_Autoprovision_pnp' => 'PnP設定', + 'mod_Autoprovision_addNew' => '追加', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'サンプル', + 'mod_Autoprovision_phone_settings_user' => '従業員', + 'mod_Autoprovision_phone_settings_mac' => 'Macアドレス', + 'mod_Autoprovision_template_name' => '名前', + 'mod_Autoprovision_search_tags' => '検索...', + 'mod_Autoprovision_edit_template' => 'テンプレートの編集', + 'mod_Autoprovision_end_edit_template' => '編集を終了する', + 'mod_Autoprovision_other_pbx' => '電話帳', + 'mod_Autoprovision_other_pbx_name' => '電話交換局の名前', + 'mod_Autoprovision_other_pbx_address' => 'PBXネットワークアドレス', + 'mod_Autoprovision_templates_header' => 'テンプレートを記述する場合、次のパラメータを使用できます。 {SIP_USER_NAME} - 従業員名 {SIP_NUM} - 内部番号 (ログイン) {SIP_PASS} - パスワード', + 'mod_Autoprovision_templates_users_header' => 'MAC アドレスを記述するときは、「任意の文字セット」を意味する記号 % を使用できます。
+テンプレート 805e0c67%805e0c670001805e0c670002 に一致します。', ]; From e50d2a48518b37f34f0149bc68e1c6a253bd64da Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:17 +0000 Subject: [PATCH 14/51] Translated using Weblate (Polish) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/pl/ --- Messages/pl.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/pl.php b/Messages/pl.php index 5b698eb..e7fb8c7 100644 --- a/Messages/pl.php +++ b/Messages/pl.php @@ -21,4 +21,23 @@
Aby skonfigurować telefon należy wywołać z niego "%extension%", gdzie XXX to numer wewnętrzny centrali.

Autokonfiguracja możliwa jest tylko dla sieci lokalnej przedsiębiorstwa, dla telefonów Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Ustawienia telefonu', + 'mod_Autoprovision_phone_templates' => 'Szablony ustawień', + 'mod_Autoprovision_general_settings' => 'Ustawienia URI', + 'mod_Autoprovision_pnp' => 'Ustawienia PnP', + 'mod_Autoprovision_addNew' => 'Dodać', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Próbka', + 'mod_Autoprovision_phone_settings_user' => 'Pracownik', + 'mod_Autoprovision_phone_settings_mac' => 'Adres MAC', + 'mod_Autoprovision_template_name' => 'Nazwa', + 'mod_Autoprovision_search_tags' => 'Szukaj...', + 'mod_Autoprovision_edit_template' => 'Edycja szablonu', + 'mod_Autoprovision_end_edit_template' => 'Zakończ edycję', + 'mod_Autoprovision_other_pbx' => 'Książka telefoniczna', + 'mod_Autoprovision_other_pbx_name' => 'Nazwa centrali telefonicznej', + 'mod_Autoprovision_other_pbx_address' => 'Adres sieci centrali PBX', + 'mod_Autoprovision_templates_header' => 'Opisując szablon możesz wykorzystać następujące parametry: {SIP_USER_NAME} - imię i nazwisko pracownika {SIP_NUM} - numer wewnętrzny (login) {SIP_PASS} - hasło', + 'mod_Autoprovision_templates_users_header' => 'Przy opisie adresu MAC dopuszczalne jest użycie symbolu % - oznaczającego „dowolny zestaw znaków”
+Szablon 805e0c67% będzie pasował do szablonów 805e0c670001 i 805e0c670002', ]; From cf81ff294789dce51edb1b79f82c91d6712ce1b0 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:25 +0000 Subject: [PATCH 15/51] Translated using Weblate (Portuguese) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/pt/ --- Messages/pt.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/pt.php b/Messages/pt.php index 5d47f93..f00e0e1 100644 --- a/Messages/pt.php +++ b/Messages/pt.php @@ -21,4 +21,23 @@
Para configurar o telefone, você precisa ligar para "%ramal%" dele, onde XXX é o número interno do PBX.

A autoconfiguração é possível apenas para a rede local da empresa, para telefones Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Configurações do telefone', + 'mod_Autoprovision_phone_templates' => 'Modelos de configurações', + 'mod_Autoprovision_general_settings' => 'Configurações de URI', + 'mod_Autoprovision_pnp' => 'Configurações PnP', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_addNew' => 'Adicionar', + 'mod_Autoprovision_templates_uri_template' => 'Amostra', + 'mod_Autoprovision_phone_settings_user' => 'Funcionário', + 'mod_Autoprovision_phone_settings_mac' => 'Endereço MAC', + 'mod_Autoprovision_template_name' => 'Nome', + 'mod_Autoprovision_search_tags' => 'Procurar...', + 'mod_Autoprovision_edit_template' => 'Editando um modelo', + 'mod_Autoprovision_end_edit_template' => 'Concluir a edição', + 'mod_Autoprovision_other_pbx' => 'Lista telefônica', + 'mod_Autoprovision_other_pbx_name' => 'Nome da central telefônica', + 'mod_Autoprovision_other_pbx_address' => 'Endereço de rede PABX', + 'mod_Autoprovision_templates_header' => 'Ao descrever um modelo, você pode usar os seguintes parâmetros: {SIP_USER_NAME} - nome do funcionário {SIP_NUM} - número interno (login) {SIP_PASS} - senha', + 'mod_Autoprovision_templates_users_header' => 'Ao descrever um endereço MAC, é permitido usar o símbolo % - que significa “qualquer conjunto de caracteres”
+O modelo 805e0c67% corresponderá a 805e0c670001 e 805e0c670002', ]; From 4e3a8033fcbaa2b83192cba5c4572740dac3a5f4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:06:59 +0000 Subject: [PATCH 16/51] Translated using Weblate (Swedish) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/sv/ --- Messages/sv.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/sv.php b/Messages/sv.php index b71c415..645c984 100644 --- a/Messages/sv.php +++ b/Messages/sv.php @@ -21,4 +21,23 @@
För att konfigurera telefonen måste du ringa "%extension%" från den, där XXX är det interna numret på telefonväxeln.

Autokonfiguration är endast möjlig för företagets lokala nätverk, för telefoner Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Telefon inställningar', + 'mod_Autoprovision_phone_templates' => 'Inställningar mallar', + 'mod_Autoprovision_general_settings' => 'URI-inställningar', + 'mod_Autoprovision_pnp' => 'PnP-inställningar', + 'mod_Autoprovision_addNew' => 'Lägg till', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Prov', + 'mod_Autoprovision_phone_settings_user' => 'Anställd', + 'mod_Autoprovision_phone_settings_mac' => 'MAC-adress', + 'mod_Autoprovision_template_name' => 'namn', + 'mod_Autoprovision_search_tags' => 'Sök...', + 'mod_Autoprovision_edit_template' => 'Redigera en mall', + 'mod_Autoprovision_end_edit_template' => 'Slutför redigeringen', + 'mod_Autoprovision_other_pbx' => 'Telefonbok', + 'mod_Autoprovision_other_pbx_name' => 'Telefonväxelns namn', + 'mod_Autoprovision_other_pbx_address' => 'PBX nätverksadress', + 'mod_Autoprovision_templates_header' => 'När du beskriver en mall kan du använda följande parametrar: {SIP_USER_NAME} - anställds namn {SIP_NUM} - internt nummer (inloggning) {SIP_PASS} - lösenord', + 'mod_Autoprovision_templates_users_header' => 'När du beskriver en MAC-adress är det tillåtet att använda symbolen % - vilket betyder "alla teckenuppsättningar"
+Mallen 805e0c67% matchar 805e0c670001 och 805e0c670002', ]; From cf23692c5d0f05e58ef6fa5c1456300f121de4f5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:06:57 +0000 Subject: [PATCH 17/51] Translated using Weblate (Turkish) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/tr/ --- Messages/tr.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/tr.php b/Messages/tr.php index 98b2d8f..e82b56e 100644 --- a/Messages/tr.php +++ b/Messages/tr.php @@ -21,4 +21,23 @@
Telefonu yapılandırmak için "%extension%" telefonunu aramanız gerekir; burada XXX, PBX\'teki dahili numaradır.

Otomatik yapılandırma yalnızca işletmenin yerel ağı için, Yealink, Snom, Fanvil telefonları için mümkündür.', + 'mod_Autoprovision_templates_uri_template' => 'Örnek', + 'mod_Autoprovision_phone_settings_user' => 'Çalışan', + 'mod_Autoprovision_phone_settings_mac' => 'Mac Adresi', + 'mod_Autoprovision_template_name' => 'İsim', + 'mod_Autoprovision_search_tags' => 'Aramak...', + 'mod_Autoprovision_edit_template' => 'Şablonu düzenleme', + 'mod_Autoprovision_phone_settings_title' => 'Telefon ayarları', + 'mod_Autoprovision_phone_templates' => 'Ayarlar şablonları', + 'mod_Autoprovision_general_settings' => 'URI Ayarları', + 'mod_Autoprovision_pnp' => 'PnP Ayarları', + 'mod_Autoprovision_addNew' => 'Eklemek', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_end_edit_template' => 'Düzenlemeyi bitir', + 'mod_Autoprovision_other_pbx' => 'Telefon rehberi', + 'mod_Autoprovision_other_pbx_name' => 'Telefon santralinin adı', + 'mod_Autoprovision_other_pbx_address' => 'PBX ağ adresi', + 'mod_Autoprovision_templates_header' => 'Bir şablonu tanımlarken aşağıdaki parametreleri kullanabilirsiniz: {SIP_USER_NAME} - çalışan adı {SIP_NUM} - dahili numara (giriş) {SIP_PASS} - şifre', + 'mod_Autoprovision_templates_users_header' => 'Bir MAC adresini tanımlarken, "herhangi bir karakter kümesi" anlamına gelen % sembolünün kullanılmasına izin verilir
+805e0c67% şablonu 805e0c670001 ve 805e0c670002 ile eşleşecek', ]; From e3977f3ea90715a99b00cb87c989e73cafdcd434 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:01 +0000 Subject: [PATCH 18/51] Translated using Weblate (Ukrainian) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/uk/ --- Messages/uk.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/uk.php b/Messages/uk.php index 790e904..6960468 100644 --- a/Messages/uk.php +++ b/Messages/uk.php @@ -21,4 +21,23 @@
Для налаштування телефону необхідно з нього зателефонувати на номер "%extension%", де XXX - це внутрішній номер на АТС.

Автоналаштування можливе лише для локальної мережі підприємства, для телефонів Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Установки телефонів', + 'mod_Autoprovision_phone_templates' => 'Шаблони налаштувань', + 'mod_Autoprovision_general_settings' => 'Налаштування URI', + 'mod_Autoprovision_pnp' => 'PnP Налаштування', + 'mod_Autoprovision_addNew' => 'Додати', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Шаблон', + 'mod_Autoprovision_phone_settings_user' => 'Співробітник', + 'mod_Autoprovision_phone_settings_mac' => 'MAC Адреса', + 'mod_Autoprovision_template_name' => 'Найменування', + 'mod_Autoprovision_search_tags' => 'Пошук...', + 'mod_Autoprovision_edit_template' => 'Редагування шаблону', + 'mod_Autoprovision_end_edit_template' => 'Завершити редагування', + 'mod_Autoprovision_other_pbx' => 'Телефонна книга', + 'mod_Autoprovision_other_pbx_name' => 'Найменування АТС', + 'mod_Autoprovision_other_pbx_address' => 'Мережева адреса АТС', + 'mod_Autoprovision_templates_header' => 'При описі шаблону можна використовувати параметри: {SIP_USER_NAME} - ім\'я співробітника {SIP_NUM} - внутрішній номер (логін) {SIP_PASS} - пароль', + 'mod_Autoprovision_templates_users_header' => 'При описі MAC адреси допускається використовувати символ % - що означає "будь-який набір символів"
+Шаблон 805e0c67% буде відповідати 805e0c670001 та 805e0c670002', ]; From 99e5875712582576e7f9590f8518fc4f1c6d52dd Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:04 +0000 Subject: [PATCH 19/51] Translated using Weblate (Vietnamese) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/vi/ --- Messages/vi.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/vi.php b/Messages/vi.php index 58d9937..c14126e 100644 --- a/Messages/vi.php +++ b/Messages/vi.php @@ -21,4 +21,23 @@
Để định cấu hình điện thoại, bạn cần gọi "%extension%" từ điện thoại đó, trong đó XXX là số nội bộ trên PBX.

Tự động cấu hình chỉ có thể thực hiện được đối với mạng cục bộ của doanh nghiệp, dành cho điện thoại Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Cài đặt điện thoại', + 'mod_Autoprovision_phone_templates' => 'Mẫu cài đặt', + 'mod_Autoprovision_general_settings' => 'Cài đặt URI', + 'mod_Autoprovision_pnp' => 'Cài đặt PnP', + 'mod_Autoprovision_addNew' => 'Thêm vào', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Vật mẫu', + 'mod_Autoprovision_phone_settings_user' => 'Người lao động', + 'mod_Autoprovision_phone_settings_mac' => 'Địa chỉ MAC', + 'mod_Autoprovision_template_name' => 'Tên', + 'mod_Autoprovision_search_tags' => 'Tìm kiếm...', + 'mod_Autoprovision_edit_template' => 'Chỉnh sửa mẫu', + 'mod_Autoprovision_end_edit_template' => 'Hoàn tất chỉnh sửa', + 'mod_Autoprovision_other_pbx' => 'Danh bạ điện thoại', + 'mod_Autoprovision_other_pbx_name' => 'Tên tổng đài điện thoại', + 'mod_Autoprovision_other_pbx_address' => 'Địa chỉ mạng PBX', + 'mod_Autoprovision_templates_header' => 'Khi mô tả mẫu, bạn có thể sử dụng các tham số sau: {SIP_USER_NAME - tên nhân viên {SIP_NUM - số nội bộ (đăng nhập) {SIP_PASS - mật khẩu', + 'mod_Autoprovision_templates_users_header' => 'Khi mô tả địa chỉ MAC, được phép sử dụng ký hiệu % - nghĩa là “bất kỳ bộ ký tự nào”
+Mẫu 805e0c67% sẽ khớp với 805e0c670001805e0c670002', ]; From 4ce0879472cb12452c5a22970d769d8deead8a00 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:06 +0000 Subject: [PATCH 20/51] Translated using Weblate (Chinese (Simplified)) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/zh_Hans/ --- Messages/zh_Hans.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/zh_Hans.php b/Messages/zh_Hans.php index bad2859..469ed62 100644 --- a/Messages/zh_Hans.php +++ b/Messages/zh_Hans.php @@ -21,4 +21,23 @@
要配置电话,您需要从电话呼叫“%extension%”,其中 XXX 是 PBX 上的内部号码。

自动配置仅适用于企业本地网络,电话Yealink、Snom、Fanvil。', + 'mod_Autoprovision_phone_settings_title' => '手机设置', + 'mod_Autoprovision_phone_templates' => '设置模板', + 'mod_Autoprovision_general_settings' => 'URI 设置', + 'mod_Autoprovision_pnp' => '即插即用设置', + 'mod_Autoprovision_addNew' => '添加', + 'mod_Autoprovision_templates_uri_uri' => '统一资源标识符', + 'mod_Autoprovision_templates_uri_template' => '样本', + 'mod_Autoprovision_phone_settings_user' => '员工', + 'mod_Autoprovision_phone_settings_mac' => 'MAC地址', + 'mod_Autoprovision_template_name' => '姓名', + 'mod_Autoprovision_search_tags' => '搜索...', + 'mod_Autoprovision_edit_template' => '编辑模板', + 'mod_Autoprovision_end_edit_template' => '完成编辑', + 'mod_Autoprovision_other_pbx' => '电话簿', + 'mod_Autoprovision_other_pbx_name' => '电话交换机名称', + 'mod_Autoprovision_other_pbx_address' => 'PBX 网络地址', + 'mod_Autoprovision_templates_header' => '描述模板时,可以使用以下参数: {SIP_USER_NAME} - 员工姓名 {SIP_NUM} - 内部号码(登录) {SIP_PASS} - 密码', + 'mod_Autoprovision_templates_users_header' => '描述 MAC 地址时,允许使用符号 % - 意思是“任何字符集”
+模式 805e0c67% 将匹配 805e0c670001805e0c670002', ]; From 95af43cc01f8c1ca90e4fd3d0df38d8b494f6b85 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:33 +0000 Subject: [PATCH 21/51] Translated using Weblate (Georgian) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/ka/ --- Messages/ka.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/ka.php b/Messages/ka.php index 7d44a0d..e3bc411 100644 --- a/Messages/ka.php +++ b/Messages/ka.php @@ -21,4 +21,23 @@
ტელეფონის კონფიგურაციისთვის, თქვენ უნდა დარეკოთ მისგან "%extension%", სადაც XXX არის PBX-ის შიდა ნომერი.

ავტოკონფიგურაცია შესაძლებელია მხოლოდ საწარმოს ლოკალური ქსელისთვის, ტელეფონებისთვის Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'ტელეფონის პარამეტრები', + 'mod_Autoprovision_phone_templates' => 'პარამეტრების შაბლონები', + 'mod_Autoprovision_general_settings' => 'URI პარამეტრები', + 'mod_Autoprovision_pnp' => 'PnP პარამეტრები', + 'mod_Autoprovision_addNew' => 'დამატება', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'ნიმუში', + 'mod_Autoprovision_templates_users_header' => 'MAC მისამართის აღწერისას ნებადართულია სიმბოლო % - რაც ნიშნავს "ნებისმიერი სიმბოლოების კომპლექტს"
+შაბლონი 805e0c67% დაემთხვევა 805e0c670001 და 805e0c670002', + 'mod_Autoprovision_phone_settings_user' => 'თანამშრომელი', + 'mod_Autoprovision_phone_settings_mac' => 'Mac მისამართი', + 'mod_Autoprovision_template_name' => 'სახელი', + 'mod_Autoprovision_search_tags' => 'ძიება...', + 'mod_Autoprovision_edit_template' => 'შაბლონის რედაქტირება', + 'mod_Autoprovision_end_edit_template' => 'დაასრულეთ რედაქტირება', + 'mod_Autoprovision_other_pbx' => 'Სატელეფონო წიგნი', + 'mod_Autoprovision_other_pbx_name' => 'სატელეფონო სადგურის დასახელება', + 'mod_Autoprovision_other_pbx_address' => 'PBX ქსელის მისამართი', + 'mod_Autoprovision_templates_header' => 'შაბლონის აღწერისას შეგიძლიათ გამოიყენოთ შემდეგი პარამეტრები: {SIP_USER_NAME} - თანამშრომლის სახელი {SIP_NUM} - შიდა ნომერი (შესვლა) {SIP_PASS} - პაროლი', ]; From 22a92ef3432e64a8e0b8d79c26e7cd554a146841 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:33 +0000 Subject: [PATCH 22/51] Translated using Weblate (Portuguese (Brazil)) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/pt_BR/ --- Messages/pt_BR.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/pt_BR.php b/Messages/pt_BR.php index fde635c..67ff054 100644 --- a/Messages/pt_BR.php +++ b/Messages/pt_BR.php @@ -21,4 +21,23 @@
Para configurar seu telefone, você precisa ligar para "%extension%" dele, onde XXX é o número interno do PBX.

A configuração automática é possível apenas para a rede local da empresa, para telefones Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Configurações do telefone', + 'mod_Autoprovision_phone_templates' => 'Modelos de configurações', + 'mod_Autoprovision_general_settings' => 'Configurações de URI', + 'mod_Autoprovision_pnp' => 'Configurações PnP', + 'mod_Autoprovision_addNew' => 'Adicionar', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Amostra', + 'mod_Autoprovision_phone_settings_user' => 'Funcionário', + 'mod_Autoprovision_phone_settings_mac' => 'Endereço MAC', + 'mod_Autoprovision_template_name' => 'Nome', + 'mod_Autoprovision_search_tags' => 'Procurar...', + 'mod_Autoprovision_edit_template' => 'Editando um modelo', + 'mod_Autoprovision_end_edit_template' => 'Concluir a edição', + 'mod_Autoprovision_other_pbx' => 'Lista telefônica', + 'mod_Autoprovision_other_pbx_name' => 'Nome da central telefônica', + 'mod_Autoprovision_other_pbx_address' => 'Endereço de rede PABX', + 'mod_Autoprovision_templates_header' => 'Ao descrever um modelo, você pode usar os seguintes parâmetros: {SIP_USER_NAME} - nome do funcionário {SIP_NUM} - número interno (login) {SIP_PASS} - senha', + 'mod_Autoprovision_templates_users_header' => 'Ao descrever um endereço MAC, é permitido usar o símbolo % - que significa “qualquer conjunto de caracteres”
+O modelo 805e0c67% corresponderá a 805e0c670001 e 805e0c670002', ]; From ccbadb4e9bd250bcbaf3a51ee2e6074d8a6f95f5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:27 +0000 Subject: [PATCH 23/51] Translated using Weblate (Greek) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/el/ --- Messages/el.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/el.php b/Messages/el.php index 5c7d062..a4a7a12 100644 --- a/Messages/el.php +++ b/Messages/el.php @@ -21,4 +21,23 @@
Για να διαμορφώσετε το τηλέφωνο, πρέπει να καλέσετε το "%extension%" από αυτό, όπου XXX είναι ο εσωτερικός αριθμός στο PBX.

Η αυτόματη διαμόρφωση είναι δυνατή μόνο για το τοπικό δίκτυο της επιχείρησης, για τηλέφωνα Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Ρυθμίσεις τηλεφώνου', + 'mod_Autoprovision_phone_templates' => 'Πρότυπα ρυθμίσεων', + 'mod_Autoprovision_general_settings' => 'Ρυθμίσεις URI', + 'mod_Autoprovision_pnp' => 'Ρυθμίσεις PnP', + 'mod_Autoprovision_addNew' => 'Προσθήκη', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Δείγμα', + 'mod_Autoprovision_phone_settings_user' => 'Υπάλληλος', + 'mod_Autoprovision_phone_settings_mac' => 'Διεύθυνση MAC', + 'mod_Autoprovision_template_name' => 'Ονομα', + 'mod_Autoprovision_search_tags' => 'Αναζήτηση...', + 'mod_Autoprovision_edit_template' => 'Επεξεργασία προτύπου', + 'mod_Autoprovision_end_edit_template' => 'Ολοκληρώστε την επεξεργασία', + 'mod_Autoprovision_other_pbx' => 'Τηλεφωνικό κατάλογο', + 'mod_Autoprovision_other_pbx_name' => 'Όνομα του τηλεφωνικού κέντρου', + 'mod_Autoprovision_other_pbx_address' => 'Διεύθυνση δικτύου PBX', + 'mod_Autoprovision_templates_header' => 'Κατά την περιγραφή ενός προτύπου, μπορείτε να χρησιμοποιήσετε τις ακόλουθες παραμέτρους: {SIP_USER_NAME} - όνομα υπαλλήλου {SIP_NUM} - εσωτερικός αριθμός (είσοδος) {SIP_PASS} - κωδικός πρόσβασης', + 'mod_Autoprovision_templates_users_header' => 'Κατά την περιγραφή μιας διεύθυνσης MAC, επιτρέπεται η χρήση του συμβόλου % - που σημαίνει "οποιοδήποτε σύνολο χαρακτήρων"
+Το πρότυπο 805e0c67% θα ταιριάζει με 805e0c670001 και 805e0c670002', ]; From 45f9b4e24b6579fd7b851ef37b5a8817065dc380 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:36 +0000 Subject: [PATCH 24/51] Translated using Weblate (Azerbaijani) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/az/ --- Messages/az.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/az.php b/Messages/az.php index 278cbe2..1cc5a59 100644 --- a/Messages/az.php +++ b/Messages/az.php @@ -38,4 +38,23 @@
Telefonu konfiqurasiya etmək üçün siz ondan "%extension%" zəng etməlisiniz, burada XXX PBX-də daxili nömrədir.

Avtokonfiqurasiya yalnız müəssisənin yerli şəbəkəsi, Yealink, Snom, Fanvil telefonları üçün mümkündür.', + 'mod_Autoprovision_phone_settings_title' => 'Telefon parametrləri', + 'mod_Autoprovision_phone_templates' => 'Parametrlər şablonları', + 'mod_Autoprovision_general_settings' => 'URI Parametrləri', + 'mod_Autoprovision_pnp' => 'PnP Parametrləri', + 'mod_Autoprovision_addNew' => 'əlavə et', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Nümunə', + 'mod_Autoprovision_phone_settings_user' => 'işçi', + 'mod_Autoprovision_phone_settings_mac' => 'MAC Ünvanı', + 'mod_Autoprovision_template_name' => 'ad', + 'mod_Autoprovision_search_tags' => 'Axtar...', + 'mod_Autoprovision_edit_template' => 'Şablonu redaktə etmək', + 'mod_Autoprovision_end_edit_template' => 'Redaktəni tamamlayın', + 'mod_Autoprovision_other_pbx' => 'Telefon kitabçası', + 'mod_Autoprovision_other_pbx_name' => 'Telefon stansiyasının adı', + 'mod_Autoprovision_other_pbx_address' => 'PBX şəbəkə ünvanı', + 'mod_Autoprovision_templates_header' => 'Şablonu təsvir edərkən aşağıdakı parametrlərdən istifadə edə bilərsiniz: {SIP_USER_NAME} - işçi adı {SIP_NUM} - daxili nömrə (giriş) {SIP_PASS} - parol', + 'mod_Autoprovision_templates_users_header' => 'MAC ünvanını təsvir edərkən % simvolundan istifadə etməyə icazə verilir - "hər hansı bir simvol dəsti" mənasını verir
+805e0c67% şablonu 805e0c670001805e0c670002 ilə uyğunlaşacaq', ]; From fd8bb9d46aef7947f4ff8611a301126cb764bfd3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:30 +0000 Subject: [PATCH 25/51] Translated using Weblate (Dutch) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/nl/ --- Messages/nl.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/nl.php b/Messages/nl.php index b8d8b62..407f1b4 100644 --- a/Messages/nl.php +++ b/Messages/nl.php @@ -38,4 +38,23 @@ * Written by Alexey Portnov, 10 2019 */ 'repModuleAutoprovision' => 'Module - %repesent%', + 'mod_Autoprovision_phone_settings_title' => 'Telefoon instellingen', + 'mod_Autoprovision_phone_templates' => 'Sjablonen voor instellingen', + 'mod_Autoprovision_general_settings' => 'URI-instellingen', + 'mod_Autoprovision_pnp' => 'PnP-instellingen', + 'mod_Autoprovision_addNew' => 'Toevoegen', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Steekproef', + 'mod_Autoprovision_phone_settings_user' => 'Medewerker', + 'mod_Autoprovision_phone_settings_mac' => 'Mac adres', + 'mod_Autoprovision_template_name' => 'Naam', + 'mod_Autoprovision_search_tags' => 'Zoekopdracht...', + 'mod_Autoprovision_edit_template' => 'Een sjabloon bewerken', + 'mod_Autoprovision_end_edit_template' => 'Voltooi het bewerken', + 'mod_Autoprovision_other_pbx' => 'Telefoonboek', + 'mod_Autoprovision_other_pbx_name' => 'Naam van de telefooncentrale', + 'mod_Autoprovision_other_pbx_address' => 'PBX-netwerkadres', + 'mod_Autoprovision_templates_header' => 'Bij het beschrijven van een sjabloon kunt u de volgende parameters gebruiken: {SIP_USER_NAME} - naam van de werknemer {SIP_NUM} - intern nummer (login) {SIP_PASS} - wachtwoord', + 'mod_Autoprovision_templates_users_header' => 'Bij het beschrijven van een MAC-adres is het toegestaan om het symbool % te gebruiken, wat \'elke reeks tekens\' betekent
+De sjabloon 805e0c67% komt overeen met 805e0c670001 en 805e0c670002', ]; From b67e16b5b0631210cbeec6a515749d6c9324173a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 15 Dec 2023 12:07:38 +0000 Subject: [PATCH 26/51] Translated using Weblate (Romanian) Currently translated at 96.5% (28 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/ro/ --- Messages/ro.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Messages/ro.php b/Messages/ro.php index 638a658..abefceb 100644 --- a/Messages/ro.php +++ b/Messages/ro.php @@ -38,4 +38,23 @@
Pentru a configura telefonul, trebuie să apelați „%extension%” de la acesta, unde XXX este numărul intern al PBX-ului.

Autoconfigurarea este posibilă numai pentru rețeaua locală a întreprinderii, pentru telefoanele Yealink, Snom, Fanvil.', + 'mod_Autoprovision_phone_settings_title' => 'Setările telefonului', + 'mod_Autoprovision_phone_templates' => 'Șabloane de setări', + 'mod_Autoprovision_general_settings' => 'Setări URI', + 'mod_Autoprovision_pnp' => 'Setări PnP', + 'mod_Autoprovision_addNew' => 'Adăuga', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Probă', + 'mod_Autoprovision_phone_settings_user' => 'Angajat', + 'mod_Autoprovision_phone_settings_mac' => 'Adresa mac', + 'mod_Autoprovision_template_name' => 'Nume', + 'mod_Autoprovision_search_tags' => 'Căutare...', + 'mod_Autoprovision_edit_template' => 'Editarea unui șablon', + 'mod_Autoprovision_end_edit_template' => 'Terminați editarea', + 'mod_Autoprovision_other_pbx' => 'Carte de telefoane', + 'mod_Autoprovision_other_pbx_name' => 'Numele centrală telefonică', + 'mod_Autoprovision_other_pbx_address' => 'adresa rețelei PBX', + 'mod_Autoprovision_templates_header' => 'Când descrieți un șablon, puteți utiliza următorii parametri: {SIP_USER_NAME} - numele angajatului {SIP_NUM} - număr intern (autentificare) {SIP_PASS} - parolă', + 'mod_Autoprovision_templates_users_header' => 'Când descrieți o adresă MAC, este permisă utilizarea simbolului % - adică „orice set de caractere”
+Șablonul 805e0c67% se va potrivi cu 805e0c670001 și 805e0c670002', ]; From 5646a683a86795bfc48b087b3c6f4ecbfbe878ff Mon Sep 17 00:00:00 2001 From: apor Date: Sat, 16 Dec 2023 23:19:48 +0300 Subject: [PATCH 27/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20404,=20=D0=B5=D1=81=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B9=D0=B4=D0=B5=D0=BD.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C?= =?UTF-8?q?=20=D0=B2=20syslog=20=D0=BF=D1=80=D0=B8=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B7=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D0=BF=D0=BE=20http.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 5c31196..376e8f6 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -10,6 +10,7 @@ use MikoPBX\Common\Models\Extensions; use MikoPBX\Common\Models\Sip; use MikoPBX\Core\System\Network; +use MikoPBX\Core\System\Util; use MikoPBX\Modules\PbxExtensionUtils; use MikoPBX\PBXCoreREST\Controllers\Modules\ModulesControllerBase; use Modules\ModuleAutoprovision\Lib\Transliterate; @@ -40,6 +41,7 @@ class GetController extends ModulesControllerBase */ public function getConfigStatic(...$args):void { + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$this->request->getHeader('User-Agent'). ", URI: ". $_REQUEST['_url']); $uri = substr('/pbxcore'.$_REQUEST['_url'], strlen(AutoprovisionConf::BASE_URI)); if($uri === '/phonebook'){ $this->echoPhoneBook($uri); @@ -146,6 +148,7 @@ public function getConfigStatic(...$args):void echo $config; } } + $this->response->setStatusCode(404, 'Not found'); $this->response->sendRaw(); } From 06d63d7e21962fca589d665d1fb784719610a48d Mon Sep 17 00:00:00 2001 From: apor Date: Sun, 17 Dec 2023 23:13:41 +0300 Subject: [PATCH 28/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=20=D1=81=D0=B8=D1=81=D0=BB=D0=BE=D0=B3=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B2=20=D1=81=D0=B8=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BD=D0=B8=D0=B3=D0=B8.=20=D0=9F=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=20=D1=81?= =?UTF-8?q?=D0=BE=D1=82=D1=80=D1=83=D0=B4=D0=BD=D0=B8=D0=BA=D0=B0,=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=B2=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=BD=D1=83=D1=8E=20=D0=BA=D0=BD?= =?UTF-8?q?=D0=B8=D0=B3=D1=83=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20"=D0=9A=D0=B0=D0=BA=20=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 51 ++++++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 376e8f6..e87e430 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -9,6 +9,7 @@ namespace Modules\ModuleAutoprovision\Lib\RestAPI\Controllers; use MikoPBX\Common\Models\Extensions; use MikoPBX\Common\Models\Sip; +use MikoPBX\Common\Models\Users; use MikoPBX\Core\System\Network; use MikoPBX\Core\System\Util; use MikoPBX\Modules\PbxExtensionUtils; @@ -41,11 +42,12 @@ class GetController extends ModulesControllerBase */ public function getConfigStatic(...$args):void { - Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$this->request->getHeader('User-Agent'). ", URI: ". $_REQUEST['_url']); + $userAgent = $this->request->getHeader('User-Agent'); $uri = substr('/pbxcore'.$_REQUEST['_url'], strlen(AutoprovisionConf::BASE_URI)); if($uri === '/phonebook'){ $this->echoPhoneBook($uri); $this->response->sendRaw(); + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url'].', code: 200'); return; } $manager = $this->di->get('modelsManager'); @@ -81,17 +83,26 @@ public function getConfigStatic(...$args):void $this->response->sendHeaders(); echo $result[0]['template']; $this->response->sendRaw(); + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url']. ', code: 200'); return; } $pattern = '/([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})/i'; if (preg_match_all($pattern, $_REQUEST['_url'], $matches)) { + $mac = $matches[0][0]??''; + if(stripos($userAgent, 'yealink') !== false && stripos($uri, '.boot')!==false){ + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url']. ', code: 404'); + $this->response->setStatusCode(404, 'Ignore boot config yealink'); + $this->response->sendRaw(); + return; + } + $parameters = [ 'models' => [ 'TemplatesUsers' => TemplatesUsers::class, ], 'conditions' => ':mac: LIKE TemplatesUsers.mac', 'bind' => [ - 'mac' => $matches[0][0]??'', + 'mac' => $mac, ], 'columns' => [ 'id' => 'TemplatesUsers.id', @@ -146,8 +157,12 @@ public function getConfigStatic(...$args):void $this->response->setHeader('Content-Transfer-Encoding', "binary"); $this->response->sendHeaders(); echo $config; + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url'].', code: 200'); + return; } } + + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url']. ', code: 404'); $this->response->setStatusCode(404, 'Not found'); $this->response->sendRaw(); } @@ -157,7 +172,7 @@ private function echoPhoneBook($uri):void $phoneBook = ""; $nameBook = $_REQUEST['name']??''; if(empty($nameBook)){ - $phoneBook.= "".PHP_EOL; + $phoneBook.= "".PHP_EOL; ['hostname' => $nameBook] = Network::getHostName(); $otherPbx = OtherPBX::find()->toArray(); $client = new Client(); @@ -179,6 +194,8 @@ private function echoPhoneBook($uri):void if ($isXmlValid !== false) { $phoneBook.= $xmlContent.PHP_EOL; } + }else{ + Util::sysLogMsg('autoprovision-http', "Fail get phonebook from $address, code: $code"); } } unset($otherPbx); @@ -186,9 +203,9 @@ private function echoPhoneBook($uri):void $bookUsers = []; $tmpPhoneBookArray = [$nameBook=> '']; + $manager = $this->di->get('modelsManager'); if(class_exists('\Modules\ModuleUsersGroups\Models\UsersGroups') && PbxExtensionUtils::isEnabled('ModuleUsersGroups')){ - $manager = $this->di->get('modelsManager'); $parameters = [ 'models' => [ 'GroupMembers' => GroupMembers::class, @@ -212,11 +229,33 @@ private function echoPhoneBook($uri):void $tmpPhoneBookArray[$group['name']] = ''; } } - $users = Extensions::find(["type = 'SIP'", 'columns' => ['number', 'callerid', 'userid']])->toArray(); + + + $parameters = [ + 'models' => [ + 'Extensions' => Extensions::class, + ], + 'conditions' => "type = 'SIP'", + 'columns' => [ + 'number' => 'Extensions.number', + 'callerid' => 'Extensions.callerid', + 'username' => 'Users.username', + ], + 'joins' => [ + 'Extensions' => [ + 0 => Users::class, + 1 => 'Extensions.userid = Users.id', + 2 => 'Users', + 3 => 'LEFT', + ], + ], + ]; + $users = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + // $users = Extensions::find(["type = 'SIP'", 'columns' => ['number', 'callerid', 'userid']])->toArray(); foreach ($users as $userData) { $book = $bookUsers[$userData['userid']]??$nameBook; $tmpPhoneBookArray[$book].= "\t".''.PHP_EOL; - $tmpPhoneBookArray[$book].= "\t\t"."{$userData['callerid']}".PHP_EOL; + $tmpPhoneBookArray[$book].= "\t\t"."{$userData['username']}".PHP_EOL; $tmpPhoneBookArray[$book].= "\t\t"."{$userData['number']}".PHP_EOL; $tmpPhoneBookArray[$book].= "\t".''.PHP_EOL; } From 6602c02471dcbfb88ad93adc1b44da2d2d365d45 Mon Sep 17 00:00:00 2001 From: apor Date: Mon, 18 Dec 2023 11:04:00 +0300 Subject: [PATCH 29/51] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D1=87=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D1=83=20=D0=BF=D0=BE=20URI.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index e87e430..ab7686f 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -65,6 +65,7 @@ public function getConfigStatic(...$args):void 'name' => 'Templates.name', 'uri' => 'TemplatesUri.uri', ], + 'order' => 'TemplatesUri.uri DESC', 'joins' => [ 'TemplatesUri' => [ 0 => Templates::class, @@ -183,7 +184,7 @@ private function echoPhoneBook($uri):void continue; } try { - $response = $client->request('GET', "http://$address".AutoprovisionConf::BASE_URI.$uri."?name={$pbx['name']}", ['timeout' => 1, 'connect_timeout' => 1, 'read_timeout' => 1]);; + $response = $client->request('GET', "http://$address".AutoprovisionConf::BASE_URI.$uri."?name={$pbx['name']}", ['timeout' => 1, 'connect_timeout' => 1, 'read_timeout' => 1]); $code = $response->getStatusCode(); }catch (\Exception $e){ $code = 0; From 0f66edd8c0fe63206425f3969e628911c34e3ef8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 23 Feb 2024 05:56:45 +0300 Subject: [PATCH 30/51] Added translation using Weblate (Thai) --- Messages/th.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/th.php diff --git a/Messages/th.php b/Messages/th.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/th.php @@ -0,0 +1 @@ + Date: Fri, 23 Feb 2024 02:56:51 +0000 Subject: [PATCH 31/51] Translated using Weblate (Thai) Currently translated at 100.0% (29 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/th/ --- Messages/th.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Messages/th.php b/Messages/th.php index b3d9bbc..934df93 100644 --- a/Messages/th.php +++ b/Messages/th.php @@ -1 +1,54 @@ 'ชื่อของการแลกเปลี่ยนทางโทรศัพท์', + /* + * MikoPBX - free phone system for small business + * Copyright © 2017-2023 Alexey Portnov and Nikolay Beketov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + */ + 'repModuleAutoprovision' => 'โมดูล - % ตัวแทน%', + 'mo_ModuleAutoprovision' => 'โมดูลการกำหนดค่าโทรศัพท์อัตโนมัติ', + 'BreadcrumbModuleAutoprovision' => 'โมดูลการกำหนดค่าโทรศัพท์อัตโนมัติ', + 'SubHeaderModuleAutoprovision' => 'ช่วยในการตั้งค่าโทรศัพท์ SIP', + 'mod_Autoprovision_Extension' => 'แม่แบบหมายเลขส่วนขยาย', + 'mod_Autoprovision_pbx_host' => 'ที่อยู่เซิร์ฟเวอร์สำหรับการลงทะเบียนโทรศัพท์', + 'mod_Autoprovision_mac_black' => 'บัญชีดำของที่อยู่ MAC ของโทรศัพท์', + 'mod_Autoprovision_mac_white' => 'รายการที่อยู่ MAC ของโทรศัพท์สีขาว', + 'mod_Autoprovision_additional_params' => 'ตัวเลือกพิเศษ', + 'mod_Autoprovision_phone_settings_title' => 'การตั้งค่าโทรศัพท์', + 'mod_Autoprovision_phone_templates' => 'แม่แบบการตั้งค่า', + 'mod_Autoprovision_general_settings' => 'การตั้งค่า URI', + 'mod_Autoprovision_pnp' => 'การตั้งค่า PnP', + 'mod_Autoprovision_addNew' => 'เพิ่ม', + 'mod_Autoprovision_templates_uri_uri' => 'ยูอาร์ไอ', + 'mod_Autoprovision_templates_uri_template' => 'ตัวอย่าง', + 'mod_Autoprovision_phone_settings_user' => 'พนักงาน', + 'mod_Autoprovision_phone_settings_mac' => 'หมายเลขทางกายภาพ', + 'mod_Autoprovision_template_name' => 'ชื่อ', + 'mod_Autoprovision_search_tags' => 'ค้นหา...', + 'mod_Autoprovision_edit_template' => 'การแก้ไขเทมเพลต', + 'mod_Autoprovision_end_edit_template' => 'แก้ไขให้เสร็จสิ้น', + 'mod_Autoprovision_other_pbx' => 'สมุดโทรศัพท์', + 'mod_Autoprovision_other_pbx_address' => 'ที่อยู่เครือข่าย PBX', + 'mod_Autoprovision_templates_header' => 'เมื่ออธิบายเทมเพลต คุณสามารถใช้พารามิเตอร์ต่อไปนี้: {SIP_USER_NAME} - ชื่อพนักงาน {SIP_NUM} - หมายเลขภายใน (เข้าสู่ระบบ) {SIP_PASS} - รหัสผ่าน', + 'mod_Autoprovision_templates_users_header' => 'เมื่ออธิบายที่อยู่ MAC อนุญาตให้ใช้สัญลักษณ์ % - หมายถึง “ชุดอักขระใดก็ได้”
+เทมเพลต 805e0c67% จะตรงกับ 805e0c670001 และ 805e0c670002', + 'mod_Autoprovision_header' => 'หากเปิดใช้งานโมดูล บัญชี SIP "apv-miko-pbx" จะพร้อมใช้งานบน PBX +
หากต้องการกำหนดค่าโทรศัพท์ของคุณโดยอัตโนมัติ คุณต้องรีเซ็ตเป็นการตั้งค่าจากโรงงาน +
หากโทรศัพท์เชื่อมต่อกับ PBX เป็นครั้งแรก โทรศัพท์จะถูกลงทะเบียนในบัญชี "apv-miko-pbx" +
ในการตั้งค่าโทรศัพท์ของคุณ คุณต้องโทรไปที่หมายเลข “%extension%” จากนั้น XXX คือหมายเลขภายในของ PBX +

+การกำหนดค่าอัตโนมัติสามารถทำได้เฉพาะกับเครือข่ายท้องถิ่นขององค์กร สำหรับโทรศัพท์ Yealink, Snom, Fanvil', +]; From 5389cdc0f1ea71283bbfae3a5da66bb8e695e1d0 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Wed, 17 Apr 2024 16:41:55 +0700 Subject: [PATCH 32/51] Refactor Util::which to determine if command need busybox prefix or it is a system binary #703 --- .gitignore | 2 ++ Lib/Autoprovision.php | 6 +++--- module.json | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bea433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/Lib/Autoprovision.php b/Lib/Autoprovision.php index 0cc645c..7ccd347 100644 --- a/Lib/Autoprovision.php +++ b/Lib/Autoprovision.php @@ -154,9 +154,9 @@ public function StartAGIProvision(): void $phone_data = null; exec("timeout -t 1 ping {$ip} -c 1"); // Анализируем MAC адрес устройства. - $busyboxPath = Util::which('busybox'); - $awkPath = Util::which('awk'); - exec("{$busyboxPath} arp -D {$ip} -n | {$busyboxPath} {$awkPath} '{ print $4 \" \" $7}' 2>&1", $out); + $arp = Util::which('arp'); + $awk = Util::which('awk'); + exec("$arp -D {$ip} -n | $awk '{ print $4 \" \" $7}' 2>&1", $out); [$mac, $eth] = explode(' ', $out[0] ?? ''); $mac = str_replace(':', '', $mac); diff --git a/module.json b/module.json index b7c6222..37429a1 100644 --- a/module.json +++ b/module.json @@ -3,5 +3,5 @@ "moduleUniqueID":"ModuleAutoprovision", "support_email": "help@miko.ru", "version": "%ModuleVersion%", - "min_pbx_version": "2023.2.168" + "min_pbx_version": "2024.1.42" } \ No newline at end of file From cbd3c6b48a0b0ee4855f060160f8ca1a57885e54 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 30 Jul 2024 10:23:48 +0300 Subject: [PATCH 33/51] Added translation using Weblate (Hungarian) --- Messages/hu.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/hu.php diff --git a/Messages/hu.php b/Messages/hu.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/hu.php @@ -0,0 +1 @@ + Date: Tue, 30 Jul 2024 07:23:59 +0000 Subject: [PATCH 34/51] Translated using Weblate (Hungarian) Currently translated at 100.0% (29 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/hu/ --- Messages/hu.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Messages/hu.php b/Messages/hu.php index b3d9bbc..faa3bb2 100644 --- a/Messages/hu.php +++ b/Messages/hu.php @@ -1 +1,54 @@ 'Kiterjesztés száma sablon', + 'mod_Autoprovision_other_pbx_name' => 'Alközpont neve', + 'mod_Autoprovision_other_pbx_address' => 'PBX hálózati cím', + /* + * MikoPBX - free phone system for small business + * Copyright © 2017-2023 Alexey Portnov and Nikolay Beketov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + */ + 'repModuleAutoprovision' => 'Modul – %repesent%', + 'mo_ModuleAutoprovision' => 'Automatikus telefon konfigurációs modul', + 'BreadcrumbModuleAutoprovision' => 'Automatikus telefon konfigurációs modul', + 'SubHeaderModuleAutoprovision' => 'Segítség a SIP telefonok beállításában', + 'mod_Autoprovision_pbx_host' => 'Telefonos regisztrációhoz szükséges szerver címe', + 'mod_Autoprovision_mac_black' => 'A telefon MAC-címeinek feketelistája', + 'mod_Autoprovision_mac_white' => 'A telefon MAC-címeinek fehér listája', + 'mod_Autoprovision_additional_params' => 'Extra lehetőségek', + 'mod_Autoprovision_phone_settings_title' => 'Telefon beállítások', + 'mod_Autoprovision_phone_templates' => 'Beállítások sablonok', + 'mod_Autoprovision_general_settings' => 'URI beállítások', + 'mod_Autoprovision_pnp' => 'PnP beállítások', + 'mod_Autoprovision_addNew' => 'Hozzáadás', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Minta', + 'mod_Autoprovision_phone_settings_user' => 'Munkavállaló', + 'mod_Autoprovision_phone_settings_mac' => 'Mac cím', + 'mod_Autoprovision_template_name' => 'Név', + 'mod_Autoprovision_search_tags' => 'Keresés...', + 'mod_Autoprovision_edit_template' => 'Sablon szerkesztése', + 'mod_Autoprovision_end_edit_template' => 'Fejezze be a szerkesztést', + 'mod_Autoprovision_other_pbx' => 'Telefonkönyv', + 'mod_Autoprovision_templates_header' => 'A sablon leírásánál a következő paramétereket használhatja: {SIP_USER_NAME} - alkalmazott neve {SIP_NUM} - belső szám (bejelentkezés) {SIP_PASS} - jelszó', + 'mod_Autoprovision_templates_users_header' => 'A MAC-cím leírásakor megengedett a % szimbólum használata – ez „bármely karakterkészlet”
+A 805e0c67% sablon egyezik a következővel: 805e0c670001 és 805e0c670002', + 'mod_Autoprovision_header' => 'Ha a modul engedélyezve van, az "apv-miko-pbx" SIP-fiók elérhetővé válik az alközponton +
A telefon automatikus konfigurálásához vissza kell állítania a gyári beállításokat. +
Ha a telefon először csatlakozik az alközponthoz, akkor az „apv-miko-pbx” fiókban lesz regisztrálva. +
A telefon konfigurálásához fel kell hívnia a „%extension%” számot, ahol az XXX az alközpont belső száma. +

+Az automatikus konfigurálás csak a vállalati helyi hálózaton, a Yealink, Snom, Fanvil telefonokon lehetséges.', +]; From 2bcf0a5fbfd7325c1bb2b016b3a1d077b9395d41 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 6 Sep 2024 07:00:26 +0300 Subject: [PATCH 35/51] Added translation using Weblate (Finnish) --- Messages/fi.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/fi.php diff --git a/Messages/fi.php b/Messages/fi.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/fi.php @@ -0,0 +1 @@ + Date: Fri, 6 Sep 2024 04:00:46 +0000 Subject: [PATCH 36/51] Translated using Weblate (Finnish) Currently translated at 100.0% (29 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/fi/ --- Messages/fi.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Messages/fi.php b/Messages/fi.php index b3d9bbc..ea61c3c 100644 --- a/Messages/fi.php +++ b/Messages/fi.php @@ -1 +1,54 @@ 'Lisävaihtoehdot', + 'mod_Autoprovision_phone_settings_title' => 'Puhelimen asetukset', + 'mod_Autoprovision_phone_templates' => 'Asetusmallit', + 'mod_Autoprovision_general_settings' => 'URI-asetukset', + 'mod_Autoprovision_pnp' => 'PnP-asetukset', + 'mod_Autoprovision_addNew' => 'Lisätä', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Näyte', + 'mod_Autoprovision_phone_settings_user' => 'Työntekijä', + 'mod_Autoprovision_phone_settings_mac' => 'MAC-osoite', + 'mod_Autoprovision_template_name' => 'Nimi', + 'mod_Autoprovision_search_tags' => 'Haku...', + 'mod_Autoprovision_edit_template' => 'Mallin muokkaaminen', + 'mod_Autoprovision_end_edit_template' => 'Viimeistele muokkaus', + 'mod_Autoprovision_other_pbx' => 'Puhelinluettelo', + 'mod_Autoprovision_other_pbx_name' => 'Puhelinkeskuksen nimi', + 'mod_Autoprovision_other_pbx_address' => 'PBX-verkko-osoite', + 'mod_Autoprovision_templates_header' => 'Mallia kuvattaessa voit käyttää seuraavia parametreja: {SIP_USER_NAME} - työntekijän nimi {SIP_NUM} - sisäinen numero (kirjautumistunnus) {SIP_PASS} - salasana', + 'mod_Autoprovision_templates_users_header' => 'MAC-osoitetta kuvattaessa on sallittua käyttää symbolia % - mikä tarkoittaa "mitä tahansa merkkijoukkoa"
+Kuvio 805e0c67% vastaa 805e0c670001 ja 805e0c670002', + 'mod_Autoprovision_header' => 'Jos moduuli on käytössä, SIP-tili "apv-miko-pbx" tulee saataville PBX:ssä +
Jos haluat määrittää puhelimen automaattisesti, sinun on palautettava sen tehdasasetukset. +
Jos puhelin muodostaa yhteyden PBX:ään ensimmäistä kertaa, se rekisteröidään tilille apv-miko-pbx. +
Jotta voit määrittää puhelimesi, sinun on soitettava siitä numeroon %extension%, jossa XXX on PBX:n sisäinen numero. +

+Automaattinen määritys on mahdollista vain yrityksen paikallisverkossa Yealink-, Snom-, Fanvil-puhelimissa.', + /* + * MikoPBX - free phone system for small business + * Copyright © 2017-2023 Alexey Portnov and Nikolay Beketov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + */ + 'repModuleAutoprovision' => 'Moduuli - %repesent%', + 'mo_ModuleAutoprovision' => 'Automaattinen puhelimen konfigurointimoduuli', + 'BreadcrumbModuleAutoprovision' => 'Automaattinen puhelimen konfigurointimoduuli', + 'SubHeaderModuleAutoprovision' => 'Apua SIP-puhelimien käyttöönotossa', + 'mod_Autoprovision_Extension' => 'Laajennusnumeromalli', + 'mod_Autoprovision_pbx_host' => 'Palvelimen osoite puhelimitse rekisteröitymistä varten', + 'mod_Autoprovision_mac_black' => 'Musta lista puhelinten MAC-osoitteista', + 'mod_Autoprovision_mac_white' => 'Valkoinen luettelo puhelinten MAC-osoitteista', +]; From 537dd4224e4052e5bbb274d64b1927b9fdd6ad28 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 16 Sep 2024 05:02:18 +0300 Subject: [PATCH 37/51] Added translation using Weblate (languages (generated) (languages)) --- Messages/languages.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/languages.php diff --git a/Messages/languages.php b/Messages/languages.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/languages.php @@ -0,0 +1 @@ + Date: Mon, 30 Sep 2024 14:54:24 +0700 Subject: [PATCH 38/51] Update for PHP 8.3 --- Lib/RestAPI/Controllers/GetController.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index ab7686f..cc861d1 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -8,6 +8,7 @@ namespace Modules\ModuleAutoprovision\Lib\RestAPI\Controllers; use MikoPBX\Common\Models\Extensions; +use MikoPBX\Common\Models\PbxSettings; use MikoPBX\Common\Models\Sip; use MikoPBX\Common\Models\Users; use MikoPBX\Core\System\Network; @@ -23,7 +24,6 @@ use GuzzleHttp\Client; use Modules\ModuleUsersGroups\Models\GroupMembers; use Modules\ModuleUsersGroups\Models\UsersGroups; -use Phalcon\Text; class GetController extends ModulesControllerBase { @@ -280,7 +280,14 @@ private function camelize($inputString){ $inputString = preg_replace('/\s+/', '-', $inputString); $inputString = Transliterate::ruToLat($inputString); $inputString = preg_replace('/[^A-Za-z0-9-]/u', '', $inputString); - return Text::camelize($inputString); + + $pbxVersion = PbxSettings::getValueByKey('PBXVersion'); + if (version_compare($pbxVersion, '2024.2.30', '>')) { + $result = \MikoPBX\Common\Library\Text::camelize($inputString); + } else { + $result = \Phalcon\Text::camelize($inputString); + } + return $result; } /** From 8acd4aab209a13fe343b0e68e2aafe3bf8112cc7 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Mon, 30 Sep 2024 15:17:26 +0700 Subject: [PATCH 39/51] Update for PHP 8.3 --- composer.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 1987dfd..82a7570 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,8 @@ "name": "mikopbx/moduleautoprovision", "description": "ModuleAutoprovision", "require": { - "mikopbx/core": ">=2020.2.757" + "php": ">=7.4.6", + "mikopbx/core": ">=2024.1.42" }, "autoload": { "psr-4": { @@ -55,7 +56,7 @@ "config": { "sort-packages": true, "platform": { - "php": "7.4.6" + "php": ">=7.4.6" } } } From e5814e1c0855d6f57bac61ec3e69796149920b19 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Mon, 30 Sep 2024 16:11:29 +0700 Subject: [PATCH 40/51] Update for PHP 8.3 --- composer.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 82a7570..eccf6c1 100644 --- a/composer.json +++ b/composer.json @@ -2,8 +2,7 @@ "name": "mikopbx/moduleautoprovision", "description": "ModuleAutoprovision", "require": { - "php": ">=7.4.6", - "mikopbx/core": ">=2024.1.42" + "php": "^7.4 || ^8.0" }, "autoload": { "psr-4": { @@ -56,7 +55,7 @@ "config": { "sort-packages": true, "platform": { - "php": ">=7.4.6" + "php": "^7.4 || ^8.0" } } } From b905efb7785bcac977d4bc808a6b0f20c0987bd5 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Tue, 1 Oct 2024 15:52:17 +0700 Subject: [PATCH 41/51] Update for PHP 8.3 and Phalcon 5.8 --- Lib/Autoprovision.php | 4 +- Lib/MikoPBXVersion.php | 84 +++++++++++++++++++++++ Lib/RestAPI/Controllers/GetController.php | 15 ++-- composer.json | 4 +- 4 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 Lib/MikoPBXVersion.php diff --git a/Lib/Autoprovision.php b/Lib/Autoprovision.php index 7ccd347..95c1504 100644 --- a/Lib/Autoprovision.php +++ b/Lib/Autoprovision.php @@ -16,9 +16,9 @@ use MikoPBX\Core\System\Util; use Modules\ModuleAutoprovision\Models\ModuleAutoprovisionDevice; use Modules\ModuleAutoprovision\Models\ModuleAutoprovisionUsers; -use Phalcon\Di; +use Phalcon\Di\Injectable; -class Autoprovision extends Di\Injectable +class Autoprovision extends Injectable { protected $tempDir; diff --git a/Lib/MikoPBXVersion.php b/Lib/MikoPBXVersion.php new file mode 100644 index 0000000..7df2cd6 --- /dev/null +++ b/Lib/MikoPBXVersion.php @@ -0,0 +1,84 @@ +'); + } + + /** + * Return Di interface for the current version of PBX + * @return \Phalcon\Di\DiInterface|null + */ + public static function getDefaultDi():\Phalcon\Di\DiInterface|null + { + if (self::isPhalcon5Version()) { + return \Phalcon\Di\Di::getDefault(); + } else { + return \Phalcon\Di::getDefault(); + } + } + + /** + * Return Validation class for the current version of PBX + * @return class-string<\Phalcon\Filter\Validation>|class-string<\Phalcon\Validation> + */ + public static function getValidationClass():string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Filter\Validation::class; + } else { + return \Phalcon\Validation::class; + } + } + + /** + * Return Uniqueness class for the current version of PBX + * @return class-string<\Phalcon\Filter\Validation\Validator\Uniqueness>|class-string<\Phalcon\Validation\Validator\Uniqueness> + */ + public static function getUniquenessClass():string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Filter\Validation\Validator\Uniqueness::class; + } else { + return \Phalcon\Validation\Validator\Uniqueness::class; + } + } + + /** + * Return Text class for the current version of PBX + * + * @return class-string<\MikoPBX\Common\Library\Text>|class-string<\Phalcon\Text> + */ + public static function getTextClass():string + { + if (self::isPhalcon5Version()) { + return \MikoPBX\Common\Library\Text::class; + } else { + return \Phalcon\Text::class; + } + } + + /** + * Return Logger class for the current version of PBX + * + * @return class-string<\Phalcon\Logger\Logger>|class-string<\Phalcon\Logger> + */ + public static function getLoggerClass():string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Logger\Logger::class; + } else { + return \Phalcon\Logger::class; + } + } +} \ No newline at end of file diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index cc861d1..00c647c 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -8,13 +8,13 @@ namespace Modules\ModuleAutoprovision\Lib\RestAPI\Controllers; use MikoPBX\Common\Models\Extensions; -use MikoPBX\Common\Models\PbxSettings; use MikoPBX\Common\Models\Sip; use MikoPBX\Common\Models\Users; use MikoPBX\Core\System\Network; use MikoPBX\Core\System\Util; use MikoPBX\Modules\PbxExtensionUtils; use MikoPBX\PBXCoreREST\Controllers\Modules\ModulesControllerBase; +use Modules\ModuleAutoprovision\Lib\MikoPBXVersion; use Modules\ModuleAutoprovision\Lib\Transliterate; use Modules\ModuleAutoprovision\Models\OtherPBX; use Modules\ModuleAutoprovision\Models\Templates; @@ -276,18 +276,13 @@ private function echoPhoneBook($uri):void echo $phoneBook; } - private function camelize($inputString){ + private function camelize($inputString): string + { $inputString = preg_replace('/\s+/', '-', $inputString); $inputString = Transliterate::ruToLat($inputString); $inputString = preg_replace('/[^A-Za-z0-9-]/u', '', $inputString); - - $pbxVersion = PbxSettings::getValueByKey('PBXVersion'); - if (version_compare($pbxVersion, '2024.2.30', '>')) { - $result = \MikoPBX\Common\Library\Text::camelize($inputString); - } else { - $result = \Phalcon\Text::camelize($inputString); - } - return $result; + $textClass = MikoPBXVersion::getTextClass(); + return $textClass::camelize($inputString); } /** diff --git a/composer.json b/composer.json index eccf6c1..ff941b8 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "wiki": "https://wiki.mikopbx.com", "issues": "https://github.com/mikopbx/Core/issues", "source": "https://github.com/mikopbx/Core", - "forum": "https://qa.askozia.ru", + "forum": "https://qa.mikopbx.ru", "chat": "https://t.me/mikopbx_dev" }, "authors": [ @@ -42,7 +42,7 @@ { "name": "Nikolay Beketov", "email": "nbek@miko.ru", - "homepage": "http://facebook.com/jorikfon", + "homepage": "https://www.linkedin.com/in/nikolay-beketov", "role": "Developer" } ], From f62b3f93d2c20c0c90dd7e4544d2b4c09ebcbf9b Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Mon, 7 Oct 2024 18:20:44 +0700 Subject: [PATCH 42/51] Update for PHP 8.3 and Phalcon 5.8 --- Lib/MikoPBXVersion.php | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/Lib/MikoPBXVersion.php b/Lib/MikoPBXVersion.php index 7df2cd6..33a92e4 100644 --- a/Lib/MikoPBXVersion.php +++ b/Lib/MikoPBXVersion.php @@ -1,6 +1,24 @@ . + */ namespace Modules\ModuleAutoprovision\Lib; + use MikoPBX\Common\Models\PbxSettings; class MikoPBXVersion @@ -9,7 +27,7 @@ class MikoPBXVersion * Return true if current version of PBX based on Phalcon 5+ * @return bool */ - public static function isPhalcon5Version():bool + public static function isPhalcon5Version(): bool { $pbxVersion = PbxSettings::getValueByKey('PBXVersion'); return version_compare($pbxVersion, '2024.2.30', '>'); @@ -19,7 +37,7 @@ public static function isPhalcon5Version():bool * Return Di interface for the current version of PBX * @return \Phalcon\Di\DiInterface|null */ - public static function getDefaultDi():\Phalcon\Di\DiInterface|null + public static function getDefaultDi() { if (self::isPhalcon5Version()) { return \Phalcon\Di\Di::getDefault(); @@ -32,7 +50,7 @@ public static function getDefaultDi():\Phalcon\Di\DiInterface|null * Return Validation class for the current version of PBX * @return class-string<\Phalcon\Filter\Validation>|class-string<\Phalcon\Validation> */ - public static function getValidationClass():string + public static function getValidationClass(): string { if (self::isPhalcon5Version()) { return \Phalcon\Filter\Validation::class; @@ -45,7 +63,7 @@ public static function getValidationClass():string * Return Uniqueness class for the current version of PBX * @return class-string<\Phalcon\Filter\Validation\Validator\Uniqueness>|class-string<\Phalcon\Validation\Validator\Uniqueness> */ - public static function getUniquenessClass():string + public static function getUniquenessClass(): string { if (self::isPhalcon5Version()) { return \Phalcon\Filter\Validation\Validator\Uniqueness::class; @@ -59,7 +77,7 @@ public static function getUniquenessClass():string * * @return class-string<\MikoPBX\Common\Library\Text>|class-string<\Phalcon\Text> */ - public static function getTextClass():string + public static function getTextClass(): string { if (self::isPhalcon5Version()) { return \MikoPBX\Common\Library\Text::class; @@ -73,7 +91,7 @@ public static function getTextClass():string * * @return class-string<\Phalcon\Logger\Logger>|class-string<\Phalcon\Logger> */ - public static function getLoggerClass():string + public static function getLoggerClass(): string { if (self::isPhalcon5Version()) { return \Phalcon\Logger\Logger::class; @@ -81,4 +99,4 @@ public static function getLoggerClass():string return \Phalcon\Logger::class; } } -} \ No newline at end of file +} From a6d8cdb32119bb13aea5703170c7da89cd9bfc49 Mon Sep 17 00:00:00 2001 From: apor Date: Tue, 15 Oct 2024 00:10:33 +0300 Subject: [PATCH 43/51] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BD=D0=B8=D0=B3=D0=B8=20=D0=B4=D0=BB=D1=8F=20yealink=20?= =?UTF-8?q?=D0=B8=20grandstream?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 95 ++++++++++++++++++++++- 1 file changed, 92 insertions(+), 3 deletions(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 00c647c..858864b 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -39,13 +39,20 @@ class GetController extends ModulesControllerBase /** * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/1/2/3' * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/phonebook' + * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/yealink' + * curl 'http://127.0.0.1/pbxcore/api/autoprovision-http/grandstream' */ public function getConfigStatic(...$args):void { $userAgent = $this->request->getHeader('User-Agent'); $uri = substr('/pbxcore'.$_REQUEST['_url'], strlen(AutoprovisionConf::BASE_URI)); - if($uri === '/phonebook'){ - $this->echoPhoneBook($uri); + if($uri === '/phonebook' || $uri === '/yealink'){ + $this->echoPhoneBookYealink($uri); + $this->response->sendRaw(); + Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url'].', code: 200'); + return; + }elseif ($uri === '/grandstream'){ + $this->echoPhoneBookGrandStream($uri); $this->response->sendRaw(); Util::sysLogMsg('autoprovision-http', 'User-Agent: '.$userAgent. ", URI: ". $_REQUEST['_url'].', code: 200'); return; @@ -168,7 +175,89 @@ public function getConfigStatic(...$args):void $this->response->sendRaw(); } - private function echoPhoneBook($uri):void + private function echoPhoneBookGrandStream($uri):void + { + $bookUsers = []; + $phoneBook = "".PHP_EOL; + $phoneBook.= "".PHP_EOL; + $manager = $this->di->get('modelsManager'); + if(class_exists('\Modules\ModuleUsersGroups\Models\UsersGroups') + && PbxExtensionUtils::isEnabled('ModuleUsersGroups')){ + $parameters = [ + 'models' => [ + 'GroupMembers' => GroupMembers::class, + ], + 'columns' => [ + 'user_id' => 'GroupMembers.user_id', + 'name' => 'UsersGroups.name', + 'group_id' => 'UsersGroups.id', + ], + 'joins' => [ + 'GroupMembers' => [ + 0 => UsersGroups::class, + 1 => 'UsersGroups.id = GroupMembers.group_id', + 2 => 'UsersGroups', + 3 => 'LEFT', + ], + ], + ]; + $groupsData = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + foreach ($groupsData as $group){ + $bookUsers[$group['user_id']] = $group['id']; + $phoneBook.= ''.PHP_EOL. + "\t".''.$group['id'].''.PHP_EOL. + "\t".''.$group['name'].''.PHP_EOL. + ''; + } + } + + $parameters = [ + 'models' => [ + 'Extensions' => Extensions::class, + ], + 'conditions' => "type = 'SIP'", + 'columns' => [ + 'number' => 'Extensions.number', + 'callerid' => 'Extensions.callerid', + 'username' => 'Users.username', + 'user_id' => 'Users.id', + ], + 'joins' => [ + 'Extensions' => [ + 0 => Users::class, + 1 => 'Extensions.userid = Users.id', + 2 => 'Users', + 3 => 'LEFT', + ], + ], + ]; + $users = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); + foreach ($users as $userData) { + $groupId = $bookUsers[$userData['userid']]??''; + $phoneBook.=''.PHP_EOL. + "\t".''.$userData['user_id'].''.PHP_EOL. + "\t".''.$userData['username'].''.PHP_EOL. + "\t".''.PHP_EOL. + "\t\t".''.$userData['number'].''.PHP_EOL. + "\t\t".'0'.PHP_EOL. + "\t".''.PHP_EOL; + + if(!empty($groupId)){ + $phoneBook.="\t".''.$groupId.''.PHP_EOL; + } + $phoneBook.=''.PHP_EOL; + } + $phoneBook.= "".PHP_EOL; + + $this->response->setHeader('Content-Description', "config file"); + $this->response->setHeader('Content-Disposition', "attachment; filename=".basename($uri).'.xml'); + $this->response->setHeader('Content-type', "text/plain"); + $this->response->setHeader('Content-Transfer-Encoding', "binary"); + $this->response->sendHeaders(); + echo $phoneBook; + + } + private function echoPhoneBookYealink($uri):void { $phoneBook = ""; $nameBook = $_REQUEST['name']??''; From 7a9095a93f626aedacbbc63d13b0d9d6f7474af9 Mon Sep 17 00:00:00 2001 From: apor Date: Tue, 15 Oct 2024 08:20:31 +0300 Subject: [PATCH 44/51] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20grandstream=20=D0=BA=D0=BD=D0=B8=D0=B3?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 858864b..4cb32ad 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -206,7 +206,7 @@ private function echoPhoneBookGrandStream($uri):void $bookUsers[$group['user_id']] = $group['id']; $phoneBook.= ''.PHP_EOL. "\t".''.$group['id'].''.PHP_EOL. - "\t".''.$group['name'].''.PHP_EOL. + "\t".''.trim($group['name']).''.PHP_EOL. ''; } } @@ -236,7 +236,7 @@ private function echoPhoneBookGrandStream($uri):void $groupId = $bookUsers[$userData['userid']]??''; $phoneBook.=''.PHP_EOL. "\t".''.$userData['user_id'].''.PHP_EOL. - "\t".''.$userData['username'].''.PHP_EOL. + "\t".''.trim($userData['username']).''.PHP_EOL. "\t".''.PHP_EOL. "\t\t".''.$userData['number'].''.PHP_EOL. "\t\t".'0'.PHP_EOL. From 0da51889e2edb55afc7252cd424097e993093e12 Mon Sep 17 00:00:00 2001 From: apor Date: Tue, 15 Oct 2024 13:40:38 +0300 Subject: [PATCH 45/51] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BD=D0=B8=D0=B3=D0=B8=20=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/RestAPI/Controllers/GetController.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Lib/RestAPI/Controllers/GetController.php b/Lib/RestAPI/Controllers/GetController.php index 4cb32ad..6f0d21f 100644 --- a/Lib/RestAPI/Controllers/GetController.php +++ b/Lib/RestAPI/Controllers/GetController.php @@ -203,11 +203,16 @@ private function echoPhoneBookGrandStream($uri):void ]; $groupsData = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); foreach ($groupsData as $group){ - $bookUsers[$group['user_id']] = $group['id']; + $bookUsers[$group['user_id']] = $group['group_id']; + + $idText = ''.$group['group_id'].''; + if(stripos($phoneBook,$idText) !== false){ + continue; + } $phoneBook.= ''.PHP_EOL. - "\t".''.$group['id'].''.PHP_EOL. + "\t".$idText.PHP_EOL. "\t".''.trim($group['name']).''.PHP_EOL. - ''; + ''.PHP_EOL; } } @@ -233,7 +238,7 @@ private function echoPhoneBookGrandStream($uri):void ]; $users = $manager->createBuilder($parameters)->getQuery()->execute()->toArray(); foreach ($users as $userData) { - $groupId = $bookUsers[$userData['userid']]??''; + $groupId = $bookUsers[$userData['user_id']]??''; $phoneBook.=''.PHP_EOL. "\t".''.$userData['user_id'].''.PHP_EOL. "\t".''.trim($userData['username']).''.PHP_EOL. From 31dab536a8cbd3b89e54c3e68fc762e735b6b627 Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Wed, 6 Nov 2024 10:14:27 +0700 Subject: [PATCH 46/51] Update for PHP 8.3 and Phalcon 5.8 --- Lib/WorkerProvisioningServerPnP.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/WorkerProvisioningServerPnP.php b/Lib/WorkerProvisioningServerPnP.php index 5057c1f..8f25c4a 100644 --- a/Lib/WorkerProvisioningServerPnP.php +++ b/Lib/WorkerProvisioningServerPnP.php @@ -51,12 +51,13 @@ public function getSettings($debug = false):void $this->url = "$protocol://$data->pbx_host:$http_port/pbxcore/api/autoprovision"; $re = '/\w{2}:?\w{2}:?\w{2}:?\w{2}:?\w{2}:?\w{2}/m'; - preg_match_all($re, strtolower(str_replace(':', '', $data->mac_white)), $this->mac_white, PREG_SET_ORDER); + + preg_match_all($re, strtolower(str_replace(':', '', $data->mac_white??'')), $this->mac_white, PREG_SET_ORDER); if (count($this->mac_white) > 0) { $this->mac_white = array_merge(...$this->mac_white); } - preg_match_all($re, strtolower(str_replace(':', '', $data->mac_black)), $this->mac_black, PREG_SET_ORDER); + preg_match_all($re, strtolower(str_replace(':', '', $data->mac_black??'')), $this->mac_black, PREG_SET_ORDER); if (count($this->mac_black) > 0) { $this->mac_black = array_merge(...$this->mac_black); } From fb60a770ddb193ce2a011644750cc5182e00ea9c Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 19 Nov 2024 02:03:46 +0300 Subject: [PATCH 47/51] Added translation using Weblate (Croatian) --- Messages/hr.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/hr.php diff --git a/Messages/hr.php b/Messages/hr.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/hr.php @@ -0,0 +1 @@ + Date: Mon, 18 Nov 2024 23:04:13 +0000 Subject: [PATCH 48/51] Translated using Weblate (Croatian) Currently translated at 100.0% (29 of 29 strings) Translation: MIKOPBX/ModuleAutoprovision Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautoprovision/hr/ --- Messages/hr.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Messages/hr.php b/Messages/hr.php index b3d9bbc..52cdd47 100644 --- a/Messages/hr.php +++ b/Messages/hr.php @@ -1 +1,54 @@ 'PBX mrežna adresa', + /* + * MikoPBX - free phone system for small business + * Copyright © 2017-2023 Alexey Portnov and Nikolay Beketov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + */ + 'repModuleAutoprovision' => 'Modul - %repesent%', + 'mo_ModuleAutoprovision' => 'Modul za automatsku konfiguraciju telefona', + 'BreadcrumbModuleAutoprovision' => 'Modul za automatsku konfiguraciju telefona', + 'SubHeaderModuleAutoprovision' => 'Pomoć pri postavljanju SIP telefona', + 'mod_Autoprovision_Extension' => 'Predložak kućnog broja', + 'mod_Autoprovision_pbx_host' => 'Adresa poslužitelja za registraciju telefona', + 'mod_Autoprovision_mac_black' => 'Crna lista telefonskih MAC adresa', + 'mod_Autoprovision_mac_white' => 'Bijela lista telefonskih MAC adresa', + 'mod_Autoprovision_additional_params' => 'Dodatne mogućnosti', + 'mod_Autoprovision_phone_settings_title' => 'Postavke telefona', + 'mod_Autoprovision_phone_templates' => 'Predlošci postavki', + 'mod_Autoprovision_general_settings' => 'URI postavke', + 'mod_Autoprovision_pnp' => 'PnP postavke', + 'mod_Autoprovision_addNew' => 'Dodati', + 'mod_Autoprovision_templates_uri_uri' => 'URI', + 'mod_Autoprovision_templates_uri_template' => 'Uzorak', + 'mod_Autoprovision_phone_settings_user' => 'Zaposlenik', + 'mod_Autoprovision_phone_settings_mac' => 'MAC adresa', + 'mod_Autoprovision_template_name' => 'Ime', + 'mod_Autoprovision_search_tags' => 'Pretraživanje...', + 'mod_Autoprovision_edit_template' => 'Uređivanje predloška', + 'mod_Autoprovision_end_edit_template' => 'Završite uređivanje', + 'mod_Autoprovision_other_pbx' => 'telefonski imenik', + 'mod_Autoprovision_other_pbx_name' => 'Naziv telefonske centrale', + 'mod_Autoprovision_templates_header' => 'Kada opisujete predložak, možete koristiti sljedeće parametre: {SIP_USER_NAME} - ime zaposlenika {SIP_NUM} - dodatni broj (prijava) {SIP_PASS} - lozinka', + 'mod_Autoprovision_templates_users_header' => 'Kada se opisuje MAC adresa, dopušteno je koristiti simbol % - što znači "bilo koji skup znakova"
+Uzorak 805e0c67% odgovarat će 805e0c670001 i 805e0c670002', + 'mod_Autoprovision_header' => 'Ako je modul omogućen, SIP račun "apv-miko-pbx" postaje dostupan na PBX-u +
Da biste automatski konfigurirali svoj telefon, morate ga vratiti na tvorničke postavke. +
Ako se telefon prvi put spaja na PBX, bit će registriran na računu "apv-miko-pbx". +
Da biste postavili svoj telefon, morate s njega nazvati broj “%extension%”, gdje je XXX interni broj na PBX-u. +

+Automatska konfiguracija moguća je samo za lokalnu mrežu poduzeća, za telefone Yealink, Snom, Fanvil.', +]; From ffa8bad6e0ee45534093b1e277cf9c609dc60fba Mon Sep 17 00:00:00 2001 From: Nikolay Beketov Date: Thu, 5 Jun 2025 12:54:48 +0300 Subject: [PATCH 49/51] Enhance module.json with wiki links and release settings; update MAC address handling in WorkerProvisioningServerPnP for better null safety. --- .github/workflows/build.yml | 15 +++++++++++++++ Lib/WorkerProvisioningServerPnP.php | 4 ++-- module.json | 11 ++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..406a5cd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,15 @@ +name: Build and Publish + +on: + push: + branches: + - master + - develop + workflow_dispatch: + +jobs: + build: + uses: mikopbx/.github-workflows/.github/workflows/extension-publish.yml@master + with: + initial_version: "1.62" + secrets: inherit \ No newline at end of file diff --git a/Lib/WorkerProvisioningServerPnP.php b/Lib/WorkerProvisioningServerPnP.php index 8f25c4a..927eddf 100644 --- a/Lib/WorkerProvisioningServerPnP.php +++ b/Lib/WorkerProvisioningServerPnP.php @@ -52,12 +52,12 @@ public function getSettings($debug = false):void $re = '/\w{2}:?\w{2}:?\w{2}:?\w{2}:?\w{2}:?\w{2}/m'; - preg_match_all($re, strtolower(str_replace(':', '', $data->mac_white??'')), $this->mac_white, PREG_SET_ORDER); + preg_match_all($re, strtolower(str_replace(':', '', $data->mac_white??'')), $this->mac_white??[], PREG_SET_ORDER); if (count($this->mac_white) > 0) { $this->mac_white = array_merge(...$this->mac_white); } - preg_match_all($re, strtolower(str_replace(':', '', $data->mac_black??'')), $this->mac_black, PREG_SET_ORDER); + preg_match_all($re, strtolower(str_replace(':', '', $data->mac_black??'')), $this->mac_black??[], PREG_SET_ORDER); if (count($this->mac_black) > 0) { $this->mac_black = array_merge(...$this->mac_black); } diff --git a/module.json b/module.json index 37429a1..9d33297 100644 --- a/module.json +++ b/module.json @@ -3,5 +3,14 @@ "moduleUniqueID":"ModuleAutoprovision", "support_email": "help@miko.ru", "version": "%ModuleVersion%", - "min_pbx_version": "2024.1.42" + "min_pbx_version": "2024.1.42", + "wiki_links": { + "ru": {"https://wiki.mikopbx.com/module-autoprovision": "https://docs.mikopbx.com/mikopbx/modules/miko/module-autoprovision"}, + "en": {"https://wiki.mikopbx.com/module-autoprovision": "https://docs.mikopbx.com/mikopbx/english/modules/miko/module-autoprovision"} + }, + "release_settings": { + "publish_release": true, + "changelog_enabled": true, + "create_github_release": true + } } \ No newline at end of file From 778c0413594a172c3277ea37b2e9f18b9e3f346a Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 29 Sep 2025 08:59:53 +0300 Subject: [PATCH 50/51] Added translation using Weblate (Hebrew) --- Messages/he.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/he.php diff --git a/Messages/he.php b/Messages/he.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/he.php @@ -0,0 +1 @@ + Date: Tue, 30 Sep 2025 04:50:14 +0300 Subject: [PATCH 51/51] Added translation using Weblate (Persian) --- Messages/fa.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 Messages/fa.php diff --git a/Messages/fa.php b/Messages/fa.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/fa.php @@ -0,0 +1 @@ +