ILIAS  Release_4_1_x_branch Revision 61804
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMapArea.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once("./Services/COPage/classes/class.ilInternalLink.php");
5 
6 define("IL_AREA_RECT", "Rect");
7 define("IL_AREA_CIRCLE", "Circle");
8 define("IL_AREA_POLY", "Poly");
9 define("IL_AREA_WHOLE_PICTURE", "WholePicture");
10 
11 define("IL_INT_LINK", "int");
12 define("IL_EXT_LINK", "ext");
13 
14 define("IL_LT_STRUCTURE", "StructureObject");
15 define("IL_LT_PAGE", "PageObject");
16 define("IL_LT_MEDIA", "MediaObject");
17 define("IL_LT_GLITEM", "GlossaryItem");
18 
19 define("IL_TF_MEDIA", "Media");
20 define("IL_TF_FAQ", "FAQ");
21 define("IL_TF_GLOSSARY", "Glossary");
22 define("IL_TF_NEW", "New");
23 
24 
35 class ilMapArea
36 {
37  var $item_id;
38  var $nr;
39  var $shape;
40  var $coords;
41  var $title;
42  var $linktype;
43  var $xl_title;
44  var $xl_href;
46  var $il_type;
48 
49 
56  function ilMapArea($a_item_id = 0, $a_nr = 0)
57  {
58  $this->title = "";
59  if ($a_item_id !=0 && $a_nr != 0)
60  {
61  $this->setItemId($a_item_id);
62  $this->setNr($a_nr);
63  $this->read();
64  }
65  }
66 
70  function create()
71  {
72  global $ilDB;
73 
74  $q = "INSERT INTO map_area (item_id, nr, shape, ".
75  "coords, link_type, title, href, target, type, target_frame) ".
76  " VALUES (".
77  $ilDB->quote($this->getItemId(), "integer").",".
78  $ilDB->quote($this->getNr(), "integer").",".
79  $ilDB->quote($this->getShape(), "text").",".
80  $ilDB->quote($this->getCoords(), "text").",".
81  $ilDB->quote($this->getLinkType(), "text").",".
82  $ilDB->quote($this->getTitle(), "text").",".
83  $ilDB->quote($this->getHref(), "text").",".
84  $ilDB->quote($this->getTarget(), "text").",".
85  $ilDB->quote($this->getType(), "text").",".
86  $ilDB->quote($this->getTargetFrame(), "text").")";
87  $ilDB->manipulate($q);
88  }
89 
97  function _getMaxNr($a_item_id)
98  {
99  global $ilDB;
100 
101  $q = "SELECT max(nr) AS max_nr FROM map_area WHERE item_id = ".
102  $ilDB->quote($a_item_id, "integer");
103  $max_set = $ilDB->query($q);
104  $max_rec = $ilDB->fetchAssoc($max_set);
105 
106  return $max_rec["max_nr"];
107  }
108 
112  function read()
113  {
114  global $ilDB;
115 
116  $q = "SELECT * FROM map_area WHERE item_id = ".
117  $ilDB->quote($this->getItemId(), "integer").
118  " AND nr = ".$ilDB->quote($this->getNr(), "integer");
119  $area_set = $ilDB->query($q);
120  $area_rec = $ilDB->fetchAssoc($area_set);
121 
122  $this->setShape($area_rec["shape"]);
123 //echo $area_rec["Shape"];
124  $this->setNr($area_rec["nr"]);
125  $this->setCoords($area_rec["coords"]);
126  $this->setLinkType($area_rec["link_type"]);
127  $this->setTitle($area_rec["title"]);
128  $this->setHref($area_rec["href"]);
129  $this->setTarget($area_rec["target"]);
130  $this->setType($area_rec["type"]);
131  $this->setTargetFrame($area_rec["target_frame"]);
132  }
133 
137  function update()
138  {
139  global $ilDB;
140 
141  $q = "UPDATE map_area SET shape = ".$ilDB->quote($this->getShape(), "text").
142  ", coords = ".$ilDB->quote($this->getCoords(), "text").
143  ", link_type = ".$ilDB->quote($this->getLinkType(), "text").
144  ", title = ".$ilDB->quote($this->getTitle(), "text").
145  ", href = ".$ilDB->quote($this->getHref(), "text").
146  ", target = ".$ilDB->quote($this->getTarget(), "text").
147  ", type = ".$ilDB->quote($this->getType(), "text").
148  ", target_frame = ".$ilDB->quote($this->getTargetFrame(), "text").
149  " WHERE item_id = ".$ilDB->quote($this->getItemId(), "integer").
150  " AND nr = ".$ilDB->quote($this->getNr(), "integer");
151  $ilDB->manipulate($q);
152  }
153 
157  function _resolveIntLinks($a_item_id)
158  {
159  global $ilDB;
160 
161 //echo "maparea::resolve<br>";
162  $q = "SELECT * FROM map_area WHERE item_id = ".
163  $ilDB->quote($a_item_id, "integer");
164  $area_set = $ilDB->query($q);
165  while ($area_rec = $ilDB->fetchAssoc($area_set))
166  {
167  $target = $area_rec["target"];
168  $type = $area_rec["type"];
169  $item_id = $area_rec["item_id"];
170  $nr = $area_rec["nr"];
171 
172  if (($area_rec["link_type"] == IL_INT_LINK) && (!is_int(strpos($target, "__"))))
173  {
174  $new_target = ilInternalLink::_getIdForImportId($type, $target);
175  if ($new_target !== false)
176  {
177  $query = "UPDATE map_area SET ".
178  "target = ".$ilDB->quote($new_target, "text")." ".
179  "WHERE item_id = ".$ilDB->quote($item_id, "integer").
180  " AND nr = ".$ilDB->quote($nr, "integer");
181  $ilDB->manipulate($query);
182  }
183  }
184  }
185  }
186 
192  function _getIntLinks($a_item_id)
193  {
194  global $ilDB;
195 
196  $q = "SELECT * FROM map_area WHERE item_id = ".
197  $ilDB->quote($a_item_id, "integer");
198  $area_set = $ilDB->query($q);
199 
200  $links = array();
201 
202  while ($area_rec = $ilDB->fetchAssoc($area_set))
203  {
204  $target = $area_rec["target"];
205  $type = $area_rec["type"];
206  $targetframe = $area_rec["target_frame"];
207 
208  if (($area_rec["link_type"] == IL_INT_LINK) && (is_int(strpos($target, "__"))))
209  {
210  $links[$target.":".$type.":".$targetframe] =
211  array("Target" => $target, "Type" => $type,
212  "TargetFrame" => $targetframe);
213  }
214  }
215  return $links;
216  }
217 
221  static function _getMobsForTarget($a_type, $a_target)
222  {
223  global $ilDB;
224 
225  $q = "SELECT * FROM map_area WHERE ".
226  " link_type = ".$ilDB->quote($a_type, "text").
227  " AND target = ".$ilDB->quote($a_target, "text");
228  $set = $ilDB->query($q);
229 
230  $mobs = array();
231  while($rec = $ilDB->fetchAssoc($set))
232  {
233  $mob_id = ilMediaItem::_lookupMobId($rec["item_id"]);
234  $mobs[$mob_id] = $mob_id;
235  }
236 
237  return $mobs;
238  }
239 
245  function setItemId($a_item_id)
246  {
247  $this->item_id = $a_item_id;
248  }
249 
255  function getItemId()
256  {
257  return $this->item_id;
258  }
259 
265  function setNr($a_nr)
266  {
267  $this->nr = $a_nr;
268  }
269 
275  function getNr()
276  {
277  return $this->nr;
278  }
279 
285  function setShape($a_shape)
286  {
287  $this->shape = $a_shape;
288  }
289 
295  function getShape()
296  {
297  return $this->shape;
298  }
299 
305  function setCoords($a_coords)
306  {
307  $this->coords = $a_coords;
308  }
309 
315  function getCoords()
316  {
317  return $this->coords;
318  }
319 
325  function setTitle($a_title)
326  {
327  $this->title = $a_title;
328  }
329 
335  function appendTitle($a_title_str)
336  {
337  $this->title.= $a_title_str;
338  }
339 
345  function getTitle()
346  {
347  return $this->title;
348  }
349 
355  function setLinkType($a_link_type)
356  {
357  $this->linktype = $a_link_type;
358  }
359 
365  function getLinkType()
366  {
367  return $this->linktype;
368  }
369 
375  function setHref($a_href)
376  {
377  $this->xl_href = $a_href;
378  }
379 
385  function getHref()
386  {
387  return $this->xl_href;
388  }
389 
395  function setExtTitle($a_title)
396  {
397  $this->xl_title = $a_title;
398  }
399 
405  function getExtTitle()
406  {
407  return $this->xl_title;
408  }
409 
415  function setTarget($a_target)
416  {
417  $this->il_target = $a_target;
418  }
419 
425  function getTarget($a_insert_inst = false)
426  {
427  $target = $this->il_target;
428 
429  if ((substr($target, 0, 4) == "il__") && $a_insert_inst)
430  {
431  $target = "il_".IL_INST_ID."_".substr($target, 4, strlen($target) - 4);
432  }
433 
434  return $target;
435  }
436 
443  function setType($a_type)
444  {
445  $this->il_type = $a_type;
446  }
447 
453  function getType()
454  {
455  return $this->il_type;
456  }
457 
464  function setTargetFrame($a_target_frame)
465  {
466  $this->il_target_frame = $a_target_frame;
467  }
468 
475  function getTargetFrame()
476  {
477  return $this->il_target_frame;
478  }
479 
485  function draw(&$a_image, $a_col1, $a_col2, $a_close_poly = true,
486  $a_x_ratio = 1, $a_y_ratio = 1)
487  {
488  switch ($this->getShape())
489  {
490  case "Rect" :
491  $this->drawRect($a_image, $this->getCoords(), $a_col1, $a_col2,
492  $a_x_ratio, $a_y_ratio);
493  break;
494 
495  case "Circle" :
496  $this->drawCircle($a_image, $this->getCoords(), $a_col1, $a_col2,
497  $a_x_ratio, $a_y_ratio);
498  break;
499 
500  case "Poly" :
501  $this->drawPoly($a_image, $this->getCoords(), $a_col1, $a_col2, $a_close_poly,
502  $a_x_ratio, $a_y_ratio);
503  break;
504  }
505  }
506 
518  function drawLine(&$im, $x1, $y1, $x2, $y2, $c1, $c2)
519  {
520  imageline($im, $x1+1, $y1, $x2+1, $y2, $c1);
521  imageline($im, $x1-1, $y1, $x2-1, $y2, $c1);
522  imageline($im, $x1, $y1+1, $x2, $y2+1, $c1);
523  imageline($im, $x1, $y1-1, $x2, $y2-1, $c1);
524  imageline($im, $x1, $y1, $x2, $y2, $c2);
525  }
526 
536  function drawRect(&$im,$coords,$c1,$c2,$a_x_ratio = 1, $a_y_ratio = 1)
537  {
538  $coord=explode(",", $coords);
539 
540  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio,
541  $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
542  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio,
543  $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
544  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio,
545  $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
546  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio,
547  $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
548  }
549 
550 
561  function drawPoly(&$im, $coords, $c1, $c2, $closed,$a_x_ratio = 1, $a_y_ratio = 1)
562  {
563  if ($closed)
564  {
565  $p = 0;
566  }
567  else
568  {
569  $p = 1;
570  }
571 
573 
574  if ($anz < (3 - $p))
575  {
576  return;
577  }
578 
579  $c = explode(",", $coords);
580 
581  for($i=0; $i<$anz-$p; $i++)
582  {
583  $this->drawLine($im, $c[$i*2] / $a_x_ratio, $c[$i*2+1] / $a_y_ratio,
584  $c[($i*2+2)%(2*$anz)] / $a_x_ratio,
585  $c[($i*2+3)%(2*$anz)] / $a_y_ratio, $c1, $c2);
586  }
587  }
588 
589 
599  function drawCircle(&$im, $coords, $c1, $c2,$a_x_ratio = 1, $a_y_ratio = 1)
600  {
601  $c = explode(",", $coords);
602  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
603  ($c[2]+1)*2 / $a_x_ratio, ($c[2]+1)*2 / $a_y_ratio, 1, 360, $c1);
604  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
605  ($c[2]-1)*2 / $a_x_ratio, ($c[2]-1)*2 / $a_y_ratio, 1, 360, $c1);
606  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
607  $c[2]*2 / $a_x_ratio, $c[2]*2 / $a_y_ratio, 1, 360, $c2);
608  }
609 
615  function countCoords($c)
616  {
617  if ($c == "")
618  {
619  return 0;
620  }
621  else
622  {
623  $coord_array = explode(",", $c);
624  return (count($coord_array) / 2);
625  }
626  }
627 
628 }
629 ?>