Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
CreatorConfig
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 7
306
0.00% covered (danger)
0.00%
0 / 1
 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    // hard coded urls for using by item creator
36    protected $controlEndpoints = [
37        'itemDataUrl' => ['taoQtiItem', 'QtiCreator', 'getItemData'],
38        'loadCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'load'],
39        'downloadCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'download'],
40
41        'saveItemUrl' => ['taoQtiItem', 'QtiCreator', 'saveItem'],
42        'saveCssUrl' => ['taoQtiItem', 'QtiCssAuthoring', 'save'],
43
44        'portableElementAddResourcesUrl' => ['taoQtiItem', 'PortableElement', 'addRequiredResources'],
45
46        'mediaSourcesUrl' => ['taoQtiItem', 'QtiCreator', 'getMediaSources'],
47        'getFilesUrl' => ['taoItems', 'ItemContent', 'files'],
48        'fileAccessUrl' => ['taoQtiItem', 'QtiCreator', 'getFile'],
49
50        'fileExistsUrl' => ['taoItems', 'ItemContent', 'fileExists'],
51        'fileUploadUrl' => ['taoItems', 'ItemContent', 'upload'],
52        'fileDownloadUrl' => ['taoItems', 'ItemContent', 'download'],
53        'fileDeleteUrl' => ['taoItems', 'ItemContent', 'delete'],
54
55        'previewUrl' => ['taoQtiItem', 'QtiPreview', 'index'],
56        'previewRenderUrl' => ['taoQtiItem', 'QtiPreview', 'render'],
57        'previewSubmitUrl' => ['taoQtiItem', 'QtiPreview', 'submitResponses'],
58    ];
59
60    public function addInteraction($interactionFile)
61    {
62        $this->interactions[] = $interactionFile;
63    }
64
65    public function addInfoControl($infoControl)
66    {
67        $this->infoControls[] = $infoControl;
68    }
69
70    /**
71     * Add a plugin to the configuration
72     * @param string $name - the plugin name
73     * @param string $module - the plugin AMD module
74     * @param string $category - the plugin category
75     */
76    public function addPlugin($name, $module, $category)
77    {
78        $this->plugins[] = [
79            'name' => $name,
80            'module' => $module,
81            'category' => $category
82        ];
83    }
84
85    /**
86     * Remove a plugin from the configuration
87     * @param string $name - the plugin name
88     */
89    public function removePlugin($name)
90    {
91        foreach ($this->plugins as $key => $plugin) {
92            if ($plugin['name'] == $name) {
93                $this->plugins[$key]['exclude'] = true;
94            }
95        }
96    }
97
98    public function toArray()
99    {
100
101        $interactions = [];
102        foreach ($this->interactions as $interaction) {
103            unset($interaction['directory']);
104            $interactions[] = $interaction;
105        }
106
107        $infoControls = [];
108        foreach ($this->infoControls as $infoControl) {
109            unset($infoControl['directory']);
110            $infoControls[] = $infoControl;
111        }
112
113        return [
114            'properties'     => $this->properties,
115            'contextPlugins' => $this->plugins,
116            'interactions'   => $interactions,
117            'infoControls'   => $infoControls,
118        ];
119    }
120
121    public function init()
122    {
123
124        foreach ($this->interactions as $interaction) {
125            $this->prepare($interaction);
126        }
127        foreach ($this->infoControls as $infoControl) {
128            $this->prepare($infoControl);
129        }
130        foreach ($this->controlEndpoints as $key => $endpoint) {
131            $this->setProperty($key, \tao_helpers_Uri::url($endpoint[2], $endpoint[1], $endpoint[0]));
132        }
133
134        //as the config overrides the plugins, we get the list from the registry
135        $registry = QtiCreatorClientConfigRegistry::getRegistry();
136        $this->plugins = array_merge($this->plugins, $registry->getPlugins());
137    }
138
139    protected function prepare($hook)
140    {
141
142        if (isset($this->properties['uri'])) {
143            $item = new \core_kernel_classes_Resource($this->properties['uri']);
144
145            //check for implementation in debugging state:
146            if (isset($hook['debug']) && $hook['debug']) {
147                //add required resources:
148                $registry = new $hook['registry']();
149                $registry->addRequiredResources($hook['typeIdentifier'], $item);
150                \common_Logger::d('added ' . $hook['registry'] . ' ' . $hook['typeIdentifier']);
151            }
152        } else {
153            throw new \common_Exception('cannot prepare hook because of missing property in config : "uri" ');
154        }
155    }
156}