ILIAS  Release_4_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMediaItem.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once("Services/MediaObjects/classes/class.ilMapArea.php");
5 
17 {
18  var $id;
19  var $purpose;
20  var $location;
22  var $format;
23  var $width;
24  var $height;
25  var $caption;
26  var $halign;
28  var $mob_id;
29  var $nr;
30  var $mapareas;
31  var $map_cnt;
32  var $map_image; // image map work copy image
33  var $color1; // map area line color 1
34  var $color2; // map area line color 2
35 
36  function ilMediaItem($a_id = 0)
37  {
38  $this->parameters = array();
39  $this->mapareas = array();
40  $this->map_cnt = 0;
41 
42  if ($a_id != 0)
43  {
44  $this->setId($a_id);
45  $this->read();
46  }
47  }
48 
54  function setId($a_id)
55  {
56  $this->id = $a_id;
57  }
58 
64  function getId()
65  {
66  return $this->id;
67  }
68 
74  function setMobId($a_mob_id)
75  {
76  $this->mob_id = $a_mob_id;
77  }
78 
84  function getMobId()
85  {
86  return $this->mob_id;
87  }
88 
92  function setNr($a_nr)
93  {
94  $this->nr = $a_nr;
95  }
96 
97  function getNr()
98  {
99  return $this->nr;
100  }
101 
107  function setTextRepresentation($a_val)
108  {
109  $this->text_representation = $a_val;
110  }
111 
118  {
119  return $this->text_representation;
120  }
121 
125  function create()
126  {
127  global $ilDB;
128 
129  $item_id = $ilDB->nextId("media_item");
130  $query = "INSERT INTO media_item (id,mob_id, purpose, location, ".
131  "location_type, format, width, ".
132  "height, halign, caption, nr, text_representation) VALUES ".
133  "(".
134  $ilDB->quote($item_id, "integer").",".
135  $ilDB->quote($this->getMobId(), "integer").",".
136  $ilDB->quote($this->getPurpose(), "text").",".
137  $ilDB->quote($this->getLocation(), "text").",".
138  $ilDB->quote($this->getLocationType(), "text").",".
139  $ilDB->quote($this->getFormat(), "text").",".
140  $ilDB->quote($this->getWidth(), "text").",".
141  $ilDB->quote($this->getHeight(), "text").",".
142  $ilDB->quote($this->getHAlign(), "text").",".
143  $ilDB->quote($this->getCaption(), "text").",".
144  $ilDB->quote($this->getNr(), "integer").",".
145  $ilDB->quote($this->getTextRepresentation(), "text").")";
146  $ilDB->manipulate($query);
147 
148  $this->setId($item_id);
149 
150  // create mob parameters
151  $params = $this->getParameters();
152  foreach($params as $name => $value)
153  {
154  $query = "INSERT INTO mob_parameter (med_item_id, name, value) VALUES ".
155  "(".$ilDB->quote($item_id, "integer").",".
156  $ilDB->quote($name, "text").",".
157  $ilDB->quote($value, "text").")";
158  $ilDB->manipulate($query);
159  }
160 
161  // create map areas
162  for ($i=0; $i < count($this->mapareas); $i++)
163  {
164  $this->mapareas[$i]->setItemId($this->getId());
165  $this->mapareas[$i]->setNr($i + 1);
166  $this->mapareas[$i]->create();
167  }
168  }
169 
173  function update()
174  {
175  global $ilDB;
176 
177  $query = "UPDATE media_item SET ".
178  " mob_id = ".$ilDB->quote($this->getMobId(), "integer").",".
179  " purpose = ".$ilDB->quote($this->getPurpose(), "text").",".
180  " location = ".$ilDB->quote($this->getLocation(), "text").",".
181  " location_type = ".$ilDB->quote($this->getLocationType(), "text").",".
182  " format = ".$ilDB->quote($this->getFormat(), "text").",".
183  " width = ".$ilDB->quote($this->getWidth(), "text").",".
184  " height = ".$ilDB->quote($this->getHeight(), "text").",".
185  " halign = ".$ilDB->quote($this->getHAlign(), "text").",".
186  " caption = ".$ilDB->quote($this->getCaption(), "text").",".
187  " nr = ".$ilDB->quote($this->getNr(), "integer").
188  " text_representation = ".$ilDB->quote($this->getTextRepresentation(), "text").
189  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
190  $ilDB->manipulate($query);
191 
192  // delete mob parameters
193  $query = "DELETE FROM mob_parameter WHERE med_item_id = ".
194  $ilDB->quote($this->getId(), "integer");
195 
196  // create mob parameters
197  $params = $this->getParameters();
198  foreach($params as $name => $value)
199  {
200  $query = "INSERT INTO mob_parameter (med_item_id, name, value) VALUES ".
201  "(".$ilDB->quote($this->getId(), "integer").",".
202  $ilDB->quote($name, "text").",".
203  $ilDB->quote($value, "text").")";
204  $ilDB->manipulate($query);
205  }
206  }
207 
211  function read()
212  {
213  global $ilDB;
214 
215  $item_id = $this->getId();
216  $mob_id = $this->getMobId();
217  $nr = $this->getNr();
218  $query = "";
219  if($item_id > 0)
220  {
221  $query = "SELECT * FROM media_item WHERE id = ".
222  $ilDB->quote($this->getId(), "integer");
223  }
224  else if ($mob_id > 0 && $nr > 0)
225  {
226  $query = "SELECT * FROM media_item WHERE mob_id = ".
227  $ilDB->quote($this->getMobId(), "integer")." ".
228  "AND nr=".$ilDB->quote($this->getNr(), "integer");
229  }
230  if ($query != "")
231  {
232  $item_set = $ilDB->query($query);
233  $item_rec = $ilDB->fetchAssoc($item_set);
234 
235  $this->setLocation($item_rec["location"]);
236  $this->setLocationType($item_rec["location_type"]);
237  $this->setFormat($item_rec["format"]);
238  $this->setWidth($item_rec["width"]);
239  $this->setHeight($item_rec["height"]);
240  $this->setHAlign($item_rec["halign"]);
241  $this->setCaption($item_rec["caption"]);
242  $this->setPurpose($item_rec["purpose"]);
243  $this->setNr($item_rec["nr"]);
244  $this->setMobId($item_rec["mob_id"]);
245  $this->setId($item_rec["id"]);
246  $this->setThumbTried($item_rec["tried_thumb"]);
247  $this->setTextRepresentation($item_rec["text_representation"]);
248 
249  // get item parameter
250  $query = "SELECT * FROM mob_parameter WHERE med_item_id = ".
251  $ilDB->quote($this->getId(), "integer");
252  $par_set = $ilDB->query($query);
253  while ($par_rec = $ilDB->fetchAssoc($par_set))
254  {
255  $this->setParameter($par_rec["name"], $par_rec["value"]);
256  }
257 
258  // get item map areas
259  $max = ilMapArea::_getMaxNr($this->getId());
260  for ($i = 1; $i <= $max; $i++)
261  {
262  $area =& new ilMapArea($this->getId(), $i);
263  $this->addMapArea($area);
264  }
265  }
266 
267  }
268 
272  function writeThumbTried($a_tried)
273  {
274  global $ilDB;
275 
276  $q = "UPDATE media_item SET tried_thumb = ".
277  $ilDB->quote($a_tried, "text").
278  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
279 
280  $ilDB->manipulate($q);
281  }
282 
289  static function _lookupLocationForMobId($a_mob_id, $a_purpose)
290  {
291  global $ilDB;
292 
293  // read media_object record
294  $query = "SELECT * FROM media_item WHERE mob_id = ".
295  $ilDB->quote($a_mob_id, "integer")." ".
296  "AND purpose = ".$ilDB->quote($a_purpose, "text");
297  $set = $ilDB->query($query);
298  if ($rec = $ilDB->fetchAssoc($set))
299  {
300  return $rec["location"];
301  }
302 
303  return "";
304  }
305 
311  static function _lookupMobId($a_med_id)
312  {
313  global $ilDB;
314 
315  // read media_object record
316  $query = "SELECT * FROM media_item WHERE id = ".
317  $ilDB->quote($a_med_id, "integer");
318  $set = $ilDB->query($query);
319  if ($rec = $ilDB->fetchAssoc($set))
320  {
321  return $rec["mob_id"];
322  }
323 
324  return "";
325  }
326 
327  /* read media item with specific purpose and mobId
328  *
329  * @param integer $a_mobId media object id
330  * @param string $a_purpose media object purpose
331  * @return array $mob media object
332  */
333  function _getMediaItemsOfMObId($a_mobId, $a_purpose)
334  {
335  global $ilDB;
336 
337  // read media_object record
338  $query = "SELECT * FROM media_item WHERE mob_id = ".
339  $ilDB->quote($a_mobId, "integer")." ".
340  "AND purpose=" . $ilDB->quote($a_purpose, "text")." ORDER BY nr";
341  $item_set = $ilDB->query($query);
342 
343  while ($item_rec = $ilDB->fetchAssoc($item_set))
344  {
345  return $item_rec;
346  }
347  return false;
348  }
349 
355  function _getMediaItemsOfMOb(&$a_mob)
356  {
357  global $ilDB;
358 
359  // read media_object record
360  $query = "SELECT * FROM media_item WHERE mob_id = ".
361  $ilDB->quote($a_mob->getId(), "integer")." ".
362  "ORDER BY nr";
363  $item_set = $ilDB->query($query);
364  while ($item_rec = $ilDB->fetchAssoc($item_set))
365  {
366  $media_item =& new ilMediaItem();
367  $media_item->setNr($item_rec["nr"]);
368  $media_item->setId($item_rec["id"]);
369  $media_item->setLocation($item_rec["location"]);
370  $media_item->setLocationType($item_rec["location_type"]);
371  $media_item->setFormat($item_rec["format"]);
372  $media_item->setWidth($item_rec["width"]);
373  $media_item->setHeight($item_rec["height"]);
374  $media_item->setHAlign($item_rec["halign"]);
375  $media_item->setCaption($item_rec["caption"]);
376  $media_item->setPurpose($item_rec["purpose"]);
377  $media_item->setMobId($item_rec["mob_id"]);
378  $media_item->setThumbTried($item_rec["tried_thumb"]);
379  $media_item->setTextRepresentation($item_rec["text_representation"]);
380 
381  // get item parameter
382  $query = "SELECT * FROM mob_parameter WHERE med_item_id = ".
383  $ilDB->quote($item_rec["id"], "integer");
384  $par_set = $ilDB->query($query);
385  while ($par_rec = $ilDB->fetchAssoc($par_set))
386  {
387  $media_item->setParameter($par_rec["name"], $par_rec["value"]);
388  }
389 
390  // get item map areas
391  $max = ilMapArea::_getMaxNr($media_item->getId());
392  for ($i = 1; $i <= $max; $i++)
393  {
394  $area =& new ilMapArea($media_item->getId(), $i);
395  $media_item->addMapArea($area);
396  }
397 
398  // add media item to media object
399  $a_mob->addMediaItem($media_item);
400  }
401  }
402 
406  function deleteAllItemsOfMob($a_mob_id)
407  {
408  global $ilDB;
409 
410  // iterate all media items ob mob
411  $query = "SELECT * FROM media_item WHERE mob_id = ".
412  $ilDB->quote($a_mob_id, "integer");
413  $item_set = $ilDB->query($query);
414  while ($item_rec = $ilDB->fetchAssoc($item_set))
415  {
416  // delete all parameters of media item
417  $query = "DELETE FROM mob_parameter WHERE med_item_id = ".
418  $ilDB->quote($item_rec["id"], "integer");
419  $ilDB->manipulate($query);
420 
421  // delete all map areas of media item
422  $query = "DELETE FROM map_area WHERE item_id = ".
423  $ilDB->quote($item_rec["id"], "integer");
424  $ilDB->manipulate($query);
425  }
426 
427  // delete media items
428  $query = "DELETE FROM media_item WHERE mob_id = ".
429  $ilDB->quote($a_mob_id, "integer");
430  $ilDB->manipulate($query);
431  }
432 
433  function setPurpose($a_purpose)
434  {
435  $this->purpose = $a_purpose;
436  }
437 
438  function getPurpose()
439  {
440  return $this->purpose;
441  }
442 
443  function setLocation($a_location)
444  {
445  $this->location = $a_location;
446  }
447 
448  function getLocation()
449  {
450  return $this->location;
451  }
452 
453  function setLocationType($a_type)
454  {
455  $this->location_type = $a_type;
456  }
457 
458  function getLocationType()
459  {
460  return $this->location_type;
461  }
462 
463  function setFormat($a_format)
464  {
465  $this->format = $a_format;
466  }
467 
468  function getFormat()
469  {
470  return $this->format;
471  }
472 
473  function setThumbTried($a_tried)
474  {
475  $this->tried_thumb = $a_tried;
476  }
477 
478  function getThumbTried()
479  {
480  return $this->tried_thumb;
481  }
482 
483  function addMapArea(&$a_map_area)
484  {
485  $this->mapareas[$this->map_cnt] =& $a_map_area;
486  $this->map_cnt++;
487  }
488 
492  function deleteMapArea($nr)
493  {
494  for ($i=1; $i<=$this->map_cnt; $i++)
495  {
496  if($i > $nr)
497  {
498  $this->mapareas[$i-2] =& $this->mapareas[$i-1];
499  $this->mapareas[$i-2]->setNr($i-1);
500  }
501  }
502  if($nr <= $this->map_cnt)
503  {
504  unset($this->mapareas[$this->map_cnt - 1]);
505  $this->map_cnt--;
506  }
507  }
508 
512  function &getMapArea($nr)
513  {
514  return $this->mapareas[$nr-1];
515  }
516 
520  function getMapAreas()
521  {
522  return $this->mapareas;
523  }
524 
528  function getWidth()
529  {
530  return $this->width;
531  }
532 
536  function setWidth($a_width)
537  {
538  $this->width = $a_width;
539  }
540 
544  function getHeight()
545  {
546  return $this->height;
547  }
548 
552  function setHeight($a_height)
553  {
554  $this->height = $a_height;
555  }
556 
560  function getOriginalSize()
561  {
562  $mob_dir = ilObjMediaObject::_getDirectory($this->getMobId());
563 
564  if (ilUtil::deducibleSize($this->getFormat()))
565  {
566  if ($this->getLocationType() == "LocalFile")
567  {
568  $loc = $mob_dir."/".$this->getLocation();
569  }
570  else
571  {
572  $loc = $this->getLocation();
573  }
574  $size = @getimagesize($loc);
575 
576  if ($size[0] > 0 && $size[1] > 0)
577  {
578  return array("width" => $size[0], "height" => $size[1]);
579  }
580  }
581 
582  return false;
583  }
584 
588  function setCaption($a_caption)
589  {
590  $this->caption = $a_caption;
591  }
592 
596  function getCaption()
597  {
598  return $this->caption;
599  }
600 
604  function setHAlign($a_halign)
605  {
606  $this->halign = $a_halign;
607  }
608 
612  function getHAlign()
613  {
614  return $this->halign;
615  }
616 
617 
624  function setParameter($a_name, $a_value)
625  {
626  $this->parameters[$a_name] = $a_value;
627  }
628 
632  function resetParameters()
633  {
634  $this->parameters = array();
635  }
636 
642  function setParameters($a_par)
643  {
644  $this->resetParameters();
645  $par_arr = ilUtil::extractParameterString($a_par);
646  if(is_array($par_arr))
647  {
648  foreach($par_arr as $par => $val)
649  {
650  $this->setParameter($par, $val);
651  }
652  }
653  }
654 
655 
659  function getParameters()
660  {
661  return $this->parameters;
662  }
663 
664 
669  {
670  return ilUtil::assembleParameterString($this->parameters);
671  }
672 
673 
677  function getParameter($a_name)
678  {
679  return $this->parameters[$a_name];
680  }
681 
685  function getWorkDirectory()
686  {
687  return ilUtil::getDataDir()."/map_workfiles/item_".$this->getId();
688  }
689 
694  {
695  if(!@is_dir(ilUtil::getDataDir()."/map_workfiles"))
696  {
697  ilUtil::createDirectory(ilUtil::getDataDir()."/map_workfiles");
698  }
699  $work_dir = $this->getWorkDirectory();
700  if(!@is_dir($work_dir))
701  {
702  ilUtil::createDirectory($work_dir);
703  }
704  }
705 
709  function getSuffix()
710  {
711  $loc_arr = explode(".", $this->getLocation());
712 
713  return $loc_arr[count($loc_arr) - 1];
714  }
715 
720  {
722  }
723 
729  function getMapWorkCopyName($a_reference_copy = false)
730  {
731  $file_arr = explode("/", $this->getLocation());
732  $o_file = $file_arr[count($file_arr) - 1];
733  $file_arr = explode(".", $o_file);
734  unset($file_arr[count($file_arr) - 1]);
735  $file = implode($file_arr, ".");
736 //$file = "wcopy";
737  if (!$a_reference_copy)
738  {
739  return $this->getWorkDirectory()."/".$file.".".$this->getMapWorkCopyType();
740  }
741  else
742  {
743  return $this->getWorkDirectory()."/l_copy_".$o_file;
744  }
745  }
746 
750  function getDirectory()
751  {
752  return ilObjMediaObject::_getDirectory($this->getMobId());
753  }
754 
758  function getThumbnailDirectory($a_mode = "filesystem")
759  {
760  return ilObjMediaObject::_getThumbnailDirectory($this->getMobId(), $a_mode);
761  }
762 
766  function getThumbnailTarget($a_size = "")
767  {
768  if (is_int(strpos($this->getFormat(), "image")))
769  {
770  $thumb_file = $this->getThumbnailDirectory()."/".
771  $this->getPurpose().".jpeg";
772 
773  $thumb_file_small = $this->getThumbnailDirectory()."/".
774  $this->getPurpose()."_small.jpeg";
775 
776  // generate thumbnail (if not tried before)
777  if ($this->getThumbTried() == "n" && $this->getLocationType() == "LocalFile")
778  {
779  if (is_file($thumb_file))
780  {
781  unlink($thumb_file);
782  }
783  if (is_file($thumb_file_small))
784  {
785  unlink($thumb_file_small);
786  }
787  $this->writeThumbTried("y");
789  $med_file = $this->getDirectory()."/".$this->getLocation();
790 
791  if (is_file($med_file))
792  {
793  ilUtil::convertImage($med_file, $thumb_file, "jpeg", "80");
794  ilUtil::convertImage($med_file, $thumb_file_small, "jpeg", "40");
795  }
796  }
797 
798  if ($a_size == "small")
799  {
800  if (is_file($thumb_file_small))
801  {
802  return $this->getThumbnailDirectory("output")."/".
803  $this->getPurpose()."_small.jpeg?dummy=".rand(1, 999999);
804  }
805  }
806  else
807  {
808  if (is_file($thumb_file))
809  {
810  return $this->getThumbnailDirectory("output")."/".
811  $this->getPurpose().".jpeg?dummy=".rand(1, 999999);
812  }
813  }
814  }
815 
816  return "";
817  }
818 
819 
823  function copyOriginal()
824  {
825  global $lng;
826  $this->createWorkDirectory();
827 
828  if ($this->getLocationType() != "Reference")
829  {
830  ilUtil::convertImage($this->getDirectory()."/".$this->getLocation(),
831  $this->getMapWorkCopyName(),
832  $this->getMapWorkCopyType());
833  }
834  else
835  {
836  // first copy the external file, if necessary
837  if (!is_file($this->getMapWorkCopyName(true)) || (filesize($this->getMapWorkCopyName(true)) == 0))
838  {
839  $handle = @fopen($this->getLocation(), "r");
840  $lcopy = fopen($this->getMapWorkCopyName(true), "w");
841  if ($handle && $lcopy)
842  {
843  while (!feof($handle))
844  {
845  $content = fread($handle, 4096);
846  fwrite($lcopy, $content);
847  }
848  }
849  @fclose($lcopy);
850  @fclose($handle);
851  }
852 
853  // now, create working copy
855  $this->getMapWorkCopyName(),
856  $this->getMapWorkCopyType());
857  }
858 
859  if (!is_file($this->getMapWorkCopyName()))
860  {
861 
862  ilUtil::sendFailure($lng->txt("cont_map_file_not_generated"));
863  return false;
864  }
865  return true;
866  }
867 
874  function makeMapWorkCopy($a_area_nr = 0, $a_exclude = false)
875  {
876  global $lng;
877 
878  if (!$this->copyOriginal())
879  {
880  return false;
881  }
882  $this->buildMapWorkImage();
883 
884  // determine ratios
885  $size = @getimagesize($this->getMapWorkCopyName());
886  $x_ratio = 1;
887  if ($size[0] > 0 && $this->getWidth() > 0)
888  {
889  $x_ratio = $this->getWidth() / $size[0];
890  }
891  $y_ratio = 1;
892  if ($size[1] > 0 && $this->getHeight() > 0)
893  {
894  $y_ratio = $this->getHeight() / $size[1];
895  }
896 
897  // draw map areas
898  for ($i=0; $i < count($this->mapareas); $i++)
899  {
900  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
901  ((($i+1) != $a_area_nr) && $a_exclude) ||
902  ($a_area_nr == 0)
903  )
904  {
905  $area =& $this->mapareas[$i];
906  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, true,
907  $x_ratio, $y_ratio);
908  }
909  }
910 
911  $this->saveMapWorkImage();
912 
913  return true;
914  }
915 
916 
923  function addAreaToMapWorkCopy($a_shape, $a_coords)
924  {
925  $this->buildMapWorkImage();
926 
927  // determine ratios
928  $size = @getimagesize($this->getMapWorkCopyName());
929  $x_ratio = 1;
930  if ($size[0] > 0 && $this->getWidth() > 0)
931  {
932  $x_ratio = $this->getWidth() / $size[0];
933  }
934  $y_ratio = 1;
935  if ($size[1] > 0 && $this->getHeight() > 0)
936  {
937  $y_ratio = $this->getHeight() / $size[1];
938  }
939 
940  // add new area to work image
941  $area = new ilMapArea();
942  $area->setShape($a_shape);
943  $area->setCoords($a_coords);
944  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, false,
945  $x_ratio, $y_ratio);
946 
947  $this->saveMapWorkImage();
948  }
949 
953  function outputMapWorkCopy()
954  {
955  if ($this->getMapWorkCopyType() != "")
956  {
957  header("Pragma: no-cache");
958  header("Expires: 0");
959  header("Content-type: image/".strtolower($this->getMapWorkCopyType()));
960  readfile($this->getMapWorkCopyName());
961  }
962  exit;
963  }
964 
968  function buildMapWorkImage()
969  {
970  $im_type = strtolower($this->getMapWorkCopyType());
971 
972  switch ($im_type)
973  {
974  case "gif":
975  $this->map_image = ImageCreateFromGIF($this->getMapWorkCopyName());
976  break;
977 
978  case "jpg":
979  $this->map_image = ImageCreateFromJPEG($this->getMapWorkCopyName());
980  break;
981 
982  case "png":
983  $this->map_image = ImageCreateFromPNG($this->getMapWorkCopyName());
984  break;
985  }
986 
987  // try to allocate black and white as color. if this is not possible, get the closest colors
988  if (imagecolorstotal($this->map_image) > 250)
989  {
990  $this->color1 = imagecolorclosest($this->map_image, 0, 0, 0);
991  $this->color2 = imagecolorclosest($this->map_image, 255, 255, 255);
992  }
993  else
994  {
995  $this->color1 = imagecolorallocate($this->map_image, 0, 0, 0);
996  $this->color2 = imagecolorallocate($this->map_image, 255, 255, 255);
997  }
998  }
999 
1003  function saveMapWorkImage()
1004  {
1005  $im_type = strtolower($this->getMapWorkCopyType());
1006 
1007  // save image work-copy and free memory
1008  switch ($im_type)
1009  {
1010  case "gif":
1011  ImageGIF($this->map_image, $this->getMapWorkCopyName());
1012  break;
1013 
1014  case "jpg":
1015  ImageJPEG($this->map_image, $this->getMapWorkCopyName());
1016  break;
1017 
1018  case "png":
1019  ImagePNG($this->map_image, $this->getMapWorkCopyName());
1020  break;
1021  }
1022 
1023  ImageDestroy($this->map_image);
1024  }
1025 
1029  function &getMapWorkImage()
1030  {
1031  return $this->map_image;
1032  }
1033 
1034 
1038  function getMapAreasXML($a_insert_inst = false, $a_inst = 0)
1039  {
1040  $xml = "";
1041 
1042  // build xml of map areas
1043  for ($i=0; $i < count($this->mapareas); $i++)
1044  {
1045  $area =& $this->mapareas[$i];
1046  $xml .= "<MapArea Shape=\"".$area->getShape()."\" Coords=\"".$area->getCoords()."\">";
1047  if ($area->getLinkType() == IL_INT_LINK)
1048  {
1049  $target_frame = $area->getTargetFrame();
1050 
1051  if ($area->getType() == "GlossaryItem" && $target_frame == "")
1052  {
1053  $target_frame = "Glossary";
1054  }
1055 
1056  $tf_str = ($target_frame == "")
1057  ? ""
1058  : "TargetFrame=\"".$target_frame."\"";
1059 
1060  $xml .= "<IntLink Target=\"".$area->getTarget($a_insert_inst, $a_inst)."\" Type=\"".
1061  $area->getType()."\" $tf_str>";
1062  $xml .= $area->getTitle();
1063  $xml .="</IntLink>";
1064  }
1065  else
1066  {
1067  $xml .= "<ExtLink Href=\"".str_replace("&", "&amp;",$area->getHref())."\" Title=\"".
1068  $area->getExtTitle()."\">";
1069  $xml .= $area->getTitle();
1070  $xml .="</ExtLink>";
1071  }
1072  $xml .= "</MapArea>";
1073  }
1074 
1075  return $xml;
1076  }
1077 
1078 
1084  function _resolveMapAreaLinks($a_mob_id)
1085  {
1086  global $ilDB;
1087 
1088 //echo "mediaItems::resolve<br>";
1089  // read media_object record
1090  $query = "SELECT * FROM media_item WHERE mob_id = ".
1091  $ilDB->quote($a_mob_id, "integer")." ".
1092  "ORDER BY nr";
1093  $item_set = $ilDB->query($query);
1094  while ($item_rec = $ilDB->fetchAssoc($item_set))
1095  {
1096  ilMapArea::_resolveIntLinks($item_rec["id"]);
1097  }
1098  }
1099 
1105  function _getMapAreasIntLinks($a_mob_id)
1106  {
1107  global $ilDB;
1108 
1109  // read media_items records
1110  $query = "SELECT * FROM media_item WHERE mob_id = ".
1111  $ilDB->quote($a_mob_id, "integer")." ORDER BY nr";
1112 
1113  $item_set = $ilDB->query($query);
1114  $links = array();
1115  while ($item_rec = $ilDB->fetchAssoc($item_set))
1116  {
1117  $map_links = ilMapArea::_getIntLinks($item_rec["id"]);
1118  foreach($map_links as $key => $map_link)
1119  {
1120  $links[$key] = $map_link;
1121  }
1122  }
1123  return $links;
1124  }
1125 
1130  {
1131  include_once("./Services/MediaObjects/classes/class.ilExternalMediaAnalyzer.php");
1133  $this->getLocation(), $this->getParameters());
1134  foreach ($par as $k => $v)
1135  {
1136  $this->setParameter($k, $v);
1137  }
1138  }
1139 }
1140 ?>