ILIAS  Release_5_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 
122 
126  function create()
127  {
128  global $ilDB;
129 
130  $item_id = $ilDB->nextId("media_item");
131  $query = "INSERT INTO media_item (id,mob_id, purpose, location, ".
132  "location_type, format, width, ".
133  "height, halign, caption, nr, text_representation) VALUES ".
134  "(".
135  $ilDB->quote($item_id, "integer").",".
136  $ilDB->quote($this->getMobId(), "integer").",".
137  $ilDB->quote($this->getPurpose(), "text").",".
138  $ilDB->quote($this->getLocation(), "text").",".
139  $ilDB->quote($this->getLocationType(), "text").",".
140  $ilDB->quote($this->getFormat(), "text").",".
141  $ilDB->quote($this->getWidth(), "text").",".
142  $ilDB->quote($this->getHeight(), "text").",".
143  $ilDB->quote($this->getHAlign(), "text").",".
144  $ilDB->quote($this->getCaption(), "text").",".
145  $ilDB->quote($this->getNr(), "integer").",".
146  $ilDB->quote($this->getTextRepresentation(), "text").")";
147  $ilDB->manipulate($query);
148 
149  $this->setId($item_id);
150 
151  // create mob parameters
152  $params = $this->getParameters();
153  foreach($params as $name => $value)
154  {
155  $query = "INSERT INTO mob_parameter (med_item_id, name, value) VALUES ".
156  "(".$ilDB->quote($item_id, "integer").",".
157  $ilDB->quote($name, "text").",".
158  $ilDB->quote($value, "text").")";
159  $ilDB->manipulate($query);
160  }
161 
162  // create map areas
163  for ($i=0; $i < count($this->mapareas); $i++)
164  {
165  if (is_object($this->mapareas[$i]))
166  {
167  $this->mapareas[$i]->setItemId($this->getId());
168  $this->mapareas[$i]->setNr($i + 1);
169  $this->mapareas[$i]->create();
170  }
171  }
172  }
173 
177  function update()
178  {
179  global $ilDB;
180 
181  $query = "UPDATE media_item SET ".
182  " mob_id = ".$ilDB->quote($this->getMobId(), "integer").",".
183  " purpose = ".$ilDB->quote($this->getPurpose(), "text").",".
184  " location = ".$ilDB->quote($this->getLocation(), "text").",".
185  " location_type = ".$ilDB->quote($this->getLocationType(), "text").",".
186  " format = ".$ilDB->quote($this->getFormat(), "text").",".
187  " width = ".$ilDB->quote($this->getWidth(), "text").",".
188  " height = ".$ilDB->quote($this->getHeight(), "text").",".
189  " halign = ".$ilDB->quote($this->getHAlign(), "text").",".
190  " caption = ".$ilDB->quote($this->getCaption(), "text").",".
191  " nr = ".$ilDB->quote($this->getNr(), "integer").",".
192  " text_representation = ".$ilDB->quote($this->getTextRepresentation(), "text").
193  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
194  $ilDB->manipulate($query);
195 
196  // delete mob parameters
197  $query = "DELETE FROM mob_parameter WHERE med_item_id = ".
198  $ilDB->quote($this->getId(), "integer");
199 
200  // create mob parameters
201  $params = $this->getParameters();
202  foreach($params as $name => $value)
203  {
204  $query = "INSERT INTO mob_parameter (med_item_id, name, value) VALUES ".
205  "(".$ilDB->quote($this->getId(), "integer").",".
206  $ilDB->quote($name, "text").",".
207  $ilDB->quote($value, "text").")";
208  $ilDB->manipulate($query);
209  }
210  }
211 
218  function writeParameter($a_name, $a_value)
219  {
220  global $ilDB;
221 
222  $query = "INSERT INTO mob_parameter (med_item_id, name, value) VALUES ".
223  "(".$ilDB->quote($this->getId(), "integer").",".
224  $ilDB->quote($a_name, "text").",".
225  $ilDB->quote($a_value, "text").")";
226  $ilDB->manipulate($query);
227  }
228 
232  function read()
233  {
234  global $ilDB;
235 
236  $item_id = $this->getId();
237  $mob_id = $this->getMobId();
238  $nr = $this->getNr();
239  $query = "";
240  if($item_id > 0)
241  {
242  $query = "SELECT * FROM media_item WHERE id = ".
243  $ilDB->quote($this->getId(), "integer");
244  }
245  else if ($mob_id > 0 && $nr > 0)
246  {
247  $query = "SELECT * FROM media_item WHERE mob_id = ".
248  $ilDB->quote($this->getMobId(), "integer")." ".
249  "AND nr=".$ilDB->quote($this->getNr(), "integer");
250  }
251  if ($query != "")
252  {
253  $item_set = $ilDB->query($query);
254  $item_rec = $ilDB->fetchAssoc($item_set);
255 
256  $this->setLocation($item_rec["location"]);
257  $this->setLocationType($item_rec["location_type"]);
258  $this->setFormat($item_rec["format"]);
259  $this->setWidth($item_rec["width"]);
260  $this->setHeight($item_rec["height"]);
261  $this->setHAlign($item_rec["halign"]);
262  $this->setCaption($item_rec["caption"]);
263  $this->setPurpose($item_rec["purpose"]);
264  $this->setNr($item_rec["nr"]);
265  $this->setMobId($item_rec["mob_id"]);
266  $this->setId($item_rec["id"]);
267  $this->setThumbTried($item_rec["tried_thumb"]);
268  $this->setTextRepresentation($item_rec["text_representation"]);
269 
270  // get item parameter
271  $query = "SELECT * FROM mob_parameter WHERE med_item_id = ".
272  $ilDB->quote($this->getId(), "integer");
273  $par_set = $ilDB->query($query);
274  while ($par_rec = $ilDB->fetchAssoc($par_set))
275  {
276  $this->setParameter($par_rec["name"], $par_rec["value"]);
277  }
278 
279  // get item map areas
280  $max = ilMapArea::_getMaxNr($this->getId());
281  for ($i = 1; $i <= $max; $i++)
282  {
283  $area =& new ilMapArea($this->getId(), $i);
284  $this->addMapArea($area);
285  }
286  }
287 
288  }
289 
293  function writeThumbTried($a_tried)
294  {
295  global $ilDB;
296 
297  $q = "UPDATE media_item SET tried_thumb = ".
298  $ilDB->quote($a_tried, "text").
299  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
300 
301  $ilDB->manipulate($q);
302  }
303 
310  static function _lookupLocationForMobId($a_mob_id, $a_purpose)
311  {
312  global $ilDB;
313 
314  // read media_object record
315  $query = "SELECT * FROM media_item WHERE mob_id = ".
316  $ilDB->quote($a_mob_id, "integer")." ".
317  "AND purpose = ".$ilDB->quote($a_purpose, "text");
318  $set = $ilDB->query($query);
319  if ($rec = $ilDB->fetchAssoc($set))
320  {
321  return $rec["location"];
322  }
323 
324  return "";
325  }
326 
332  static function _lookupMobId($a_med_id)
333  {
334  global $ilDB;
335 
336  // read media_object record
337  $query = "SELECT * FROM media_item WHERE id = ".
338  $ilDB->quote($a_med_id, "integer");
339  $set = $ilDB->query($query);
340  if ($rec = $ilDB->fetchAssoc($set))
341  {
342  return $rec["mob_id"];
343  }
344 
345  return "";
346  }
347 
348  /* read media item with specific purpose and mobId
349  *
350  * @param integer $a_mobId media object id
351  * @param string $a_purpose media object purpose
352  * @return array $mob media object
353  */
354  function _getMediaItemsOfMObId($a_mobId, $a_purpose)
355  {
356  global $ilDB;
357 
358  // read media_object record
359  $query = "SELECT * FROM media_item WHERE mob_id = ".
360  $ilDB->quote($a_mobId, "integer")." ".
361  "AND purpose=" . $ilDB->quote($a_purpose, "text")." ORDER BY nr";
362  $item_set = $ilDB->query($query);
363 
364  while ($item_rec = $ilDB->fetchAssoc($item_set))
365  {
366  return $item_rec;
367  }
368  return false;
369  }
370 
376  function _getMediaItemsOfMOb(&$a_mob)
377  {
378  global $ilDB;
379 
380  // read media_object record
381  $query = "SELECT * FROM media_item WHERE mob_id = ".
382  $ilDB->quote($a_mob->getId(), "integer")." ".
383  "ORDER BY nr";
384  $item_set = $ilDB->query($query);
385  while ($item_rec = $ilDB->fetchAssoc($item_set))
386  {
387  $media_item =& new ilMediaItem();
388  $media_item->setNr($item_rec["nr"]);
389  $media_item->setId($item_rec["id"]);
390  $media_item->setLocation($item_rec["location"]);
391  $media_item->setLocationType($item_rec["location_type"]);
392  $media_item->setFormat($item_rec["format"]);
393  $media_item->setWidth($item_rec["width"]);
394  $media_item->setHeight($item_rec["height"]);
395  $media_item->setHAlign($item_rec["halign"]);
396  $media_item->setCaption($item_rec["caption"]);
397  $media_item->setPurpose($item_rec["purpose"]);
398  $media_item->setMobId($item_rec["mob_id"]);
399  $media_item->setThumbTried($item_rec["tried_thumb"]);
400  $media_item->setTextRepresentation($item_rec["text_representation"]);
401 
402  // get item parameter
403  $query = "SELECT * FROM mob_parameter WHERE med_item_id = ".
404  $ilDB->quote($item_rec["id"], "integer");
405  $par_set = $ilDB->query($query);
406  while ($par_rec = $ilDB->fetchAssoc($par_set))
407  {
408  $media_item->setParameter($par_rec["name"], $par_rec["value"]);
409  }
410 
411  // get item map areas
412  $max = ilMapArea::_getMaxNr($media_item->getId());
413  for ($i = 1; $i <= $max; $i++)
414  {
415  $area =& new ilMapArea($media_item->getId(), $i);
416  $media_item->addMapArea($area);
417  }
418 
419  // add media item to media object
420  $a_mob->addMediaItem($media_item);
421  }
422  }
423 
427  function deleteAllItemsOfMob($a_mob_id)
428  {
429  global $ilDB;
430 
431  // iterate all media items ob mob
432  $query = "SELECT * FROM media_item WHERE mob_id = ".
433  $ilDB->quote($a_mob_id, "integer");
434  $item_set = $ilDB->query($query);
435  while ($item_rec = $ilDB->fetchAssoc($item_set))
436  {
437  // delete all parameters of media item
438  $query = "DELETE FROM mob_parameter WHERE med_item_id = ".
439  $ilDB->quote($item_rec["id"], "integer");
440  $ilDB->manipulate($query);
441 
442  // delete all map areas of media item
443  $query = "DELETE FROM map_area WHERE item_id = ".
444  $ilDB->quote($item_rec["id"], "integer");
445  $ilDB->manipulate($query);
446  }
447 
448  // delete media items
449  $query = "DELETE FROM media_item WHERE mob_id = ".
450  $ilDB->quote($a_mob_id, "integer");
451  $ilDB->manipulate($query);
452  }
453 
454  function setPurpose($a_purpose)
455  {
456  $this->purpose = $a_purpose;
457  }
458 
459  function getPurpose()
460  {
461  return $this->purpose;
462  }
463 
464  function setLocation($a_location)
465  {
466  $this->location = $a_location;
467  }
468 
469  function getLocation()
470  {
471  return $this->location;
472  }
473 
474  function setLocationType($a_type)
475  {
476  $this->location_type = $a_type;
477  }
478 
479  function getLocationType()
480  {
481  return $this->location_type;
482  }
483 
484  function setFormat($a_format)
485  {
486  $this->format = $a_format;
487  }
488 
489  function getFormat()
490  {
491  return $this->format;
492  }
493 
494  function setThumbTried($a_tried)
495  {
496  $this->tried_thumb = $a_tried;
497  }
498 
499  function getThumbTried()
500  {
501  return $this->tried_thumb;
502  }
503 
504  function addMapArea(&$a_map_area)
505  {
506  $this->mapareas[$this->map_cnt] =& $a_map_area;
507  $this->map_cnt++;
508  }
509 
513  function deleteMapArea($nr)
514  {
515  for ($i=1; $i<=$this->map_cnt; $i++)
516  {
517  if($i > $nr)
518  {
519  $this->mapareas[$i-2] =& $this->mapareas[$i-1];
520  $this->mapareas[$i-2]->setNr($i-1);
521  }
522  }
523  if($nr <= $this->map_cnt)
524  {
525  unset($this->mapareas[$this->map_cnt - 1]);
526  $this->map_cnt--;
527  }
528  }
529 
533  function &getMapArea($nr)
534  {
535  return $this->mapareas[$nr-1];
536  }
537 
541  function getMapAreas()
542  {
543  return $this->mapareas;
544  }
545 
549  function getWidth()
550  {
551  return $this->width;
552  }
553 
557  function setWidth($a_width)
558  {
559  $this->width = $a_width;
560  }
561 
565  function getHeight()
566  {
567  return $this->height;
568  }
569 
573  function setHeight($a_height)
574  {
575  $this->height = $a_height;
576  }
577 
581  function getOriginalSize()
582  {
583  $mob_dir = ilObjMediaObject::_getDirectory($this->getMobId());
584 
585  if (ilUtil::deducibleSize($this->getFormat()))
586  {
587  if ($this->getLocationType() == "LocalFile")
588  {
589  $loc = $mob_dir."/".$this->getLocation();
590  }
591  else
592  {
593  $loc = $this->getLocation();
594  }
595  $size = @getimagesize($loc);
596 
597  if ($size[0] > 0 && $size[1] > 0)
598  {
599  return array("width" => $size[0], "height" => $size[1]);
600  }
601  }
602 
603  return false;
604  }
605 
609  function setCaption($a_caption)
610  {
611  $this->caption = $a_caption;
612  }
613 
617  function getCaption()
618  {
619  return $this->caption;
620  }
621 
625  function setHAlign($a_halign)
626  {
627  $this->halign = $a_halign;
628  }
629 
633  function getHAlign()
634  {
635  return $this->halign;
636  }
637 
638 
645  function setParameter($a_name, $a_value)
646  {
647  $this->parameters[$a_name] = $a_value;
648  }
649 
653  function resetParameters()
654  {
655  $this->parameters = array();
656  }
657 
663  function setParameters($a_par)
664  {
665  $this->resetParameters();
666  $par_arr = ilUtil::extractParameterString($a_par);
667  if(is_array($par_arr))
668  {
669  foreach($par_arr as $par => $val)
670  {
671  $this->setParameter($par, $val);
672  }
673  }
674  }
675 
676 
680  function getParameters()
681  {
682  return $this->parameters;
683  }
684 
685 
690  {
691  return ilUtil::assembleParameterString($this->parameters);
692  }
693 
694 
698  function getParameter($a_name)
699  {
700  return $this->parameters[$a_name];
701  }
702 
706  function getWorkDirectory()
707  {
708  return ilUtil::getDataDir()."/map_workfiles/item_".$this->getId();
709  }
710 
715  {
716  if(!@is_dir(ilUtil::getDataDir()."/map_workfiles"))
717  {
718  ilUtil::createDirectory(ilUtil::getDataDir()."/map_workfiles");
719  }
720  $work_dir = $this->getWorkDirectory();
721  if(!@is_dir($work_dir))
722  {
723  ilUtil::createDirectory($work_dir);
724  }
725  }
726 
730  function getSuffix()
731  {
732  $loc_arr = explode(".", $this->getLocation());
733 
734  return $loc_arr[count($loc_arr) - 1];
735  }
736 
741  {
743  }
744 
750  function getMapWorkCopyName($a_reference_copy = false)
751  {
752  $file_arr = explode("/", $this->getLocation());
753  $o_file = $file_arr[count($file_arr) - 1];
754  $file_arr = explode(".", $o_file);
755  unset($file_arr[count($file_arr) - 1]);
756  $file = implode($file_arr, ".");
757 
758  if (!$a_reference_copy)
759  {
760  return $this->getWorkDirectory()."/".$file.".".$this->getMapWorkCopyType();
761  }
762  else
763  {
764  return $this->getWorkDirectory()."/l_copy_".$o_file;
765  }
766  }
767 
771  function getDirectory()
772  {
773  return ilObjMediaObject::_getDirectory($this->getMobId());
774  }
775 
779  function getThumbnailDirectory($a_mode = "filesystem")
780  {
781  return ilObjMediaObject::_getThumbnailDirectory($this->getMobId(), $a_mode);
782  }
783 
787  function getThumbnailTarget($a_size = "")
788  {
789  if (is_int(strpos($this->getFormat(), "image")))
790  {
791  $thumb_file = $this->getThumbnailDirectory()."/".
792  $this->getPurpose().".jpeg";
793 
794  $thumb_file_small = $this->getThumbnailDirectory()."/".
795  $this->getPurpose()."_small.jpeg";
796 
797  // generate thumbnail (if not tried before)
798  if ($this->getThumbTried() == "n" && $this->getLocationType() == "LocalFile")
799  {
800  if (is_file($thumb_file))
801  {
802  unlink($thumb_file);
803  }
804  if (is_file($thumb_file_small))
805  {
806  unlink($thumb_file_small);
807  }
808  $this->writeThumbTried("y");
810  $med_file = $this->getDirectory()."/".$this->getLocation();
811 
812  if (is_file($med_file))
813  {
814  ilUtil::convertImage($med_file, $thumb_file, "jpeg", "80");
815  ilUtil::convertImage($med_file, $thumb_file_small, "jpeg", "40");
816  }
817  }
818 
819  if ($a_size == "small")
820  {
821  if (is_file($thumb_file_small))
822  {
823  return $this->getThumbnailDirectory("output")."/".
824  $this->getPurpose()."_small.jpeg?dummy=".rand(1, 999999);
825  }
826  }
827  else
828  {
829  if (is_file($thumb_file))
830  {
831  return $this->getThumbnailDirectory("output")."/".
832  $this->getPurpose().".jpeg?dummy=".rand(1, 999999);
833  }
834  }
835  }
836 
837  return "";
838  }
839 
840 
844  function copyOriginal()
845  {
846  global $lng;
847  $this->createWorkDirectory();
848 
849  if ($this->getLocationType() != "Reference")
850  {
851  ilUtil::convertImage($this->getDirectory()."/".$this->getLocation(),
852  $this->getMapWorkCopyName(),
853  $this->getMapWorkCopyType());
854  }
855  else
856  {
857  // first copy the external file, if necessary
858  if (!is_file($this->getMapWorkCopyName(true)) || (filesize($this->getMapWorkCopyName(true)) == 0))
859  {
860  $handle = @fopen($this->getLocation(), "r");
861  $lcopy = fopen($this->getMapWorkCopyName(true), "w");
862  if ($handle && $lcopy)
863  {
864  while (!feof($handle))
865  {
866  $content = fread($handle, 4096);
867  fwrite($lcopy, $content);
868  }
869  }
870  @fclose($lcopy);
871  @fclose($handle);
872  }
873 
874  // now, create working copy
876  $this->getMapWorkCopyName(),
877  $this->getMapWorkCopyType());
878  }
879 
880  if (!is_file($this->getMapWorkCopyName()))
881  {
882 
883  ilUtil::sendFailure($lng->txt("cont_map_file_not_generated"));
884  return false;
885  }
886  return true;
887  }
888 
895  function makeMapWorkCopy($a_area_nr = 0, $a_exclude = false)
896  {
897  global $lng;
898 
899  if (!$this->copyOriginal())
900  {
901  return false;
902  }
903  $this->buildMapWorkImage();
904 
905  // determine ratios
906  $size = @getimagesize($this->getMapWorkCopyName());
907  $x_ratio = 1;
908  if ($size[0] > 0 && $this->getWidth() > 0)
909  {
910  $x_ratio = $this->getWidth() / $size[0];
911  }
912  $y_ratio = 1;
913  if ($size[1] > 0 && $this->getHeight() > 0)
914  {
915  $y_ratio = $this->getHeight() / $size[1];
916  }
917 
918  // draw map areas
919  for ($i=0; $i < count($this->mapareas); $i++)
920  {
921  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
922  ((($i+1) != $a_area_nr) && $a_exclude) ||
923  ($a_area_nr == 0)
924  )
925  {
926  $area =& $this->mapareas[$i];
927  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, true,
928  $x_ratio, $y_ratio);
929  }
930  }
931 
932  $this->saveMapWorkImage();
933 
934  return true;
935  }
936 
937 
944  function addAreaToMapWorkCopy($a_shape, $a_coords)
945  {
946  $this->buildMapWorkImage();
947 
948  // determine ratios
949  $size = @getimagesize($this->getMapWorkCopyName());
950  $x_ratio = 1;
951  if ($size[0] > 0 && $this->getWidth() > 0)
952  {
953  $x_ratio = $this->getWidth() / $size[0];
954  }
955  $y_ratio = 1;
956  if ($size[1] > 0 && $this->getHeight() > 0)
957  {
958  $y_ratio = $this->getHeight() / $size[1];
959  }
960 
961  // add new area to work image
962  $area = new ilMapArea();
963  $area->setShape($a_shape);
964  $area->setCoords($a_coords);
965  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, false,
966  $x_ratio, $y_ratio);
967 
968  $this->saveMapWorkImage();
969  }
970 
974  function outputMapWorkCopy()
975  {
976  if ($this->getMapWorkCopyType() != "")
977  {
978  header("Pragma: no-cache");
979  header("Expires: 0");
980  header("Content-type: image/".strtolower($this->getMapWorkCopyType()));
981  readfile($this->getMapWorkCopyName());
982  }
983  exit;
984  }
985 
989  function buildMapWorkImage()
990  {
991  $im_type = strtolower($this->getMapWorkCopyType());
992 
993  switch ($im_type)
994  {
995  case "gif":
996  $this->map_image = ImageCreateFromGIF($this->getMapWorkCopyName());
997  break;
998 
999  case "jpg":
1000  case "jpeg":
1001  $this->map_image = ImageCreateFromJPEG($this->getMapWorkCopyName());
1002  break;
1003 
1004  case "png":
1005  $this->map_image = ImageCreateFromPNG($this->getMapWorkCopyName());
1006  break;
1007  }
1008 
1009  // try to allocate black and white as color. if this is not possible, get the closest colors
1010  if (imagecolorstotal($this->map_image) > 250)
1011  {
1012  $this->color1 = imagecolorclosest($this->map_image, 0, 0, 0);
1013  $this->color2 = imagecolorclosest($this->map_image, 255, 255, 255);
1014  }
1015  else
1016  {
1017  $this->color1 = imagecolorallocate($this->map_image, 0, 0, 0);
1018  $this->color2 = imagecolorallocate($this->map_image, 255, 255, 255);
1019  }
1020  }
1021 
1025  function saveMapWorkImage()
1026  {
1027  $im_type = strtolower($this->getMapWorkCopyType());
1028 
1029  // save image work-copy and free memory
1030  switch ($im_type)
1031  {
1032  case "gif":
1033  ImageGIF($this->map_image, $this->getMapWorkCopyName());
1034  break;
1035 
1036  case "jpg":
1037  case "jpeg":
1038  ImageJPEG($this->map_image, $this->getMapWorkCopyName());
1039  break;
1040 
1041  case "png":
1042  ImagePNG($this->map_image, $this->getMapWorkCopyName());
1043  break;
1044  }
1045 
1046  ImageDestroy($this->map_image);
1047  }
1048 
1052  function &getMapWorkImage()
1053  {
1054  return $this->map_image;
1055  }
1056 
1057 
1061  function getMapAreasXML($a_insert_inst = false, $a_inst = 0)
1062  {
1063  $xml = "";
1064 
1065  // build xml of map areas
1066  for ($i=0; $i < count($this->mapareas); $i++)
1067  {
1068  $area =& $this->mapareas[$i];
1069 
1070  // highlight mode
1071  $hm = "";
1072  if ($area->getHighlightMode() != "")
1073  {
1074  $hm = ' HighlightMode="'.$area->getHighlightMode().'" ';
1075  $hcl = ($area->getHighlightClass() != "")
1076  ? $area->getHighlightClass()
1077  : "Accented";
1078  $hm.= 'HighlightClass="'.$hcl.'" ';
1079  }
1080 
1081  $xml .= "<MapArea Shape=\"".$area->getShape()."\" Coords=\"".$area->getCoords()."\" ".$hm.">";
1082  if ($area->getLinkType() == IL_INT_LINK)
1083  {
1084  $target_frame = $area->getTargetFrame();
1085 
1086  if ($area->getType() == "GlossaryItem" && $target_frame == "")
1087  {
1088  $target_frame = "Glossary";
1089  }
1090 
1091  $tf_str = ($target_frame == "")
1092  ? ""
1093  : "TargetFrame=\"".$target_frame."\"";
1094 
1095  $xml .= "<IntLink Target=\"".$area->getTarget($a_insert_inst, $a_inst)."\" Type=\"".
1096  $area->getType()."\" $tf_str>";
1097  // see bug 17893 and http://stackoverflow.com/questions/4026502/xml-error-at-ampersand
1098  $xml .= htmlspecialchars($area->getTitle(), ENT_QUOTES);
1099  $xml .="</IntLink>";
1100  }
1101  else
1102  {
1103  $xml .= "<ExtLink Href=\"".str_replace("&", "&amp;",$area->getHref())."\" Title=\"".
1104  $area->getExtTitle()."\">";
1105  $xml .= $area->getTitle();
1106  $xml .="</ExtLink>";
1107  }
1108  $xml .= "</MapArea>";
1109  }
1110 
1111  return $xml;
1112  }
1113 
1114 
1120  function _resolveMapAreaLinks($a_mob_id)
1121  {
1122  global $ilDB;
1123 
1124 //echo "mediaItems::resolve<br>";
1125  // read media_object record
1126  $query = "SELECT * FROM media_item WHERE mob_id = ".
1127  $ilDB->quote($a_mob_id, "integer")." ".
1128  "ORDER BY nr";
1129  $item_set = $ilDB->query($query);
1130  while ($item_rec = $ilDB->fetchAssoc($item_set))
1131  {
1132  ilMapArea::_resolveIntLinks($item_rec["id"]);
1133  }
1134  }
1135 
1141  function _getMapAreasIntLinks($a_mob_id)
1142  {
1143  global $ilDB;
1144 
1145  // read media_items records
1146  $query = "SELECT * FROM media_item WHERE mob_id = ".
1147  $ilDB->quote($a_mob_id, "integer")." ORDER BY nr";
1148 
1149  $item_set = $ilDB->query($query);
1150  $links = array();
1151  while ($item_rec = $ilDB->fetchAssoc($item_set))
1152  {
1153  $map_links = ilMapArea::_getIntLinks($item_rec["id"]);
1154  foreach($map_links as $key => $map_link)
1155  {
1156  $links[$key] = $map_link;
1157  }
1158  }
1159  return $links;
1160  }
1161 
1166  {
1167  include_once("./Services/MediaObjects/classes/class.ilExternalMediaAnalyzer.php");
1169  $this->getLocation(), $this->getParameters());
1170  foreach ($par as $k => $v)
1171  {
1172  $this->setParameter($k, $v);
1173  }
1174  }
1175 }
1176 ?>