ILIAS  Release_4_2_x_branch Revision 61807
 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  "Id" => $maparea_node->get_attribute("Id"),
499  "Link" => $link);
500  }
501 
502  return $maparea_arr;
503  }
504 
508  function setAreaTitle($a_nr, $a_title)
509  {
510  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
511  $this->getPcId());
512  if (is_object($ma_nodes[$a_nr - 1]))
513  {
514  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
515  if (is_object($childs[0]) &&
516  ($childs[0]->node_name() == "IntLink" || $childs[0]->node_name() == "ExtLink"))
517  {
518  $childs[0]->set_content($a_title);
519  }
520  }
521  }
522 
526  function setAreaIntLink($a_nr, $a_type, $a_target, $a_target_frame)
527  {
528  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
529  $this->getPcId());
530  if (is_object($ma_nodes[$a_nr - 1]))
531  {
532  $title = $this->getTitleOfArea($a_nr);
533  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
534  $attributes = array("Type" => $a_type, "Target" => $a_target,
535  "TargetFrame" => $a_target_frame);
536  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "IntLink",
537  array(""), $title, $attributes);
538  }
539  }
540 
544  function setAreaExtLink($a_nr, $a_href)
545  {
546  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
547  $this->getPcId());
548  if (is_object($ma_nodes[$a_nr - 1]))
549  {
550  $title = $this->getTitleOfArea($a_nr);
551  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
552  $attributes = array("Href" => $a_href);
553  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "ExtLink",
554  array(""), $title, $attributes);
555  }
556  }
557 
561  function setShape($a_nr, $a_shape_type, $a_coords)
562  {
563  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
564  $this->getPcId());
565  if (is_object($ma_nodes[$a_nr - 1]))
566  {
567  $ma_nodes[$a_nr - 1]->set_attribute("Shape", $a_shape_type);
568  $ma_nodes[$a_nr - 1]->set_attribute("Coords", $a_coords);
569  }
570  }
571 
575  function addMapArea($a_shape_type, $a_coords, $a_title,
576  $a_link, $a_id = "")
577  {
578  $attributes = array("Shape" => $a_shape_type,
579  "Coords" => $a_coords, "Id" => $a_id);
580  $ma_node = ilDOMUtil::addElementToList($this->dom, $this->item_node,
581  "MapArea", array(), "", $attributes);
582 
583  if ($a_link["LinkType"] == "int" || $a_link["LinkType"] == "IntLink")
584  {
585  $attributes = array("Type" => $a_link["Type"],
586  "TargetFrame" => $a_link["TargetFrame"],
587  "Target" => $a_link["Target"]);
588  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "IntLink",
589  array(""), $a_title, $attributes);
590  }
591  if ($a_link["LinkType"] == "ext" || $a_link["LinkType"] == "ExtLink")
592  {
593  $attributes = array("Href" => $a_link["Href"]);
594  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "ExtLink",
595  array(""), $a_title, $attributes);
596  }
597  }
598 
602  function deleteMapArea($a_nr)
603  {
604  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
605  $this->getPcId());
606 
607  if (is_object($ma_nodes[$a_nr - 1]))
608  {
609  $ma_nodes[$a_nr - 1]->unlink_node($ma_nodes[$a_nr - 1]);
610  }
611  }
612 
616  function deleteMapAreaById($a_id)
617  {
618  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
619  $this->getPcId());
620  foreach ($ma_nodes as $node)
621  {
622  if ($node->get_attribute("Id") == $a_id)
623  {
624  $node->unlink_node($node);
625  }
626  }
627  }
628 
632  function deleteAllMapAreas()
633  {
634  $xpc = xpath_new_context($this->dom);
635  $path = "//PageContent[@HierId = '".$this->hier_id."']/".$this->parent_node_name."/MediaAliasItem[@Purpose='".$this->purpose."']/MapArea";
636  $res =& xpath_eval($xpc, $path);
637  for ($i = 0; $i < count($res->nodeset); $i++)
638  {
639  $res->nodeset[$i]->unlink_node($res->nodeset[$i]);
640  }
641  }
642 
646  function getLinkTypeOfArea($a_nr)
647  {
648  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
649  $this->getPcId());
650  if (is_object($ma_nodes[$a_nr - 1]))
651  {
652  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
653  if ($childs[0]->node_name() == "IntLink")
654  {
655  return "int";
656  }
657  if ($childs[0]->node_name() == "ExtLink")
658  {
659  return "ext";
660  }
661  }
662  }
663 
667  function getTypeOfArea($a_nr)
668  {
669  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
670  $this->getPcId());
671  if (is_object($ma_nodes[$a_nr - 1]))
672  {
673  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
674  return $childs[0]->get_attribute("Type");
675  }
676  }
677 
681  function getTargetOfArea($a_nr)
682  {
683  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
684  $this->getPcId());
685  if (is_object($ma_nodes[$a_nr - 1]))
686  {
687  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
688  return $childs[0]->get_attribute("Target");
689  }
690  }
691 
695  function getTargetFrameOfArea($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("TargetFrame");
703  }
704  }
705 
709  function getHrefOfArea($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("Href");
717  }
718  }
719 
723  function getTitleOfArea($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_content();
731  }
732  }
733 
737  function delete()
738  {
739  if (is_object($this->item_node))
740  {
741  $this->item_node->unlink_node($this->item_node);
742  }
743  }
744 
751  function makeMapWorkCopy($a_st_item, $a_area_nr = 0, $a_exclude = false,
752  $a_output_new_area, $a_area_type, $a_coords)
753  {
754  global $lng;
755 
756  if (!$a_st_item->copyOriginal())
757  {
758  return false;
759  }
760  $a_st_item->buildMapWorkImage();
761 
762  // determine ratios (first see whether the instance has w/h defined)
763  $width = $this->getWidth();
764  $height = $this->getHeight();
765 
766  // if instance has no size, use object w/h
767  if ($width == 0 && $height == 0)
768  {
769  $width = $a_st_item->getWidth();
770  $height = $a_st_item->getHeight();
771  }
772  $size = @getimagesize($a_st_item->getMapWorkCopyName());
773  $x_ratio = 1;
774  if ($size[0] > 0 && $width > 0)
775  {
776  $x_ratio = $width / $size[0];
777  }
778  $y_ratio = 1;
779  if ($size[1] > 0 && $height > 0)
780  {
781  $y_ratio = $height / $size[1];
782  }
783 
784  // draw map areas
785  $areas = $this->getMapAreas();
786  for ($i=0; $i < count($areas); $i++)
787  {
788  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
789  ((($i+1) != $a_area_nr) && $a_exclude) ||
790  ($a_area_nr == 0)
791  )
792  {
793  $area = new ilMapArea();
794  $area->setShape($areas[$i]["Shape"]);
795  $area->setCoords($areas[$i]["Coords"]);
796  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, true,
797  $x_ratio, $y_ratio);
798  }
799  }
800 
801  if ($a_output_new_area)
802  {
803  $area = new ilMapArea();
804  $area->setShape($a_area_type);
805  $area->setCoords($a_coords);
806  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, false,
807  $x_ratio, $y_ratio);
808  }
809 
810  $a_st_item->saveMapWorkImage();
811 
812  return true;
813  }
814 
815 }
816 ?>