ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMediaAliasItem.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
15 {
16  var $dom;
17  var $hier_id;
18  var $purpose;
20 
21  function ilMediaAliasItem(&$a_dom, $a_hier_id, $a_purpose, $a_pc_id = "")
22  {
23  $this->dom =& $a_dom;
24  $this->hier_id = $a_hier_id;
25  $this->purpose = $a_purpose;
26  $this->setPcId($a_pc_id);
27 //echo "+$a_pc_id+";
28  $this->item_node = $this->getMAItemNode($this->hier_id, $this->purpose,
29  $this->getPcId());
30 //var_dump($this->item_node);
31  }
32 
33  function getMAItemNode($a_hier_id, $a_purpose, $a_pc_id = "", $a_sub_element = "")
34  {
35  if ($a_pc_id != "")
36  {
37  $xpc = xpath_new_context($this->dom);
38  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']".$a_sub_element;
39  $res =& xpath_eval($xpc, $path);
40  if (count($res->nodeset) == 1)
41  {
42  return $res->nodeset[0];
43  }
44  }
45 
46  $xpc = xpath_new_context($this->dom);
47  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']".$a_sub_element;
48  $res =& xpath_eval($xpc, $path);
49  if (count($res->nodeset) > 0)
50  {
51  return $res->nodeset[0];
52  }
53  }
54 
55  function getParameterNodes($a_hier_id, $a_purpose, $a_pc_id = "")
56  {
57  if ($a_pc_id != "")
58  {
59  $xpc = xpath_new_context($this->dom);
60  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/Parameter";
61  $res =& xpath_eval($xpc, $path);
62  if (count($res->nodeset) > 0)
63  {
64  return $res->nodeset;
65  }
66  return array();
67  }
68 
69  $xpc = xpath_new_context($this->dom);
70  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/Parameter";
71  $res =& xpath_eval($xpc, $path);
72  if (count($res->nodeset) > 0)
73  {
74  return $res->nodeset;
75  }
76  }
77 
78  function getMapAreaNodes($a_hier_id, $a_purpose, $a_pc_id = "")
79  {
80  if ($a_pc_id != "")
81  {
82  $xpc = xpath_new_context($this->dom);
83  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/MapArea";
84  $res =& xpath_eval($xpc, $path);
85  if (count($res->nodeset) > 0)
86  {
87  return $res->nodeset;
88  }
89  return array();
90  }
91 
92  $xpc = xpath_new_context($this->dom);
93  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/MapArea";
94  $res =& xpath_eval($xpc, $path);
95  if (count($res->nodeset) > 0)
96  {
97  return $res->nodeset;
98  }
99  }
100 
106  function setPcId($a_pcid)
107  {
108  $this->pcid = $a_pcid;
109  }
110 
116  function getPcId()
117  {
118  return $this->pcid;
119  }
120 
126  function exists()
127  {
128  if (is_object($this->item_node))
129  {
130  return true;
131  }
132  else
133  {
134  return false;
135  }
136  }
137 
141  function insert()
142  {
143  $xpc = xpath_new_context($this->dom);
144  $path = "//PageContent[@HierId = '".$this->hier_id."']/MediaObject";
145  $res =& xpath_eval($xpc, $path);
146  if (count($res->nodeset) > 0)
147  {
148  $obj_node =& $res->nodeset[0];
149  $item_node =& $this->dom->create_element("MediaAliasItem");
150  $item_node =& $obj_node->append_child($item_node);
151  $item_node->set_attribute("Purpose", $this->purpose);
152  $this->item_node =& $item_node;
153  }
154  }
155 
159  function setWidth($a_width)
160  {
161  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
162  array("Caption", "TextRepresentation", "Parameter", "MapArea"),
163  "", array("Width" => $a_width), false);
164  }
165 
166 
170  function getWidth()
171  {
172  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
173  $this->getPcId(), "/Layout");
174  if (is_object($layout_node))
175  {
176  return $layout_node->get_attribute("Width");
177  }
178  }
179 
185  function definesSize()
186  {
187  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
188  $this->getPcId(), "/Layout");
189  if (is_object($layout_node))
190  {
191  return $layout_node->has_attribute("Width");
192  }
193  return false;
194  }
195 
199  function deriveSize()
200  {
201  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
202  $this->getPcId(), "/Layout");
203  if (is_object($layout_node))
204  {
205  if ($layout_node->has_attribute("Width"))
206  {
207  $layout_node->remove_attribute("Width");
208  }
209  if ($layout_node->has_attribute("Height"))
210  {
211  $layout_node->remove_attribute("Height");
212  }
213  }
214  }
215 
219  function setHeight($a_height)
220  {
221  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
222  array("Caption", "TextRepresentation", "Parameter", "MapArea"),
223  "", array("Height" => $a_height), false);
224  }
225 
226 
230  function getHeight()
231  {
232  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
233  $this->getPcId(), "/Layout");
234  if (is_object($layout_node))
235  {
236  return $layout_node->get_attribute("Height");
237  }
238  }
239 
240 
244  function setCaption($a_caption)
245  {
246  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Caption",
247  array("TextRepresentation", "Parameter", "MapArea"),
248  $a_caption, array("Align" => "bottom"));
249  }
250 
251 
255  function getCaption()
256  {
257  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
258  $this->getPcId(), "/Caption");
259  if (is_object($caption_node))
260  {
261  return $caption_node->get_content();
262  }
263  }
264 
270  function definesCaption()
271  {
272  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
273  $this->getPcId(), "/Caption");
274  if (is_object($caption_node))
275  {
276  return true;
277  }
278  return false;
279  }
280 
284  function deriveCaption()
285  {
286  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
287  $this->getPcId(), "/Caption");
288  if (is_object($caption_node))
289  {
290  $caption_node->unlink_node($caption_node);
291  }
292  }
293 
297  function setTextRepresentation($a_text_representation)
298  {
299  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "TextRepresentation",
300  array("Parameter", "MapArea"),
301  $a_text_representation, array());
302  }
303 
308  {
309  $text_representation_node = $this->getMAItemNode($this->hier_id, $this->purpose,
310  $this->getPcId(), "/TextRepresentation");
311  if (is_object($text_representation_node))
312  {
313  return $text_representation_node->get_content();
314  }
315  }
316 
323  {
324  $text_representation_node = $this->getMAItemNode($this->hier_id, $this->purpose,
325  $this->getPcId(), "/TextRepresentation");
326  if (is_object($text_representation_node))
327  {
328  return true;
329  }
330  return false;
331  }
332 
337  {
338  $text_representation_node = $this->getMAItemNode($this->hier_id, $this->purpose,
339  $this->getPcId(), "/TextRepresentation");
340  if (is_object($text_representation_node))
341  {
342  $text_representation_node->unlink_node($text_representation_node);
343  }
344  }
345 
346  function setHorizontalAlign($a_halign)
347  {
348  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
349  array("Caption", "TextRepresentation", "Parameter", "MapArea"),
350  "", array("HorizontalAlign" => $a_halign), false);
351  }
352 
353 
355  {
356  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
357  $this->getPcId(), "/Layout");
358  if (is_object($layout_node))
359  {
360  return $layout_node->get_attribute("HorizontalAlign");
361  }
362  }
363 
367  function setParameters($a_par_array)
368  {
369  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
370  $this->getPcId());
371  $par_arr = array();
372  for($i=0; $i < count($par_nodes); $i++)
373  {
374  $par_node =& $par_nodes[$i];
375  $par_node->unlink_node($par_node);
376  }
377 
378  if (is_array($a_par_array))
379  {
380  foreach($a_par_array as $par => $val)
381  {
382  $attributes = array ("Name" => $par, "Value" => $val);
383  ilDOMUtil::addElementToList($this->dom, $this->item_node,
384  "Parameter", array("MapArea"), "", $attributes);
385  /* $par_node =& $this->dom->create_element("Parameter");
386  $par_node =& $this->item_node->append_child($par_node);
387  $par_node->set_attribute("Name", $par);
388  $par_node->set_attribute("Value", $val); */
389  }
390  }
391  }
392 
397  {
398  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
399  $this->getPcId());
400  $par_arr = array();
401  for($i=0; $i < count($par_nodes); $i++)
402  {
403  $par_node =& $par_nodes[$i];
404  $par_arr[] = $par_node->get_attribute("Name")."=\"".$par_node->get_attribute("Value")."\"";
405  }
406  return implode($par_arr, ", ");
407  }
408 
412  function getParameters()
413  {
414  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
415  $this->getPcId());
416  $par_arr = array();
417  for($i=0; $i < count($par_nodes); $i++)
418  {
419  $par_node =& $par_nodes[$i];
420  $par_arr[$par_node->get_attribute("Name")] =
421  $par_node->get_attribute("Value");
422  }
423  return $par_arr;
424  }
425 
429  function getParameter($a_name)
430  {
431  }
432 
438  function definesParameters()
439  {
440  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
441  $this->getPcId());
442  if (count($par_nodes) > 0)
443  {
444  return true;
445  }
446  return false;
447  }
448 
452  function deriveParameters()
453  {
454  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
455  $this->getPcId());
456  if (count($par_nodes) > 0)
457  {
458  for($i=0; $i < count($par_nodes); $i++)
459  {
460  $par_node =& $par_nodes[$i];
461  $par_node->unlink_node($par_node);
462  }
463  }
464  }
465 
466 
470  function getMapAreas()
471  {
472  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
473  $this->getPcId());
474  $maparea_arr = array();
475  for($i=0; $i < count($ma_nodes); $i++)
476  {
477  $maparea_node = $ma_nodes[$i];
478  $childs = $maparea_node->child_nodes();
479  $link = array();
480  if ($childs[0]->node_name() == "ExtLink")
481  {
482  $link = array("LinkType" => "ExtLink",
483  "Href" => $childs[0]->get_attribute("Href"),
484  "Title" => $childs[0]->get_content());
485  }
486  if ($childs[0]->node_name() == "IntLink")
487  {
488  $link = array("LinkType" => "IntLink",
489  "Target" => $childs[0]->get_attribute("Target"),
490  "Type" => $childs[0]->get_attribute("Type"),
491  "TargetFrame" => $childs[0]->get_attribute("TargetFame"),
492  "Title" => $childs[0]->get_content());
493  }
494  $maparea_arr[] = array(
495  "Nr" => $i + 1,
496  "Shape" => $maparea_node->get_attribute("Shape"),
497  "Coords" => $maparea_node->get_attribute("Coords"),
498  "Link" => $link);
499  }
500 
501  return $maparea_arr;
502  }
503 
507  function setAreaTitle($a_nr, $a_title)
508  {
509  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
510  $this->getPcId());
511  if (is_object($ma_nodes[$a_nr - 1]))
512  {
513  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
514  if (is_object($childs[0]) &&
515  ($childs[0]->node_name() == "IntLink" || $childs[0]->node_name() == "ExtLink"))
516  {
517  $childs[0]->set_content($a_title);
518  }
519  }
520  }
521 
525  function setAreaIntLink($a_nr, $a_type, $a_target, $a_target_frame)
526  {
527  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
528  $this->getPcId());
529  if (is_object($ma_nodes[$a_nr - 1]))
530  {
531  $title = $this->getTitleOfArea($a_nr);
532  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
533  $attributes = array("Type" => $a_type, "Target" => $a_target,
534  "TargetFrame" => $a_target_frame);
535  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "IntLink",
536  array(""), $title, $attributes);
537  }
538  }
539 
543  function setAreaExtLink($a_nr, $a_href)
544  {
545  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
546  $this->getPcId());
547  if (is_object($ma_nodes[$a_nr - 1]))
548  {
549  $title = $this->getTitleOfArea($a_nr);
550  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
551  $attributes = array("Href" => $a_href);
552  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "ExtLink",
553  array(""), $title, $attributes);
554  }
555  }
556 
560  function setShape($a_nr, $a_shape_type, $a_coords)
561  {
562  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
563  $this->getPcId());
564  if (is_object($ma_nodes[$a_nr - 1]))
565  {
566  $ma_nodes[$a_nr - 1]->set_attribute("Shape", $a_shape_type);
567  $ma_nodes[$a_nr - 1]->set_attribute("Coords", $a_coords);
568  }
569  }
570 
574  function addMapArea($a_shape_type, $a_coords, $a_title,
575  $a_link)
576  {
577  $attributes = array("Shape" => $a_shape_type,
578  "Coords" => $a_coords);
579  $ma_node = ilDOMUtil::addElementToList($this->dom, $this->item_node,
580  "MapArea", array(), "", $attributes);
581 
582  if ($a_link["LinkType"] == "int" || $a_link["LinkType"] == "IntLink")
583  {
584  $attributes = array("Type" => $a_link["Type"],
585  "TargetFrame" => $a_link["TargetFrame"],
586  "Target" => $a_link["Target"]);
587  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "IntLink",
588  array(""), $a_title, $attributes);
589  }
590  if ($a_link["LinkType"] == "ext" || $a_link["LinkType"] == "ExtLink")
591  {
592  $attributes = array("Href" => $a_link["Href"]);
593  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "ExtLink",
594  array(""), $a_title, $attributes);
595  }
596  }
597 
601  function deleteMapArea($a_nr)
602  {
603  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
604  $this->getPcId());
605  if (is_object($ma_nodes[$a_nr - 1]))
606  {
607  $ma_nodes[$a_nr - 1]->unlink_node($ma_nodes[$a_nr - 1]);
608  }
609  }
610 
614  function deleteAllMapAreas()
615  {
616  $xpc = xpath_new_context($this->dom);
617  $path = "//PageContent[@HierId = '".$this->hier_id."']/MediaObject/MediaAliasItem[@Purpose='".$this->purpose."']/MapArea";
618  $res =& xpath_eval($xpc, $path);
619  for ($i = 0; $i < count($res->nodeset); $i++)
620  {
621  $res->nodeset[$i]->unlink_node($res->nodeset[$i]);
622  }
623  }
624 
628  function getLinkTypeOfArea($a_nr)
629  {
630  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
631  $this->getPcId());
632  if (is_object($ma_nodes[$a_nr - 1]))
633  {
634  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
635  if ($childs[0]->node_name() == "IntLink")
636  {
637  return "int";
638  }
639  if ($childs[0]->node_name() == "ExtLink")
640  {
641  return "ext";
642  }
643  }
644  }
645 
649  function getTypeOfArea($a_nr)
650  {
651  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
652  $this->getPcId());
653  if (is_object($ma_nodes[$a_nr - 1]))
654  {
655  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
656  return $childs[0]->get_attribute("Type");
657  }
658  }
659 
663  function getTargetOfArea($a_nr)
664  {
665  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
666  $this->getPcId());
667  if (is_object($ma_nodes[$a_nr - 1]))
668  {
669  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
670  return $childs[0]->get_attribute("Target");
671  }
672  }
673 
677  function getTargetFrameOfArea($a_nr)
678  {
679  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
680  $this->getPcId());
681  if (is_object($ma_nodes[$a_nr - 1]))
682  {
683  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
684  return $childs[0]->get_attribute("TargetFrame");
685  }
686  }
687 
691  function getHrefOfArea($a_nr)
692  {
693  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
694  $this->getPcId());
695  if (is_object($ma_nodes[$a_nr - 1]))
696  {
697  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
698  return $childs[0]->get_attribute("Href");
699  }
700  }
701 
705  function getTitleOfArea($a_nr)
706  {
707  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
708  $this->getPcId());
709  if (is_object($ma_nodes[$a_nr - 1]))
710  {
711  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
712  return $childs[0]->get_content();
713  }
714  }
715 
719  function delete()
720  {
721  if (is_object($this->item_node))
722  {
723  $this->item_node->unlink_node($this->item_node);
724  }
725  }
726 
733  function makeMapWorkCopy($a_st_item, $a_area_nr = 0, $a_exclude = false,
734  $a_output_new_area, $a_area_type, $a_coords)
735  {
736  global $lng;
737 
738  if (!$a_st_item->copyOriginal())
739  {
740  return false;
741  }
742  $a_st_item->buildMapWorkImage();
743 
744  // determine ratios (first see whether the instance has w/h defined)
745  $width = $this->getWidth();
746  $height = $this->getHeight();
747 
748  // if instance has no size, use object w/h
749  if ($width == 0 && $height == 0)
750  {
751  $width = $a_st_item->getWidth();
752  $height = $a_st_item->getHeight();
753  }
754  $size = @getimagesize($a_st_item->getMapWorkCopyName());
755  $x_ratio = 1;
756  if ($size[0] > 0 && $width > 0)
757  {
758  $x_ratio = $width / $size[0];
759  }
760  $y_ratio = 1;
761  if ($size[1] > 0 && $height > 0)
762  {
763  $y_ratio = $height / $size[1];
764  }
765 
766  // draw map areas
767  $areas = $this->getMapAreas();
768  for ($i=0; $i < count($areas); $i++)
769  {
770  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
771  ((($i+1) != $a_area_nr) && $a_exclude) ||
772  ($a_area_nr == 0)
773  )
774  {
775  $area = new ilMapArea();
776  $area->setShape($areas[$i]["Shape"]);
777  $area->setCoords($areas[$i]["Coords"]);
778  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, true,
779  $x_ratio, $y_ratio);
780  }
781  }
782 
783  if ($a_output_new_area)
784  {
785  $area = new ilMapArea();
786  $area->setShape($a_area_type);
787  $area->setCoords($a_coords);
788  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, false,
789  $x_ratio, $y_ratio);
790  }
791 
792  $a_st_item->saveMapWorkImage();
793 
794  return true;
795  }
796 
797 }
798 ?>