/[drupal]/contributions/modules/movino/movino_servers.inc
ViewVC logotype

Contents of /contributions/modules/movino/movino_servers.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download) (as text)
Sun May 4 15:27:17 2008 UTC (18 months, 3 weeks ago) by tomsun
Branch: MAIN
CVS Tags: DRUPAL-5--1-1, HEAD
Changes since 1.2: +44 -1 lines
File MIME type: text/x-php
Added database handlers for server keys.
1 <?php // $Id: movino_servers.inc,v 1.2 2007/07/13 07:28:27 tomsun Exp $
2 /*
3 Movino Web Frontend - Server handling, feed parsing and feed caching
4 Copyright 2006, 2007 Tom Sundström
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public
16 License along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20
21 /**
22 * Loads the server info from either the Drupal admin interface or the .ini file.
23 *
24 * @return array of server-arrays.
25 */
26 function movino_get_servers() {
27
28 $servers = array();
29
30 if (defined('MOVINO_STANDALONE')) {
31 // Servers are defined in the standalone.ini file.
32 $settings = parse_ini_file('standalone.ini', TRUE);
33 $server_ids = explode(',', $settings['movino_video_servers']);
34 if (empty($server_ids)) {
35 return array();
36 }
37 $servers = array();
38 foreach ($server_ids as $server_id) {
39 $server_id = trim($server_id);
40 $servers[$server_id] = $settings[$server_id];
41 $servers[$server_id]['id'] = $server_id;
42 }
43 return $servers;
44 }
45
46 // Servers are defined in the movino_servers DB table.
47 // Load server info from db
48 $result = db_query("SELECT * FROM {movino_servers} ");
49
50 while($server = db_fetch_array($result)) {
51 $servers[$server['id']] = $server;
52 $servers[$server['id']]['admin_links'] = l(t('Edit'), 'admin/settings/movino/servers/edit/' . $server['id']) . ' | ' . l(t('Delete'), 'admin/settings/movino/servers/delete/' . $server['id']);
53 }
54
55 // Allow third party modules to define servers.
56 $additional_servers = module_invoke_all('movino_servers');
57
58 return array_merge($additional_servers, $servers);
59 }
60
61
62 /**
63 * Generates a unique secret key for server $id and stores it in DB.
64 */
65 function movino_server_generate_secret_key($id) {
66
67 usleep(rand(0, 100));
68 $key = md5(microtime());
69
70 $result = db_query("SELECT * FROM {movino_servers} WHERE secret_key = '%s' ", $key);
71 if ($record = db_fetch_array($result)) {
72 // Key already used, generate a new one
73 return movino_server_generate_secret_key($id);
74 }
75
76 movino_server_update_secret_key($id, $key);
77
78 return $key;
79 }
80
81 /**
82 * Stores a secret video server key in DB.
83 */
84 function movino_server_update_secret_key($id, $key) {
85 $query = "UPDATE {movino_servers} SET secret_key = '%s' WHERE id = '%s'";
86 $result = db_query($query, $key, $id);
87
88 }
89
90
91 /**
92 * Returns server id for the given secret key. Returns false if no match.
93 */
94 function movino_server_validate_secret_key($key) {
95 $result = db_query("SELECT * FROM {movino_servers} WHERE secret_key = '%s' ", $key);
96 if ($server = db_fetch_array($result)) {
97 // Key already used, generate a new one
98 return $server['id'];
99 }
100
101 return FALSE;
102 }
103
104
105 /**
106 * Get Movino server info.
107 *
108 * @param integer $id The id of the server.
109 * @return boolean
110 */
111 function movino_server_get($id) {
112
113 if (defined('MOVINO_STANDALONE')) {
114 // Servers are defined in the standalone.ini file.
115 $settings = parse_ini_file('standalone.ini');
116 if (empty($settings[$id])) {
117 return array();
118 }
119 return $settings[$id];
120 }
121
122 // Load server info from db
123 $result = db_query("SELECT * FROM {movino_servers} WHERE id = '%s' ", $id);
124
125 if (db_num_rows($result)) {
126 $server = db_fetch_array($result);
127 }
128
129 if (empty($server)) {
130 return FALSE;
131 }
132 return $server;
133 }
134
135
136 /**
137 * Insert a Movino server into DB.
138 *
139 * @param array $server
140 * @return boolean
141 */
142 function movino_server_insert($server) {
143
144 // Fallback to defaults.
145 $server = array_merge(_movino_server_settings_defaults(), $server);
146
147 if (movino_server_get($server['id'])) {
148 drupal_set_message('Server id already exists. Server not created!', 'error');
149 return FALSE;
150 }
151
152 $query = <<<END
153 INSERT INTO {movino_servers} SET
154 id = '%s',
155 name = '%s',
156 description = '%s',
157 host = '%s',
158 feed_live = %d,
159 feed_live_port = %d,
160 feed_live_path = '%s',
161 feed_live_updated = %d,
162 feed_archive = %d,
163 feed_archive_port = %d,
164 feed_archive_path = '%s',
165 feed_archive_updated = %d,
166 source_port = %d
167 END;
168
169 if ($result = db_query($query,
170 $server['id'],
171 $server['name'],
172 $server['description'],
173 $server['host'],
174 $server['feed_live'],
175 $server['feed_live_port'],
176 $server['feed_live_path'],
177 $server['feed_live_updated'],
178 $server['feed_archive'],
179 $server['feed_archive_port'],
180 $server['feed_archive_path'],
181 $server['feed_archive_updated'],
182 $server['source_port'])) {
183
184 // Allow modules to interact when a server has been inserted.
185 module_invoke_all('movino_server_insert', $server);
186
187 drupal_set_message('Movino server ' . $server['name'] . ' (' . $server['id'] . ') is added.');
188 return TRUE;
189 } else {
190 drupal_set_message('Unknown error - Movino server ' . $server['name'] . ' (' . $server['id'] . ') not added.', 'error');
191 return FALSE;
192 }
193
194 }
195
196
197 /**
198 * Update a Movino server already in DB.
199 *
200 * @param array $server
201 * @return boolean
202 */
203 function movino_server_update($server) {
204
205 // Fallback to defaults.
206 $server = array_merge(_movino_server_settings_defaults(), $server);
207
208 if (!movino_server_get($server['id'])) {
209 drupal_set_message('Server id does not exists.', 'error');
210 return FALSE;
211 }
212
213 $query = <<<END
214 UPDATE {movino_servers} SET
215 id = '%s',
216 name = '%s',
217 description = '%s',
218 host = '%s',
219 feed_live = %d,
220 feed_live_port = %d,
221 feed_live_path = '%s',
222 feed_archive = %d,
223 feed_archive_port = %d,
224 feed_archive_path = '%s',
225 source_port = %d
226 WHERE id = '%s'
227 END;
228
229 if ($result = db_query($query,
230 $server['id'],
231 $server['name'],
232 $server['description'],
233 $server['host'],
234 $server['feed_live'],
235 $server['feed_live_port'],
236 $server['feed_live_path'],
237 $server['feed_archive'],
238 $server['feed_archive_port'],
239 $server['feed_archive_path'],
240 $server['source_port'],
241 $server['id_old'])) {
242
243 // Allow modules to interact when a server has been updated.
244 module_invoke_all('movino_server_update', $server);
245
246 drupal_set_message('Movino server ' . $server['name'] . ' (' . $server['id'] . ') is updated.');
247 return TRUE;
248
249 } else {
250 drupal_set_message('Unknown error - Movino server ' . $server['name'] . ' (' . $server['id'] . ') not updated.', 'error');
251 return FALSE;
252 }
253 }
254
255
256 /**
257 * Update a Movino server already in DB.
258 *
259 * @param array $server
260 * @return boolean
261 */
262 function movino_server_update_feed_age($server_id, $type = 'all') {
263
264 $query = 'UPDATE {movino_servers} SET ';
265
266 if ($type != 'archive') {
267 $query .= 'feed_live_updated = ' . time() . ' ';
268 }
269 if ($type != 'live') {
270 $query .= 'feed_archive_updated = ' . time() . ' ';
271 }
272
273 $query .= "WHERE id = '%s' ";
274
275 if ($result = db_query($query, $server_id)) {
276 if (MOVINO_DEBUG) {
277 drupal_set_message('Movino server ' . $server_id . ' - ' . $type . ': feed age is updated.');
278 }
279 return TRUE;
280 } else {
281 if (MOVINO_DEBUG) {
282 drupal_set_message('Unknown error - Movino server ' . $server_id . ': feed age not updated.', 'error');
283 }
284 return FALSE;
285 }
286 }
287
288
289 /**
290 * Delete a Movino server.
291 *
292 * @param integer $id The id of the server.
293 * @return boolean
294 */
295 function movino_server_delete($id) {
296
297 $server = movino_server_get($id);
298 if ($server != FALSE) {
299 $result = db_query("DELETE FROM {movino_servers} WHERE id = '%s' ", $id);
300 drupal_set_message('Movino server ' . $server['name'] . ' (' . $server['id'] . ') is deleted.');
301 return TRUE;
302 }
303
304 drupal_set_message('Server ' . $id . 'does not exist.', 'error');
305 return FALSE;
306 }
307
308
309 /**
310 * Converts a suggestion to a valid server id
311 * (containing lowercase alphanumeric characters and '-')
312 *
313 * @param string $id
314 * @return string
315 */
316 function _movino_server_id($id) {
317 return strtolower(preg_replace('/[^a-zA-Z0-9-]+/', '-', $string));
318 }
319
320
321 /**
322 * The default settings for a Movino server.
323 *
324 * @return array
325 */
326 function _movino_server_settings_defaults() {
327 return array(
328 'id' => '',
329 'name' => '',
330 'description' => '',
331 'host' => '',
332 'feed_live' => 1,
333 'feed_live_port' => '24536',
334 'feed_live_path' => 'live.xml',
335 'feed_live_updated' => 0,
336 'feed_archive' => 1,
337 'feed_archive_port' => '24536',
338 'feed_archive_path' => 'archived.xml',
339 'feed_archive_updated' => 0,
340 'source_port' => '30710',
341 );
342 }

  ViewVC Help
Powered by ViewVC 1.1.2