ILIAS  Release_4_2_x_branch Revision 61807
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilBookingSchedule.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
13 {
14  protected $id; // int
15  protected $title; // string
16  protected $pool_id; // int
17  protected $raster; // int
18  protected $rent_min; // int
19  protected $rent_max; // int
20  protected $auto_break; // int
21  protected $deadline; // int
22  protected $definition; // array
23 
31  function __construct($a_id = NULL)
32  {
33  $this->id = (int)$a_id;
34  $this->read();
35  }
36 
41  function setTitle($a_title)
42  {
43  $this->title = $a_title;
44  }
45 
50  function getTitle()
51  {
52  return $this->title;
53  }
54 
59  function setPoolId($a_pool_id)
60  {
61  $this->pool_id = (int)$a_pool_id;
62  }
63 
68  function getPoolId()
69  {
70  return $this->pool_id;
71  }
72 
77  function setRaster($a_raster)
78  {
79  $this->raster = (int)$a_raster;
80  }
81 
86  function getRaster()
87  {
88  return $this->raster;
89  }
90 
95  function setMinRental($a_min)
96  {
97  $this->rent_min = (int)$a_min;
98  }
99 
104  function getMinRental()
105  {
106  return $this->rent_min;
107  }
108 
113  function setMaxRental($a_max)
114  {
115  $this->rent_max = (int)$a_max;
116  }
117 
122  function getMaxRental()
123  {
124  return $this->rent_max;
125  }
126 
131  function setAutoBreak($a_break)
132  {
133  $this->auto_break = (int)$a_break;
134  }
135 
140  function getAutoBreak()
141  {
142  return $this->auto_break;
143  }
144 
149  function setDeadline($a_deadline)
150  {
151  $this->deadline = (int)$a_deadline;
152  }
153 
158  function getDeadline()
159  {
160  return $this->deadline;
161  }
162 
167  function setDefinition($a_definition)
168  {
169  $this->definition = $a_definition;
170  }
171 
176  function getDefinition()
177  {
178  return $this->definition;
179  }
180 
184  protected function read()
185  {
186  global $ilDB;
187 
188  if($this->id)
189  {
190  $set = $ilDB->query('SELECT title,raster,rent_min,rent_max,auto_break,'.
191  'deadline'.
192  ' FROM booking_schedule'.
193  ' WHERE booking_schedule_id = '.$ilDB->quote($this->id, 'integer'));
194  $row = $ilDB->fetchAssoc($set);
195  $this->setTitle($row['title']);
196  $this->setDeadline($row['deadline']);
197  if($row['raster'])
198  {
199  $this->setRaster($row['raster']);
200  $this->setMinRental($row['rent_min']);
201  $this->setMaxRental($row['rent_max']);
202  $this->setAutoBreak($row['auto_break']);
203  }
204 
205  // load definition
206  $definition = array();
207  $set = $ilDB->query('SELECT day_id,slot_id,times'.
208  ' FROM booking_schedule_slot'.
209  ' WHERE booking_schedule_id = '.$ilDB->quote($this->id, 'integer'));
210  while($row = $ilDB->fetchAssoc($set))
211  {
212  $definition[$row["day_id"]][$row["slot_id"]] = $row["times"];
213  }
214  $this->setDefinition($definition);
215  }
216  }
217 
222  function save()
223  {
224  global $ilDB;
225 
226  if($this->id)
227  {
228  return false;
229  }
230 
231  $this->id = $ilDB->nextId('booking_schedule');
232 
233  $ilDB->manipulate('INSERT INTO booking_schedule'.
234  ' (booking_schedule_id,title,pool_id,raster,rent_min,rent_max,auto_break,'.
235  'deadline)'.
236  ' VALUES ('.$ilDB->quote($this->id, 'integer').','.$ilDB->quote($this->getTitle(), 'text').
237  ','.$ilDB->quote($this->getPoolId(), 'integer').','.$ilDB->quote($this->getRaster(), 'integer').
238  ','.$ilDB->quote($this->getMinRental(), 'integer').','.$ilDB->quote($this->getMaxRental(), 'integer').
239  ','.$ilDB->quote($this->getAutoBreak(), 'integer').','.$ilDB->quote($this->getDeadline(), 'integer').')');
240 
241  $this->saveDefinition();
242  }
243 
248  function update()
249  {
250  global $ilDB;
251 
252  if(!$this->id)
253  {
254  return false;
255  }
256 
257  $ilDB->manipulate('UPDATE booking_schedule'.
258  ' SET title = '.$ilDB->quote($this->getTitle(), 'text').
259  ', pool_id = '.$ilDB->quote($this->getPoolId(), 'integer').
260  ', raster = '.$ilDB->quote($this->getRaster(), 'integer').
261  ', rent_min = '.$ilDB->quote($this->getMinRental(), 'integer').
262  ', rent_max = '.$ilDB->quote($this->getMaxRental(), 'integer').
263  ', auto_break = '.$ilDB->quote($this->getAutoBreak(), 'integer').
264  ', deadline = '.$ilDB->quote($this->getDeadline(), 'integer').
265  ' WHERE booking_schedule_id = '.$ilDB->quote($this->id, 'integer'));
266 
267  $this->saveDefinition();
268  }
269 
273  protected function saveDefinition()
274  {
275  global $ilDB;
276 
277  if(!$this->id)
278  {
279  return false;
280  }
281 
282  $ilDB->manipulate('DELETE FROM booking_schedule_slot'.
283  ' WHERE booking_schedule_id = '.$ilDB->quote($this->id, 'integer'));
284 
285  $definition = $this->getDefinition();
286  if($definition)
287  {
288  foreach($definition as $day_id => $slots)
289  {
290  foreach($slots as $slot_id => $times)
291  {
292  $fields = array(
293  "booking_schedule_id" => array('integer', $this->id),
294  "day_id" => array('text', $day_id),
295  "slot_id" => array('integer', $slot_id),
296  "times" => array('text', $times)
297  );
298  $ilDB->insert('booking_schedule_slot', $fields);
299  }
300  }
301 
302  }
303  }
304 
310  static function hasExistingSchedules($a_pool_id)
311  {
312  global $ilDB;
313 
314  $set = $ilDB->query("SELECT booking_schedule_id".
315  " FROM booking_schedule".
316  " WHERE pool_id = ".$ilDB->quote($a_pool_id, 'integer'));
317  return (bool)$ilDB->numRows($set);
318  }
319 
325  static function getList($a_pool_id)
326  {
327  global $ilDB;
328 
329  $set = $ilDB->query('SELECT s.booking_schedule_id,s.title,'.
330  'MAX(t.schedule_id) AS type_has_schedule, MAX(o.schedule_id) AS object_has_schedule'.
331  ' FROM booking_schedule s'.
332  ' LEFT JOIN booking_type t ON (s.booking_schedule_id = t.schedule_id)'.
333  ' LEFT JOIN booking_object o ON (s.booking_schedule_id = o.schedule_id)'.
334  ' WHERE s.pool_id = '.$ilDB->quote($a_pool_id, 'integer').
335  ' GROUP BY s.booking_schedule_id,s.title'.
336  ' ORDER BY s.title');
337  $res = array();
338  while($row = $ilDB->fetchAssoc($set))
339  {
340  if(!$row['type_has_schedule'] && !$row['object_has_schedule'])
341  {
342  $row['is_used'] = false;
343  }
344  else
345  {
346  $row['is_used'] = true;
347  }
348  $res[] = $row;
349  }
350  return $res;
351  }
352 
357  function delete()
358  {
359  global $ilDB;
360 
361  if($this->id)
362  {
363  return $ilDB->manipulate('DELETE FROM booking_schedule'.
364  ' WHERE booking_schedule_id = '.$ilDB->quote($this->id, 'integer'));
365  }
366  }
367 
374  {
375  $def = $this->getDefinition();
376  $slots = array();
377  foreach($def as $day => $times)
378  {
379  foreach($times as $time)
380  {
381  $slots[$time][] = $day;
382  }
383  }
384  foreach($slots as $time => $days)
385  {
386  $slots[$time] = array_unique($days);
387  }
388  ksort($slots);
389  return $slots;
390  }
391 
392  function setDefinitionBySlots(array $a_def)
393  {
394  $slots = array();
395  foreach($a_def as $time => $days)
396  {
397  foreach($days as $day)
398  {
399  $slots[$day][] = $time;
400  }
401  }
402  $this->setDefinition($slots);
403  }
404 }
405 
406 ?>