ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilCalendarCategory.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 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
34{
35 const LTYPE_LOCAL = 1;
36 const LTYPE_REMOTE = 2;
37
38 private static $instances = null;
39
40 const DEFAULT_COLOR = '#04427e';
41
42 const TYPE_USR = 1; // user
43 const TYPE_OBJ = 2; // object
44 const TYPE_GLOBAL = 3; // global
45 const TYPE_CH = 4; // consultation hours
46 const TYPE_BOOK = 5; // booking manager
47
48 protected static $SORTED_TYPES = array(
49 0 => self::TYPE_GLOBAL,
50 1 => self::TYPE_USR,
51 2 => self::TYPE_CH,
52 3 => self::TYPE_BOOK,
53 4 => self::TYPE_OBJ
54 );
55
56
57 protected $cat_id;
58 protected $color;
59 protected $type = self::TYPE_USR;
60 protected $obj_id;
61 protected $obj_type = null;
62 protected $title;
63
65 protected $remote_url;
66 protected $remote_user;
67 protected $remote_pass;
68 protected $remote_sync = null;
69
70 protected $db;
71
72
78 public function __construct($a_cat_id = 0)
79 {
80 global $DIC;
81
82 $ilDB = $DIC['ilDB'];
83
84 $this->db = $ilDB;
85 $this->cat_id = $a_cat_id;
86
87 $this->read();
88 }
89
97 public static function _getInstanceByObjId($a_obj_id)
98 {
99 global $DIC;
100
101 $ilDB = $DIC['ilDB'];
102
103 $query = "SELECT cat_id FROM cal_categories " .
104 "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer') . " " .
105 "AND type = " . $ilDB->quote(self::TYPE_OBJ, 'integer');
106 $res = $ilDB->query($query);
107 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
108 return new ilCalendarCategory($row->cat_id);
109 }
110 return null;
111 }
112
118 public static function getInstanceByCategoryId($a_cat_id)
119 {
120 if (!self::$instances[$a_cat_id]) {
121 return self::$instances[$a_cat_id] = new ilCalendarCategory($a_cat_id);
122 }
123 return self::$instances[$a_cat_id];
124 }
125
129 public static function lookupCategorySortIndex($a_type_id)
130 {
131 return array_search($a_type_id, self::$SORTED_TYPES);
132 }
138 public static function lookupAppointments($a_category_id)
139 {
140 global $DIC;
141
142 $ilDB = $DIC['ilDB'];
143
144 $query = "SELECT * FROM cal_cat_assignments " .
145 'WHERE cat_id = ' . $ilDB->quote($a_category_id, 'integer');
146 $res = $ilDB->query($query);
147 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
148 $apps[] = $row->cal_id;
149 }
150 return $apps ? $apps : array();
151 }
152
153
160 public function getCategoryID()
161 {
162 return $this->cat_id;
163 }
164
172 public function setTitle($a_title)
173 {
174 $this->title = $a_title;
175 }
176
183 public function getTitle()
184 {
185 return $this->title;
186 }
187
188
195 public function setColor($a_color)
196 {
197 $this->color = $a_color;
198 }
199
206 public function getColor()
207 {
208 return $this->color;
209 }
210
217 public function setType($a_type)
218 {
219 $this->type = $a_type;
220 }
221
228 public function getType()
229 {
230 return $this->type;
231 }
232
239 public function setObjId($a_obj_id)
240 {
241 $this->obj_id = $a_obj_id;
242 }
243
250 public function getObjId()
251 {
252 return $this->obj_id;
253 }
254
260 public function getObjType()
261 {
262 return $this->obj_type;
263 }
264
265 public function getLocationType()
266 {
267 return $this->location;
268 }
269
270 public function setLocationType($a_type)
271 {
272 $this->location = $a_type;
273 }
274
275 public function setRemoteUrl($a_url)
276 {
277 $this->remote_url = $a_url;
278 }
279
280 public function getRemoteUrl()
281 {
282 return $this->remote_url;
283 }
284
285 public function setRemoteUser($a_user)
286 {
287 $this->remote_user = $a_user;
288 }
289
290 public function getRemoteUser()
291 {
292 return $this->remote_user;
293 }
294
295 public function setRemotePass($a_pass)
296 {
297 $this->remote_pass = $a_pass;
298 }
299
300 public function getRemotePass()
301 {
302 return $this->remote_pass;
303 }
304
309 public function setRemoteSyncLastExecution(ilDateTime $dt = null)
310 {
311 $this->remote_sync = $dt;
312 }
313
319 {
320 if ($this->remote_sync instanceof ilDateTime) {
321 return $this->remote_sync;
322 }
323 return new ilDateTime();
324 }
325
326
333 public function add()
334 {
335 global $DIC;
336
337 $ilDB = $DIC['ilDB'];
338
339 $next_id = $ilDB->nextId('cal_categories');
340
341 $query = "INSERT INTO cal_categories (cat_id,obj_id,color,type,title,loc_type,remote_url,remote_user,remote_pass,remote_sync) " .
342 "VALUES ( " .
343 $ilDB->quote($next_id, 'integer') . ", " .
344 $this->db->quote($this->getObjId(), 'integer') . ", " .
345 $this->db->quote($this->getColor(), 'text') . ", " .
346 $this->db->quote($this->getType(), 'integer') . ", " .
347 $this->db->quote($this->getTitle(), 'text') . ", " .
348 $this->db->quote($this->getLocationType(), 'integer') . ', ' .
349 $this->db->quote($this->getRemoteUrl(), 'text') . ', ' .
350 $this->db->quote($this->getRemoteUser(), 'text') . ', ' .
351 $this->db->quote($this->getRemotePass(), 'text') . ', ' .
352 $this->db->quote($this->getRemoteSyncLastExecution()->get(IL_CAL_DATETIME, '', ilTimeZone::UTC), 'timestamp') . ' ' .
353 ")";
354
355 $ilDB->manipulate($query);
356
357 $this->cat_id = $next_id;
358 return $this->cat_id;
359 }
360
367 public function update()
368 {
369 global $DIC;
370
371 $ilDB = $DIC['ilDB'];
372
373 $query = "UPDATE cal_categories " .
374 "SET obj_id = " . $this->db->quote($this->getObjId(), 'integer') . ", " .
375 "color = " . $this->db->quote($this->getColor(), 'text') . ", " .
376 "type = " . $this->db->quote($this->getType(), 'integer') . ", " .
377 "title = " . $this->db->quote($this->getTitle(), 'text') . ", " .
378 "loc_type = " . $this->db->quote($this->getLocationType(), 'integer') . ', ' .
379 "remote_url = " . $this->db->quote($this->getRemoteUrl(), 'text') . ', ' .
380 "remote_user = " . $this->db->quote($this->getRemoteUser(), 'text') . ', ' .
381 "remote_pass = " . $this->db->quote($this->getRemotePass(), 'text') . ', ' .
382 'remote_sync = ' . $this->db->quote($this->getRemoteSyncLastExecution()->get(IL_CAL_DATETIME, '', ilTimeZone::UTC), 'timestamp') . ' ' .
383 "WHERE cat_id = " . $this->db->quote($this->cat_id, 'integer') . " ";
384 $res = $ilDB->manipulate($query);
385 return true;
386 }
387
394 public function delete()
395 {
396 global $DIC;
397
398 $ilDB = $DIC['ilDB'];
399
400 $query = "DELETE FROM cal_categories " .
401 "WHERE cat_id = " . $this->db->quote($this->cat_id, 'integer') . " ";
402 $res = $ilDB->manipulate($query);
403
404 include_once('./Services/Calendar/classes/class.ilCalendarVisibility.php');
406
407 include_once('./Services/Calendar/classes/class.ilCalendarCategoryAssignments.php');
408 foreach (ilCalendarCategoryAssignments::_getAssignedAppointments(array($this->cat_id)) as $app_id) {
409 include_once('./Services/Calendar/classes/class.ilCalendarEntry.php');
411 }
413 }
414
421 public function validate()
422 {
423 if ($this->getLocationType() == ilCalendarCategory::LTYPE_REMOTE and !$this->getRemoteUrl()) {
424 return false;
425 }
426 if (strlen($this->getTitle()) and strlen($this->getColor()) and $this->getType()) {
427 return true;
428 }
429 return false;
430 }
431
437 private function read()
438 {
439 global $DIC;
440
441 $ilDB = $DIC['ilDB'];
442
443 if (!$this->cat_id) {
444 return true;
445 }
446
447 $query = "SELECT * FROM cal_categories " .
448 "WHERE cat_id = " . $this->db->quote($this->getCategoryID(), 'integer') . " ";
449 $res = $this->db->query($query);
450 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
451 $this->cat_id = $row->cat_id;
452 $this->obj_id = $row->obj_id;
453 $this->type = $row->type;
454 $this->color = $row->color;
455 $this->title = $row->title;
456 $this->location = $row->loc_type;
457 $this->remote_url = $row->remote_url;
458 $this->remote_user = $row->remote_user;
459 $this->remote_pass = $row->remote_pass;
460
461 if ($row->remote_sync) {
462 $this->remote_sync = new ilDateTime($row->remote_sync, IL_CAL_DATETIME, 'UTC');
463 } else {
464 $this->remote_sync = new ilDateTime();
465 }
466 }
467 if ($this->getType() == self::TYPE_OBJ) {
468 $this->title = ilObject::_lookupTitle($this->getObjId());
469 $this->obj_type = ilObject::_lookupType($this->getObjId());
470 }
471 }
472}
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_DATETIME
static _getAssignedAppointments($a_cat_id)
Get assigned apointments.
static _deleteByCategoryId($a_cat_id)
Delete assignments by category id.
Stores calendar categories.
static getInstanceByCategoryId($a_cat_id)
Get instance by category id.
__construct($a_cat_id=0)
Constructor.
static _getInstanceByObjId($a_obj_id)
get instance by obj_id
setObjId($a_obj_id)
set obj id
setRemoteSyncLastExecution(ilDateTime $dt=null)
Set remote sync last execution.
static lookupAppointments($a_category_id)
get all assigned appointment ids
static lookupCategorySortIndex($a_type_id)
Lookup sort index of calendar type.
getRemoteSyncLastExecution()
Get last execution date of remote sync.
static _delete($a_entry_id)
delete entry
static _deleteCategories($a_cat_id)
delete by category
@classDescription Date and time handling
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
global $DIC
Definition: goto.php:24
$query
foreach($_POST as $key=> $value) $res
global $ilDB