ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilCharSelectorGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4// Config must be included generally for availability of constants
5require_once('Services/UIComponent/CharSelector/classes/ilCharSelectorConfig.php');
6
11{
15 protected $lng;
16
20 protected $ctrl;
21
25 protected $tpl;
26
31 private static $allowed_guis = array(
32 'assQuestionGUI',
33 'ilAssQuestionFeedbackEditingGUI',
34 'ilAssQuestionHintGUI',
35 'ilObjTestSettingsGeneralGUI',
36 'ilTestScoringGUI'
37 );
38
42 private static $current_gui;
43
47 private $config = null;
48
52 private $added_to_page = false;
53
54
59 public function __construct($a_context = ilCharSelectorConfig::CONTEXT_NONE)
60 {
61 global $DIC;
62
63 $this->lng = $DIC->language();
64 $this->ctrl = $DIC->ctrl();
65 $this->tpl = $DIC["tpl"];
66 $this->config = new ilCharSelectorConfig($a_context);
67 }
68
73 public static function _isAllowed()
74 {
75 global $DIC;
76
77 $ilCtrl = $DIC->ctrl();
78
79 // get the command class
80 // with correct case for checking parent classes
81 foreach ($ilCtrl->getCallHistory() as $call) {
82 if ($call['mode'] == 'execComm') {
83 $class = $call['class'];
84 }
85 }
86
87 // check the class and her parent classes
88 while ($class != false) {
89 if (in_array($class, self::$allowed_guis)) {
90 return true;
91 }
92 $class = get_parent_class($class);
93 }
94
95 return false;
96 }
97
105 public static function _getCurrentGUI(ilObjTest $a_test_obj = null)
106 {
107 if (!isset(self::$current_gui)) {
108 self::$current_gui = new ilCharSelectorGUI();
109 self::$current_gui->setConfig(ilCharSelectorConfig::_getCurrentConfig($a_test_obj));
110 }
111 return self::$current_gui;
112 }
113
118 public function setConfig(ilCharSelectorConfig $a_config)
119 {
120 $this->config = $a_config;
121 }
122
127 public function getConfig()
128 {
129 return $this->config;
130 }
131
136 public function addFormProperties(ilPropertyFormGUI $a_form)
137 {
139 $lng->loadLanguageModule('adve');
140
141 require_once('Services/UIComponent/CharSelector/classes/class.ilCharSelectorRadioGroupInputGUI.php');
142 $availability = new ilCharSelectorRadioGroupInputGUI($lng->txt('char_selector_' . $this->config->getContext()), 'char_selector_availability');
143 $inactive = new ilRadioOption($lng->txt('char_selector_inactive_' . $this->config->getContext()), ilCharSelectorConfig::INACTIVE);
144 $inactive->setInfo($lng->txt('char_selector_inactive_info_' . $this->config->getContext()));
145 $inherit = new ilRadioOption($lng->txt('char_selector_inherit_' . $this->config->getContext()), ilCharSelectorConfig::INHERIT);
146 $inherit->setInfo($lng->txt('char_selector_inherit_info_' . $this->config->getContext()));
147 $enabled = new ilRadioOption($lng->txt('char_selector_enabled_' . $this->config->getContext()), ilCharSelectorConfig::ENABLED);
148 $enabled->setInfo($lng->txt('char_selector_enabled_info_' . $this->config->getContext()));
149 $disabled = new ilRadioOption($lng->txt('char_selector_disabled_' . $this->config->getContext()), ilCharSelectorConfig::DISABLED);
150 $disabled->setInfo($lng->txt('char_selector_disabled_info_' . $this->config->getContext()));
151
152 $blocks = new ilSelectInputGUI($lng->txt('char_selector_blocks'), 'char_selector_blocks');
153 $blocks->setInfo($lng->txt('char_selector_blocks_info'));
154 $blocks->setOptions($this->config->getBlockOptions());
155 $blocks->setMulti(true);
156 $enabled->addSubItem($blocks);
157
158 $custom_items = new ilTextAreaInputGUI($lng->txt('char_selector_custom_items'), 'char_selector_custom_items');
159 $tpl = new ilTemplate("tpl.char_selector_custom_info.html", true, true, "Services/UIComponent/CharSelector");
160 $tpl->setVariable('1', $lng->txt('char_selector_custom_items_info1'));
161 $tpl->setVariable('2a', $lng->txt('char_selector_custom_items_info2a'));
162 $tpl->setVariable('2b', $lng->txt('char_selector_custom_items_info2b'));
163 $tpl->setVariable('3a', $lng->txt('char_selector_custom_items_info3a'));
164 $tpl->setVariable('3b', $lng->txt('char_selector_custom_items_info3b'));
165 $tpl->setVariable('4a', $lng->txt('char_selector_custom_items_info4a'));
166 $tpl->setVariable('4b', $lng->txt('char_selector_custom_items_info4b'));
167 $tpl->setVariable('5a', $lng->txt('char_selector_custom_items_info5a'));
168 $tpl->setVariable('5b', $lng->txt('char_selector_custom_items_info5b'));
169 $tpl->setVariable('6a', $lng->txt('char_selector_custom_items_info6a'));
170 $tpl->setVariable('6b', $lng->txt('char_selector_custom_items_info6b'));
171 $custom_items->setInfo($tpl->get());
172 $enabled->addSubItem($custom_items);
173
174 switch ($this->config->getContext()) {
176 $availability->addOption($inactive);
177 $availability->addOption($enabled);
178 $availability->addOption($disabled);
179 $a_form->addItem($availability);
180 break;
181
184 $availability->addOption($inherit);
185 $availability->addOption($enabled);
186 $availability->addOption($disabled);
187 $a_form->addItem($availability);
188 break;
189 }
190 }
191
192
198 public function setFormValues(ilPropertyFormGUI $a_form)
199 {
200 $a_form->getItemByPostVar('char_selector_availability')->setValue($this->config->getAvailability());
201 $a_form->getItemByPostVar('char_selector_blocks')->setValue($this->config->getAddedBlocks());
202 $a_form->getItemByPostVar('char_selector_custom_items')->setValue($this->config->getCustomItems());
203 }
204
205
211 public function getFormValues(ilPropertyFormGUI $a_form)
212 {
213 $this->config->setAvailability($a_form->getInput('char_selector_availability'));
214 $this->config->setAddedBlocks($a_form->getInput('char_selector_blocks'));
215 $this->config->setCustomItems($a_form->getInput('char_selector_custom_items'));
216 }
217
223 public function addToPage()
224 {
228
229 // don't add the panel twice
230 if ($this->added_to_page) {
231 return;
232 }
233
234 $lng->loadLanguageModule('adve');
235
236 // prepare the configuration for the js script
237 $this->jsconfig = new stdClass();
238 $this->jsconfig->pages = $this->config->getCharPages();
239 $this->jsconfig->ajax_url = $ilCtrl->getLinkTargetByClass("ilcharselectorgui", "saveState", "", true);
240 $this->jsconfig->open = (int) $_SESSION['char_selector_open'];
241 $this->jsconfig->current_page = (int) $_SESSION['char_selector_current_page'];
242 $this->jsconfig->current_subpage = (int) $_SESSION['char_selector_current_subpage'];
243
244 // provide texts to be dynamically rendered in the js script
245 $this->jstexts = new stdClass();
246 $this->jstexts->page = $lng->txt('page');
247 // fau: testNav - add texts for open/close char selector actions in the question menu
248 $this->jstexts->open= $lng->txt('char_selector_menu_open');
249 $this->jstexts->close= $lng->txt('char_selector_menu_close');
250 // fau.
251
252 // add everything neded to the page
253 // addLightbox() is just used to add the panel template outside the body
254 // The panel template is added as <script> to be not included in the DOM by default
255 // It will be included by js below the main header when the selector is switched on
256 $tpl->addCss(ilUtil::getStyleSheetLocation('', 'char_selector_style.css', 'Services/UIComponent/CharSelector'));
257 $tpl->addJavascript('./Services/UIComponent/CharSelector/js/ilCharSelector.js');
258 $tpl->addLightbox($this->getSelectorHTML(), 2);
259 $tpl->addOnLoadCode('il.CharSelector.init(' . json_encode($this->jsconfig) . ',' . json_encode($this->jstexts) . ')');
260 $this->added_to_page = true;
261 }
262
267 public function getSelectorHTML()
268 {
270 $tpl = new ilTemplate("tpl.char_selector_panel.html", true, true, "Services/UIComponent/CharSelector");
271
272 if (count($this->jsconfig->pages) > 1) {
273 $index = 0;
274 foreach ($this->jsconfig->pages as $page) {
275 $tpl->setCurrentBlock('page_option');
276 $tpl->setVariable("PAGE_INDEX", $index);
277 $tpl->setVariable("PAGE_NAME", $page[0]);
278 $tpl->parseCurrentBlock();
279 $index++;
280 }
281 }
282
283 $tpl->setVariable('TXT_PREVIOUS_PAGE', $lng->txt('previous'));
284 $tpl->setVariable('TXT_NEXT_PAGE', $lng->txt('next'));
285 $tpl->setVariable('TXT_PAGE', $lng->txt('page'));
286
287 $tpl->touchBlock('chars');
288 return '<script type="text/html" id="ilCharSelectorTemplate">' . $tpl->get() . '</script>';
289 }
290
291
297 public function saveState()
298 {
299 $_SESSION['char_selector_open'] = (int) $_GET['open'];
300 $_SESSION['char_selector_current_page'] = (int) $_GET['current_page'];
301 $_SESSION['char_selector_current_subpage'] = (int) $_GET['current_subpage'];
302
303 // debugging output (normally ignored by the js part)
304 echo json_encode(array(
305 'open' => $_SESSION['char_selector_open'],
306 'current_page' => $_SESSION['char_selector_current_page'],
307 'current_subpage' => $_SESSION['char_selector_current_subpage'],
308 ));
309 exit;
310 }
311
315 public function executeCommand()
316 {
318 $cmd = $ilCtrl->getCmd("saveState");
319 switch ($cmd) {
320 case 'saveState':
321 $this->$cmd();
322 break;
323 default:
324 return;
325 }
326 }
327}
$_GET["client_id"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const INACTIVE
Availabilities INACTIVE/INHERIT corresponds to an unconfigured selector (no database entries)
static _getCurrentConfig(ilObjTest $a_test_obj=null)
Get the configuration that should be used for the current selector.
const CONTEXT_NONE
Configuration contexts.
This shows a character selector.
getConfig()
Get the configuraton object.
static $current_gui
ilCharSelectorGUI instance used for the current selector
executeCommand()
execute command
__construct($a_context=ilCharSelectorConfig::CONTEXT_NONE)
Constructor.
addToPage()
Adds the the character selector to the ilias page Initializes the selector according to the state sav...
static _isAllowed()
Check if the CharSelector is allowed for the current GUI.
static $allowed_guis
list of command classes for which the char selector is allowed (can also be a parent class of the act...
saveState()
Save the selector panel state in the user session (This keeps the panel state between page moves)
getSelectorHTML()
Get the HTML code of the selector panel.
getFormValues(ilPropertyFormGUI $a_form)
Set the configuration based on the values of a property form.
addFormProperties(ilPropertyFormGUI $a_form)
add the configuration elements to a property form
setConfig(ilCharSelectorConfig $a_config)
Set the configuraton object.
static _getCurrentGUI(ilObjTest $a_test_obj=null)
Get the GUI that is used for the currently available selector (other GUI instances may exist for conf...
setFormValues(ilPropertyFormGUI $a_form)
Set the values in a property form based on the configuration.
Radio input for character seelctor definition.
This class represents a property form user interface.
addItem($a_item)
Add Item (Property, SectionHeader).
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
getItemByPostVar($a_post_var)
Get Item by POST variable.
This class represents an option in a radio group.
This class represents a selection list property in a property form.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
global $ilCtrl
Definition: ilias.php:18
$index
Definition: metadata.php:60
global $DIC
Definition: saml.php:7