ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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{
16 private static $allowed_guis = array (
17 'assQuestionGUI',
18 'ilAssQuestionFeedbackEditingGUI',
19 'ilAssQuestionHintGUI',
20 'ilObjTestSettingsGeneralGUI',
21 'ilTestScoringGUI'
22 );
23
27 private static $current_gui;
28
32 private $config = null;
33
37 private $added_to_page = false;
38
39
44 public function __construct($a_context = ilCharSelectorConfig::CONTEXT_NONE)
45 {
46 $this->config = new ilCharSelectorConfig($a_context);
47 }
48
53 public static function _isAllowed()
54 {
55 global $ilCtrl;
56
57 // get the command class
58 // with correct case for checking parent classes
59 foreach ($ilCtrl->getCallHistory() as $call)
60 {
61 if ($call['mode'] == 'execComm')
62 {
63 $class = $call['class'];
64 }
65 }
66
67 // check the class and her parent classes
68 while ($class != false)
69 {
70 if (in_array($class, self::$allowed_guis))
71 {
72 return true;
73 }
74 $class = get_parent_class($class);
75 }
76
77 return false;
78 }
79
87 public static function _getCurrentGUI(ilObjTest $a_test_obj = null)
88 {
89 if (!isset(self::$current_gui))
90 {
91 self::$current_gui = new ilCharSelectorGUI();
92 self::$current_gui->setConfig(ilCharSelectorConfig::_getCurrentConfig($a_test_obj));
93 }
94 return self::$current_gui;
95 }
96
101 public function setConfig(ilCharSelectorConfig $a_config)
102 {
103 $this->config = $a_config;
104 }
105
110 public function getConfig()
111 {
112 return $this->config;
113 }
114
119 public function addFormProperties(ilPropertyFormGUI $a_form)
120 {
121 global $lng;
122 $lng->loadLanguageModule('adve');
123
124 require_once ('Services/UIComponent/CharSelector/classes/class.ilCharSelectorRadioGroupInputGUI.php');
125 $availability = new ilCharSelectorRadioGroupInputGUI($lng->txt('char_selector_'.$this->config->getContext()), 'char_selector_availability');
126 $inactive = new ilRadioOption($lng->txt('char_selector_inactive_'.$this->config->getContext()),ilCharSelectorConfig::INACTIVE);
127 $inactive->setInfo($lng->txt('char_selector_inactive_info_'.$this->config->getContext()));
128 $inherit = new ilRadioOption($lng->txt('char_selector_inherit_'.$this->config->getContext()),ilCharSelectorConfig::INHERIT);
129 $inherit->setInfo($lng->txt('char_selector_inherit_info_'.$this->config->getContext()));
130 $enabled = new ilRadioOption($lng->txt('char_selector_enabled_'.$this->config->getContext()), ilCharSelectorConfig::ENABLED);
131 $enabled->setInfo($lng->txt('char_selector_enabled_info_'.$this->config->getContext()));
132 $disabled = new ilRadioOption($lng->txt('char_selector_disabled_'.$this->config->getContext()), ilCharSelectorConfig::DISABLED);
133 $disabled->setInfo($lng->txt('char_selector_disabled_info_'.$this->config->getContext()));
134
135 $blocks = new ilSelectInputGUI($lng->txt('char_selector_blocks'), 'char_selector_blocks');
136 $blocks->setInfo($lng->txt('char_selector_blocks_info'));
137 $blocks->setOptions($this->config->getBlockOptions());
138 $blocks->setMulti(true);
139 $enabled->addSubItem($blocks);
140
141 $custom_items = new ilTextAreaInputGUI($lng->txt('char_selector_custom_items'),'char_selector_custom_items');
142 $tpl = new ilTemplate("tpl.char_selector_custom_info.html", true, true, "Services/UIComponent/CharSelector");
143 $tpl->setVariable('1',$lng->txt('char_selector_custom_items_info1'));
144 $tpl->setVariable('2a',$lng->txt('char_selector_custom_items_info2a'));
145 $tpl->setVariable('2b',$lng->txt('char_selector_custom_items_info2b'));
146 $tpl->setVariable('3a',$lng->txt('char_selector_custom_items_info3a'));
147 $tpl->setVariable('3b',$lng->txt('char_selector_custom_items_info3b'));
148 $tpl->setVariable('4a',$lng->txt('char_selector_custom_items_info4a'));
149 $tpl->setVariable('4b',$lng->txt('char_selector_custom_items_info4b'));
150 $tpl->setVariable('5a',$lng->txt('char_selector_custom_items_info5a'));
151 $tpl->setVariable('5b',$lng->txt('char_selector_custom_items_info5b'));
152 $tpl->setVariable('6a',$lng->txt('char_selector_custom_items_info6a'));
153 $tpl->setVariable('6b',$lng->txt('char_selector_custom_items_info6b'));
154 $custom_items->setInfo($tpl->get());
155 $enabled->addSubItem($custom_items);
156
157 switch($this->config->getContext())
158 {
160 $availability->addOption($inactive);
161 $availability->addOption($enabled);
162 $availability->addOption($disabled);
163 $a_form->addItem($availability);
164 break;
165
168 $availability->addOption($inherit);
169 $availability->addOption($enabled);
170 $availability->addOption($disabled);
171 $a_form->addItem($availability);
172 break;
173 }
174 }
175
176
182 public function setFormValues(ilPropertyFormGUI $a_form)
183 {
184 $a_form->getItemByPostVar('char_selector_availability')->setValue($this->config->getAvailability());
185 $a_form->getItemByPostVar('char_selector_blocks')->setValue($this->config->getAddedBlocks());
186 $a_form->getItemByPostVar('char_selector_custom_items')->setValue($this->config->getCustomItems());
187 }
188
189
195 public function getFormValues(ilPropertyFormGUI $a_form)
196 {
197 $this->config->setAvailability($a_form->getInput('char_selector_availability'));
198 $this->config->setAddedBlocks($a_form->getInput('char_selector_blocks'));
199 $this->config->setCustomItems($a_form->getInput('char_selector_custom_items'));
200 }
201
207 function addToPage()
208 {
209 global $ilCtrl, $tpl, $lng;
210
211 // don't add the panel twice
212 if ($this->added_to_page)
213 {
214 return;
215 }
216
217 $lng->loadLanguageModule('adve');
218
219 // prepare the configuration for the js script
220 $this->jsconfig = new stdClass();
221 $this->jsconfig->pages = $this->config->getCharPages();
222 $this->jsconfig->ajax_url = $ilCtrl->getLinkTargetByClass("ilcharselectorgui", "saveState", "", true);
223 $this->jsconfig->open = (int) $_SESSION['char_selector_open'];
224 $this->jsconfig->current_page = (int) $_SESSION['char_selector_current_page'];
225 $this->jsconfig->current_subpage = (int) $_SESSION['char_selector_current_subpage'];
226
227 // provide texts to be dynamically rendered in the js script
228 $this->jstexts = new stdClass();
229 $this->jstexts->page = $lng->txt('page');
230
231 // add everything neded to the page
232 // addLightbox() is just used to add the panel template outside the body
233 // The panel template is added as <script> to be not included in the DOM by default
234 // It will be included by js below the main header when the selector is switched on
235 $tpl->addCss(ilUtil::getStyleSheetLocation('','char_selector_style.css','Services/UIComponent/CharSelector'));
236 $tpl->addJavascript('./Services/UIComponent/CharSelector/js/ilCharSelector.js');
237 $tpl->addLightbox($this->getSelectorHTML(),2);
238 $tpl->addOnLoadCode('il.CharSelector.init('.json_encode($this->jsconfig).','.json_encode($this->jstexts).')');
239 $this->added_to_page = true;
240 }
241
247 {
248 global $lng;
249 $tpl = new ilTemplate("tpl.char_selector_panel.html", true, true, "Services/UIComponent/CharSelector");
250
251 if (count($this->jsconfig->pages) > 1)
252 {
253 $index = 0;
254 foreach ($this->jsconfig->pages as $page)
255 {
256 $tpl->setCurrentBlock('page_option');
257 $tpl->setVariable("PAGE_INDEX", $index);
258 $tpl->setVariable("PAGE_NAME", $page[0]);
259 $tpl->parseCurrentBlock();
260 $index++;
261 }
262 }
263
264 $tpl->setVariable('TXT_PREVIOUS_PAGE', $lng->txt('previous'));
265 $tpl->setVariable('TXT_NEXT_PAGE', $lng->txt('next'));
266 $tpl->setVariable('TXT_PAGE', $lng->txt('page'));
267
268 $tpl->touchBlock('chars');
269 return '<script type="text/html" id="ilCharSelectorTemplate">'.$tpl->get().'</script>';
270 }
271
272
278 function saveState()
279 {
280 $_SESSION['char_selector_open'] = (int) $_GET['open'];
281 $_SESSION['char_selector_current_page'] = (int) $_GET['current_page'];
282 $_SESSION['char_selector_current_subpage'] = (int) $_GET['current_subpage'];
283
284 // debugging output (normally ignored by the js part)
285 echo json_encode(array(
286 'open' => $_SESSION['char_selector_open'],
287 'current_page' => $_SESSION['char_selector_current_page'],
288 'current_subpage' => $_SESSION['char_selector_current_subpage'],
289 ));
290 exit;
291 }
292
296 function executeCommand()
297 {
298 global $ilCtrl;
299 $cmd = $ilCtrl->getCmd("saveState");
300 switch($cmd)
301 {
302 case 'saveState':
303 $this->$cmd();
304 break;
305 default:
306 return;
307 }
308 }
309}
310?>
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
$_SESSION["AccountId"]
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
exit
Definition: login.php:54
global $lng
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35