ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
4require_once("Services/MediaObjects/classes/class.ilMapArea.php");
5
17{
18 var $id;
23 var $width;
29 var $nr;
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
480 {
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
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
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
596 include_once("./Services/MediaObjects/classes/class.ilMediaImageUtil.php");
598 if ($size[0] > 0 && $size[1] > 0)
599 {
600 return array("width" => $size[0], "height" => $size[1]);
601 }
602 }
603
604 return false;
605 }
606
610 function setCaption($a_caption)
611 {
612 $this->caption = $a_caption;
613 }
614
618 function getCaption()
619 {
620 return $this->caption;
621 }
622
626 function setHAlign($a_halign)
627 {
628 $this->halign = $a_halign;
629 }
630
634 function getHAlign()
635 {
636 return $this->halign;
637 }
638
639
646 function setParameter($a_name, $a_value)
647 {
648 if (self::checkParameter($a_name, $a_value))
649 {
650 $this->parameters[$a_name] = $a_value;
651 }
652 }
653
658 {
659 $this->parameters = array();
660 }
661
667 function setParameters($a_par)
668 {
669 $this->resetParameters();
670 $par_arr = ilUtil::extractParameterString($a_par);
671 if(is_array($par_arr))
672 {
673 foreach($par_arr as $par => $val)
674 {
675 $this->setParameter($par, $val);
676 }
677 }
678 }
679
687 static function checkParameter($a_par, $a_val)
688 {
689 // do not allow event attributes
690 if (substr(strtolower(trim($a_par)), 0, 2) == "on")
691 {
692 return false;
693 }
694 // no javascript in value
695 if (is_int(strpos(strtolower($a_val), "javascript")))
696 {
697 return false;
698 }
699 // do not allow to change the src attribute
700 if (in_array(strtolower(trim($a_par)), array("src")))
701 {
702 return false;
703 }
704
705 return true;
706 }
707
708
712 function getParameters()
713 {
714 return $this->parameters;
715 }
716
717
722 {
723 return ilUtil::assembleParameterString($this->parameters);
724 }
725
726
730 function getParameter($a_name)
731 {
732 return $this->parameters[$a_name];
733 }
734
739 {
740 return ilUtil::getDataDir()."/map_workfiles/item_".$this->getId();
741 }
742
747 {
748 if(!@is_dir(ilUtil::getDataDir()."/map_workfiles"))
749 {
751 }
752 $work_dir = $this->getWorkDirectory();
753 if(!@is_dir($work_dir))
754 {
755 ilUtil::createDirectory($work_dir);
756 }
757 }
758
762 function getSuffix()
763 {
764 $loc_arr = explode(".", $this->getLocation());
765
766 return $loc_arr[count($loc_arr) - 1];
767 }
768
773 {
775 }
776
782 function getMapWorkCopyName($a_reference_copy = false)
783 {
784 $file_arr = explode("/", $this->getLocation());
785 $o_file = $file_arr[count($file_arr) - 1];
786 $file_arr = explode(".", $o_file);
787 unset($file_arr[count($file_arr) - 1]);
788 $file = implode($file_arr, ".");
789
790 if (!$a_reference_copy)
791 {
792 return $this->getWorkDirectory()."/".$file.".".$this->getMapWorkCopyType();
793 }
794 else
795 {
796 return $this->getWorkDirectory()."/l_copy_".$o_file;
797 }
798 }
799
803 function getDirectory()
804 {
806 }
807
811 function getThumbnailDirectory($a_mode = "filesystem")
812 {
813 return ilObjMediaObject::_getThumbnailDirectory($this->getMobId(), $a_mode);
814 }
815
819 function getThumbnailTarget($a_size = "")
820 {
821 if (is_int(strpos($this->getFormat(), "image")))
822 {
823 $thumb_file = $this->getThumbnailDirectory()."/".
824 $this->getPurpose().".jpeg";
825
826 $thumb_file_small = $this->getThumbnailDirectory()."/".
827 $this->getPurpose()."_small.jpeg";
828
829 // generate thumbnail (if not tried before)
830 if ($this->getThumbTried() == "n" && $this->getLocationType() == "LocalFile")
831 {
832 if (is_file($thumb_file))
833 {
834 unlink($thumb_file);
835 }
836 if (is_file($thumb_file_small))
837 {
838 unlink($thumb_file_small);
839 }
840 $this->writeThumbTried("y");
842 $med_file = $this->getDirectory()."/".$this->getLocation();
843
844 if (is_file($med_file))
845 {
846 ilUtil::convertImage($med_file, $thumb_file, "jpeg", "80");
847 ilUtil::convertImage($med_file, $thumb_file_small, "jpeg", "40");
848 }
849 }
850
851 if ($a_size == "small")
852 {
853 if (is_file($thumb_file_small))
854 {
855 return $this->getThumbnailDirectory("output")."/".
856 $this->getPurpose()."_small.jpeg?dummy=".rand(1, 999999);
857 }
858 }
859 else
860 {
861 if (is_file($thumb_file))
862 {
863 return $this->getThumbnailDirectory("output")."/".
864 $this->getPurpose().".jpeg?dummy=".rand(1, 999999);
865 }
866 }
867 }
868
869 return "";
870 }
871
872
876 function copyOriginal()
877 {
878 global $lng;
879 $this->createWorkDirectory();
880
881 $geom = ($this->getWidth() != "" && $this->getHeight() != "")
882 ? $this->getWidth()."x".$this->getHeight()
883 : "";
884
885 if ($this->getLocationType() != "Reference")
886 {
887 ilUtil::convertImage($this->getDirectory()."/".$this->getLocation(),
888 $this->getMapWorkCopyName(),
889 $this->getMapWorkCopyType(), $geom);
890 }
891 else
892 {
893 // first copy the external file, if necessary
894 if (!is_file($this->getMapWorkCopyName(true)) || (filesize($this->getMapWorkCopyName(true)) == 0))
895 {
896 $handle = @fopen($this->getLocation(), "r");
897 $lcopy = fopen($this->getMapWorkCopyName(true), "w");
898 if ($handle && $lcopy)
899 {
900 while (!feof($handle))
901 {
902 $content = fread($handle, 4096);
903 fwrite($lcopy, $content);
904 }
905 }
906 @fclose($lcopy);
907 @fclose($handle);
908 }
909
910 // now, create working copy
912 $this->getMapWorkCopyName(),
913 $this->getMapWorkCopyType(), $geom);
914 }
915
916 if (!is_file($this->getMapWorkCopyName()))
917 {
918
919 ilUtil::sendFailure($lng->txt("cont_map_file_not_generated"));
920 return false;
921 }
922 return true;
923 }
924
931 function makeMapWorkCopy($a_area_nr = 0, $a_exclude = false)
932 {
933 global $lng;
934
935 if (!$this->copyOriginal())
936 {
937 return false;
938 }
939 $this->buildMapWorkImage();
940
941 // determine ratios
942 $size = @getimagesize($this->getMapWorkCopyName());
943 $x_ratio = 1;
944 if ($size[0] > 0 && $this->getWidth() > 0)
945 {
946 $x_ratio = $this->getWidth() / $size[0];
947 }
948 $y_ratio = 1;
949 if ($size[1] > 0 && $this->getHeight() > 0)
950 {
951 $y_ratio = $this->getHeight() / $size[1];
952 }
953
954 // draw map areas
955 for ($i=0; $i < count($this->mapareas); $i++)
956 {
957 if ( ((($i+1) == $a_area_nr) && !$a_exclude) ||
958 ((($i+1) != $a_area_nr) && $a_exclude) ||
959 ($a_area_nr == 0)
960 )
961 {
962 $area =& $this->mapareas[$i];
963 $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, true,
964 $x_ratio, $y_ratio);
965 }
966 }
967
968 $this->saveMapWorkImage();
969
970 return true;
971 }
972
973
980 function addAreaToMapWorkCopy($a_shape, $a_coords)
981 {
982 $this->buildMapWorkImage();
983
984 // determine ratios
985 $size = @getimagesize($this->getMapWorkCopyName());
986 $x_ratio = 1;
987 if ($size[0] > 0 && $this->getWidth() > 0)
988 {
989 $x_ratio = $this->getWidth() / $size[0];
990 }
991 $y_ratio = 1;
992 if ($size[1] > 0 && $this->getHeight() > 0)
993 {
994 $y_ratio = $this->getHeight() / $size[1];
995 }
996
997 // add new area to work image
998 $area = new ilMapArea();
999 $area->setShape($a_shape);
1000 $area->setCoords($a_coords);
1001 $area->draw($this->getMapWorkImage(), $this->color1, $this->color2, false,
1002 $x_ratio, $y_ratio);
1003
1004 $this->saveMapWorkImage();
1005 }
1006
1011 {
1012 if ($this->getMapWorkCopyType() != "")
1013 {
1014 header("Pragma: no-cache");
1015 header("Expires: 0");
1016 header("Content-type: image/".strtolower($this->getMapWorkCopyType()));
1017 readfile($this->getMapWorkCopyName());
1018 }
1019 exit;
1020 }
1021
1026 {
1027 $im_type = strtolower($this->getMapWorkCopyType());
1028
1029 switch ($im_type)
1030 {
1031 case "gif":
1032 $this->map_image = ImageCreateFromGIF($this->getMapWorkCopyName());
1033 break;
1034
1035 case "jpg":
1036 case "jpeg":
1037 $this->map_image = ImageCreateFromJPEG($this->getMapWorkCopyName());
1038 break;
1039
1040 case "png":
1041 $this->map_image = ImageCreateFromPNG($this->getMapWorkCopyName());
1042 break;
1043 }
1044
1045 // try to allocate black and white as color. if this is not possible, get the closest colors
1046 if (imagecolorstotal($this->map_image) > 250)
1047 {
1048 $this->color1 = imagecolorclosest($this->map_image, 0, 0, 0);
1049 $this->color2 = imagecolorclosest($this->map_image, 255, 255, 255);
1050 }
1051 else
1052 {
1053 $this->color1 = imagecolorallocate($this->map_image, 0, 0, 0);
1054 $this->color2 = imagecolorallocate($this->map_image, 255, 255, 255);
1055 }
1056 }
1057
1062 {
1063 $im_type = strtolower($this->getMapWorkCopyType());
1064
1065 // save image work-copy and free memory
1066 switch ($im_type)
1067 {
1068 case "gif":
1069 ImageGIF($this->map_image, $this->getMapWorkCopyName());
1070 break;
1071
1072 case "jpg":
1073 case "jpeg":
1074 ImageJPEG($this->map_image, $this->getMapWorkCopyName());
1075 break;
1076
1077 case "png":
1078 ImagePNG($this->map_image, $this->getMapWorkCopyName());
1079 break;
1080 }
1081
1082 ImageDestroy($this->map_image);
1083 }
1084
1089 {
1090 return $this->map_image;
1091 }
1092
1093
1097 function getMapAreasXML($a_insert_inst = false, $a_inst = 0)
1098 {
1099 $xml = "";
1100
1101 // build xml of map areas
1102 for ($i=0; $i < count($this->mapareas); $i++)
1103 {
1104 $area =& $this->mapareas[$i];
1105
1106 // highlight mode
1107 $hm = "";
1108 if ($area->getHighlightMode() != "")
1109 {
1110 $hm = ' HighlightMode="'.$area->getHighlightMode().'" ';
1111 $hcl = ($area->getHighlightClass() != "")
1112 ? $area->getHighlightClass()
1113 : "Accented";
1114 $hm.= 'HighlightClass="'.$hcl.'" ';
1115 }
1116
1117 $xml .= "<MapArea Shape=\"".$area->getShape()."\" Coords=\"".$area->getCoords()."\" ".$hm.">";
1118 if ($area->getLinkType() == IL_INT_LINK)
1119 {
1120 $target_frame = $area->getTargetFrame();
1121
1122 if ($area->getType() == "GlossaryItem" && $target_frame == "")
1123 {
1124 $target_frame = "Glossary";
1125 }
1126
1127 $tf_str = ($target_frame == "")
1128 ? ""
1129 : "TargetFrame=\"".$target_frame."\"";
1130
1131 $xml .= "<IntLink Target=\"".$area->getTarget($a_insert_inst, $a_inst)."\" Type=\"".
1132 $area->getType()."\" $tf_str>";
1133 // see bug 17893 and http://stackoverflow.com/questions/4026502/xml-error-at-ampersand
1134 $xml .= htmlspecialchars($area->getTitle(), ENT_QUOTES);
1135 $xml .="</IntLink>";
1136 }
1137 else
1138 {
1139 $xml .= "<ExtLink Href=\"".str_replace("&", "&amp;",$area->getHref())."\" Title=\"".
1140 str_replace("&", "&amp;",$area->getExtTitle())."\">";
1141 $xml .= str_replace("&", "&amp;", $area->getTitle());
1142 $xml .="</ExtLink>";
1143 }
1144 $xml .= "</MapArea>";
1145 }
1146 return $xml;
1147 }
1148
1149
1155 function _resolveMapAreaLinks($a_mob_id)
1156 {
1157 global $ilDB;
1158
1159//echo "mediaItems::resolve<br>";
1160 // read media_object record
1161 $query = "SELECT * FROM media_item WHERE mob_id = ".
1162 $ilDB->quote($a_mob_id, "integer")." ".
1163 "ORDER BY nr";
1164 $item_set = $ilDB->query($query);
1165 while ($item_rec = $ilDB->fetchAssoc($item_set))
1166 {
1167 ilMapArea::_resolveIntLinks($item_rec["id"]);
1168 }
1169 }
1170
1176 function _getMapAreasIntLinks($a_mob_id)
1177 {
1178 global $ilDB;
1179
1180 // read media_items records
1181 $query = "SELECT * FROM media_item WHERE mob_id = ".
1182 $ilDB->quote($a_mob_id, "integer")." ORDER BY nr";
1183
1184 $item_set = $ilDB->query($query);
1185 $links = array();
1186 while ($item_rec = $ilDB->fetchAssoc($item_set))
1187 {
1188 $map_links = ilMapArea::_getIntLinks($item_rec["id"]);
1189 foreach($map_links as $key => $map_link)
1190 {
1191 $links[$key] = $map_link;
1192 }
1193 }
1194 return $links;
1195 }
1196
1201 {
1202 include_once("./Services/MediaObjects/classes/class.ilExternalMediaAnalyzer.php");
1204 $this->getLocation(), $this->getParameters());
1205 foreach ($par as $k => $v)
1206 {
1207 $this->setParameter($k, $v);
1208 }
1209 }
1210}
1211?>
print $file
$size
Definition: RandomTest.php:79
const IL_INT_LINK
static extractUrlParameters($a_location, $a_parameter)
Extract URL information to parameter array.
Class ilMapArea.
_resolveIntLinks($a_item_id)
resolve internal links of an item id
_getIntLinks($a_item_id)
get all internal links of a media items map areas
_getMaxNr($a_item_id)
get maximum nr of media item (static)
static getImageSize($a_location)
Get image size from location.
Class ilMediaItem.
_getMediaItemsOfMObId($a_mobId, $a_purpose)
setMobId($a_mob_id)
set id of parent media object
setPurpose($a_purpose)
setId($a_id)
set media item id
addMapArea(&$a_map_area)
setNr($a_nr)
set number of media item within media object
getWorkDirectory()
get work directory for image map editing
outputMapWorkCopy()
output raw map work copy file
getCaption()
get caption
setWidth($a_width)
set width
getParameter($a_name)
get a single parameter
setParameters($a_par)
set alle parameters via parameter string (format: par1="value1", par2="value2", .....
getThumbnailTarget($a_size="")
get thumbnail target
static _lookupMobId($a_med_id)
Lookup Mob ID.
setParameter($a_name, $a_value)
set parameter
setHAlign($a_halign)
set horizontal align
static checkParameter($a_par, $a_val)
Check parameter (filter javascript related and other unsafe parameters/values)
extractUrlParameters()
Extract parameters of special external references to parameter array.
saveMapWorkImage()
save image map work image
createWorkDirectory()
create work directory for image map editing
getSuffix()
get location suffix
deleteMapArea($nr)
delete map area
ilMediaItem($a_id=0)
getId()
get media item id
getHAlign()
get horizontal align
writeThumbTried($a_tried)
write thumbnail creation try data ("y"/"n")
update()
update media item data (without map areas!)
getMapWorkCopyName($a_reference_copy=false)
Get name of image map work copy file.
resetParameters()
reset parameters
getDirectory()
get media file directory
setTextRepresentation($a_val)
Set text representation.
static _lookupLocationForMobId($a_mob_id, $a_purpose)
Lookup location for mob id.
getMapWorkCopyType()
get image type of image map work copy
_resolveMapAreaLinks($a_mob_id)
resolve internal links of all media items of a media object
buildMapWorkImage()
build image map work image
read()
read media item data (item id or (mob_id and nr) must be set)
getHeight()
get height
setFormat($a_format)
_getMapAreasIntLinks($a_mob_id)
get all internal links of map areas of a mob
& getMapWorkImage()
get image map work image
makeMapWorkCopy($a_area_nr=0, $a_exclude=false)
make map work copy of image
deleteAllItemsOfMob($a_mob_id)
static
setLocation($a_location)
getMapAreas()
get map areas
getWidth()
get width
_getMediaItemsOfMOb(&$a_mob)
read media items into media objects (static)
setLocationType($a_type)
setCaption($a_caption)
set caption
copyOriginal()
Copy the orginal file.
getParameterString()
get all parameters (as string)
addAreaToMapWorkCopy($a_shape, $a_coords)
draw a new area in work image
setThumbTried($a_tried)
writeParameter($a_name, $a_value)
Write parameter.
& getMapArea($nr)
get map area
getThumbnailDirectory($a_mode="filesystem")
get media file directory
getParameters()
get all parameters (in array)
getMobId()
get id of parent media object
getMapAreasXML($a_insert_inst=false, $a_inst=0)
get xml code of media items' areas
setHeight($a_height)
set height
getTextRepresentation()
Get text representation.
create()
create persistent media item
getOriginalSize()
get original size
_createThumbnailDirectory($a_obj_id)
Create thumbnail directory.
_getDirectory($a_mob_id)
get directory for files of media object (static)
_getThumbnailDirectory($a_mob_id, $a_mode="filesystem")
get directory for files of media object (static)
static getDataDir()
get data directory (outside webspace)
static assembleParameterString($a_par_arr)
static getGDSupportedImageType($a_desired_type)
returns the best supported image type by this PHP build
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static extractParameterString($a_parstr)
extracts parameter value pairs from a string into an array
static convertImage($a_from, $a_to, $a_target_format="", $a_geometry="", $a_background_color="")
convert image
static deducibleSize($a_mime)
checks if mime type is provided by getimagesize()
static createDirectory($a_dir, $a_mod=0755)
create directory
$params
Definition: example_049.php:96
exit
Definition: login.php:54
global $lng
Definition: privfeed.php:40
global $ilDB