ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 __construct($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  static 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  static 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 
429  static function deleteAllItemsOfMob($a_mob_id)
430  {
431  global $ilDB;
432 
433  // iterate all media items ob mob
434  $query = "SELECT * FROM media_item WHERE mob_id = ".
435  $ilDB->quote($a_mob_id, "integer");
436  $item_set = $ilDB->query($query);
437  while ($item_rec = $ilDB->fetchAssoc($item_set))
438  {
439  // delete all parameters of media item
440  $query = "DELETE FROM mob_parameter WHERE med_item_id = ".
441  $ilDB->quote($item_rec["id"], "integer");
442  $ilDB->manipulate($query);
443 
444  // delete all map areas of media item
445  $query = "DELETE FROM map_area WHERE item_id = ".
446  $ilDB->quote($item_rec["id"], "integer");
447  $ilDB->manipulate($query);
448  }
449 
450  // delete media items
451  $query = "DELETE FROM media_item WHERE mob_id = ".
452  $ilDB->quote($a_mob_id, "integer");
453  $ilDB->manipulate($query);
454  }
455 
456  function setPurpose($a_purpose)
457  {
458  $this->purpose = $a_purpose;
459  }
460 
461  function getPurpose()
462  {
463  return $this->purpose;
464  }
465 
466  function setLocation($a_location)
467  {
468  $this->location = $a_location;
469  }
470 
471  function getLocation()
472  {
473  return $this->location;
474  }
475 
477  {
478  $this->location_type = $a_type;
479  }
480 
481  function getLocationType()
482  {
483  return $this->location_type;
484  }
485 
486  function setFormat($a_format)
487  {
488  $this->format = $a_format;
489  }
490 
491  function getFormat()
492  {
493  return $this->format;
494  }
495 
496  function setThumbTried($a_tried)
497  {
498  $this->tried_thumb = $a_tried;
499  }
500 
501  function getThumbTried()
502  {
503  return $this->tried_thumb;
504  }
505 
506  function addMapArea(&$a_map_area)
507  {
508  $this->mapareas[$this->map_cnt] = $a_map_area;
509  $this->map_cnt++;
510  }
511 
515  function deleteMapArea($nr)
516  {
517  for ($i=1; $i<=$this->map_cnt; $i++)
518  {
519  if($i > $nr)
520  {
521  $this->mapareas[$i-2] = $this->mapareas[$i-1];
522  $this->mapareas[$i-2]->setNr($i-1);
523  }
524  }
525  if($nr <= $this->map_cnt)
526  {
527  unset($this->mapareas[$this->map_cnt - 1]);
528  $this->map_cnt--;
529  }
530  }
531 
535  function &getMapArea($nr)
536  {
537  return $this->mapareas[$nr-1];
538  }
539 
543  function getMapAreas()
544  {
545  return $this->mapareas;
546  }
547 
551  function getWidth()
552  {
553  return $this->width;
554  }
555 
559  function setWidth($a_width)
560  {
561  $this->width = $a_width;
562  }
563 
567  function getHeight()
568  {
569  return $this->height;
570  }
571 
575  function setHeight($a_height)
576  {
577  $this->height = $a_height;
578  }
579 
583  function getOriginalSize()
584  {
585  $mob_dir = ilObjMediaObject::_getDirectory($this->getMobId());
586 
587  if (ilUtil::deducibleSize($this->getFormat()))
588  {
589  if ($this->getLocationType() == "LocalFile")
590  {
591  $loc = $mob_dir."/".$this->getLocation();
592  }
593  else
594  {
595  $loc = $this->getLocation();
596  }
597 
598  include_once("./Services/MediaObjects/classes/class.ilMediaImageUtil.php");
600  if ($size[0] > 0 && $size[1] > 0)
601  {
602  return array("width" => $size[0], "height" => $size[1]);
603  }
604  }
605 
606  return false;
607  }
608 
612  function setCaption($a_caption)
613  {
614  $this->caption = $a_caption;
615  }
616 
620  function getCaption()
621  {
622  return $this->caption;
623  }
624 
628  function setHAlign($a_halign)
629  {
630  $this->halign = $a_halign;
631  }
632 
636  function getHAlign()
637  {
638  return $this->halign;
639  }
640 
641 
648  function setParameter($a_name, $a_value)
649  {
650  if (self::checkParameter($a_name, $a_value))
651  {
652  $this->parameters[$a_name] = $a_value;
653  }
654  }
655 
659  function resetParameters()
660  {
661  $this->parameters = array();
662  }
663 
669  function setParameters($a_par)
670  {
671  $this->resetParameters();
672  $par_arr = ilUtil::extractParameterString($a_par);
673  if(is_array($par_arr))
674  {
675  foreach($par_arr as $par => $val)
676  {
677  $this->setParameter($par, $val);
678  }
679  }
680  }
681 
689  static function checkParameter($a_par, $a_val)
690  {
691  // do not allow event attributes
692  if (substr(strtolower(trim($a_par)), 0, 2) == "on")
693  {
694  return false;
695  }
696  // no javascript in value
697  if (is_int(strpos(strtolower($a_val), "javascript")))
698  {
699  return false;
700  }
701  // do not allow to change the src attribute
702  if (in_array(strtolower(trim($a_par)), array("src")))
703  {
704  return false;
705  }
706 
707  return true;
708  }
709 
710 
714  function getParameters()
715  {
716  return $this->parameters;
717  }
718 
719 
724  {
725  return ilUtil::assembleParameterString($this->parameters);
726  }
727 
728 
732  function getParameter($a_name)
733  {
734  return $this->parameters[$a_name];
735  }
736 
740  function getWorkDirectory()
741  {
742  return ilUtil::getDataDir()."/map_workfiles/item_".$this->getId();
743  }
744 
749  {
750  if(!@is_dir(ilUtil::getDataDir()."/map_workfiles"))
751  {
752  ilUtil::createDirectory(ilUtil::getDataDir()."/map_workfiles");
753  }
754  $work_dir = $this->getWorkDirectory();
755  if(!@is_dir($work_dir))
756  {
757  ilUtil::createDirectory($work_dir);
758  }
759  }
760 
764  function getSuffix()
765  {
766  $loc_arr = explode(".", $this->getLocation());
767 
768  return $loc_arr[count($loc_arr) - 1];
769  }
770 
775  {
777  }
778 
784  function getMapWorkCopyName($a_reference_copy = false)
785  {
786  $file_arr = explode("/", $this->getLocation());
787  $o_file = $file_arr[count($file_arr) - 1];
788  $file_arr = explode(".", $o_file);
789  unset($file_arr[count($file_arr) - 1]);
790  $file = implode($file_arr, ".");
791 
792  if (!$a_reference_copy)
793  {
794  return $this->getWorkDirectory()."/".$file.".".$this->getMapWorkCopyType();
795  }
796  else
797  {
798  return $this->getWorkDirectory()."/l_copy_".$o_file;
799  }
800  }
801 
805  function getDirectory()
806  {
807  return ilObjMediaObject::_getDirectory($this->getMobId());
808  }
809 
813  function getThumbnailDirectory($a_mode = "filesystem")
814  {
815  return ilObjMediaObject::_getThumbnailDirectory($this->getMobId(), $a_mode);
816  }
817 
821  function getThumbnailTarget($a_size = "")
822  {
823  if (is_int(strpos($this->getFormat(), "image")))
824  {
825  $thumb_file = $this->getThumbnailDirectory()."/".
826  $this->getPurpose().".jpeg";
827 
828  $thumb_file_small = $this->getThumbnailDirectory()."/".
829  $this->getPurpose()."_small.jpeg";
830 
831  // generate thumbnail (if not tried before)
832  if ($this->getThumbTried() == "n" && $this->getLocationType() == "LocalFile")
833  {
834  if (is_file($thumb_file))
835  {
836  unlink($thumb_file);
837  }
838  if (is_file($thumb_file_small))
839  {
840  unlink($thumb_file_small);
841  }
842  $this->writeThumbTried("y");
844  $med_file = $this->getDirectory()."/".$this->getLocation();
845 
846  if (is_file($med_file))
847  {
848  ilUtil::convertImage($med_file, $thumb_file, "jpeg", "80");
849  ilUtil::convertImage($med_file, $thumb_file_small, "jpeg", "40");
850  }
851  }
852 
853  if ($a_size == "small")
854  {
855  if (is_file($thumb_file_small))
856  {
857  return $this->getThumbnailDirectory("output")."/".
858  $this->getPurpose()."_small.jpeg?dummy=".rand(1, 999999);
859  }
860  }
861  else
862  {
863  if (is_file($thumb_file))
864  {
865  return $this->getThumbnailDirectory("output")."/".
866  $this->getPurpose().".jpeg?dummy=".rand(1, 999999);
867  }
868  }
869  }
870 
871  return "";
872  }
873 
874 
878  function copyOriginal()
879  {
880  global $lng;
881  $this->createWorkDirectory();
882 
883  $geom = ($this->getWidth() != "" && $this->getHeight() != "")
884  ? $this->getWidth()."x".$this->getHeight()
885  : "";
886 
887  if ($this->getLocationType() != "Reference")
888  {
889  ilUtil::convertImage($this->getDirectory()."/".$this->getLocation(),
890  $this->getMapWorkCopyName(),
891  $this->getMapWorkCopyType(), $geom);
892  }
893  else
894  {
895  // first copy the external file, if necessary
896  if (!is_file($this->getMapWorkCopyName(true)) || (filesize($this->getMapWorkCopyName(true)) == 0))
897  {
898  $handle = @fopen($this->getLocation(), "r");
899  $lcopy = fopen($this->getMapWorkCopyName(true), "w");
900  if ($handle && $lcopy)
901  {
902  while (!feof($handle))
903  {
904  $content = fread($handle, 4096);
905  fwrite($lcopy, $content);
906  }
907  }
908  @fclose($lcopy);
909  @fclose($handle);
910  }
911 
912  // now, create working copy
914  $this->getMapWorkCopyName(),
915  $this->getMapWorkCopyType(), $geom);
916  }
917 
918  if (!is_file($this->getMapWorkCopyName()))
919  {
920 
921  ilUtil::sendFailure($lng->txt("cont_map_file_not_generated"));
922  return false;
923  }
924  return true;
925  }
926 
933  function makeMapWorkCopy($a_area_nr = 0, $a_exclude = false)
934  {
935  global $lng;
936 
937  if (!$this->copyOriginal())
938  {
939  return false;
940  }
941  $this->buildMapWorkImage();
942 
943  // determine ratios
944  $size = @getimagesize($this->getMapWorkCopyName());
945  $x_ratio = 1;
946  if ($size[0] > 0 && $this->getWidth() > 0)
947  {
948  $x_ratio = $this->getWidth() / $size[0];
949  }
950  $y_ratio = 1;
951  if ($size[1] > 0 && $this->getHeight() > 0)
952  {
953  $y_ratio = $this->getHeight() / $size[1];
954  }
955 
956  // draw map areas
957  for ($i=0; $i < count($this->mapareas); $i++)
958  {
959  if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
960  ((($i+1) != $a_area_nr) && $a_exclude) ||
961  ($a_area_nr == 0)
962  )
963  {
964  $area = $this->mapareas[$i];
965  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, true,
966  $x_ratio, $y_ratio);
967  }
968  }
969 
970  $this->saveMapWorkImage();
971 
972  return true;
973  }
974 
975 
982  function addAreaToMapWorkCopy($a_shape, $a_coords)
983  {
984  $this->buildMapWorkImage();
985 
986  // determine ratios
987  $size = @getimagesize($this->getMapWorkCopyName());
988  $x_ratio = 1;
989  if ($size[0] > 0 && $this->getWidth() > 0)
990  {
991  $x_ratio = $this->getWidth() / $size[0];
992  }
993  $y_ratio = 1;
994  if ($size[1] > 0 && $this->getHeight() > 0)
995  {
996  $y_ratio = $this->getHeight() / $size[1];
997  }
998 
999  // add new area to work image
1000  $area = new ilMapArea();
1001  $area->setShape($a_shape);
1002  $area->setCoords($a_coords);
1003  $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, false,
1004  $x_ratio, $y_ratio);
1005 
1006  $this->saveMapWorkImage();
1007  }
1008 
1013  {
1014  if ($this->getMapWorkCopyType() != "")
1015  {
1016  header("Pragma: no-cache");
1017  header("Expires: 0");
1018  header("Content-type: image/".strtolower($this->getMapWorkCopyType()));
1019  readfile($this->getMapWorkCopyName());
1020  }
1021  exit;
1022  }
1023 
1028  {
1029  $im_type = strtolower($this->getMapWorkCopyType());
1030 
1031  switch ($im_type)
1032  {
1033  case "gif":
1034  $this->map_image = ImageCreateFromGIF($this->getMapWorkCopyName());
1035  break;
1036 
1037  case "jpg":
1038  case "jpeg":
1039  $this->map_image = ImageCreateFromJPEG($this->getMapWorkCopyName());
1040  break;
1041 
1042  case "png":
1043  $this->map_image = ImageCreateFromPNG($this->getMapWorkCopyName());
1044  break;
1045  }
1046 
1047  // try to allocate black and white as color. if this is not possible, get the closest colors
1048  if (imagecolorstotal($this->map_image) > 250)
1049  {
1050  $this->color1 = imagecolorclosest($this->map_image, 0, 0, 0);
1051  $this->color2 = imagecolorclosest($this->map_image, 255, 255, 255);
1052  }
1053  else
1054  {
1055  $this->color1 = imagecolorallocate($this->map_image, 0, 0, 0);
1056  $this->color2 = imagecolorallocate($this->map_image, 255, 255, 255);
1057  }
1058  }
1059 
1063  function saveMapWorkImage()
1064  {
1065  $im_type = strtolower($this->getMapWorkCopyType());
1066 
1067  // save image work-copy and free memory
1068  switch ($im_type)
1069  {
1070  case "gif":
1071  ImageGIF($this->map_image, $this->getMapWorkCopyName());
1072  break;
1073 
1074  case "jpg":
1075  case "jpeg":
1076  ImageJPEG($this->map_image, $this->getMapWorkCopyName());
1077  break;
1078 
1079  case "png":
1080  ImagePNG($this->map_image, $this->getMapWorkCopyName());
1081  break;
1082  }
1083 
1084  ImageDestroy($this->map_image);
1085  }
1086 
1090  function &getMapWorkImage()
1091  {
1092  return $this->map_image;
1093  }
1094 
1095 
1099  function getMapAreasXML($a_insert_inst = false, $a_inst = 0)
1100  {
1101  $xml = "";
1102 
1103  // build xml of map areas
1104  for ($i=0; $i < count($this->mapareas); $i++)
1105  {
1106  $area = $this->mapareas[$i];
1107 
1108  // highlight mode
1109  $hm = "";
1110  if ($area->getHighlightMode() != "")
1111  {
1112  $hm = ' HighlightMode="'.$area->getHighlightMode().'" ';
1113  $hcl = ($area->getHighlightClass() != "")
1114  ? $area->getHighlightClass()
1115  : "Accented";
1116  $hm.= 'HighlightClass="'.$hcl.'" ';
1117  }
1118 
1119  $xml .= "<MapArea Shape=\"".$area->getShape()."\" Coords=\"".$area->getCoords()."\" ".$hm.">";
1120  if ($area->getLinkType() == IL_INT_LINK)
1121  {
1122  $target_frame = $area->getTargetFrame();
1123 
1124  if ($area->getType() == "GlossaryItem" && $target_frame == "")
1125  {
1126  $target_frame = "Glossary";
1127  }
1128 
1129  $tf_str = ($target_frame == "")
1130  ? ""
1131  : "TargetFrame=\"".$target_frame."\"";
1132 
1133  $xml .= "<IntLink Target=\"".$area->getTarget($a_insert_inst, $a_inst)."\" Type=\"".
1134  $area->getType()."\" $tf_str>";
1135  // see bug 17893 and http://stackoverflow.com/questions/4026502/xml-error-at-ampersand
1136  $xml .= htmlspecialchars($area->getTitle(), ENT_QUOTES);
1137  $xml .="</IntLink>";
1138  }
1139  else
1140  {
1141  $xml .= "<ExtLink Href=\"".str_replace("&", "&amp;",$area->getHref())."\" Title=\"".
1142  str_replace("&", "&amp;",$area->getExtTitle())."\">";
1143  $xml .= str_replace("&", "&amp;", $area->getTitle());
1144  $xml .="</ExtLink>";
1145  }
1146  $xml .= "</MapArea>";
1147  }
1148  return $xml;
1149  }
1150 
1151 
1157  static function _resolveMapAreaLinks($a_mob_id)
1158  {
1159  global $ilDB;
1160 
1161 //echo "mediaItems::resolve<br>";
1162  // read media_object record
1163  $query = "SELECT * FROM media_item WHERE mob_id = ".
1164  $ilDB->quote($a_mob_id, "integer")." ".
1165  "ORDER BY nr";
1166  $item_set = $ilDB->query($query);
1167  while ($item_rec = $ilDB->fetchAssoc($item_set))
1168  {
1169  ilMapArea::_resolveIntLinks($item_rec["id"]);
1170  }
1171  }
1172 
1178  static function _getMapAreasIntLinks($a_mob_id)
1179  {
1180  global $ilDB;
1181 
1182  // read media_items records
1183  $query = "SELECT * FROM media_item WHERE mob_id = ".
1184  $ilDB->quote($a_mob_id, "integer")." ORDER BY nr";
1185 
1186  $item_set = $ilDB->query($query);
1187  $links = array();
1188  while ($item_rec = $ilDB->fetchAssoc($item_set))
1189  {
1190  $map_links = ilMapArea::_getIntLinks($item_rec["id"]);
1191  foreach($map_links as $key => $map_link)
1192  {
1193  $links[$key] = $map_link;
1194  }
1195  }
1196  return $links;
1197  }
1198 
1203  {
1204  include_once("./Services/MediaObjects/classes/class.ilExternalMediaAnalyzer.php");
1206  $this->getLocation(), $this->getParameters());
1207  foreach ($par as $k => $v)
1208  {
1209  $this->setParameter($k, $v);
1210  }
1211  }
1212 }
1213 ?>
setCaption($a_caption)
set caption
getId()
get media item id
static _lookupLocationForMobId($a_mob_id, $a_purpose)
Lookup location for mob id.
getSuffix()
get location suffix
static extractUrlParameters($a_location, $a_parameter)
Extract URL information to parameter array.
static _getThumbnailDirectory($a_mob_id, $a_mode="filesystem")
get directory for files of media object (static)
$size
Definition: RandomTest.php:79
static deleteAllItemsOfMob($a_mob_id)
Delete all items of a mob.
static _getMapAreasIntLinks($a_mob_id)
get all internal links of map areas of a mob
getMapWorkCopyType()
get image type of image map work copy
getWidth()
get width
static getImageSize($a_location)
Get image size from location.
setId($a_id)
set media item id
addAreaToMapWorkCopy($a_shape, $a_coords)
draw a new area in work image
getWorkDirectory()
get work directory for image map editing
setThumbTried($a_tried)
copyOriginal()
Copy the orginal file.
read()
read media item data (item id or (mob_id and nr) must be set)
makeMapWorkCopy($a_area_nr=0, $a_exclude=false)
make map work copy of image
buildMapWorkImage()
build image map work image
setLocation($a_location)
setHeight($a_height)
set height
getMobId()
get id of parent media object
static _resolveMapAreaLinks($a_mob_id)
resolve internal links of all media items of a media object
& getMapWorkImage()
get image map work image
static assembleParameterString($a_par_arr)
getMapAreasXML($a_insert_inst=false, $a_inst=0)
get xml code of media items&#39; areas
static deducibleSize($a_mime)
checks if mime type is provided by getimagesize()
setNr($a_nr)
set number of media item within media object
getMapWorkCopyName($a_reference_copy=false)
Get name of image map work copy file.
getThumbnailDirectory($a_mode="filesystem")
get media file directory
static _getDirectory($a_mob_id)
get directory for files of media object (static)
getOriginalSize()
get original size
addMapArea(&$a_map_area)
static checkParameter($a_par, $a_val)
Check parameter (filter javascript related and other unsafe parameters/values)
$a_type
Definition: workflow.php:93
static _getIntLinks($a_item_id)
get all internal links of a media items map areas
setPurpose($a_purpose)
const IL_INT_LINK
static _resolveIntLinks($a_item_id)
resolve internal links of an item id
getParameterString()
get all parameters (as string)
getDirectory()
get media file directory
& getMapArea($nr)
get map area
Class ilMediaItem.
__construct($a_id=0)
static getGDSupportedImageType($a_desired_type)
returns the best supported image type by this PHP build
static createDirectory($a_dir, $a_mod=0755)
create directory
Add a drawing to the header
Definition: 04printing.php:69
static _lookupMobId($a_med_id)
Lookup Mob ID.
static _getMediaItemsOfMOb(&$a_mob)
read media items into media objects (static)
extractUrlParameters()
Extract parameters of special external references to parameter array.
Create styles array
The data for the language used.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
setMobId($a_mob_id)
set id of parent media object
createWorkDirectory()
create work directory for image map editing
saveMapWorkImage()
save image map work image
resetParameters()
reset parameters
setHAlign($a_halign)
set horizontal align
writeParameter($a_name, $a_value)
Write parameter.
static _createThumbnailDirectory($a_obj_id)
Create thumbnail directory.
setTextRepresentation($a_val)
Set text representation.
Class ilMapArea.
static getDataDir()
get data directory (outside webspace)
Write to Excel2007 format
static _getMediaItemsOfMObId($a_mobId, $a_purpose)
static convertImage($a_from, $a_to, $a_target_format="", $a_geometry="", $a_background_color="")
convert image
update()
update media item data (without map areas!)
static _getMaxNr($a_item_id)
get maximum nr of media item (static)
global $lng
Definition: privfeed.php:17
global $ilDB
getCaption()
get caption
getParameters()
get all parameters (in array)
getHAlign()
get horizontal align
setFormat($a_format)
getTextRepresentation()
Get text representation.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
outputMapWorkCopy()
output raw map work copy file
getHeight()
get height
writeThumbTried($a_tried)
write thumbnail creation try data ("y"/"n")
getThumbnailTarget($a_size="")
get thumbnail target
static extractParameterString($a_parstr)
extracts parameter value pairs from a string into an array
setWidth($a_width)
set width
setParameters($a_par)
set alle parameters via parameter string (format: par1="value1", par2="value2", ...)
deleteMapArea($nr)
delete map area
$params
Definition: example_049.php:96
create()
create persistent media item
getParameter($a_name)
get a single parameter
getMapAreas()
get map areas
setParameter($a_name, $a_value)
set parameter
setLocationType($a_type)