ILIAS  Release_3_10_x_branch Revision 61812
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilMapArea.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 require_once("./Services/COPage/classes/class.ilInternalLink.php");
25 
26 define("IL_AREA_RECT", "Rect");
27 define("IL_AREA_CIRCLE", "Circle");
28 define("IL_AREA_POLY", "Poly");
29 
30 define("IL_INT_LINK", "int");
31 define("IL_EXT_LINK", "ext");
32 
33 define("IL_LT_STRUCTURE", "StructureObject");
34 define("IL_LT_PAGE", "PageObject");
35 define("IL_LT_MEDIA", "MediaObject");
36 define("IL_LT_GLITEM", "GlossaryItem");
37 
38 define("IL_TF_MEDIA", "Media");
39 define("IL_TF_FAQ", "FAQ");
40 define("IL_TF_GLOSSARY", "Glossary");
41 define("IL_TF_NEW", "New");
42 
43 
54 class ilMapArea
55 {
56  var $ilias;
57  var $item_id;
58  var $nr;
59  var $shape;
60  var $coords;
61  var $title;
62  var $linktype;
63  var $xl_title;
64  var $xl_href;
66  var $il_type;
68 
69 
76  function ilMapArea($a_item_id = 0, $a_nr = 0)
77  {
78  global $ilias;
79 
80  $this->ilias =& $ilias;
81  $this->title = "";
82 
83  if ($a_item_id !=0 && $a_nr != 0)
84  {
85  $this->setItemId($a_item_id);
86  $this->setNr($a_nr);
87  $this->read();
88  }
89  }
90 
94  function create()
95  {
96  global $ilDB;
97 
98  $q = "INSERT INTO map_area (item_id, nr, shape, ".
99  "coords, link_type, title, href, target, type, target_frame) ".
100  " VALUES (".
101  $ilDB->quote($this->getItemId()).",".
102  $ilDB->quote($this->getNr()).",".
103  $ilDB->quote($this->getShape()).",".
104  $ilDB->quote($this->getCoords()).",".
105  $ilDB->quote($this->getLinkType()).",".
106  $ilDB->quote($this->getTitle()).",".
107  $ilDB->quote($this->getHref()).",".
108  $ilDB->quote($this->getTarget()).",".
109  $ilDB->quote($this->getType()).",".
110  $ilDB->quote($this->getTargetFrame()).")";
111  $ilDB->query($q);
112  }
113 
121  function _getMaxNr($a_item_id)
122  {
123  global $ilDB;
124 
125  $q = "SELECT max(nr) AS max_nr FROM map_area WHERE item_id=".
126  $ilDB->quote($a_item_id);
127  $max_set = $ilDB->query($q);
128  $max_rec = $max_set->fetchRow(DB_FETCHMODE_ASSOC);
129 
130  return $max_rec["max_nr"];
131  }
132 
136  function read()
137  {
138  global $ilDB;
139 
140  $q = "SELECT * FROM map_area WHERE item_id=".
141  $ilDB->quote($this->getItemId()).
142  " AND nr=".$ilDB->quote($this->getNr());
143  $area_set = $ilDB->query($q);
144  $area_rec = $area_set->fetchRow(DB_FETCHMODE_ASSOC);
145 
146  $this->setShape($area_rec["shape"]);
147 //echo $area_rec["Shape"];
148  $this->setNr($area_rec["nr"]);
149  $this->setCoords($area_rec["coords"]);
150  $this->setLinkType($area_rec["link_type"]);
151  $this->setTitle($area_rec["title"]);
152  $this->setHref($area_rec["href"]);
153  $this->setTarget($area_rec["target"]);
154  $this->setType($area_rec["type"]);
155  $this->setTargetFrame($area_rec["target_frame"]);
156  }
157 
161  function update()
162  {
163  global $ilDB;
164 
165  $q = "UPDATE map_area SET shape = ".$ilDB->quote($this->getShape()).
166  ", coords = ".$ilDB->quote($this->getCoords()).
167  ", link_type = ".$ilDB->quote($this->getLinkType()).
168  ", title = ".$ilDB->quote($this->getTitle()).
169  ", href = ".$ilDB->quote($this->getHref()).
170  ", target = ".$ilDB->quote($this->getTarget()).
171  ", type = ".$ilDB->quote($this->getType()).
172  ", target_frame = ".$ilDB->quote($this->getTargetFrame()).
173  " WHERE item_id = ".$ilDB->quote($this->getItemId())." AND nr = ".
174  $ilDB->quote($this->getNr());
175  $ilDB->query($q);
176 //echo "<br>$q<br>";
177  }
178 
182  function _resolveIntLinks($a_item_id)
183  {
184  global $ilDB;
185 
186 //echo "maparea::resolve<br>";
187  $q = "SELECT * FROM map_area WHERE item_id=".$ilDB->quote($a_item_id);
188  $area_set = $ilDB->query($q);
189  while ($area_rec = $area_set->fetchRow(DB_FETCHMODE_ASSOC))
190  {
191  $target = $area_rec["target"];
192  $type = $area_rec["type"];
193  $item_id = $area_rec["item_id"];
194  $nr = $area_rec["nr"];
195 
196  if (($area_rec["link_type"] == IL_INT_LINK) && (!is_int(strpos($target, "__"))))
197  {
198  $new_target = ilInternalLink::_getIdForImportId($type, $target);
199  if ($new_target !== false)
200  {
201  $query = "UPDATE map_area SET target= ".$ilDB->quote($new_target)." ".
202  "WHERE item_id= ".$ilDB->quote($item_id)." AND nr=".$ilDB->quote($nr);
203  $ilDB->query($query);
204  }
205  }
206  }
207  }
208 
214  function _getIntLinks($a_item_id)
215  {
216  global $ilDB;
217 
218  $q = "SELECT * FROM map_area WHERE item_id=".$ilDB->quote($a_item_id);
219  $area_set = $ilDB->query($q);
220 
221  $links = array();
222 
223  while ($area_rec = $area_set->fetchRow(DB_FETCHMODE_ASSOC))
224  {
225  $target = $area_rec["target"];
226  $type = $area_rec["type"];
227  $targetframe = $area_rec["target_frame"];
228 
229  if (($area_rec["link_type"] == IL_INT_LINK) && (is_int(strpos($target, "__"))))
230  {
231  $links[$target.":".$type.":".$targetframe] =
232  array("Target" => $target, "Type" => $type,
233  "TargetFrame" => $targetframe);
234  }
235  }
236  return $links;
237  }
238 
242  static function _getMobsForTarget($a_type, $a_target)
243  {
244  global $ilDB;
245 
246  $q = "SELECT * FROM map_area WHERE ".
247  " link_type = ".$ilDB->quote($a_type).
248  " AND target = ".$ilDB->quote($a_target);
249  $set = $ilDB->query($q);
250 
251  $mobs = array();
252  while($rec = $set->fetchRow(DB_FETCHMODE_ASSOC))
253  {
254  $mob_id = ilMediaItem::_lookupMobId($rec["item_id"]);
255  $mobs[$mob_id] = $mob_id;
256  }
257 
258  return $mobs;
259  }
260 
266  function setItemId($a_item_id)
267  {
268  $this->item_id = $a_item_id;
269  }
270 
276  function getItemId()
277  {
278  return $this->item_id;
279  }
280 
286  function setNr($a_nr)
287  {
288  $this->nr = $a_nr;
289  }
290 
296  function getNr()
297  {
298  return $this->nr;
299  }
300 
306  function setShape($a_shape)
307  {
308  $this->shape = $a_shape;
309  }
310 
316  function getShape()
317  {
318  return $this->shape;
319  }
320 
326  function setCoords($a_coords)
327  {
328  $this->coords = $a_coords;
329  }
330 
336  function getCoords()
337  {
338  return $this->coords;
339  }
340 
346  function setTitle($a_title)
347  {
348  $this->title = $a_title;
349  }
350 
356  function appendTitle($a_title_str)
357  {
358  $this->title.= $a_title_str;
359  }
360 
366  function getTitle()
367  {
368  return $this->title;
369  }
370 
376  function setLinkType($a_link_type)
377  {
378  $this->linktype = $a_link_type;
379  }
380 
386  function getLinkType()
387  {
388  return $this->linktype;
389  }
390 
396  function setHref($a_href)
397  {
398  $this->xl_href = $a_href;
399  }
400 
406  function getHref()
407  {
408  return $this->xl_href;
409  }
410 
416  function setExtTitle($a_title)
417  {
418  $this->xl_title = $a_title;
419  }
420 
426  function getExtTitle()
427  {
428  return $this->xl_title;
429  }
430 
436  function setTarget($a_target)
437  {
438  $this->il_target = $a_target;
439  }
440 
446  function getTarget($a_insert_inst = false)
447  {
448  $target = $this->il_target;
449 
450  if ((substr($target, 0, 4) == "il__") && $a_insert_inst)
451  {
452  $target = "il_".IL_INST_ID."_".substr($target, 4, strlen($target) - 4);
453  }
454 
455  return $target;
456  }
457 
464  function setType($a_type)
465  {
466  $this->il_type = $a_type;
467  }
468 
474  function getType()
475  {
476  return $this->il_type;
477  }
478 
485  function setTargetFrame($a_target_frame)
486  {
487  $this->il_target_frame = $a_target_frame;
488  }
489 
496  function getTargetFrame()
497  {
498  return $this->il_target_frame;
499  }
500 
506  function draw(&$a_image, $a_col1, $a_col2, $a_close_poly = true,
507  $a_x_ratio = 1, $a_y_ratio = 1)
508  {
509  switch ($this->getShape())
510  {
511  case "Rect" :
512  $this->drawRect($a_image, $this->getCoords(), $a_col1, $a_col2,
513  $a_x_ratio, $a_y_ratio);
514  break;
515 
516  case "Circle" :
517  $this->drawCircle($a_image, $this->getCoords(), $a_col1, $a_col2,
518  $a_x_ratio, $a_y_ratio);
519  break;
520 
521  case "Poly" :
522  $this->drawPoly($a_image, $this->getCoords(), $a_col1, $a_col2, $a_close_poly,
523  $a_x_ratio, $a_y_ratio);
524  break;
525  }
526  }
527 
539  function drawLine(&$im, $x1, $y1, $x2, $y2, $c1, $c2)
540  {
541  imageline($im, $x1+1, $y1, $x2+1, $y2, $c1);
542  imageline($im, $x1-1, $y1, $x2-1, $y2, $c1);
543  imageline($im, $x1, $y1+1, $x2, $y2+1, $c1);
544  imageline($im, $x1, $y1-1, $x2, $y2-1, $c1);
545  imageline($im, $x1, $y1, $x2, $y2, $c2);
546  }
547 
557  function drawRect(&$im,$coords,$c1,$c2,$a_x_ratio = 1, $a_y_ratio = 1)
558  {
559  $coord=explode(",", $coords);
560 
561  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio,
562  $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
563  $this->drawLine($im, $coord[0] / $a_x_ratio, $coord[3] / $a_y_ratio,
564  $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio, $c1, $c2);
565  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[3] / $a_y_ratio,
566  $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
567  $this->drawLine($im, $coord[2] / $a_x_ratio, $coord[1] / $a_y_ratio,
568  $coord[0] / $a_x_ratio, $coord[1] / $a_y_ratio, $c1, $c2);
569  }
570 
571 
582  function drawPoly(&$im, $coords, $c1, $c2, $closed,$a_x_ratio = 1, $a_y_ratio = 1)
583  {
584  if ($closed)
585  {
586  $p = 0;
587  }
588  else
589  {
590  $p = 1;
591  }
592 
594 
595  if ($anz < (3 - $p))
596  {
597  return;
598  }
599 
600  $c = explode(",", $coords);
601 
602  for($i=0; $i<$anz-$p; $i++)
603  {
604  $this->drawLine($im, $c[$i*2] / $a_x_ratio, $c[$i*2+1] / $a_y_ratio,
605  $c[($i*2+2)%(2*$anz)] / $a_x_ratio,
606  $c[($i*2+3)%(2*$anz)] / $a_y_ratio, $c1, $c2);
607  }
608  }
609 
610 
620  function drawCircle(&$im, $coords, $c1, $c2,$a_x_ratio = 1, $a_y_ratio = 1)
621  {
622  $c = explode(",", $coords);
623  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
624  ($c[2]+1)*2 / $a_x_ratio, ($c[2]+1)*2 / $a_y_ratio, 1, 360, $c1);
625  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
626  ($c[2]-1)*2 / $a_x_ratio, ($c[2]-1)*2 / $a_y_ratio, 1, 360, $c1);
627  imagearc($im, $c[0] / $a_x_ratio, $c[1] / $a_y_ratio,
628  $c[2]*2 / $a_x_ratio, $c[2]*2 / $a_y_ratio, 1, 360, $c2);
629  }
630 
636  function countCoords($c)
637  {
638  if ($c == "")
639  {
640  return 0;
641  }
642  else
643  {
644  $coord_array = explode(",", $c);
645  return (count($coord_array) / 2);
646  }
647  }
648 
649 }
650 ?>