ILIAS  Release_4_0_x_branch Revision 61816
 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-2009 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 
10 define("IL_INT_LINK", "int");
11 define("IL_EXT_LINK", "ext");
12 
13 define("IL_LT_STRUCTURE", "StructureObject");
14 define("IL_LT_PAGE", "PageObject");
15 define("IL_LT_MEDIA", "MediaObject");
16 define("IL_LT_GLITEM", "GlossaryItem");
17 
18 define("IL_TF_MEDIA", "Media");
19 define("IL_TF_FAQ", "FAQ");
20 define("IL_TF_GLOSSARY", "Glossary");
21 define("IL_TF_NEW", "New");
22 
23 
34 class ilMapArea
35 {
36  var $ilias;
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  global $ilias;
59 
60  $this->ilias =& $ilias;
61  $this->title = "";
62 
63  if ($a_item_id !=0 && $a_nr != 0)
64  {
65  $this->setItemId($a_item_id);
66  $this->setNr($a_nr);
67  $this->read();
68  }
69  }
70 
74  function create()
75  {
76  global $ilDB;
77 
78  $q = "INSERT INTO map_area (item_id, nr, shape, ".
79  "coords, link_type, title, href, target, type, target_frame) ".
80  " VALUES (".
81  $ilDB->quote($this->getItemId(), "integer").",".
82  $ilDB->quote($this->getNr(), "integer").",".
83  $ilDB->quote($this->getShape(), "text").",".
84  $ilDB->quote($this->getCoords(), "text").",".
85  $ilDB->quote($this->getLinkType(), "text").",".
86  $ilDB->quote($this->getTitle(), "text").",".
87  $ilDB->quote($this->getHref(), "text").",".
88  $ilDB->quote($this->getTarget(), "text").",".
89  $ilDB->quote($this->getType(), "text").",".
90  $ilDB->quote($this->getTargetFrame(), "text").")";
91  $ilDB->manipulate($q);
92  }
93 
101  function _getMaxNr($a_item_id)
102  {
103  global $ilDB;
104 
105  $q = "SELECT max(nr) AS max_nr FROM map_area WHERE item_id = ".
106  $ilDB->quote($a_item_id, "integer");
107  $max_set = $ilDB->query($q);
108  $max_rec = $ilDB->fetchAssoc($max_set);
109 
110  return $max_rec["max_nr"];
111  }
112 
116  function read()
117  {
118  global $ilDB;
119 
120  $q = "SELECT * FROM map_area WHERE item_id = ".
121  $ilDB->quote($this->getItemId(), "integer").
122  " AND nr = ".$ilDB->quote($this->getNr(), "integer");
123  $area_set = $ilDB->query($q);
124  $area_rec = $ilDB->fetchAssoc($area_set);
125 
126  $this->setShape($area_rec["shape"]);
127 //echo $area_rec["Shape"];
128  $this->setNr($area_rec["nr"]);
129  $this->setCoords($area_rec["coords"]);
130  $this->setLinkType($area_rec["link_type"]);
131  $this->setTitle($area_rec["title"]);
132  $this->setHref($area_rec["href"]);
133  $this->setTarget($area_rec["target"]);
134  $this->setType($area_rec["type"]);
135  $this->setTargetFrame($area_rec["target_frame"]);
136  }
137 
141  function update()
142  {
143  global $ilDB;
144 
145  $q = "UPDATE map_area SET shape = ".$ilDB->quote($this->getShape(), "text").
146  ", coords = ".$ilDB->quote($this->getCoords(), "text").
147  ", link_type = ".$ilDB->quote($this->getLinkType(), "text").
148  ", title = ".$ilDB->quote($this->getTitle(), "text").
149  ", href = ".$ilDB->quote($this->getHref(), "text").
150  ", target = ".$ilDB->quote($this->getTarget(), "text").
151  ", type = ".$ilDB->quote($this->getType(), "text").
152  ", target_frame = ".$ilDB->quote($this->getTargetFrame(), "text").
153  " WHERE item_id = ".$ilDB->quote($this->getItemId(), "integer").
154  " AND nr = ".$ilDB->quote($this->getNr(), "integer");
155  $ilDB->manipulate($q);
156  }
157 
161  function _resolveIntLinks($a_item_id)
162  {
163  global $ilDB;
164 
165 //echo "maparea::resolve<br>";
166  $q = "SELECT * FROM map_area WHERE item_id = ".
167  $ilDB->quote($a_item_id, "integer");
168  $area_set = $ilDB->query($q);
169  while ($area_rec = $ilDB->fetchAssoc($area_set))
170  {
171  $target = $area_rec["target"];
172  $type = $area_rec["type"];
173  $item_id = $area_rec["item_id"];
174  $nr = $area_rec["nr"];
175 
176  if (($area_rec["link_type"] == IL_INT_LINK) && (!is_int(strpos($target, "__"))))
177  {
178  $new_target = ilInternalLink::_getIdForImportId($type, $target);
179  if ($new_target !== false)
180  {
181  $query = "UPDATE map_area SET ".
182  "target = ".$ilDB->quote($new_target, "text")." ".
183  "WHERE item_id = ".$ilDB->quote($item_id, "integer").
184  " AND nr = ".$ilDB->quote($nr, "integer");
185  $ilDB->manipulate($query);
186  }
187  }
188  }
189  }
190 
196  function _getIntLinks($a_item_id)
197  {
198  global $ilDB;
199 
200  $q = "SELECT * FROM map_area WHERE item_id = ".
201  $ilDB->quote($a_item_id, "integer");
202  $area_set = $ilDB->query($q);
203 
204  $links = array();
205 
206  while ($area_rec = $ilDB->fetchAssoc($area_set))
207  {
208  $target = $area_rec["target"];
209  $type = $area_rec["type"];
210  $targetframe = $area_rec["target_frame"];
211 
212  if (($area_rec["link_type"] == IL_INT_LINK) && (is_int(strpos($target, "__"))))
213  {
214  $links[$target.":".$type.":".$targetframe] =
215  array("Target" => $target, "Type" => $type,
216  "TargetFrame" => $targetframe);
217  }
218  }
219  return $links;
220  }
221 
225  static function _getMobsForTarget($a_type, $a_target)
226  {
227  global $ilDB;
228 
229  $q = "SELECT * FROM map_area WHERE ".
230  " link_type = ".$ilDB->quote($a_type, "text").
231  " AND target = ".$ilDB->quote($a_target, "text");
232  $set = $ilDB->query($q);
233 
234  $mobs = array();
235  while($rec = $ilDB->fetchAssoc($set))
236  {
237  $mob_id = ilMediaItem::_lookupMobId($rec["item_id"]);
238  $mobs[$mob_id] = $mob_id;
239  }
240 
241  return $mobs;
242  }
243 
249  function setItemId($a_item_id)
250  {
251  $this->item_id = $a_item_id;
252  }
253 
259  function getItemId()
260  {
261  return $this->item_id;
262  }
263 
269  function setNr($a_nr)
270  {
271  $this->nr = $a_nr;
272  }
273 
279  function getNr()
280  {
281  return $this->nr;
282  }
283 
289  function setShape($a_shape)
290  {
291  $this->shape = $a_shape;
292  }
293 
299  function getShape()
300  {
301  return $this->shape;
302  }
303 
309  function setCoords($a_coords)
310  {
311  $this->coords = $a_coords;
312  }
313 
319  function getCoords()
320  {
321  return $this->coords;
322  }
323 
329  function setTitle($a_title)
330  {
331  $this->title = $a_title;
332  }
333 
339  function appendTitle($a_title_str)
340  {
341  $this->title.= $a_title_str;
342  }
343 
349  function getTitle()
350  {
351  return $this->title;
352  }
353 
359  function setLinkType($a_link_type)
360  {
361  $this->linktype = $a_link_type;
362  }
363 
369  function getLinkType()
370  {
371  return $this->linktype;
372  }
373 
379  function setHref($a_href)
380  {
381  $this->xl_href = $a_href;
382  }
383 
389  function getHref()
390  {
391  return $this->xl_href;
392  }
393 
399  function setExtTitle($a_title)
400  {
401  $this->xl_title = $a_title;
402  }
403 
409  function getExtTitle()
410  {
411  return $this->xl_title;
412  }
413 
419  function setTarget($a_target)
420  {
421  $this->il_target = $a_target;
422  }
423 
429  function getTarget($a_insert_inst = false)
430  {
431  $target = $this->il_target;
432 
433  if ((substr($target, 0, 4) == "il__") && $a_insert_inst)
434  {
435  $target = "il_".IL_INST_ID."_".substr($target, 4, strlen($target) - 4);
436  }
437 
438  return $target;
439  }
440 
447  function setType($a_type)
448  {
449  $this->il_type = $a_type;
450  }
451 
457  function getType()
458  {
459  return $this->il_type;
460  }
461 
468  function setTargetFrame($a_target_frame)
469  {
470  $this->il_target_frame = $a_target_frame;
471  }
472 
479  function getTargetFrame()
480  {
481  return $this->il_target_frame;
482  }
483 
489  function draw(&$a_image, $a_col1, $a_col2, $a_close_poly = true,
490  $a_x_ratio = 1, $a_y_ratio = 1)
491  {
492  switch ($this->getShape())
493  {
494  case "Rect" :
495  $this->drawRect($a_image, $this->getCoords(), $a_col1, $a_col2,
496  $a_x_ratio, $a_y_ratio);
497  break;
498 
499  case "Circle" :
500  $this->drawCircle($a_image, $this->getCoords(), $a_col1, $a_col2,
501  $a_x_ratio, $a_y_ratio);
502  break;
503 
504  case "Poly" :
505  $this->drawPoly($a_image, $this->getCoords(), $a_col1, $a_col2, $a_close_poly,
506  $a_x_ratio, $a_y_ratio);
507  break;
508  }
509  }
510 
522  function drawLine(&$im, $x1, $y1, $x2, $y2, $c1, $c2)
523  {
524  imageline($im, $x1+1, $y1, $x2+1, $y2, $c1);
525  imageline($im, $x1-1, $y1, $x2-1, $y2, $c1);
526  imageline($im, $x1, $y1+1, $x2, $y2+1, $c1);
527  imageline($im, $x1, $y1-1, $x2, $y2-1, $c1);
528  imageline($im, $x1, $y1, $x2, $y2, $c2);
529  }
530 
540  function drawRect(&$im,$coords,$c1,$c2,$a_x_ratio = 1, $a_y_ratio = 1)
541  {
542  $coord=explode(",", $coords);
543 
544  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio,
545  $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
546  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio,
547  $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
548  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio,
549  $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
550  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio,
551  $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
552  }
553 
554 
565  function drawPoly(&$im, $coords, $c1, $c2, $closed,$a_x_ratio = 1, $a_y_ratio = 1)
566  {
567  if ($closed)
568  {
569  $p = 0;
570  }
571  else
572  {
573  $p = 1;
574  }
575 
577 
578  if ($anz < (3 - $p))
579  {
580  return;
581  }
582 
583  $c = explode(",", $coords);
584 
585  for($i=0; $i<$anz-$p; $i++)
586  {
587  $this->drawLine($im, $c[$i*2] / $a_x_ratio, $c[$i*2+1] / $a_y_ratio,
588  $c[($i*2+2)%(2*$anz)] / $a_x_ratio,
589  $c[($i*2+3)%(2*$anz)] / $a_y_ratio, $c1, $c2);
590  }
591  }
592 
593 
603  function drawCircle(&$im, $coords, $c1, $c2,$a_x_ratio = 1, $a_y_ratio = 1)
604  {
605  $c = explode(",", $coords);
606  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
607  ($c[2]+1)*2 / $a_x_ratio, ($c[2]+1)*2 / $a_y_ratio, 1, 360, $c1);
608  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
609  ($c[2]-1)*2 / $a_x_ratio, ($c[2]-1)*2 / $a_y_ratio, 1, 360, $c1);
610  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
611  $c[2]*2 / $a_x_ratio, $c[2]*2 / $a_y_ratio, 1, 360, $c2);
612  }
613 
619  function countCoords($c)
620  {
621  if ($c == "")
622  {
623  return 0;
624  }
625  else
626  {
627  $coord_array = explode(",", $c);
628  return (count($coord_array) / 2);
629  }
630  }
631 
632 }
633 ?>