Passed
Push — develop ( eb8832...f8f730 )
by Nikolay
05:34
created

PbxExtensionsProcessor::__construct()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 9
c 1
b 0
f 0
dl 0
loc 12
rs 9.9666
cc 4
nc 3
nop 0
1
<?php
2
/**
3
 * Copyright (C) MIKO LLC - All Rights Reserved
4
 * Unauthorized copying of this file, via any medium is strictly prohibited
5
 * Proprietary and confidential
6
 * Written by Nikolay Beketov, 11 2018
7
 *
8
 */
9
10
namespace MikoPBX\PBXCoreREST\Lib;
11
12
use Phalcon\Di\Injectable;
13
14
15
/**
16
 * Class PbxExtensionsProcessor
17
 *
18
 * @package MikoPBX\PBXCoreREST\Lib
19
 *
20
 * @property \MikoPBX\Common\Providers\LicenseProvider license
21
 * @property \MikoPBX\Common\Providers\TranslationProvider translation
22
 * @property \Phalcon\Config                               config
23
 */
24
class PbxExtensionsProcessor extends Injectable
25
{
26
    /**
27
     * Modules can expose additional REST methods and processors,
28
     * look at src/Modules/Config/RestAPIConfigInterface.php
29
     *
30
     * Every module config class can process requests under root rights,
31
     * if it described in Config class
32
     */
33
    public array $additionalProcessors;
34
35
    public function __construct()
36
    {
37
        $additionalModules          = $this->getDI()->getShared('pbxConfModules');
38
        $this->additionalProcessors = [];
39
        foreach ($additionalModules as $moduleConfigObject) {
40
            if ($moduleConfigObject->moduleUniqueId !== 'InternalConfigModule'
41
                && method_exists($moduleConfigObject, 'moduleRestAPICallback')
42
            ) {
43
                $this->additionalProcessors[] = [
44
                    $moduleConfigObject->moduleUniqueId,
45
                    $moduleConfigObject,
46
                    'moduleRestAPICallback',
47
                ];
48
            }
49
        }
50
    }
51
52
    /**
53
     *  Processes modules API requests
54
     *
55
     * @param array       $request
56
     *
57
     *
58
     * @return \MikoPBX\PBXCoreREST\Lib\PBXApiResult
59
     */
60
    public static function callBack(array $request): PBXApiResult
61
    {
62
        $action = $request['action'];
63
        $module = $request['module'];
64
65
        $res             = new PBXApiResult();
66
        $res->processor  = __METHOD__;
67
        $res->messages[] = "Unknown action - {$action} in modulesCallBack";
68
        $res->function   = $action;
69
70
        // Try process request over additional modules
71
        $processor = new PbxExtensionsProcessor();
72
        foreach ($processor->additionalProcessors as [$moduleUniqueId, $moduleConfigObject, $callBack]) {
73
            if (stripos($module, $moduleUniqueId) === 0) {
74
                $res = $moduleConfigObject->$callBack($request);
75
                break;
76
            }
77
        }
78
79
        return $res;
80
    }
81
}