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
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 __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
482 {
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
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
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
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
741 {
742 return ilUtil::getDataDir()."/map_workfiles/item_".$this->getId();
743 }
744
749 {
750 if(!@is_dir(ilUtil::getDataDir()."/map_workfiles"))
751 {
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 {
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
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
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?>
$size
Definition: RandomTest.php:79
An exception for terminatinating execution or to throw for unit testing.
const IL_INT_LINK
static extractUrlParameters($a_location, $a_parameter)
Extract URL information to parameter array.
Class ilMapArea.
static _resolveIntLinks($a_item_id)
resolve internal links of an item id
static _getIntLinks($a_item_id)
get all internal links of a media items map areas
static _getMaxNr($a_item_id)
get maximum nr of media item (static)
static getImageSize($a_location)
Get image size from location.
Class ilMediaItem.
static _resolveMapAreaLinks($a_mob_id)
resolve internal links of all media items of a media object
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
static deleteAllItemsOfMob($a_mob_id)
Delete all items of a mob.
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
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!)
static _getMediaItemsOfMOb(&$a_mob)
read media items into media objects (static)
static _getMapAreasIntLinks($a_mob_id)
get all internal links of map areas of a mob
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
buildMapWorkImage()
build image map work image
read()
read media item data (item id or (mob_id and nr) must be set)
__construct($a_id=0)
getHeight()
get height
setFormat($a_format)
static _getMediaItemsOfMObId($a_mobId, $a_purpose)
& getMapWorkImage()
get image map work image
makeMapWorkCopy($a_area_nr=0, $a_exclude=false)
make map work copy of image
setLocation($a_location)
getMapAreas()
get map areas
getWidth()
get width
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
static _getThumbnailDirectory($a_mob_id, $a_mode="filesystem")
get directory for files of media object (static)
static _getDirectory($a_mob_id)
get directory for files of media object (static)
static _createThumbnailDirectory($a_obj_id)
Create thumbnail directory.
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
global $lng
Definition: privfeed.php:17
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
global $ilDB
$a_type
Definition: workflow.php:93