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