ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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 
34 require_once("./Services/UIComponent/Explorer/classes/class.ilExplorer.php");
35 require_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 }
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
static shortenText( $a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
get frame target (may be overwritten by derived classes)
createTarget($a_type, $a_child, $a_highlighted_subtree=false, $a_append_anch=true)
Creates Get Parameter private.
global $DIC
Definition: saml.php:7
insertObject($option, ilTemplate $tpl, $jsApi)
insert the option data in $tpl
getOutput($jsApi=false)
Creates output template.
checkPermissions($a_check)
check permissions via rbac
getOutputIcons(&$tpl, $a_option, $a_node_id, $scormtype="sco")
tpl is filled with option state
setOrderColumn($a_column)
set the order column public
static _lookupIdByIdRef($a_id_ref, $a_slm_id)
static _lookupScormType($a_obj_id)
createOutputArray($a_parent_id, $options=array())
recursivi creating of outputs
$a_type
Definition: workflow.php:92
setVariable($variable, $value='')
Sets a variable value.
Definition: IT.php:613
setOutput($parent_id, $a_depth=1, $a_obj_id=0, $a_highlighted_subtree=false)
possible output array is set
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
special template class to simplify handling of ITX/PEAR
SCORM Item.
showChilds($a_parent_id)
determines wether the childs of an object should be shown or not note: this standard implementation a...
redirection script todo: (a better solution should control the processing via a xml file) ...
Explorer View for SCORM Learning Modules.
isClickable($a_type, $a_id=0, $a_obj=0)
can i click on the module name
SCORM Object Tree.
isVisible($a_id, $a_type)
Class ilExplorer class for explorer view in admin frame.
setCurrentBlock($part="DEFAULT")
Überladene Funktion, die sich hier lokal noch den aktuellen Block merkt.
createOutput($option, $jsApi)
recursive creation of output templates
global $ilBench
Definition: ilias.php:18
__construct($a_target, &$a_slm_obj)
Constructor public.
$key
Definition: croninfo.php:18
static _lookupTrackingDataOfUser($a_item_id, $a_user_id=0, $a_obj_id=0)
outputIcons($a_icons)
output icons
parseCurrentBlock($part="DEFAULT")
Überladene Funktion, die auf den aktuelle Block vorher noch ein replace ausführt public...
formatHeader($tpl, $a_obj_id, $a_option)
overwritten method from base class public
readRootId()
read root id from database