ILIAS  Release_3_10_x_branch Revision 61812
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMediaAliasItem.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2008 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 
24 
36 {
37  var $dom;
38  var $hier_id;
39  var $purpose;
41 
42  function ilMediaAliasItem(&$a_dom, $a_hier_id, $a_purpose, $a_pc_id = "")
43  {
44  $this->dom =& $a_dom;
45  $this->hier_id = $a_hier_id;
46  $this->purpose = $a_purpose;
47  $this->setPcId($a_pc_id);
48 //echo "+$a_pc_id+";
49  $this->item_node = $this->getMAItemNode($this->hier_id, $this->purpose,
50  $this->getPcId());
51 //var_dump($this->item_node);
52  }
53 
54  function getMAItemNode($a_hier_id, $a_purpose, $a_pc_id = "", $a_sub_element = "")
55  {
56  if ($a_pc_id != "")
57  {
58  $xpc = xpath_new_context($this->dom);
59  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']".$a_sub_element;
60  $res =& xpath_eval($xpc, $path);
61  if (count($res->nodeset) == 1)
62  {
63  return $res->nodeset[0];
64  }
65  }
66 
67  $xpc = xpath_new_context($this->dom);
68  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']".$a_sub_element;
69  $res =& xpath_eval($xpc, $path);
70  if (count($res->nodeset) > 0)
71  {
72  return $res->nodeset[0];
73  }
74  }
75 
76  function getParameterNodes($a_hier_id, $a_purpose, $a_pc_id = "")
77  {
78  if ($a_pc_id != "")
79  {
80  $xpc = xpath_new_context($this->dom);
81  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/Parameter";
82  $res =& xpath_eval($xpc, $path);
83  if (count($res->nodeset) > 0)
84  {
85  return $res->nodeset;
86  }
87  return array();
88  }
89 
90  $xpc = xpath_new_context($this->dom);
91  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/Parameter";
92  $res =& xpath_eval($xpc, $path);
93  if (count($res->nodeset) > 0)
94  {
95  return $res->nodeset;
96  }
97  }
98 
99  function getMapAreaNodes($a_hier_id, $a_purpose, $a_pc_id = "")
100  {
101  if ($a_pc_id != "")
102  {
103  $xpc = xpath_new_context($this->dom);
104  $path = "//PageContent[@PCID = '".$a_pc_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/MapArea";
105  $res =& xpath_eval($xpc, $path);
106  if (count($res->nodeset) > 0)
107  {
108  return $res->nodeset;
109  }
110  return array();
111  }
112 
113  $xpc = xpath_new_context($this->dom);
114  $path = "//PageContent[@HierId = '".$a_hier_id."']/MediaObject/MediaAliasItem[@Purpose='$a_purpose']/MapArea";
115  $res =& xpath_eval($xpc, $path);
116  if (count($res->nodeset) > 0)
117  {
118  return $res->nodeset;
119  }
120  }
121 
127  function setPcId($a_pcid)
128  {
129  $this->pcid = $a_pcid;
130  }
131 
137  function getPcId()
138  {
139  return $this->pcid;
140  }
141 
147  function exists()
148  {
149  if (is_object($this->item_node))
150  {
151  return true;
152  }
153  else
154  {
155  return false;
156  }
157  }
158 
162  function insert()
163  {
164  $xpc = xpath_new_context($this->dom);
165  $path = "//PageContent[@HierId = '".$this->hier_id."']/MediaObject";
166  $res =& xpath_eval($xpc, $path);
167  if (count($res->nodeset) > 0)
168  {
169  $obj_node =& $res->nodeset[0];
170  $item_node =& $this->dom->create_element("MediaAliasItem");
171  $item_node =& $obj_node->append_child($item_node);
172  $item_node->set_attribute("Purpose", $this->purpose);
173  $this->item_node =& $item_node;
174  }
175  }
176 
180  function setWidth($a_width)
181  {
182  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
183  array("Caption", "Parameter", "MapArea"),
184  "", array("Width" => $a_width), false);
185  }
186 
187 
191  function getWidth()
192  {
193  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
194  $this->getPcId(), "/Layout");
195  if (is_object($layout_node))
196  {
197  return $layout_node->get_attribute("Width");
198  }
199  }
200 
206  function definesSize()
207  {
208  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
209  $this->getPcId(), "/Layout");
210  if (is_object($layout_node))
211  {
212  return $layout_node->has_attribute("Width");
213  }
214  return false;
215  }
216 
220  function deriveSize()
221  {
222  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
223  $this->getPcId(), "/Layout");
224  if (is_object($layout_node))
225  {
226  if ($layout_node->has_attribute("Width"))
227  {
228  $layout_node->remove_attribute("Width");
229  }
230  if ($layout_node->has_attribute("Height"))
231  {
232  $layout_node->remove_attribute("Height");
233  }
234  }
235  }
236 
240  function setHeight($a_height)
241  {
242  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
243  array("Caption", "Parameter", "MapArea"),
244  "", array("Height" => $a_height), false);
245  }
246 
247 
251  function getHeight()
252  {
253  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
254  $this->getPcId(), "/Layout");
255  if (is_object($layout_node))
256  {
257  return $layout_node->get_attribute("Height");
258  }
259  }
260 
261 
265  function setCaption($a_caption)
266  {
267  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Caption",
268  array("Parameter", "MapArea"),
269  $a_caption, array("Align" => "bottom"));
270  }
271 
272 
276  function getCaption()
277  {
278  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
279  $this->getPcId(), "/Caption");
280  if (is_object($caption_node))
281  {
282  return $caption_node->get_content();
283  }
284  }
285 
291  function definesCaption()
292  {
293  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
294  $this->getPcId(), "/Caption");
295  if (is_object($caption_node))
296  {
297  return true;
298  }
299  return false;
300  }
301 
305  function deriveCaption()
306  {
307  $caption_node = $this->getMAItemNode($this->hier_id, $this->purpose,
308  $this->getPcId(), "/Caption");
309  if (is_object($caption_node))
310  {
311  $caption_node->unlink_node($caption_node);
312  }
313  }
314 
315  function setHorizontalAlign($a_halign)
316  {
317  ilDOMUtil::setFirstOptionalElement($this->dom, $this->item_node, "Layout",
318  array("Caption", "Parameter", "MapArea"),
319  "", array("HorizontalAlign" => $a_halign), false);
320  }
321 
322 
324  {
325  $layout_node = $this->getMAItemNode($this->hier_id, $this->purpose,
326  $this->getPcId(), "/Layout");
327  if (is_object($layout_node))
328  {
329  return $layout_node->get_attribute("HorizontalAlign");
330  }
331  }
332 
336  function setParameters($a_par_array)
337  {
338  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
339  $this->getPcId());
340  $par_arr = array();
341  for($i=0; $i < count($par_nodes); $i++)
342  {
343  $par_node =& $par_nodes[$i];
344  $par_node->unlink_node($par_node);
345  }
346 
347  if (is_array($a_par_array))
348  {
349  foreach($a_par_array as $par => $val)
350  {
351  $attributes = array ("Name" => $par, "Value" => $val);
352  ilDOMUtil::addElementToList($this->dom, $this->item_node,
353  "Parameter", array("MapArea"), "", $attributes);
354  /* $par_node =& $this->dom->create_element("Parameter");
355  $par_node =& $this->item_node->append_child($par_node);
356  $par_node->set_attribute("Name", $par);
357  $par_node->set_attribute("Value", $val); */
358  }
359  }
360  }
361 
366  {
367  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
368  $this->getPcId());
369  $par_arr = array();
370  for($i=0; $i < count($par_nodes); $i++)
371  {
372  $par_node =& $par_nodes[$i];
373  $par_arr[] = $par_node->get_attribute("Name")."=\"".$par_node->get_attribute("Value")."\"";
374  }
375  return implode($par_arr, ", ");
376  }
377 
378 
382  function getParameter($a_name)
383  {
384  }
385 
391  function definesParameters()
392  {
393  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
394  $this->getPcId());
395  if (count($par_nodes) > 0)
396  {
397  return true;
398  }
399  return false;
400  }
401 
405  function deriveParameters()
406  {
407  $par_nodes = $this->getParameterNodes($this->hier_id, $this->purpose,
408  $this->getPcId());
409  if (count($par_nodes) > 0)
410  {
411  for($i=0; $i < count($par_nodes); $i++)
412  {
413  $par_node =& $par_nodes[$i];
414  $par_node->unlink_node($par_node);
415  }
416  }
417  }
418 
419 
423  function getMapAreas()
424  {
425  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
426  $this->getPcId());
427  $maparea_arr = array();
428  for($i=0; $i < count($ma_nodes); $i++)
429  {
430  $maparea_node = $ma_nodes[$i];
431  $childs = $maparea_node->child_nodes();
432  $link = array();
433  if ($childs[0]->node_name() == "ExtLink")
434  {
435  $link = array("LinkType" => "ExtLink",
436  "Href" => $childs[0]->get_attribute("Href"),
437  "Title" => $childs[0]->get_content());
438  }
439  if ($childs[0]->node_name() == "IntLink")
440  {
441  $link = array("LinkType" => "IntLink",
442  "Target" => $childs[0]->get_attribute("Target"),
443  "Type" => $childs[0]->get_attribute("Type"),
444  "TargetFrame" => $childs[0]->get_attribute("TargetFame"),
445  "Title" => $childs[0]->get_content());
446  }
447  $maparea_arr[] = array(
448  "Nr" => $i + 1,
449  "Shape" => $maparea_node->get_attribute("Shape"),
450  "Coords" => $maparea_node->get_attribute("Coords"),
451  "Link" => $link);
452  }
453 
454  return $maparea_arr;
455  }
456 
460  function setAreaTitle($a_nr, $a_title)
461  {
462  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
463  $this->getPcId());
464  if (is_object($ma_nodes[$a_nr - 1]))
465  {
466  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
467  if (is_object($childs[0]) &&
468  ($childs[0]->node_name() == "IntLink" || $childs[0]->node_name() == "ExtLink"))
469  {
470  $childs[0]->set_content($a_title);
471  }
472  }
473  }
474 
478  function setAreaIntLink($a_nr, $a_type, $a_target, $a_target_frame)
479  {
480  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
481  $this->getPcId());
482  if (is_object($ma_nodes[$a_nr - 1]))
483  {
484  $title = $this->getTitleOfArea($a_nr);
485  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
486  $attributes = array("Type" => $a_type, "Target" => $a_target,
487  "TargetFrame" => $a_target_frame);
488  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "IntLink",
489  array(""), $title, $attributes);
490  }
491  }
492 
496  function setAreaExtLink($a_nr, $a_href)
497  {
498  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
499  $this->getPcId());
500  if (is_object($ma_nodes[$a_nr - 1]))
501  {
502  $title = $this->getTitleOfArea($a_nr);
503  ilDOMUtil::deleteAllChildsByName($ma_nodes[$a_nr - 1], array("IntLink", "ExtLink"));
504  $attributes = array("Href" => $a_href);
505  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_nodes[$a_nr - 1], "ExtLink",
506  array(""), $title, $attributes);
507  }
508  }
509 
513  function setShape($a_nr, $a_shape_type, $a_coords)
514  {
515  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
516  $this->getPcId());
517  if (is_object($ma_nodes[$a_nr - 1]))
518  {
519  $ma_nodes[$a_nr - 1]->set_attribute("Shape", $a_shape_type);
520  $ma_nodes[$a_nr - 1]->set_attribute("Coords", $a_coords);
521  }
522  }
523 
527  function addMapArea($a_shape_type, $a_coords, $a_title,
528  $a_link)
529  {
530  $attributes = array("Shape" => $a_shape_type,
531  "Coords" => $a_coords);
532  $ma_node = ilDOMUtil::addElementToList($this->dom, $this->item_node,
533  "MapArea", array(), "", $attributes);
534 
535  if ($a_link["LinkType"] == "int" || $a_link["LinkType"] == "IntLink")
536  {
537  $attributes = array("Type" => $a_link["Type"],
538  "TargetFrame" => $a_link["TargetFrame"],
539  "Target" => $a_link["Target"]);
540  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "IntLink",
541  array(""), $a_title, $attributes);
542  }
543  if ($a_link["LinkType"] == "ext" || $a_link["LinkType"] == "ExtLink")
544  {
545  $attributes = array("Href" => $a_link["Href"]);
546  ilDOMUtil::setFirstOptionalElement($this->dom, $ma_node, "ExtLink",
547  array(""), $a_title, $attributes);
548  }
549  }
550 
554  function deleteMapArea($a_nr)
555  {
556  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
557  $this->getPcId());
558  if (is_object($ma_nodes[$a_nr - 1]))
559  {
560  $ma_nodes[$a_nr - 1]->unlink_node($ma_nodes[$a_nr - 1]);
561  }
562  }
563 
567  function deleteAllMapAreas()
568  {
569  $xpc = xpath_new_context($this->dom);
570  $path = "//PageContent[@HierId = '".$this->hier_id."']/MediaObject/MediaAliasItem[@Purpose='".$this->purpose."']/MapArea";
571  $res =& xpath_eval($xpc, $path);
572  for ($i = 0; $i < count($res->nodeset); $i++)
573  {
574  $res->nodeset[$i]->unlink_node($res->nodeset[$i]);
575  }
576  }
577 
581  function getLinkTypeOfArea($a_nr)
582  {
583  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
584  $this->getPcId());
585  if (is_object($ma_nodes[$a_nr - 1]))
586  {
587  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
588  if ($childs[0]->node_name() == "IntLink")
589  {
590  return "int";
591  }
592  if ($childs[0]->node_name() == "ExtLink")
593  {
594  return "ext";
595  }
596  }
597  }
598 
602  function getTypeOfArea($a_nr)
603  {
604  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
605  $this->getPcId());
606  if (is_object($ma_nodes[$a_nr - 1]))
607  {
608  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
609  return $childs[0]->get_attribute("Type");
610  }
611  }
612 
616  function getTargetOfArea($a_nr)
617  {
618  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
619  $this->getPcId());
620  if (is_object($ma_nodes[$a_nr - 1]))
621  {
622  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
623  return $childs[0]->get_attribute("Target");
624  }
625  }
626 
630  function getTargetFrameOfArea($a_nr)
631  {
632  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
633  $this->getPcId());
634  if (is_object($ma_nodes[$a_nr - 1]))
635  {
636  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
637  return $childs[0]->get_attribute("TargetFrame");
638  }
639  }
640 
644  function getHrefOfArea($a_nr)
645  {
646  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
647  $this->getPcId());
648  if (is_object($ma_nodes[$a_nr - 1]))
649  {
650  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
651  return $childs[0]->get_attribute("Href");
652  }
653  }
654 
658  function getTitleOfArea($a_nr)
659  {
660  $ma_nodes = $this->getMapAreaNodes($this->hier_id, $this->purpose,
661  $this->getPcId());
662  if (is_object($ma_nodes[$a_nr - 1]))
663  {
664  $childs = $ma_nodes[$a_nr - 1]->child_nodes();
665  return $childs[0]->get_content();
666  }
667  }
668 
672  function delete()
673  {
674  if (is_object($this->item_node))
675  {
676  $this->item_node->unlink_node($this->item_node);
677  }
678  }
679 
686  function makeMapWorkCopy($a_st_item, $a_area_nr = 0, $a_exclude = false,
687  $a_output_new_area, $a_area_type, $a_coords)
688  {
689  global $lng;
690 
691  if (!$a_st_item->copyOriginal())
692  {
693  return false;
694  }
695  $a_st_item->buildMapWorkImage();
696 
697  // determine ratios
698  $size = @getimagesize($a_st_item->getMapWorkCopyName());
699  $x_ratio = 1;
700  if ($size[0] > 0 && $this->getWidth() > 0)
701  {
702  $x_ratio = $this->getWidth() / $size[0];
703  }
704  $y_ratio = 1;
705  if ($size[1] > 0 && $this->getHeight() > 0)
706  {
707  $y_ratio = $this->getHeight() / $size[1];
708  }
709 
710  // draw map areas
711  $areas = $this->getMapAreas();
712  for ($i=0; $i < count($areas); $i++)
713  {
714  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
715  ((($i+1) != $a_area_nr) && $a_exclude) ||
716  ($a_area_nr == 0)
717  )
718  {
719  $area = new ilMapArea();
720  $area->setShape($areas[$i]["Shape"]);
721  $area->setCoords($areas[$i]["Coords"]);
722  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, true,
723  $x_ratio, $y_ratio);
724  }
725  }
726 
727  if ($a_output_new_area)
728  {
729  $area = new ilMapArea();
730  $area->setShape($a_area_type);
731  $area->setCoords($a_coords);
732  $area->draw($a_st_item->getMapWorkImage(), $a_st_item->color1, $a_st_item->color2, false,
733  $x_ratio, $y_ratio);
734  }
735 
736  $a_st_item->saveMapWorkImage();
737 
738  return true;
739  }
740 
741 }
742 ?>