Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
CreatorConfig
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 8
342
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 addInteraction
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 addInfoControl
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 addPlugin
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 removePlugin
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
12
 toArray
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
12
 init
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
20
 prepare
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3/*
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; under version 2
7 * of the License (non-upgradable).
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 *
18 * Copyright (c) 2014 (original work) Open Assessment Technologies SA;
19 *
20 */
21
22namespace oat\taoQtiItem\model;
23
24/**
25 * Interface defining required method for a plugin
26 *
27 * @package taoQtiItem
28 */
29class CreatorConfig extends Config
30{
31    protected $interactions = [];
32    protected $infoControls = [];
33    protected $plugins      = [];
34
35    public function __construct(array $properties = [], array $extendedControlEndpoints = [])
36    {
37        $this->properties = $properties;
38        $this->controlEndpoints = array_merge($this->controlEndpoints, $extendedControlEndpoints);
39    }
40
41    // hard coded urls for using by item creator
42    protected $controlEndpoints = [
43        'itemDataUrl' => ['taoQtiItem', 'QtiCreator', 'getItemData'],
44        'loadCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'load'],
45        'downloadCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'download'],
46
47        'saveItemUrl' => ['taoQtiItem', 'QtiCreator', 'saveItem'],
48        'saveCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'save'],
49
50        'portableElementAddResourcesUrl' => ['taoQtiItem', 'PortableElement', 'addRequiredResources'],
51
52        'mediaSourcesUrl' => ['taoQtiItem', 'QtiCreator', 'getMediaSources'],
53        'getFilesUrl' => ['taoItems', 'ItemContent', 'files'],
54        'fileAccessUrl' => ['taoQtiItem', 'QtiCreator', 'getFile'],
55
56        'fileExistsUrl' => ['taoItems', 'ItemContent', 'fileExists'],
57        'fileUploadUrl' => ['taoItems', 'ItemContent', 'upload'],
58        'fileDownloadUrl' => ['taoItems', 'ItemContent', 'download'],
59        'fileDeleteUrl' => ['taoItems', 'ItemContent', 'delete'],
60
61        'previewUrl' => ['taoQtiItem', 'QtiPreview', 'index'],
62        'previewRenderUrl' => ['taoQtiItem', 'QtiPreview', 'render'],
63        'previewSubmitUrl' => ['taoQtiItem', 'QtiPreview', 'submitResponses'],
64
65        'resourceMetadataUrl' => ['taoQtiItem', 'Metadata', 'resourceMetadata'],
66    ];
67
68    public function addInteraction($interactionFile)
69    {
70        $this->interactions[] = $interactionFile;
71    }
72
73    public function addInfoControl($infoControl)
74    {
75        $this->infoControls[] = $infoControl;
76    }
77
78    /**
79     * Add a plugin to the configuration
80     * @param string $name - the plugin name
81     * @param string $module - the plugin AMD module
82     * @param string $category - the plugin category
83     */
84    public function addPlugin($name, $module, $category)
85    {
86        $this->plugins[] = [
87            'name' => $name,
88            'module' => $module,
89            'category' => $category
90        ];
91    }
92
93    /**
94     * Remove a plugin from the configuration
95     * @param string $name - the plugin name
96     */
97    public function removePlugin($name)
98    {
99        foreach ($this->plugins as $key => $plugin) {
100            if ($plugin['name'] == $name) {
101                $this->plugins[$key]['exclude'] = true;
102            }
103        }
104    }
105
106    public function toArray()
107    {
108
109        $interactions = [];
110        foreach ($this->interactions as $interaction) {
111            unset($interaction['directory']);
112            $interactions[] = $interaction;
113        }
114
115        $infoControls = [];
116        foreach ($this->infoControls as $infoControl) {
117            unset($infoControl['directory']);
118            $infoControls[] = $infoControl;
119        }
120
121        return [
122            'properties'     => $this->properties,
123            'contextPlugins' => $this->plugins,
124            'interactions'   => $interactions,
125            'infoControls'   => $infoControls,
126        ];
127    }
128
129    public function init()
130    {
131        foreach ($this->interactions as $interaction) {
132            $this->prepare($interaction);
133        }
134        foreach ($this->infoControls as $infoControl) {
135            $this->prepare($infoControl);
136        }
137        foreach ($this->controlEndpoints as $key => $endpoint) {
138            $this->setProperty($key, \tao_helpers_Uri::url($endpoint[2], $endpoint[1], $endpoint[0]));
139        }
140
141        //as the config overrides the plugins, we get the list from the registry
142        $registry = QtiCreatorClientConfigRegistry::getRegistry();
143        $this->plugins = array_merge($this->plugins, $registry->getPlugins());
144    }
145
146    protected function prepare($hook)
147    {
148
149        if (isset($this->properties['uri'])) {
150            $item = new \core_kernel_classes_Resource($this->properties['uri']);
151
152            //check for implementation in debugging state:
153            if (isset($hook['debug']) && $hook['debug']) {
154                //add required resources:
155                $registry = new $hook['registry']();
156                $registry->addRequiredResources($hook['typeIdentifier'], $item);
157                \common_Logger::d('added ' . $hook['registry'] . ' ' . $hook['typeIdentifier']);
158            }
159        } else {
160            throw new \common_Exception('cannot prepare hook because of missing property in config : "uri" ');
161        }
162    }
163}