ILIAS  release_4-3 Revision
 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  $a_parent_node_name = "MediaObject")
23  {
24  $this->dom =& $a_dom;
25  $this->parent_node_name = $a_parent_node_name;
26  $this->hier_id = $a_hier_id;
27  $this->purpose = $a_purpose;
28  $this->setPcId($a_pc_id);
29  $this->item_node = $this->getMAItemNode($this->hier_id, $this->purpose,
30  $this->getPcId());
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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name."/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."']/".$this->parent_node_name;
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  "HighlightMode" => $maparea_node->get_attribute("HighlightMode"),
499  "HighlightClass" => $maparea_node->get_attribute("HighlightClass"),
500  "Id" => $maparea_node->get_attribute("Id"),
501  "Link" => $link);
502  }
503 
504  return $maparea_arr;
505  }
506 
510  function setAreaTitle($a_nr, $a_title)
511  {
512  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
513  $this->getPcId());
514  if (is_object($ma_nodes[$a_nr - 1]))
515  {
516  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
517  if (is_object($childs[0]) &&
518  ($childs[0]->node_name() == "IntLink" || $childs[0]->node_name() == "ExtLink"))
519  {
520  $childs[0]->set_content($a_title);
521  }
522  }
523  }
524 
528  function setAreaIntLink($a_nr, $a_type, $a_target, $a_target_frame)
529  {
530  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
531  $this->getPcId());
532  if (is_object($ma_nodes[$a_nr - 1]))
533  {
534  $title = $this->getTitleOfArea($a_nr);
535  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
536  $attributes = array("Type" => $a_type, "Target" => $a_target,
537  "TargetFrame" => $a_target_frame);
538  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "IntLink",
539  array(""), $title, $attributes);
540  }
541  }
542 
546  function setAreaExtLink($a_nr, $a_href)
547  {
548  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
549  $this->getPcId());
550  if (is_object($ma_nodes[$a_nr - 1]))
551  {
552  $title = $this->getTitleOfArea($a_nr);
553  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
554  $attributes = array("Href" => $a_href);
555  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "ExtLink",
556  array(""), $title, $attributes);
557  }
558  }
559 
563  function setShape($a_nr, $a_shape_type, $a_coords)
564  {
565  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
566  $this->getPcId());
567  if (is_object($ma_nodes[$a_nr - 1]))
568  {
569  $ma_nodes[$a_nr - 1]->set_attribute("Shape", $a_shape_type);
570  $ma_nodes[$a_nr - 1]->set_attribute("Coords", $a_coords);
571  }
572  }
573 
577  function setAreaHighlightMode($a_nr, $a_mode)
578  {
579  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
580  $this->getPcId());
581  if (is_object($ma_nodes[$a_nr - 1]))
582  {
583  $ma_nodes[$a_nr - 1]->set_attribute("HighlightMode", $a_mode);
584  }
585  }
586 
590  function setAreaHighlightClass($a_nr, $a_class)
591  {
592  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
593  $this->getPcId());
594  if (is_object($ma_nodes[$a_nr - 1]))
595  {
596  $ma_nodes[$a_nr - 1]->set_attribute("HighlightClass", $a_class);
597  }
598  }
599 
603  function addMapArea($a_shape_type, $a_coords, $a_title,
604  $a_link, $a_id = "")
605  {
606  $attributes = array("Shape" => $a_shape_type,
607  "Coords" => $a_coords, "Id" => $a_id);
608  $ma_node = ilDOMUtil::addElementToList($this->dom, $this->item_node,
609  "MapArea", array(), "", $attributes);
610 
611  if ($a_link["LinkType"] == "int" || $a_link["LinkType"] == "IntLink")
612  {
613  $attributes = array("Type" => $a_link["Type"],
614  "TargetFrame" => $a_link["TargetFrame"],
615  "Target" => $a_link["Target"]);
616  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "IntLink",
617  array(""), $a_title, $attributes);
618  }
619  if ($a_link["LinkType"] == "ext" || $a_link["LinkType"] == "ExtLink")
620  {
621  $attributes = array("Href" => $a_link["Href"]);
622  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "ExtLink",
623  array(""), $a_title, $attributes);
624  }
625  }
626 
630  function deleteMapArea($a_nr)
631  {
632  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
633  $this->getPcId());
634 
635  if (is_object($ma_nodes[$a_nr - 1]))
636  {
637  $ma_nodes[$a_nr - 1]->unlink_node($ma_nodes[$a_nr - 1]);
638  }
639  }
640 
644  function deleteMapAreaById($a_id)
645  {
646  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
647  $this->getPcId());
648  foreach ($ma_nodes as $node)
649  {
650  if ($node->get_attribute("Id") == $a_id)
651  {
652  $node->unlink_node($node);
653  }
654  }
655  }
656 
660  function deleteAllMapAreas()
661  {
662  $xpc = xpath_new_context($this->dom);
663  $path = "//PageContent[@HierId = '".$this->hier_id."']/".$this->parent_node_name."/MediaAliasItem[@Purpose='".$this->purpose."']/MapArea";
664  $res =& xpath_eval($xpc, $path);
665  for ($i = 0; $i < count($res->nodeset); $i++)
666  {
667  $res->nodeset[$i]->unlink_node($res->nodeset[$i]);
668  }
669  }
670 
674  function getLinkTypeOfArea($a_nr)
675  {
676  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
677  $this->getPcId());
678  if (is_object($ma_nodes[$a_nr - 1]))
679  {
680  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
681  if ($childs[0]->node_name() == "IntLink")
682  {
683  return "int";
684  }
685  if ($childs[0]->node_name() == "ExtLink")
686  {
687  return "ext";
688  }
689  }
690  }
691 
695  function getTypeOfArea($a_nr)
696  {
697  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
698  $this->getPcId());
699  if (is_object($ma_nodes[$a_nr - 1]))
700  {
701  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
702  return $childs[0]->get_attribute("Type");
703  }
704  }
705 
709  function getTargetOfArea($a_nr)
710  {
711  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
712  $this->getPcId());
713  if (is_object($ma_nodes[$a_nr - 1]))
714  {
715  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
716  return $childs[0]->get_attribute("Target");
717  }
718  }
719 
723  function getTargetFrameOfArea($a_nr)
724  {
725  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
726  $this->getPcId());
727  if (is_object($ma_nodes[$a_nr - 1]))
728  {
729  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
730  return $childs[0]->get_attribute("TargetFrame");
731  }
732  }
733 
737  function getHrefOfArea($a_nr)
738  {
739  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
740  $this->getPcId());
741  if (is_object($ma_nodes[$a_nr - 1]))
742  {
743  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
744  return $childs[0]->get_attribute("Href");
745  }
746  }
747 
751  function getTitleOfArea($a_nr)
752  {
753  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
754  $this->getPcId());
755  if (is_object($ma_nodes[$a_nr - 1]))
756  {
757  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
758  return $childs[0]->get_content();
759  }
760  }
761 
765  function delete()
766  {
767  if (is_object($this->item_node))
768  {
769  $this->item_node->unlink_node($this->item_node);
770  }
771  }
772 
779  function makeMapWorkCopy($a_st_item, $a_area_nr = 0, $a_exclude = false,
780  $a_output_new_area, $a_area_type, $a_coords)
781  {
782  global $lng;
783 
784  if (!$a_st_item->copyOriginal())
785  {
786  return false;
787  }
788  $a_st_item->buildMapWorkImage();
789 
790  // determine ratios (first see whether the instance has w/h defined)
791  $width = $this->getWidth();
792  $height = $this->getHeight();
793 
794  // if instance has no size, use object w/h
795  if ($width == 0 && $height == 0)
796  {
797  $width = $a_st_item->getWidth();
798  $height = $a_st_item->getHeight();
799  }
800  $size = @getimagesize($a_st_item->getMapWorkCopyName());
801  $x_ratio = 1;
802  if ($size[0] > 0 && $width > 0)
803  {
804  $x_ratio = $width / $size[0];
805  }
806  $y_ratio = 1;
807  if ($size[1] > 0 && $height > 0)
808  {
809  $y_ratio = $height / $size[1];
810  }
811 
812  // draw map areas
813  $areas = $this->getMapAreas();
814  for ($i=0; $i < count($areas); $i++)
815  {
816  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
817  ((($i+1) != $a_area_nr) && $a_exclude) ||
818  ($a_area_nr == 0)
819  )
820  {
821  $area = new ilMapArea();
822  $area->setShape($areas[$i]["Shape"]);
823  $area->setCoords($areas[$i]["Coords"]);
824  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, true,
825  $x_ratio, $y_ratio);
826  }
827  }
828 
829  if ($a_output_new_area)
830  {
831  $area = new ilMapArea();
832  $area->setShape($a_area_type);
833  $area->setCoords($a_coords);
834  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, false,
835  $x_ratio, $y_ratio);
836  }
837 
838  $a_st_item->saveMapWorkImage();
839 
840  return true;
841  }
842 
843 }
844 ?>