Mercurial > hg > rc1
comparison plugins/calendar/drivers/resources_driver.php @ 3:f6fe4b6ae66a
calendar plugin nearly as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 08:56:12 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:c828b0fd4a6e | 3:f6fe4b6ae66a |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * Resources directory interface definition | |
5 * | |
6 * @author Thomas Bruederli <bruederli@kolabsys.com> | |
7 * | |
8 * Copyright (C) 2014, Kolab Systems AG <contact@kolabsys.com> | |
9 * | |
10 * This program is free software: you can redistribute it and/or modify | |
11 * it under the terms of the GNU Affero General Public License as | |
12 * published by the Free Software Foundation, either version 3 of the | |
13 * License, or (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU Affero General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU Affero General Public License | |
21 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
22 */ | |
23 | |
24 | |
25 /** | |
26 * Interface definition for a resources directory driver classe | |
27 */ | |
28 abstract class resources_driver | |
29 { | |
30 protected$cal; | |
31 | |
32 /** | |
33 * Default constructor | |
34 */ | |
35 function __construct($cal) | |
36 { | |
37 $this->cal = $cal; | |
38 } | |
39 | |
40 /** | |
41 * Fetch resource objects to be displayed for booking | |
42 * | |
43 * @param string Search query (optional) | |
44 * @return array List of resource records available for booking | |
45 */ | |
46 abstract public function load_resources($query = null); | |
47 | |
48 /** | |
49 * Return properties of a single resource | |
50 * | |
51 * @param string Unique resource identifier | |
52 * @return array Resource object as hash array | |
53 */ | |
54 abstract public function get_resource($id); | |
55 | |
56 /** | |
57 * Return properties of a resource owner | |
58 * | |
59 * @param string Owner identifier | |
60 * @return array Resource object as hash array | |
61 */ | |
62 public function get_resource_owner($id) | |
63 { | |
64 return null; | |
65 } | |
66 | |
67 /** | |
68 * Get event data to display a resource's calendar | |
69 * | |
70 * The default implementation extracts the resource's email address | |
71 * and fetches free-busy data using the calendar backend driver. | |
72 * | |
73 * @param integer Event's new start (unix timestamp) | |
74 * @param integer Event's new end (unix timestamp) | |
75 * @return array A list of event objects (see calendar_driver specification) | |
76 */ | |
77 public function get_resource_calendar($id, $start, $end) | |
78 { | |
79 $events = array(); | |
80 $rec = $this->get_resource($id); | |
81 if ($rec && !empty($rec['email']) && $this->cal->driver) { | |
82 $fbtypemap = array( | |
83 calendar::FREEBUSY_BUSY => 'busy', | |
84 calendar::FREEBUSY_TENTATIVE => 'tentative', | |
85 calendar::FREEBUSY_OOF => 'outofoffice', | |
86 ); | |
87 | |
88 // if the backend has free-busy information | |
89 $fblist = $this->cal->driver->get_freebusy_list($rec['email'], $start, $end); | |
90 if (is_array($fblist)) { | |
91 foreach ($fblist as $slot) { | |
92 list($from, $to, $type) = $slot; | |
93 if ($type == calendar::FREEBUSY_FREE || $type == calendar::FREEBUSY_UNKNOWN) { | |
94 continue; | |
95 } | |
96 if ($from < $end && $to > $start) { | |
97 $event = array( | |
98 'id' => sha1($id . $from . $to), | |
99 'title' => $rec['name'], | |
100 'start' => new DateTime('@' . $from), | |
101 'end' => new DateTime('@' . $to), | |
102 'status' => $fbtypemap[$type], | |
103 'calendar' => '_resource', | |
104 ); | |
105 $events[] = $event; | |
106 } | |
107 } | |
108 } | |
109 } | |
110 | |
111 return $events; | |
112 } | |
113 | |
114 } |