ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilSCORMExplorer.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
34require_once("./Services/UIComponent/Explorer/classes/class.ilExplorer.php");
35require_once("./Modules/ScormAicc/classes/SCORM/class.ilSCORMTree.php");
36
38{
39
45 public $slm_obj;
46
53 public function __construct($a_target, &$a_slm_obj)
54 {
55 parent::__construct($a_target);
56 $this->slm_obj = $a_slm_obj;
57 $this->tree = new ilSCORMTree($a_slm_obj->getId());
58 $this->root_id = $this->tree->readRootId();
59 $this->checkPermissions(false);
60 $this->outputIcons(true);
61 $this->setOrderColumn("");
62 }
63
64 public function getItem($a_node_id)
65 {
66 return new ilSCORMItem($a_node_id);
67 }
68
69 public function getIconImagePathPrefix()
70 {
71 return "scorm/";
72 }
73
74 public function getNodesToSkip()
75 {
76 return 2;
77 }
78
79
86 public function formatHeader($tpl, $a_obj_id, $a_option)
87 {
88 global $DIC;
89 $lng = $DIC['lng'];
90 $ilias = $DIC['ilias'];
91
92 $tpl = new ilTemplate("tpl.tree.html", true, true, "Services/UIComponent/Explorer");
93
94 $tpl->setCurrentBlock("row");
95 $tpl->setVariable("TITLE", $lng->txt("cont_manifest"));
96 $tpl->setVariable("LINK_TARGET", $this->target . "&" . $this->target_get . "=" . $a_obj_id);
97 $tpl->setVariable("TARGET", " target=\"" . $this->frame_target . "\"");
98 $tpl->parseCurrentBlock();
99
100 $this->output[] = $tpl->get();
101 }
102
110 public function createTarget($a_type, $a_child, $a_highlighted_subtree = false, $a_append_anch = true)
111 {
112 // SET expand parameter:
113 // positive if object is expanded
114 // negative if object is compressed
115 $a_child = ($a_type == '+')
116 ? $a_child
117 : -(int) $a_child;
118
119 return $_SERVER["PATH_INFO"] . "?cmd=explorer&ref_id=" . $this->slm_obj->getRefId() . "&scexpand=" . $a_child;
120 }
121
126 public function setOutput($parent_id, $a_depth = 1, $a_obj_id = 0, $a_highlighted_subtree = false)
127 {
128 $this->format_options = $this->createOutputArray($parent_id);
129 }
130
138 protected function createOutputArray($a_parent_id, $options = array())
139 {
140 $types_do_not_display = array("sos", "sma");
141 $types_do_not_load = array("srs");
142
143 if (!isset($a_parent_id)) {
144 $this->ilias->raiseError(get_class($this) . "::setOutput(): No node_id given!", $this->ilias->error_obj->WARNING);
145 }
146
147 if (!$this->showChilds($a_parent_id)) {
148 return array();
149 }
150
151 foreach ($this->tree->getChilds($a_parent_id, $this->order_column) as $key => $child) {
152 if (in_array($child["c_type"], $types_do_not_load)) {
153 continue;
154 }
155
156 $option = array();
157 $option["parent"] = $child["parent"];
158 $option["id"] = $child["child"];
159 $option["title"] = $child["title"];
160 $option["c_type"] = $child["c_type"];
161 $option["obj_id"] = $child["obj_id"];
162 $option["desc"] = "obj_" . $child["c_type"];
163 $option["container"] = false;
164 $option["visible"] = !in_array($child["c_type"], $types_do_not_display);
165
166 if ($this->showChilds($option["id"])) {
167 $option = $this->createOutputArray($option["id"], $option);
168 }
169
170 $options["childs"][] = $option;
171 }
172
173 return $options;
174 }
175
179 public function isVisible($a_id, $a_type)
180 {
181 if ($a_type == "sre") {
182 return false;
183 } else {
184 return true;
185 }
186 }
187
195 public function getOutput($jsApi = false)
196 {
197 $output = $this->createOutput($this->format_options, $jsApi);
198
199 return $output->get();
200 }
201
210 public function createOutput($option, $jsApi)
211 {
212 global $DIC;
213 $ilBench = $DIC['ilBench'];
214
215 if ($option["visible"]) {
216 $tpl = new ilTemplate("tpl.sahs_tree_ul.html", true, true, "Modules/ScormAicc");
217 $tpl = $this->insertObject($option, $tpl, $jsApi);
218 } else {
219 $tpl = new ilTemplate("tpl.sahs_tree_free.html", true, true, "Modules/ScormAicc");
220 }
221
222 if (is_array($option["childs"]) && count($option["childs"])) {
223 foreach ($option["childs"] as $key => $ch_option) {
224 $tpl->setCurrentBlock("childs");
225 $tpl->setVariable("CHILDS", $this->createOutput($ch_option, $jsApi)->get());
226 $tpl->parseCurrentBlock();
227 }
228 }
229
230 return $tpl;
231 }
232
241 public function isClickable($a_type, $a_id = 0, $a_obj = 0)
242 {
243 if ($a_type != "sit") {
244 return false;
245 } else {
246 if (is_object($a_obj)) {
247 $sc_object = $a_obj;
248 } else {
249 $sc_object = new ilSCORMItem($a_id);
250 }
251 if ($sc_object->getIdentifierRef() != "") {
252 return true;
253 }
254 }
255 return false;
256 }
257
267 protected function insertObject($option, ilTemplate $tpl, $jsApi)
268 {
269 if (!is_array($option) || !isset($option["id"])) {
270 $this->ilias->raiseError(get_class($this) . "::insertObject(): Missing parameter or wrong datatype! " .
271 "options:" . var_dump($option), $this->ilias->error_obj->WARNING);
272 }
273
274 //get scorm item
275 $sc_object = new ilSCORMItem($option["id"]);
276 $id_ref = $sc_object->getIdentifierRef();
277
278 //get scorm resource ref id
279 $sc_res_id = ilSCORMResource::_lookupIdByIdRef($id_ref, $sc_object->getSLMId());
280
281 //get scorm type
282 $scormtype = strtolower(ilSCORMResource::_lookupScormType($sc_res_id));
283
284 //is scorm clickabke
285 $clickable = $this->isClickable($option["c_type"], $option["id"], $sc_object);
286
287 if ($this->output_icons && $clickable) {
288 $this->getOutputIcons($tpl, $option, $option["id"], $scormtype);
289 }
290
291 if ($clickable) { // output link
292 $tpl->setCurrentBlock("link");
293 $frame_target = $this->buildFrameTarget($option["c_type"], $option["id"], $option["obj_id"]);
294 if ($frame_target != "") {
295 $tpl->setVariable("TITLE", ilUtil::shortenText($option["title"], $this->textwidth, true));
296 $tpl->setVariable("LINK_TARGET", "javascript:void(0);");
297 if ($jsApi == true) {
298 $tpl->setVariable("ONCLICK", " onclick=\"parent.API.IliasLaunch('" . $option["id"] . "');return false;\"");
299 } else {
300 $tpl->setVariable("ONCLICK", " onclick=\"parent.APIFRAME.setupApi();parent.APIFRAME.API."
301 . ($scormtype == 'asset' ? 'IliasLaunchAsset' : 'IliasLaunchSahs')
302 . "('" . $option["id"] . "');return false;\"");
303 }
304 }
305 $tpl->parseCurrentBlock();
306 } else { // output text only
307 $tpl->setCurrentBlock("text");
308 $tpl->setVariable("OBJ_TITLE", ilUtil::shortenText($option["title"], $this->textwidth, true));
309 $tpl->parseCurrentBlock();
310 }
311
312 $tpl->setCurrentBlock("li");
313 $tpl->parseCurrentBlock();
314
315 return $tpl;
316 }
317
326 public function getOutputIcons(&$tpl, $a_option, $a_node_id, $scormtype = "sco")
327 {
328 global $DIC;
329 $lng = $DIC['lng'];
330
331 $tpl->setCurrentBlock("icon");
332
333 if ($scormtype == 'asset') {
334 $tpl->setVariable('ICON_IMAGE', ilUtil::getImagePath($this->getIconImagePathPrefix() . "asset.svg"));
335 $tpl->setVariable('TXT_ALT_IMG', '');
336 $tpl->parseCurrentBlock();
337 return;
338 }
339
341 $a_node_id,
342 0,
343 $this->slm_obj->getId()
344 );
345
346 // status
347 $status = ($trdata["cmi.core.lesson_status"] == "")
348 ? "not attempted"
349 : $trdata["cmi.core.lesson_status"];
350
351 $statusChar = strtolower(substr($status, 0, 1));
352 if ($statusChar == "f") {
353 $status = "failed";
354 } elseif ($statusChar == "b") {
355 $status = "browsed";
356 } elseif ($statusChar == "c") {
357 $status = "completed";
358 } elseif ($statusChar == "n") {
359 $status = "not_attempted";
360 } elseif ($statusChar == "p") {
361 $status = "passed";
362 } elseif ($statusChar == "r") {
363 $status = "running";
364 }
365
366 $alt = $lng->txt("cont_status") . ": " .
367 $lng->txt("cont_sc_stat_" . str_replace(" ", "_", $status));
368
369 // score
370 if ($trdata["cmi.core.score.raw"] != "") {
371 $alt .= ", " . $lng->txt("cont_credits") .
372 ": " . $trdata["cmi.core.score.raw"];
373 }
374
375 // total time
376 if ($trdata["cmi.core.total_time"] != "" &&
377 $trdata["cmi.core.total_time"] != "0000:00:00.00") {
378 $alt .= ", " . $lng->txt("cont_total_time") .
379 ": " . $trdata["cmi.core.total_time"];
380 }
381
382 $tpl->setVariable("ICON_NAME", 'scoIcon' . $a_node_id);
383 $tpl->setVariable("ICON_IMAGE", ilUtil::getImagePath($this->getIconImagePathPrefix() . str_replace(" ", "_", $status) . ".svg"));
384 $tpl->setVariable("TXT_ALT_IMG", $alt);
385 $tpl->parseCurrentBlock();
386 }
387}
An exception for terminatinating execution or to throw for unit testing.
Class ilExplorer class for explorer view in admin frame.
showChilds($a_parent_id)
determines wether the childs of an object should be shown or not note: this standard implementation a...
outputIcons($a_icons)
output icons
checkPermissions($a_check)
check permissions via rbac
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
get frame target (may be overwritten by derived classes)
setOrderColumn($a_column)
set the order column @access public
Explorer View for SCORM Learning Modules.
setOutput($parent_id, $a_depth=1, $a_obj_id=0, $a_highlighted_subtree=false)
possible output array is set
createOutput($option, $jsApi)
recursive creation of output templates
createOutputArray($a_parent_id, $options=array())
recursivi creating of outputs
getOutput($jsApi=false)
Creates output template.
isVisible($a_id, $a_type)
formatHeader($tpl, $a_obj_id, $a_option)
overwritten method from base class @access public
isClickable($a_type, $a_id=0, $a_obj=0)
can i click on the module name
__construct($a_target, &$a_slm_obj)
Constructor @access public.
insertObject($option, ilTemplate $tpl, $jsApi)
insert the option data in $tpl
getOutputIcons(&$tpl, $a_option, $a_node_id, $scormtype="sco")
tpl is filled with option state
createTarget($a_type, $a_child, $a_highlighted_subtree=false, $a_append_anch=true)
Creates Get Parameter @access private.
static _lookupTrackingDataOfUser($a_item_id, $a_user_id=0, $a_obj_id=0)
static _lookupIdByIdRef($a_id_ref, $a_slm_id)
static _lookupScormType($a_obj_id)
SCORM Object Tree.
special template class to simplify handling of ITX/PEAR
static shortenText( $a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
global $ilBench
Definition: ilias.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
redirection script todo: (a better solution should control the processing via a xml file)
$_SERVER['HTTP_HOST']
Definition: raiseError.php:10
$a_type
Definition: workflow.php:92
$DIC
Definition: xapitoken.php:46