Merge lp:~alexharrington/xibo/server-150-installer into lp:xibo/1.5

Proposed by Dan Garner
Status: Merged
Approved by: Dan Garner
Approved revision: 308
Merged at revision: 272
Proposed branch: lp:~alexharrington/xibo/server-150-installer
Merge into: lp:xibo/1.5
Diff against target: 11221 lines (+7174/-1085)
143 files modified
server/3rdparty/jQuery/css/jquery-ui.css (+1/-1)
server/config/config.class.php (+107/-19)
server/install.php (+1/-1)
server/install/database/60.sql (+17/-5)
server/install/database/61.sql (+86/-0)
server/install/database/62.sql (+7/-0)
server/install/footer.inc (+1/-1)
server/install/header.inc (+1/-1)
server/install/header_upgrade.inc (+1/-1)
server/install/install.css (+7/-7)
server/install/master/data.sql (+149/-132)
server/install/master/structure.sql (+21/-6)
server/lib/app/app_functions.php (+9/-1)
server/lib/app/debug.class.php (+1/-1)
server/lib/app/responsemanager.class.php (+9/-6)
server/lib/app/session.class.php (+11/-3)
server/lib/app/thememanager.class.php (+69/-11)
server/lib/data/dataset.data.class.php (+8/-1)
server/lib/data/datasetcolumn.data.class.php (+2/-2)
server/lib/data/layout.data.class.php (+2/-2)
server/lib/data/region.data.class.php (+12/-6)
server/lib/data/userdata.data.class.php (+124/-2)
server/lib/include.php (+6/-4)
server/lib/modules/module.class.php (+5/-5)
server/lib/pages/admin.class.php (+3/-3)
server/lib/pages/content.class.php (+46/-137)
server/lib/pages/dashboard.class.php (+1/-1)
server/lib/pages/dataset.class.php (+5/-5)
server/lib/pages/group.class.php (+3/-3)
server/lib/pages/index.class.php (+4/-6)
server/lib/pages/layout.class.php (+41/-14)
server/lib/pages/log.class.php (+6/-6)
server/lib/pages/mediamanager.class.php (+57/-114)
server/lib/pages/module.class.php (+3/-2)
server/lib/pages/oauth.class.php (+7/-7)
server/lib/pages/schedule.class.php (+61/-83)
server/lib/pages/template.class.php (+3/-3)
server/lib/pages/timeline.class.php (+53/-73)
server/lib/pages/user.class.php (+2/-3)
server/lib/service/service.wsdl (+1/-1)
server/lib/service/xmdssoap.class.php (+15/-12)
server/maintenance.php (+2/-3)
server/manual/content/admin/advanced.php (+57/-0)
server/manual/content/admin/api.php (+396/-0)
server/manual/content/admin/displays.php (+189/-0)
server/manual/content/admin/modules.php (+66/-0)
server/manual/content/admin/settings.php (+311/-0)
server/manual/content/config/client.php (+137/-0)
server/manual/content/config/client_feature.php (+194/-0)
server/manual/content/config/config.php (+36/-0)
server/manual/content/config/settings.php (+41/-0)
server/manual/content/config/windows.php (+81/-0)
server/manual/content/content/adding.php (+80/-0)
server/manual/content/content/licensing.php (+31/-0)
server/manual/content/content/overview.php (+44/-0)
server/manual/content/content/types.php (+92/-0)
server/manual/content/dashboard/dashboard.php (+62/-0)
server/manual/content/dashboard/navbar.php (+183/-0)
server/manual/content/dashboard/overview.php (+111/-0)
server/manual/content/install/install_client.php (+81/-0)
server/manual/content/install/install_server.php (+29/-0)
server/manual/content/install/prerequisites.php (+62/-0)
server/manual/content/install/troubleshooting.php (+27/-0)
server/manual/content/layout/addlayout.php (+142/-0)
server/manual/content/layout/addregion.php (+50/-0)
server/manual/content/layout/assigncontent.php (+106/-0)
server/manual/content/layout/campaign_layout.php (+60/-0)
server/manual/content/layout/content_counter.php (+67/-0)
server/manual/content/layout/content_datasets.php (+185/-0)
server/manual/content/layout/content_embedded.php (+71/-0)
server/manual/content/layout/content_flash.php (+47/-0)
server/manual/content/layout/content_image.php (+46/-0)
server/manual/content/layout/content_microblog.php (+63/-0)
server/manual/content/layout/content_powerpoint.php (+57/-0)
server/manual/content/layout/content_shellcommand.php (+79/-0)
server/manual/content/layout/content_text.php (+67/-0)
server/manual/content/layout/content_ticker.php (+47/-0)
server/manual/content/layout/content_video.php (+52/-0)
server/manual/content/layout/content_webpage.php (+53/-0)
server/manual/content/layout/layoutdesigner.php (+74/-0)
server/manual/content/layout/overview.php (+54/-0)
server/manual/content/layout/region_preview_timeline.php (+58/-0)
server/manual/content/license/licenses.php (+45/-0)
server/manual/content/schedule/changedisplay.php (+27/-0)
server/manual/content/schedule/overview.php (+65/-0)
server/manual/content/schedule/schedule_calendar.php (+72/-0)
server/manual/content/schedule/schedule_event.php (+58/-0)
server/manual/content/schedule/schedule_now.php (+41/-0)
server/manual/content/templates/choosetemplate.php (+52/-0)
server/manual/content/templates/overview.php (+35/-0)
server/manual/content/templates/template_resolution.php (+47/-0)
server/manual/content/users/groups.php (+96/-0)
server/manual/content/users/menu_page_security.php (+79/-0)
server/manual/content/users/user_permissions.php (+58/-0)
server/manual/content/users/user_types.php (+54/-0)
server/manual/content/users/users.php (+91/-0)
server/manual/css/doc.css (+110/-0)
server/manual/img/jquery.treeview.css (+47/-0)
server/manual/index.php (+32/-0)
server/manual/intro.php (+34/-0)
server/manual/lib/jquery.dimensions.pack.js (+32/-0)
server/manual/lib/jquery.ifixpng.js (+136/-0)
server/manual/lib/jquery.pack.js (+31/-0)
server/manual/lib/jquery.treeview.css (+47/-0)
server/manual/lib/jquery.treeview.js (+223/-0)
server/manual/template.php (+19/-0)
server/manual/template/footer.php (+13/-0)
server/manual/toc.php (+167/-0)
server/modules/counter.module.php (+4/-4)
server/modules/datasetview.module.php (+4/-4)
server/modules/embedded.module.php (+4/-4)
server/modules/localvideo.module.php (+4/-4)
server/modules/microblog.module.php (+4/-4)
server/modules/module_user_general.php (+51/-31)
server/modules/shellcommand.module.php (+4/-4)
server/modules/text.module.php (+4/-4)
server/modules/ticker.module.php (+4/-4)
server/modules/webpage.module.php (+5/-5)
server/template/pages/mediamanager.php (+0/-44)
server/template/pages/schedule_view.php (+0/-58)
server/theme/default/config.php (+30/-0)
server/theme/default/css/images.css (+110/-0)
server/theme/default/css/images_override.css (+19/-0)
server/theme/default/css/presentation.css (+10/-159)
server/theme/default/css/timeline.css (+18/-10)
server/theme/default/html/application_verify.php (+1/-1)
server/theme/default/html/header.php (+9/-3)
server/theme/default/html/help_page.php (+1/-1)
server/theme/default/html/homepage_mediamanager.php (+76/-0)
server/theme/default/html/homepage_mediamanager_grid.php (+64/-0)
server/theme/default/html/layout_form_background.php (+1/-1)
server/theme/default/html/library_form_assign.php (+55/-0)
server/theme/default/html/library_form_assign_list.php (+45/-0)
server/theme/default/html/login_form.php (+1/-1)
server/theme/default/html/login_page.php (+6/-4)
server/theme/default/html/region_form_options.php (+64/-0)
server/theme/default/html/region_form_options_no_transition.php (+52/-0)
server/theme/default/html/schedule_page.php (+69/-0)
server/theme/default/html/schedule_page_display_list.php (+43/-0)
server/theme/default/html/user_form_change_password.php (+0/-1)
server/theme/default/js/core.js (+1/-0)
server/theme/default/js/layout.js (+41/-36)
server/theme/default/js/log.js (+1/-4)
To merge this branch: bzr merge lp:~alexharrington/xibo/server-150-installer
Reviewer Review Type Date Requested Status
Xibo Maintainters Pending
Review via email: mp+158428@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'server/3rdparty/jQuery/css/jquery-ui.css'
2--- server/3rdparty/jQuery/css/jquery-ui.css 2012-04-08 10:11:57 +0000
3+++ server/3rdparty/jQuery/css/jquery-ui.css 2013-04-11 16:56:27 +0000
4@@ -294,7 +294,7 @@
5 * http://docs.jquery.com/UI/Resizable#theming
6 */
7 .ui-resizable { position: relative;}
8-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
9+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 999; display: block; }
10 .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
11 .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
12 .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
13
14=== modified file 'server/config/config.class.php'
15--- server/config/config.class.php 2013-03-02 13:15:42 +0000
16+++ server/config/config.class.php 2013-04-11 16:56:27 +0000
17@@ -90,7 +90,7 @@
18 {
19 if (!$results = $db->query("SELECT app_ver, XlfVersion, XmdsVersion, DBVersion FROM version"))
20 {
21- trigger_error("No Version information - please contact Xibo support", E_USER_WARNING);
22+ trigger_error("No Version information - please contact technical support", E_USER_WARNING);
23 }
24
25 $row = $db->get_assoc_row($results);
26@@ -138,11 +138,12 @@
27 }
28 else if ($this->CheckPHP() == 2)
29 {
30+ $this->envWarning = true;
31 $output .= $imgWarn.$message.'<br />';
32 $output .= <<<END
33 <div class="check_explain">
34- <p>Xibo requires PHP version 5.2.0 or later. It may run on PHP 5.1.0 and we have provided compatibility functions to enable that.</p>
35- <p>However, we recommend upgrading your version of PHP to 5.2.0 or later.</p>
36+ <p>Xibo requires PHP version 5.2.4 or later. It may run on PHP 5.1.0 and we have provided compatibility functions to enable that.</p>
37+ <p>However, we recommend upgrading your version of PHP to 5.2.4 or later.</p>
38 </div>
39 END;
40 }
41@@ -151,7 +152,7 @@
42 $this->envFault = true;
43
44 $output .= $imgBad.$message.'<br />';
45- $output .= '<div class="check_explain"> <p>' . __("Xibo requires PHP version 5.2.4 or later.") . '</p></div>';
46+ $output .= '<div class="check_explain"> <p>' . __("PHP version 5.2.4 or later required.") . '</p></div>';
47 }
48
49 // Check for file system permissions
50@@ -166,7 +167,7 @@
51 $this->envFault = true;
52
53 $output .= $imgBad.$message.'<br />';
54- $output .= '<div class="check_explain"><p>' . __("Xibo needs to be able to write to the following:");
55+ $output .= '<div class="check_explain"><p>' . __("Write access required for the following:");
56 $output .= <<<END
57 <ul>
58 <li> settings.php
59@@ -178,7 +179,7 @@
60 }
61
62 // Check for MySQL
63- $message = __('Xibo requires a MySQL database. Ensure PHP MySQL client extension is installed');
64+ $message = __('MySQL database required. Ensure PHP MySQL client extension is installed');
65
66 if ($this->CheckMySQL())
67 {
68@@ -208,7 +209,7 @@
69 $this->envFault = true;
70
71 $output .= $imgBad.$message.'<br />';
72- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP JSON extension to function.') . '</p></div>';
73+ $output .= '<div class="check_explain"><p>' . __('PHP JSON extension required to function.') . '</p></div>';
74 }
75
76 // Check for SOAP
77@@ -223,7 +224,7 @@
78 $this->envFault = true;
79
80 $output .= $imgBad.$message.'<br />';
81- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP SOAP extension to function.') . '</p></div>';
82+ $output .= '<div class="check_explain"><p>' . __('PHP SOAP extension required to function.') . '</p></div>';
83 }
84
85 // Check for GD (graphics)
86@@ -238,7 +239,7 @@
87 $this->envFault = true;
88
89 $output .= $imgBad.$message.'<br />';
90- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP GD extension to function.') . '</p></div>';
91+ $output .= '<div class="check_explain"><p>' . __('PHP GD extension to function.') . '</p></div>';
92 }
93
94 // Check for PHP Session
95@@ -253,7 +254,7 @@
96 $this->envFault = true;
97
98 $output .= $imgBad.$message.'<br />';
99- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP session support to function.') . '</p></div>';
100+ $output .= '<div class="check_explain"><p>' . __('PHP session support to function.') . '</p></div>';
101 }
102
103 // Check for PHP PCRE
104@@ -268,7 +269,7 @@
105 $this->envFault = true;
106
107 $output .= $imgBad.$message.'<br />';
108- $output .= '<div class="check_explain"><p>' . __('Xibo needs PHP PCRE support to function.') . '</p></div>';
109+ $output .= '<div class="check_explain"><p>' . __('PHP PCRE support to function.') . '</p></div>';
110 }
111
112 // Check for PHP Gettext
113@@ -286,7 +287,7 @@
114 $this->envFault = true;
115
116 $output .= $imgBad.$message.'<br />';
117- $output .= '<div class="check_explain"><p>' . __('Xibo needs PHP Gettext support to function.') . '</p></div>';
118+ $output .= '<div class="check_explain"><p>' . __('PHP Gettext support to function.') . '</p></div>';
119 }
120
121 // Check for Calendar
122@@ -301,7 +302,7 @@
123 $this->envFault = true;
124
125 $output .= $imgBad.$message.'<br />';
126- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP Calendar extension to function.') . '</p></div>';
127+ $output .= '<div class="check_explain"><p>' . __('PHP Calendar extension to function.') . '</p></div>';
128 }
129
130 // Check for DOM
131@@ -316,7 +317,7 @@
132 $this->envFault = true;
133
134 $output .= $imgBad.$message.'<br />';
135- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP DOM core functionality enabled.') . '</p></div>';
136+ $output .= '<div class="check_explain"><p>' . __('PHP DOM core functionality enabled.') . '</p></div>';
137 }
138
139 // Check for DOM XML
140@@ -331,11 +332,26 @@
141 $this->envFault = true;
142
143 $output .= $imgBad.$message.'<br />';
144- $output .= '<div class="check_explain"><p>' . __('Xibo needs the PHP DOM XML extension to function.') . '</p></div>';
145+ $output .= '<div class="check_explain"><p>' . __('PHP DOM XML extension to function.') . '</p></div>';
146+ }
147+
148+ // Check for Mcrypt
149+ $message = __('Mcrypt Extension');
150+
151+ if ($this->CheckMcrypt())
152+ {
153+ $output .= $imgGood.$message.'<br />';
154+ }
155+ else
156+ {
157+ $this->envFault = true;
158+
159+ $output .= $imgBad.$message.'<br />';
160+ $output .= '<div class="check_explain"><p>' . __('PHP Mcrypt extension to function.') . '</p></div>';
161 }
162
163 // Check to see if we are allowed to open remote URLs (homecall will not work otherwise)
164- $message = __("Allow PHP to open external URLs");
165+ $message = __('Allow PHP to open external URLs');
166
167 if (ini_get('allow_url_fopen'))
168 {
169@@ -363,6 +379,21 @@
170
171 $output .= $imgWarn.$message.'<br />';
172 }
173+
174+ // Check to see if large file uploads enabled
175+ $message = 'Large File Uploads';
176+
177+ if ($this->CheckPHPUploads())
178+ {
179+ $output .= $imgGood.$message.'<br />';
180+ }
181+ else
182+ {
183+ $this->envWarning = true;
184+ $output .= $imgWarn.$message.'<br />';
185+ $output .= '<div class="check_explain"><p>' . __('You probably want to allow larger files to be uploaded than is currently available with your PHP configuration.') . '<br />';
186+ $output .= __('We suggest setting your PHP post_max_size and upload_max_size to at least 128M, and also increasing your max_execution_time to at least 120 seconds.') . '</p></div>';
187+ }
188
189 $output .= '</div>';
190
191@@ -412,7 +443,7 @@
192 */
193 function CheckPHP()
194 {
195- if (phpversion() >= '5.2.0')
196+ if (phpversion() >= '5.2.4')
197 {
198 return 1;
199 }
200@@ -489,6 +520,15 @@
201 }
202
203 /**
204+ * Check PHP has the Mcrypt functionality installed
205+ * @return
206+ */
207+ function CheckMcrypt()
208+ {
209+ return extension_loaded("mcrypt");
210+ }
211+
212+ /**
213 * Check PHP has the DOM functionality installed
214 * @return
215 */
216@@ -514,6 +554,54 @@
217 {
218 return extension_loaded("pcre");
219 }
220+
221+ /**
222+ * Check PHP is setup for large file uploads
223+ * @return
224+ */
225+ function CheckPHPUploads()
226+ {
227+ # Consider 0 - 128M warning / < 120 seconds
228+ # Variables to check:
229+ # post_max_size
230+ # upload_max_filesize
231+ # max_execution_time
232+
233+ minSize = $this->return_bytes('128M');
234+
235+ if ($this->return_bytes(ini_get('post_max_size') < minSize))
236+ {
237+ return false;
238+ }
239+
240+ if ($this->return_bytes(ini_get('upload_max_filesize') < minSize))
241+ {
242+ return false;
243+ }
244+
245+ if (ini_get('max_execution_time') < 120)
246+ {
247+ return false;
248+ }
249+
250+ return true;
251+ }
252+
253+ /**
254+ * Helper function to convert strings like 8M or 3G into bytes
255+ * by Stas Trefilov. Assumed Public Domain.
256+ * Taken from the PHP Manual (http://www.php.net/manual/en/function.ini-get.php#96996)
257+ * @return
258+ */
259+ function return_bytes($size_str)
260+ {
261+ switch (substr ($size_str, -1))
262+ {
263+ case 'M': case 'm': return (int)$size_str * 1048576;
264+ case 'K': case 'k': return (int)$size_str * 1024;
265+ case 'G': case 'g': return (int)$size_str * 1073741824;
266+ default: return $size_str;
267+ }
268+ }
269 }
270-
271-?>
272+?>
273\ No newline at end of file
274
275=== modified file 'server/install.php'
276--- server/install.php 2013-02-20 20:00:36 +0000
277+++ server/install.php 2013-04-11 16:56:27 +0000
278@@ -1,6 +1,6 @@
279 <?php
280 /*
281- * Xibo - Digitial Signage - http://www.xibo.org.uk
282+ * Xibo - Digital Signage - http://www.xibo.org.uk
283 * Copyright (C) 2009-2013 Alex Harrington
284 *
285 * This file is part of Xibo.
286
287=== modified file 'server/install/database/60.sql'
288--- server/install/database/60.sql 2013-03-02 13:15:42 +0000
289+++ server/install/database/60.sql 2013-04-11 16:56:27 +0000
290@@ -24,9 +24,9 @@
291 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
292
293 INSERT INTO `transition` (`TransitionID`, `Transition`, `Code`, `HasDuration`, `HasDirection`, `AvailableAsIn`, `AvailableAsOut`) VALUES
294-(1, 'Fade In', 'fadeIn', 1, 0, 1, 0),
295-(2, 'Fade Out', 'fadeOut', 1, 0, 0, 1),
296-(3, 'Fly', 'fly', 1, 1, 1, 1);
297+(1, 'Fade In', 'fadeIn', 1, 0, 0, 0),
298+(2, 'Fade Out', 'fadeOut', 1, 0, 0, 0),
299+(3, 'Fly', 'fly', 1, 1, 0, 0);
300
301 INSERT INTO `setting` (`settingid`, `setting`, `value`, `type`, `helptext`, `options`, `cat`, `userChange`) VALUES (NULL, 'GLOBAL_THEME_NAME', 'default', 'text', 'The Theme to apply to all pages by default', NULL, 'general', '1');
302
303@@ -36,8 +36,20 @@
304
305 UPDATE `menuitem` SET `Img` = REPLACE(Img, 'img/dashboard/', 'dashboard/') WHERE Img IS NOT NULL;
306
307-ALTER TABLE `resolution` ADD `intended_width` INT NOT NULL ,
308-ADD `intended_height` INT NOT NULL;
309+TRUNCATE TABLE `resolution`;
310+
311+ALTER TABLE `resolution` ADD `intended_width` SMALLINT NOT NULL ,
312+ADD `intended_height` SMALLINT NOT NULL;
313+
314+INSERT INTO `resolution` (`resolutionID`, `resolution`, `width`, `height`, `intended_width`, `intended_height`) VALUES
315+(1, '4:3 Monitor', 800, 600, 1024, 768),
316+(2, '3:2 Tv', 720, 480, 1440, 960),
317+(3, '16:10 Widescreen Mon', 800, 500, 1680, 1050),
318+(4, '16:9 HD Widescreen', 800, 450, 1920, 1080),
319+(5, '3:4 Monitor', 600, 800, 768, 1024),
320+(6, '2:3 Tv', 480, 720, 960, 1440),
321+(7, '10:16 Widescreen', 500, 800, 1050, 1680),
322+(8, '9:16 HD Widescreen', 450, 800, 1080, 1920);
323
324 INSERT INTO `menuitem` (`MenuID`, `PageID`, `Args`, `Text`, `Class`, `Img`, `Sequence`)
325 SELECT 9, `PageID`, NULL, 'Help Links', NULL, NULL, 6
326
327=== added file 'server/install/database/61.sql'
328--- server/install/database/61.sql 1970-01-01 00:00:00 +0000
329+++ server/install/database/61.sql 2013-04-11 16:56:27 +0000
330@@ -0,0 +1,86 @@
331+TRUNCATE TABLE `help`;
332+
333+INSERT INTO `help` (`HelpID`, `Topic`, `Category`, `Link`) VALUES
334+(1, 'Layout', 'General', 'manual/content/layout/overview.php'),
335+(2, 'Content', 'General', 'manual/content/content/types.php'),
336+(4, 'Schedule', 'General', 'manual/content/schedule/schedule_calendar.php'),
337+(5, 'Group', 'General', 'manual/content/users/groups.php'),
338+(6, 'Admin', 'General', 'manual/content/admin/settings.php'),
339+(7, 'Report', 'General', 'manual/content/admin/advanced.php'),
340+(8, 'Dashboard', 'General', 'manual/content/dashboard/dashboard.php'),
341+(9, 'User', 'General', 'manual/content/users/users.php'),
342+(10, 'Display', 'General', 'manual/content/admin/displays.php'),
343+(11, 'DisplayGroup', 'General', 'manual/content/admin/displays.php#Display_Group'),
344+(12, 'Layout', 'Add', 'manual/content/layout/addlayout.php'),
345+(13, 'Layout', 'Background', 'manual/content/layout/layoutdesigner.php#Background'),
346+(14, 'Content', 'Assign', 'manual/content/content/types.php'),
347+(15, 'Layout', 'RegionOptions', 'manual/content/layout/addregion.php'),
348+(16, 'Content', 'AddtoLibrary', 'manual/content/content/adding.php'),
349+(17, 'Display', 'Edit', 'manual/content/admin/displays.php#Display_Edit'),
350+(18, 'Display', 'Delete', 'manual/content/admin/displays.php#Display_Delete'),
351+(19, 'Displays', 'Groups', 'manual/content/admin/displays.php#Display_Group'),
352+(20, 'UserGroup', 'Add', 'manual/content/users/groups.php#Adding_Group'),
353+(21, 'User', 'Add', 'manual/content/users/users.php#Adding_User'),
354+(22, 'User', 'Delete', 'manual/content/users/users.php#Delete_User'),
355+(23, 'Content', 'Config', 'manual/content/admin/settings.php#Content'),
356+(24, 'LayoutMedia', 'Permissions', 'manual/content/layout/addlayout.php#Layout_Permission'),
357+(25, 'Region', 'Permissions', 'manual/content/layout/addregion.php#Region_Permissions'),
358+(26, 'Library', 'Assign', 'manual/content/layout/assigncontent.php#Add_From_Library'),
359+(27, 'Media', 'Delete', 'manual/content/content/types.php'),
360+(28, 'DisplayGroup', 'Add', 'manual/content/admin/displays.php#Display_Group'),
361+(29, 'DisplayGroup', 'Edit', 'manual/content/admin/displays.php#Display_Group'),
362+(30, 'DisplayGroup', 'Delete', 'manual/content/admin/displays.php#Display_Group'),
363+(31, 'DisplayGroup', 'Members', 'manual/content/admin/displays.php#Group_Members'),
364+(32, 'DisplayGroup', 'Permissions', 'manual/content/users/user_permissions.php'),
365+(34, 'Schedule', 'ScheduleNow', 'manual/content/schedule/schedule_now.php'),
366+(35, 'Layout', 'Delete', 'manual/content/layout/addlayout.php#Delete_Layout'),
367+(36, 'Layout', 'Copy', 'manual/content/layout/addlayout.php#Copy_Layout'),
368+(37, 'Schedule', 'Edit', 'manual/content/schedule/schedule_calendar.php'),
369+(38, 'Schedule', 'Add', 'manual/content/schedule/schedule_calendar.php'),
370+(39, 'Layout', 'Permissions', 'manual/content/layout/addregion.php#Region_Permissions'),
371+(40, 'Display', 'MediaInventory', 'manual/content/admin/displays.php#Media_Inventory'),
372+(41, 'User', 'ChangePassword', 'manual/content/dashboard/navbar.php#Navigation_Top'),
373+(42, 'Schedule', 'Delete', 'manual/content/schedule/schedule_event.htm'),
374+(43, 'Layout', 'Edit', 'manual/content/layout/addlayout.php#Edit_Layout'),
375+(44, 'Media', 'Permissions', 'manual/content/users/user_permissions.php'),
376+(45, 'Display', 'DefaultLayout', 'manual/content/admin/displays.php'),
377+(46, 'UserGroup', 'Edit', 'manual/content/users/groups.php#Edit_Group'),
378+(47, 'UserGroup', 'Members', 'manual/content/users/groups.php#Group_Member'),
379+(48, 'User', 'PageSecurity', 'manual/content/users/menu_page_security.php#Page_Security'),
380+(49, 'User', 'MenuSecurity', 'manual/content/users/menu_page_security.php#Menu_Security'),
381+(50, 'UserGroup', 'Delete', 'manual/content/users/groups.php#Delete_Group'),
382+(51, 'User', 'Edit', 'manual/content/users/users.php#Edit_User'),
383+(52, 'User', 'Applications', 'manual/content/users/menu_page_security.php'),
384+(53, 'User', 'SetHomepage', 'manual/content/dashboard/dashboard.php#Media_Dashboard'),
385+(54, 'DataSet', 'General', 'manual/content/layout/content_datasets.php'),
386+(55, 'DataSet', 'Add', 'manual/content/layout/content_datasets.php#Create_Dataset'),
387+(56, 'DataSet', 'Edit', 'manual/content/layout/content_datasets.php#Create_Dataset'),
388+(57, 'DataSet', 'Delete', 'manual/content/layout/content_datasets.php#Create_Dataset'),
389+(58, 'DataSet', 'AddColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
390+(59, 'DataSet', 'EditColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
391+(60, 'DataSet', 'DeleteColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
392+(61, 'DataSet', 'Data', 'manual/content/layout/content_datasets.php#Dataset_Row'),
393+(62, 'DataSet', 'Permissions', 'manual/content/users/user_permissions.php'),
394+(63, 'Fault', 'General', 'manual/content/admin/advanced.php'),
395+(64, 'Report', 'General', 'manual/content/admin/advanced.php'),
396+(65, 'Stats', 'General', 'manual/content/admin/displays.php#Display_Statistic'),
397+(66, 'Resolution', 'General', 'manual/content/templates/template_resolution.php'),
398+(67, 'Template', 'General', 'manual/content/templates/overview.php'),
399+(68, 'Services', 'Register', 'manual/content/admin/api.php'),
400+(69, 'OAuth', 'General', 'manual/content/admin/api.php'),
401+(70, 'Services', 'Log', 'manual/content/admin/advanced.php'),
402+(71, 'Module', 'Edit', 'manual/content/admin/modules.php'),
403+(72, 'Module', 'General', 'manual/content/admin/modules.php'),
404+(73, 'Campaign', 'General', 'manual/content/layout/campaign_layout.php'),
405+(74, 'License', 'General', 'manual/content/license/licenses.php'),
406+(75, 'DataSet', 'ViewColumns', 'manual/content/layout/content_datasets.php#Dataset_Column'),
407+(76, 'Campaign', 'Permissions', 'manual/content/layout/addlayout.php#Layout_Permission'),
408+(77, 'Transition', 'Edit', 'manual/content/transitions/transitions.php#Edit');
409+
410+ALTER TABLE `menuitem` ADD `External` TINYINT NOT NULL DEFAULT '0';
411+
412+UPDATE `menuitem` SET External = 1 WHERE Class = 'help_button' AND PageID = (SELECT PageID FROM `pages` WHERE name = 'manual');
413+
414+UPDATE `version` SET `app_ver` = '1.5.0', `XmdsVersion` = 3;
415+UPDATE `setting` SET `value` = 0 WHERE `setting` = 'PHONE_HOME_DATE';
416+UPDATE `version` SET `DBVersion` = '61';
417
418=== added file 'server/install/database/62.sql'
419--- server/install/database/62.sql 1970-01-01 00:00:00 +0000
420+++ server/install/database/62.sql 2013-04-11 16:56:27 +0000
421@@ -0,0 +1,7 @@
422+
423+ALTER TABLE `user` ADD `CSPRNG` TINYINT NOT NULL DEFAULT 0;
424+ALTER TABLE `user` CHANGE `UserPassword` `UserPassword` VARCHAR( 128 ) NOT NULL;
425+
426+UPDATE `version` SET `app_ver` = '1.5.0', `XmdsVersion` = 3;
427+UPDATE `setting` SET `value` = 0 WHERE `setting` = 'PHONE_HOME_DATE';
428+UPDATE `version` SET `DBVersion` = '62';
429
430=== modified file 'server/install/footer.inc'
431--- server/install/footer.inc 2009-02-18 10:06:15 +0000
432+++ server/install/footer.inc 2013-04-11 16:56:27 +0000
433@@ -1,5 +1,5 @@
434 <br />
435- <p><a href="http://www.xibo.org.uk"><img src='img/login/complogo.png'></a></p>
436+ <p><a href="http://www.xibo.org.uk"><img src='theme/default/img/login/complogo.png'></a></p>
437 </div>
438
439
440
441=== modified file 'server/install/header.inc'
442--- server/install/header.inc 2009-05-30 15:45:36 +0000
443+++ server/install/header.inc 2013-04-11 16:56:27 +0000
444@@ -4,7 +4,7 @@
445 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
446 <link rel="stylesheet" type="text/css" href="install/install.css" />
447
448- <link rel="shortcut icon" href="img/favicon.ico" />
449+ <link rel="shortcut icon" href="theme/default/img/favicon.ico" />
450
451 <script type="text/javascript">
452 $(document).ready(function(){
453
454=== modified file 'server/install/header_upgrade.inc'
455--- server/install/header_upgrade.inc 2010-09-11 14:04:46 +0000
456+++ server/install/header_upgrade.inc 2013-04-11 16:56:27 +0000
457@@ -4,7 +4,7 @@
458 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
459 <link rel="stylesheet" type="text/css" href="install/install.css" />
460
461- <link rel="shortcut icon" href="img/favicon.ico" />
462+ <link rel="shortcut icon" href="theme/default/img/favicon.ico" />
463
464 <script type="text/javascript">
465 $(document).ready(function(){
466
467=== modified file 'server/install/install.css'
468--- server/install/install.css 2009-12-31 11:38:50 +0000
469+++ server/install/install.css 2013-04-11 16:56:27 +0000
470@@ -20,7 +20,7 @@
471 body {
472 font-size:76.1%;
473 font-family:Verdana, Arial, Helvetica, sans-serif;
474- background: url(../img/headerback.png) repeat-x;
475+ background: url(../theme/default/img/headerback.png) repeat-x;
476 }
477
478 img {
479@@ -48,7 +48,7 @@
480 float:left;
481 width: 10px;
482 height: 10px;
483- background:url(../img/login/login_topleft.png) no-repeat;
484+ background:url(../theme/default/img/login/login_topleft.png) no-repeat;
485
486 }
487
488@@ -56,7 +56,7 @@
489 float:right;
490 width: 10px;
491 height: 10px;
492- background:url(../img/login/login_topright.png) no-repeat;
493+ background:url(../theme/default/img/login/login_topright.png) no-repeat;
494
495 }
496
497@@ -67,11 +67,11 @@
498
499
500 .install_body {
501- background: url(../img/login/login_body.png) repeat-x #e5f0ff;
502+ background: url(../theme/default/img/login/login_body.png) repeat-x #e5f0ff;
503 padding: 25px 0 15px 10px;
504 }
505 .install_foot{
506- background: url(../img/login/login_foot.png) repeat-x;
507+ background: url(../theme/default/img/login/login_foot.png) repeat-x;
508 height: 19px;
509 width: 500px;
510 }
511@@ -80,7 +80,7 @@
512 float:left;
513 width: 11px;
514 height: 19px;
515- background:url(../img/login/login_bottomleft.png) no-repeat;
516+ background:url(../theme/default/img/login/login_bottomleft.png) no-repeat;
517
518 }
519
520@@ -88,7 +88,7 @@
521 float:right;
522 width: 11px;
523 height: 19px;
524- background:url(../img/login/login_bottomright.png) no-repeat;
525+ background:url(../theme/default/img/login/login_bottomright.png) no-repeat;
526
527 }
528 .install_box form {
529
530=== modified file 'server/install/master/data.sql'
531--- server/install/master/data.sql 2013-02-02 15:29:45 +0000
532+++ server/install/master/data.sql 2013-04-11 16:56:27 +0000
533@@ -1,5 +1,5 @@
534 INSERT INTO `version` (`app_ver`, `XmdsVersion`, `XlfVersion`, `DBVersion`) VALUES
535-('1.4.2', 3, 1, 52);
536+('1.5.0', 3, 1, 62);
537
538 INSERT INTO `group` (`groupID`, `group`, `IsUserSpecific`, `IsEveryone`) VALUES
539 (1, 'Users', 0, 0),
540@@ -7,76 +7,81 @@
541 (3, 'xibo_admin', 1, 0);
542
543 INSERT INTO `help` (`HelpID`, `Topic`, `Category`, `Link`) VALUES
544-(1, 'Layout', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts'),
545-(2, 'Content', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Media#The_Library'),
546-(4, 'Schedule', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Scheduling'),
547-(5, 'Group', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Groups'),
548-(6, 'Admin', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Settings'),
549-(7, 'Report', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Log'),
550-(8, 'Dashboard', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Overview#Dashboard'),
551-(9, 'User', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users'),
552-(10, 'Display', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays'),
553-(11, 'DisplayGroup', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Groups'),
554-(12, 'Layout', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Adding_Layouts'),
555-(13, 'Layout', 'Background', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Changing_the_Background'),
556-(14, 'Content', 'Assign', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Library'),
557-(15, 'Layout', 'RegionOptions', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Assigning_Media'),
558-(16, 'Content', 'AddtoLibrary', 'http://wiki.xibo.org.uk/wiki/Manual:Media#Add_Media'),
559-(17, 'Display', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Edit'),
560-(18, 'Display', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Delete'),
561-(19, 'Displays', 'Groups', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Groups'),
562-(20, 'UserGroup', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Add_Group'),
563-(21, 'User', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Add'),
564-(22, 'User', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Delete'),
565-(23, 'Content', 'Config', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Settings'),
566-(24, 'LayoutMedia', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Permissions'),
567-(25, 'Region', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#Region_Permissions'),
568-(26, 'Library', 'Assign', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Design#AssigningFromLibrary'),
569-(27, 'Media', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Media#Retire_Media'),
570-(28, 'DisplayGroup', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:DisplayGroups#Add'),
571-(29, 'DisplayGroup', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:DisplayGroups#Edit'),
572-(30, 'DisplayGroup', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:DisplayGroups#Delete'),
573-(31, 'DisplayGroup', 'Members', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:DisplayGroups#Members'),
574-(32, 'DisplayGroup', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:DisplayGroups#GroupSecurity'),
575-(34, 'Schedule', 'ScheduleNow', 'http://wiki.xibo.org.uk/wiki/Manual:Scheduling#Schedule_Now'),
576-(35, 'Layout', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Management#Deleting_or_Retiring_Layouts'),
577-(36, 'Layout', 'Copy', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Management#Copying_Layouts'),
578-(37, 'Schedule', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Scheduling#Editing_Schedules'),
579-(38, 'Schedule', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Scheduling#Scheduling_Layouts'),
580-(39, 'Layout', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Management#Layout_Permissions'),
581-(40, 'Display', 'MediaInventory', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Client_Media_Inventory'),
582-(41, 'User', 'ChangePassword', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Changing_Password'),
583-(42, 'Schedule', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Scheduling#Deleting_Events'),
584-(43, 'Layout', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Management#Editing_Layouts'),
585-(44, 'Media', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Media#Permissions'),
586-(45, 'Display', 'DefaultLayout', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Default_Layout'),
587-(46, 'UserGroup', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Edit_Group'),
588-(47, 'UserGroup', 'Members', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Group_Membership'),
589-(48, 'User', 'PageSecurity', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Page_Security'),
590-(49, 'User', 'MenuSecurity', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Menu_Security'),
591-(50, 'UserGroup', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Group_Delete'),
592-(51, 'User', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Edit'),
593-(52, 'User', 'Applications', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Applications'),
594-(53, 'User', 'SetHomepage', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Users#Set_Homepage'),
595-(54, 'DataSet', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets'),
596-(55, 'DataSet', 'Add', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Adding_DataSets'),
597-(56, 'DataSet', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Editing_Datasets'),
598-(57, 'DataSet', 'Delete', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Deleting_DataSets'),
599-(58, 'DataSet', 'AddColumn', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Adding_Columns'),
600-(59, 'DataSet', 'EditColumn', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Editing_Columns'),
601-(60, 'DataSet', 'DeleteColumn', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Deleting_Columns'),
602-(61, 'DataSet', 'Data', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Adding_Data'),
603-(62, 'DataSet', 'Permissions', 'http://wiki.xibo.org.uk/wiki/Manual:Media:DataSets#Permissions'),
604-(63, 'Fault', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Debug#ReportFault'),
605-(64, 'Report', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Debug#ReportFault'),
606-(65, 'Stats', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Displays#Stats'),
607-(66, 'Resolution', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Administration:Resolutions'),
608-(67, 'Template', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Layouts:Templates'),
609-(68, 'Services', 'Register', 'http://wiki.xibo.org.uk/wiki/Manual:Applications#Adding_Applications'),
610-(69, 'OAuth', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Applications'),
611-(70, 'Services', 'Log', 'http://wiki.xibo.org.uk/wiki/Manual:Applications#View_Log'),
612-(71, 'Module', 'Edit', 'http://wiki.xibo.org.uk/wiki/Manual:Media#Module_Config'),
613-(72, 'Module', 'General', 'http://wiki.xibo.org.uk/wiki/Manual:Media#Editing_Module_Config');
614+(1, 'Layout', 'General', 'manual/content/layout/overview.php'),
615+(2, 'Content', 'General', 'manual/content/content/types.php'),
616+(4, 'Schedule', 'General', 'manual/content/schedule/schedule_calendar.php'),
617+(5, 'Group', 'General', 'manual/content/users/groups.php'),
618+(6, 'Admin', 'General', 'manual/content/admin/settings.php'),
619+(7, 'Report', 'General', 'manual/content/admin/advanced.php'),
620+(8, 'Dashboard', 'General', 'manual/content/dashboard/dashboard.php'),
621+(9, 'User', 'General', 'manual/content/users/users.php'),
622+(10, 'Display', 'General', 'manual/content/admin/displays.php'),
623+(11, 'DisplayGroup', 'General', 'manual/content/admin/displays.php#Display_Group'),
624+(12, 'Layout', 'Add', 'manual/content/layout/addlayout.php'),
625+(13, 'Layout', 'Background', 'manual/content/layout/layoutdesigner.php#Background'),
626+(14, 'Content', 'Assign', 'manual/content/content/types.php'),
627+(15, 'Layout', 'RegionOptions', 'manual/content/layout/addregion.php'),
628+(16, 'Content', 'AddtoLibrary', 'manual/content/content/adding.php'),
629+(17, 'Display', 'Edit', 'manual/content/admin/displays.php#Display_Edit'),
630+(18, 'Display', 'Delete', 'manual/content/admin/displays.php#Display_Delete'),
631+(19, 'Displays', 'Groups', 'manual/content/admin/displays.php#Display_Group'),
632+(20, 'UserGroup', 'Add', 'manual/content/users/groups.php#Adding_Group'),
633+(21, 'User', 'Add', 'manual/content/users/users.php#Adding_User'),
634+(22, 'User', 'Delete', 'manual/content/users/users.php#Delete_User'),
635+(23, 'Content', 'Config', 'manual/content/admin/settings.php#Content'),
636+(24, 'LayoutMedia', 'Permissions', 'manual/content/layout/addlayout.php#Layout_Permission'),
637+(25, 'Region', 'Permissions', 'manual/content/layout/addregion.php#Region_Permissions'),
638+(26, 'Library', 'Assign', 'manual/content/layout/assigncontent.php#Add_From_Library'),
639+(27, 'Media', 'Delete', 'manual/content/content/types.php'),
640+(28, 'DisplayGroup', 'Add', 'manual/content/admin/displays.php#Display_Group'),
641+(29, 'DisplayGroup', 'Edit', 'manual/content/admin/displays.php#Display_Group'),
642+(30, 'DisplayGroup', 'Delete', 'manual/content/admin/displays.php#Display_Group'),
643+(31, 'DisplayGroup', 'Members', 'manual/content/admin/displays.php#Group_Members'),
644+(32, 'DisplayGroup', 'Permissions', 'manual/content/users/user_permissions.php'),
645+(34, 'Schedule', 'ScheduleNow', 'manual/content/schedule/schedule_now.php'),
646+(35, 'Layout', 'Delete', 'manual/content/layout/addlayout.php#Delete_Layout'),
647+(36, 'Layout', 'Copy', 'manual/content/layout/addlayout.php#Copy_Layout'),
648+(37, 'Schedule', 'Edit', 'manual/content/schedule/schedule_calendar.php'),
649+(38, 'Schedule', 'Add', 'manual/content/schedule/schedule_calendar.php'),
650+(39, 'Layout', 'Permissions', 'manual/content/layout/addregion.php#Region_Permissions'),
651+(40, 'Display', 'MediaInventory', 'manual/content/admin/displays.php#Media_Inventory'),
652+(41, 'User', 'ChangePassword', 'manual/content/dashboard/navbar.php#Navigation_Top'),
653+(42, 'Schedule', 'Delete', 'manual/content/schedule/schedule_event.htm'),
654+(43, 'Layout', 'Edit', 'manual/content/layout/addlayout.php#Edit_Layout'),
655+(44, 'Media', 'Permissions', 'manual/content/users/user_permissions.php'),
656+(45, 'Display', 'DefaultLayout', 'manual/content/admin/displays.php'),
657+(46, 'UserGroup', 'Edit', 'manual/content/users/groups.php#Edit_Group'),
658+(47, 'UserGroup', 'Members', 'manual/content/users/groups.php#Group_Member'),
659+(48, 'User', 'PageSecurity', 'manual/content/users/menu_page_security.php#Page_Security'),
660+(49, 'User', 'MenuSecurity', 'manual/content/users/menu_page_security.php#Menu_Security'),
661+(50, 'UserGroup', 'Delete', 'manual/content/users/groups.php#Delete_Group'),
662+(51, 'User', 'Edit', 'manual/content/users/users.php#Edit_User'),
663+(52, 'User', 'Applications', 'manual/content/users/menu_page_security.php'),
664+(53, 'User', 'SetHomepage', 'manual/content/dashboard/dashboard.php#Media_Dashboard'),
665+(54, 'DataSet', 'General', 'manual/content/layout/content_datasets.php'),
666+(55, 'DataSet', 'Add', 'manual/content/layout/content_datasets.php#Create_Dataset'),
667+(56, 'DataSet', 'Edit', 'manual/content/layout/content_datasets.php#Create_Dataset'),
668+(57, 'DataSet', 'Delete', 'manual/content/layout/content_datasets.php#Create_Dataset'),
669+(58, 'DataSet', 'AddColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
670+(59, 'DataSet', 'EditColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
671+(60, 'DataSet', 'DeleteColumn', 'manual/content/layout/content_datasets.php#Dataset_Column'),
672+(61, 'DataSet', 'Data', 'manual/content/layout/content_datasets.php#Dataset_Row'),
673+(62, 'DataSet', 'Permissions', 'manual/content/users/user_permissions.php'),
674+(63, 'Fault', 'General', 'manual/content/admin/advanced.php'),
675+(64, 'Report', 'General', 'manual/content/admin/advanced.php'),
676+(65, 'Stats', 'General', 'manual/content/admin/displays.php#Display_Statistic'),
677+(66, 'Resolution', 'General', 'manual/content/templates/template_resolution.php'),
678+(67, 'Template', 'General', 'manual/content/templates/overview.php'),
679+(68, 'Services', 'Register', 'manual/content/admin/api.php'),
680+(69, 'OAuth', 'General', 'manual/content/admin/api.php'),
681+(70, 'Services', 'Log', 'manual/content/admin/advanced.php'),
682+(71, 'Module', 'Edit', 'manual/content/admin/modules.php'),
683+(72, 'Module', 'General', 'manual/content/admin/modules.php'),
684+(73, 'Campaign', 'General', 'manual/content/layout/campaign_layout.php'),
685+(74, 'License', 'General', 'manual/content/license/licenses.php'),
686+(75, 'DataSet', 'ViewColumns', 'manual/content/layout/content_datasets.php#Dataset_Column'),
687+(76, 'Campaign', 'Permissions', 'manual/content/layout/addlayout.php#Layout_Permission'),
688+(77, 'Transition', 'Edit', 'manual/content/transitions/transitions.php#Edit');
689
690 INSERT INTO `menu` (`MenuID`, `Menu`) VALUES
691 (8, 'Administration Menu'),
692@@ -88,19 +93,19 @@
693 (1, 'Top Nav');
694
695 INSERT INTO `module` (`ModuleID`, `Module`, `Name`, `Enabled`, `RegionSpecific`, `Description`, `ImageUri`, `SchemaVersion`, `ValidExtensions`, `PreviewEnabled`) VALUES
696-(1, 'Image', 'Image', 1, 0, 'Images. PNG, JPG, BMP, GIF', 'img/forms/image.gif', 1, 'jpg,jpeg,png,bmp,gif', 1),
697-(2, 'Video', 'Video', 1, 0, 'Videos. WMV.', 'img/forms/video.gif', 1, 'wmv,avi,mpg,mpeg', 1),
698-(3, 'Flash', 'Flash', 1, 0, 'Flash', 'img/forms/flash.gif', 1, 'swf', 1),
699-(4, 'PowerPoint', 'PowerPoint', 1, 0, 'Powerpoint. PPT, PPS', 'img/forms/powerpoint.gif', 1, 'ppt,pps,pptx', 1),
700-(5, 'Webpage', 'Webpage', 1, 1, 'Webpages.', 'img/forms/webpage.gif', 1, NULL, 1),
701-(6, 'Ticker', 'Ticker', 1, 1, 'RSS Ticker.', 'img/forms/ticker.gif', 1, NULL, 1),
702-(7, 'Text', 'Text', 1, 1, 'Text. With Directional Controls.', 'img/forms/text.gif', 1, NULL, 1),
703-(8, 'Embedded', 'Embedded', 1, 1, 'Embedded HTML', 'img/forms/webpage.gif', 1, NULL, 1),
704-(9, 'MicroBlog', 'MicroBlog', 1, 1, NULL, 'img/forms/microblog.gif', 1, NULL, 1),
705-(10, 'Counter', 'Counter', 1, 1, 'Customer Counter connected to a Remote Control', 'img/forms/counter.gif', 1, NULL, 1),
706-(11, 'datasetview', 'Data Set', 1, 1, 'A view on a DataSet', 'img/forms/datasetview.gif', 1, NULL, 1),
707-(12, 'shellcommand', 'Shell Command', 1, 1, 'Execute a shell command on the client', 'img/forms/shellcommand.gif', 1, NULL, 1),
708-(13, 'localvideo', 'Local Video', 0, 1, 'Play a video locally stored on the client', 'img/forms/video.gif', 1, NULL, 1);
709+(1, 'Image', 'Image', 1, 0, 'Images. PNG, JPG, BMP, GIF', 'forms/image.gif', 1, 'jpg,jpeg,png,bmp,gif', 1),
710+(2, 'Video', 'Video', 1, 0, 'Videos. WMV.', 'forms/video.gif', 1, 'wmv,avi,mpg,mpeg', 1),
711+(3, 'Flash', 'Flash', 1, 0, 'Flash', 'forms/flash.gif', 1, 'swf', 1),
712+(4, 'PowerPoint', 'PowerPoint', 1, 0, 'Powerpoint. PPT, PPS', 'forms/powerpoint.gif', 1, 'ppt,pps,pptx', 1),
713+(5, 'Webpage', 'Webpage', 1, 1, 'Webpages.', 'forms/webpage.gif', 1, NULL, 1),
714+(6, 'Ticker', 'Ticker', 1, 1, 'RSS Ticker.', 'forms/ticker.gif', 1, NULL, 1),
715+(7, 'Text', 'Text', 1, 1, 'Text. With Directional Controls.', 'forms/text.gif', 1, NULL, 1),
716+(8, 'Embedded', 'Embedded', 1, 1, 'Embedded HTML', 'forms/webpage.gif', 1, NULL, 1),
717+(9, 'MicroBlog', 'MicroBlog', 1, 1, NULL, 'forms/microblog.gif', 1, NULL, 1),
718+(10, 'Counter', 'Counter', 1, 1, 'Customer Counter connected to a Remote Control', 'forms/counter.gif', 1, NULL, 1),
719+(11, 'datasetview', 'Data Set', 1, 1, 'A view on a DataSet', 'forms/datasetview.gif', 1, NULL, 1),
720+(12, 'shellcommand', 'Shell Command', 1, 1, 'Execute a shell command on the client', 'forms/shellcommand.gif', 1, NULL, 1),
721+(13, 'localvideo', 'Local Video', 0, 1, 'Play a video locally stored on the client', 'forms/video.gif', 1, NULL, 1);
722
723 INSERT INTO `pagegroup` (`pagegroupID`, `pagegroup`) VALUES
724 (1, 'Schedule'),
725@@ -126,7 +131,7 @@
726 (12, 'update', 11),
727 (14, 'admin', 10),
728 (15, 'group', 8),
729-(16, 'report', 9),
730+(16, 'log', 9),
731 (17, 'user', 8),
732 (18, 'license', 10),
733 (19, 'index', 2),
734@@ -143,51 +148,57 @@
735 (34, 'help', 2),
736 (35, 'clock', 2),
737 (36, 'dataset', 14),
738-(37, 'campaign', 3);
739-
740-INSERT INTO `menuitem` (`MenuItemID`, `MenuID`, `PageID`, `Args`, `Text`, `Class`, `Img`, `Sequence`) VALUES
741-(1, 1, 2, NULL, 'Schedule', NULL, NULL, 1),
742-(2, 1, 5, NULL, 'Design', NULL, NULL, 2),
743-(3, 1, 7, NULL, 'Library', NULL, NULL, 3),
744-(4, 1, 17, NULL, 'Administration', NULL, NULL, 5),
745-(7, 7, 11, NULL, 'Displays', NULL, NULL, 1),
746-(8, 8, 15, NULL, 'User Groups', NULL, NULL, 2),
747-(9, 8, 17, NULL, 'Users', NULL, NULL, 1),
748-(10, 9, 16, 'sp=log', 'Log', NULL, NULL, 1),
749-(11, 9, 18, NULL, 'License', NULL, NULL, 4),
750-(12, 9, 16, 'sp=sessions', 'Sessions', NULL, NULL, 2),
751-(13, 8, 14, NULL, 'Settings', NULL, NULL, 3),
752-(14, 2, 2, 'sp=month', 'Schedule', 'schedule_button', 'img/dashboard/scheduleview.png', 1),
753-(15, 2, 5, NULL, 'Layouts', 'playlist_button', 'img/dashboard/presentations.png', 2),
754-(16, 2, 7, NULL, 'Library', 'content_button', 'img/dashboard/content.png', 3),
755-(17, 2, 25, NULL, 'Templates', 'layout_button', 'img/dashboard/layouts.png', 4),
756-(18, 2, 17, NULL, 'Users', 'user_button', 'img/dashboard/users.png', 5),
757-(19, 2, 14, NULL, 'Settings', 'settings_button', 'img/dashboard/settings.png', 6),
758-(20, 2, 18, NULL, 'License', 'license_button', 'img/dashboard/license.png', 7),
759-(22, 9, 26, NULL, 'Report Fault', NULL, NULL, 3),
760-(23, 7, 27, NULL, 'Statistics', NULL, NULL, 3),
761-(24, 2, 28, 'http://wiki.xibo.org.uk/wiki/Manual:TOC', 'Manual', 'help_button', 'img/dashboard/help.png', 10),
762-(25, 6, 29, NULL, 'Resolutions', NULL, NULL, 4),
763-(26, 6, 25, NULL, 'Templates', NULL, NULL, 3),
764-(27, 7, 32, NULL, 'Display Groups', NULL, NULL, 2),
765-(28, 8, 33, NULL, 'Applications', NULL, NULL, 4),
766-(29, 5, 36, NULL, 'DataSets', NULL, NULL, 2),
767-(30, 5, 7, NULL, 'Media', NULL, NULL, 1),
768-(33, 6, 5, NULL, 'Layouts', NULL, NULL, 2),
769-(34, 1, 11, NULL, 'Displays', NULL, NULL, 4),
770-(35, 1, 16, 'sp=log', 'Advanced', NULL, NULL, 6),
771-(36, 8, 24, NULL, 'Modules', NULL, NULL, 5),
772-(37, 6, 37, NULL, 'Campaigns', NULL, NULL, 1);
773-
774-INSERT INTO `resolution` (`resolutionID`, `resolution`, `width`, `height`) VALUES
775-(1, '4:3 Monitor', 800, 600),
776-(2, '3:2 Tv', 720, 480),
777-(3, '16:10 Widescreen Mon', 800, 500),
778-(4, '16:9 HD Widescreen', 800, 450),
779-(5, '3:4 Monitor', 600, 800),
780-(6, '2:3 Tv', 480, 720),
781-(7, '10:16 Widescreen', 500, 800),
782-(8, '9:16 HD Widescreen', 450, 800);
783+(37, 'campaign', 3),
784+(38, 'transition', 4),
785+(39, 'timeline', 3),
786+(40, 'sessions', 9);
787+
788+INSERT INTO `menuitem` (`MenuItemID`, `MenuID`, `PageID`, `Args`, `Text`, `Class`, `Img`, `Sequence`, `External`) VALUES
789+(1, 1, 2, NULL, 'Schedule', NULL, NULL, 1, 0),
790+(2, 1, 5, NULL, 'Design', NULL, NULL, 2, 0),
791+(3, 1, 7, NULL, 'Library', NULL, NULL, 3, 0),
792+(4, 1, 17, NULL, 'Administration', NULL, NULL, 5, 0),
793+(7, 7, 11, NULL, 'Displays', NULL, NULL, 1, 0),
794+(8, 8, 15, NULL, 'User Groups', NULL, NULL, 2, 0),
795+(9, 8, 17, NULL, 'Users', NULL, NULL, 1, 0),
796+(10, 9, 16, NULL, 'Log', NULL, NULL, 1, 0),
797+(11, 9, 18, NULL, 'About', NULL, NULL, 4, 0),
798+(12, 9, 40, NULL, 'Sessions', NULL, NULL, 2, 0),
799+(13, 8, 14, NULL, 'Settings', NULL, NULL, 3, 0),
800+(14, 2, 2, 'sp=month', 'Schedule', 'schedule_button', 'dashboard/scheduleview.png', 1, 0),
801+(15, 2, 5, NULL, 'Layouts', 'playlist_button', 'dashboard/presentations.png', 2, 0),
802+(16, 2, 7, NULL, 'Library', 'content_button', 'dashboard/content.png', 3, 0),
803+(17, 2, 25, NULL, 'Templates', 'layout_button', 'dashboard/layouts.png', 4, 0),
804+(18, 2, 17, NULL, 'Users', 'user_button', 'dashboard/users.png', 5, 0),
805+(19, 2, 14, NULL, 'Settings', 'settings_button', 'dashboard/settings.png', 6, 0),
806+(20, 2, 18, NULL, 'About', 'license_button', 'dashboard/license.png', 7, 0),
807+(22, 9, 26, NULL, 'Report Fault', NULL, NULL, 3, 0),
808+(23, 7, 27, NULL, 'Statistics', NULL, NULL, 3, 0),
809+(24, 2, 28, 'manual/index.php', 'Manual', 'help_button', 'dashboard/help.png', 10, 1),
810+(25, 6, 29, NULL, 'Resolutions', NULL, NULL, 4, 0),
811+(26, 6, 25, NULL, 'Templates', NULL, NULL, 3, 0),
812+(27, 7, 32, NULL, 'Display Groups', NULL, NULL, 2, 0),
813+(28, 8, 33, NULL, 'Applications', NULL, NULL, 4, 0),
814+(29, 5, 36, NULL, 'DataSets', NULL, NULL, 2, 0),
815+(30, 5, 7, NULL, 'Media', NULL, NULL, 1, 0),
816+(33, 6, 5, NULL, 'Layouts', NULL, NULL, 2, 0),
817+(34, 1, 11, NULL, 'Displays', NULL, NULL, 4, 0),
818+(35, 1, 16, NULL, 'Advanced', NULL, NULL, 6, 0),
819+(36, 8, 24, NULL, 'Modules', NULL, NULL, 5, 0),
820+(37, 6, 37, NULL, 'Campaigns', NULL, NULL, 1, 0),
821+(38, 8, 38, NULL, 'Transitions', NULL, NULL, 6, 0),
822+(39, 9, 30, NULL, 'Help Links', NULL, NULL, 6, 0);
823+
824+
825+INSERT INTO `resolution` (`resolutionID`, `resolution`, `width`, `height`, `intended_width`, `intended_height`) VALUES
826+(1, '4:3 Monitor', 800, 600, 1024, 768),
827+(2, '3:2 Tv', 720, 480, 1440, 960),
828+(3, '16:10 Widescreen Mon', 800, 500, 1680, 1050),
829+(4, '16:9 HD Widescreen', 800, 450, 1920, 1080),
830+(5, '3:4 Monitor', 600, 800, 768, 1024),
831+(6, '2:3 Tv', 480, 720, 960, 1440),
832+(7, '10:16 Widescreen', 500, 800, 1050, 1680),
833+(8, '9:16 HD Widescreen', 450, 800, 1080, 1920);
834
835 INSERT INTO `setting` (`settingid`, `setting`, `value`, `type`, `helptext`, `options`, `cat`, `userChange`) VALUES
836 (1, 'MEDIA_DEFAULT', 'private', 'dropdown', 'Media will be created with these settings. If public everyone will be able to view and use this media.', 'private|public', 'default', 1),
837@@ -234,8 +245,9 @@
838 (58, 'MODULE_CONFIG_LOCKED_CHECKB', 'Unchecked', 'dropdown', 'Is the module config locked? Useful for Service providers.', 'Checked|Unchecked', 'general', 0),
839 (59, 'LIBRARY_SIZE_LIMIT_KB', '0', 'text', 'The Limit for the Library Size in KB', NULL, 'content', 0),
840 (60, 'MONTHLY_XMDS_TRANSFER_LIMIT_KB', '0', 'text', 'XMDS Transfer Limit in KB/month', NULL, 'general', 0),
841-(61, 'DEFAULT_LANGUAGE', 'en_GB', 'text', 'The default language to use', NULL, 'general', 1);
842-
843+(61, 'DEFAULT_LANGUAGE', 'en_GB', 'text', 'The default language to use', NULL, 'general', 1),
844+(62, 'TRANSITION_CONFIG_LOCKED_CHECKB', 'Unchecked', 'dropdown', 'Is the Transition config locked?', 'Checked|Unchecked', 'general', 0),
845+(63, 'GLOBAL_THEME_NAME', 'default', 'text', 'The Theme to apply to all pages by default', NULL, 'general', 1);
846
847 INSERT INTO `usertype` (`usertypeid`, `usertype`) VALUES
848 (1, 'Super Admin'),
849@@ -299,3 +311,8 @@
850
851 INSERT INTO `lkusergroup` (`LkUserGroupID`, `GroupID`, `UserID`) VALUES
852 (10, 3, 1);
853+
854+INSERT INTO `transition` (`TransitionID`, `Transition`, `Code`, `HasDuration`, `HasDirection`, `AvailableAsIn`, `AvailableAsOut`) VALUES
855+(1, 'Fade In', 'fadeIn', 1, 0, 0, 0),
856+(2, 'Fade Out', 'fadeOut', 1, 0, 0, 0),
857+(3, 'Fly', 'fly', 1, 1, 1, 0);
858\ No newline at end of file
859
860=== modified file 'server/install/master/structure.sql'
861--- server/install/master/structure.sql 2013-02-02 15:29:45 +0000
862+++ server/install/master/structure.sql 2013-04-11 16:56:27 +0000
863@@ -117,7 +117,7 @@
864 `Category` varchar(254) NOT NULL DEFAULT 'General',
865 `Link` varchar(254) NOT NULL,
866 PRIMARY KEY (`HelpID`)
867-) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ;
868+) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=78 ;
869
870 CREATE TABLE IF NOT EXISTS `layout` (
871 `layoutID` int(11) NOT NULL AUTO_INCREMENT,
872@@ -329,10 +329,11 @@
873 `Class` varchar(50) DEFAULT NULL,
874 `Img` varchar(254) DEFAULT NULL,
875 `Sequence` smallint(6) NOT NULL DEFAULT '1',
876+ `External` tinyint(4) NOT NULL DEFAULT '0',
877 PRIMARY KEY (`MenuItemID`),
878 KEY `PageID` (`PageID`),
879 KEY `MenuID` (`MenuID`)
880-) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=38 ;
881+) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=40 ;
882
883 CREATE TABLE IF NOT EXISTS `module` (
884 `ModuleID` int(11) NOT NULL AUTO_INCREMENT,
885@@ -434,13 +435,15 @@
886 `pagegroupID` int(11) NOT NULL,
887 PRIMARY KEY (`pageID`),
888 KEY `pagegroupID` (`pagegroupID`)
889-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Available Pages' AUTO_INCREMENT=38 ;
890+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Available Pages' AUTO_INCREMENT=40 ;
891
892 CREATE TABLE IF NOT EXISTS `resolution` (
893 `resolutionID` int(11) NOT NULL AUTO_INCREMENT,
894 `resolution` varchar(20) NOT NULL,
895 `width` smallint(6) NOT NULL,
896 `height` smallint(6) NOT NULL,
897+ `intended_width` smallint(6) NOT NULL,
898+ `intended_height` smallint(6) NOT NULL,
899 PRIMARY KEY (`resolutionID`)
900 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Supported Resolutions' AUTO_INCREMENT=9 ;
901
902@@ -532,16 +535,28 @@
903 KEY `userID` (`userID`)
904 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Templates for use on Layouts' AUTO_INCREMENT=9 ;
905
906+CREATE TABLE IF NOT EXISTS `transition` (
907+ `TransitionID` int(11) NOT NULL AUTO_INCREMENT,
908+ `Transition` varchar(254) NOT NULL,
909+ `Code` varchar(50) NOT NULL,
910+ `HasDuration` tinyint(4) NOT NULL,
911+ `HasDirection` tinyint(4) NOT NULL,
912+ `AvailableAsIn` tinyint(4) NOT NULL,
913+ `AvailableAsOut` tinyint(4) NOT NULL,
914+ PRIMARY KEY (`TransitionID`)
915+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
916+
917 CREATE TABLE IF NOT EXISTS `user` (
918 `UserID` int(11) NOT NULL AUTO_INCREMENT,
919 `usertypeid` int(8) NOT NULL,
920- `UserName` varchar(15) CHARACTER SET latin1 NOT NULL,
921- `UserPassword` varchar(32) CHARACTER SET latin1 NOT NULL,
922+ `UserName` varchar(15) NOT NULL,
923+ `UserPassword` varchar(128) NOT NULL,
924 `loggedin` tinyint(1) NOT NULL DEFAULT '0',
925 `lastaccessed` datetime DEFAULT NULL,
926- `email` varchar(50) CHARACTER SET latin1 DEFAULT NULL COMMENT 'The users email address',
927+ `email` varchar(50) DEFAULT NULL COMMENT 'The users email address',
928 `homepage` varchar(254) NOT NULL DEFAULT 'dashboard.php' COMMENT 'The users homepage',
929 `Retired` tinyint(4) NOT NULL DEFAULT '0',
930+ `CSPRNG` tinyint(4) NOT NULL DEFAULT '0',
931 PRIMARY KEY (`UserID`),
932 KEY `usertypeid` (`usertypeid`)
933 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
934
935=== modified file 'server/lib/app/app_functions.php'
936--- server/lib/app/app_functions.php 2013-03-04 22:01:30 +0000
937+++ server/lib/app/app_functions.php 2013-04-11 16:56:27 +0000
938@@ -40,6 +40,14 @@
939 $_SESSION['message'] = $message;
940 }
941
942+function getMessage() {
943+ $message = Kit::GetParam('message', _SESSION, _STRING, '');
944+
945+ unset($_SESSION['message']);
946+
947+ return $message;
948+}
949+
950 // Returns a drop down list based on the provided SQL - the ID should be the first field, and the name the second
951 function dropdownlist($SQL, $list_name, $selected = "", $callback = "", $flat_list = false, $checkPermissions = false, $userid = "", $permissionLevel = "see", $useQueryId = false) {
952 global $db;
953@@ -285,7 +293,7 @@
954 for($k=0; $k<6; $k++)
955 {
956 $c = $cs[$i] .$cs[$j] .$cs[$k];
957- $colors[] = array('colorid' => $c, 'color' => '#' . $c);
958+ $colors[] = array('colorid' => $c, 'color' => '#' . $c, 'style' => 'background-color:#' . $c . ';color:#' . $c);
959 }
960 }
961 }
962
963=== modified file 'server/lib/app/debug.class.php'
964--- server/lib/app/debug.class.php 2010-05-11 19:50:54 +0000
965+++ server/lib/app/debug.class.php 2013-04-11 16:56:27 +0000
966@@ -118,7 +118,7 @@
967 $from = Config::GetSetting($db, "mail_from");
968 if ($from == "") return true;
969
970- $subject = "Error message from Xibo";
971+ $subject = "Error message from Digital Signage System";
972 $message = wordwrap("$errmsg\n$err");
973
974 $headers = "From: $from" . "\r\n" . "Reply-To: $from" . "\r\n" .
975
976=== modified file 'server/lib/app/responsemanager.class.php'
977--- server/lib/app/responsemanager.class.php 2013-02-24 18:52:30 +0000
978+++ server/lib/app/responsemanager.class.php 2013-04-11 16:56:27 +0000
979@@ -1,7 +1,7 @@
980 <?php
981 /*
982 * Xibo - Digitial Signage - http://www.xibo.org.uk
983- * Copyright (C) 2006-2012 Daniel Garner
984+ * Copyright (C) 2006-2013 Daniel Garner
985 *
986 * This file is part of Xibo.
987 *
988@@ -32,9 +32,9 @@
989
990 public $sortable;
991 public $sortingDiv;
992- public $paging;
993- public $pageSize;
994- public $pageNumber;
995+ public $paging;
996+ public $pageSize;
997+ public $pageNumber;
998 public $initialSortColumn;
999 public $initialSortOrder;
1000
1001@@ -50,12 +50,13 @@
1002 public $refresh;
1003 public $refreshLocation;
1004 public $focusInFirstInput;
1005- public $appendHiddenSubmit;
1006+ public $appendHiddenSubmit;
1007+ public $modal;
1008
1009 public $login;
1010 public $clockUpdate;
1011
1012- public $uniqueReference;
1013+ public $uniqueReference;
1014
1015 public function __construct()
1016 {
1017@@ -73,6 +74,7 @@
1018 $this->pageNumber = 0;
1019 $this->initialSortColumn = 1;
1020 $this->initialSortOrder = 1;
1021+ $this->modal = false;
1022
1023 return true;
1024 }
1025@@ -259,6 +261,7 @@
1026 $response['refresh'] = $this->refresh;
1027 $response['refreshLocation']= $this->refreshLocation;
1028 $response['focusInFirstInput']= $this->focusInFirstInput;
1029+ $response['modal'] = $this->modal;
1030
1031 // Login
1032 $response['login'] = $this->login;
1033
1034=== modified file 'server/lib/app/session.class.php'
1035--- server/lib/app/session.class.php 2012-09-27 14:04:35 +0000
1036+++ server/lib/app/session.class.php 2013-04-11 16:56:27 +0000
1037@@ -76,11 +76,10 @@
1038 $this->gc($this->max_lifetime);
1039
1040 // Get this session
1041- $SQL = " SELECT session_data, IsExpired, SecurityToken FROM session ";
1042+ $SQL = " SELECT session_data, IsExpired, SecurityToken, UserAgent FROM session ";
1043 $SQL .= " WHERE session_id = '%s' ";
1044- $SQL .= " AND UserAgent = '%s' ";
1045
1046- $SQL = sprintf($SQL, $db->escape_string($key), $db->escape_string($userAgent));
1047+ $SQL = sprintf($SQL, $db->escape_string($key));
1048
1049 $result = $db->query($SQL);
1050
1051@@ -88,6 +87,15 @@
1052 {
1053 // Get the row
1054 $row = $db->get_row($result);
1055+
1056+ // What happens if the UserAgent has changed?
1057+ if ($row[3] != $userAgent) {
1058+ // Make sure we are logged out (delete all data)
1059+ $db->query(sprintf("DELETE FROM session WHERE session_id = '%s' ", $db->escape_string($key)));
1060+
1061+ $empty = '';
1062+ return settype($empty, "string");
1063+ }
1064
1065 // We have the Key and the Remote Address.
1066 if ($securityToken == null)
1067
1068=== modified file 'server/lib/app/thememanager.class.php'
1069--- server/lib/app/thememanager.class.php 2013-03-04 20:20:04 +0000
1070+++ server/lib/app/thememanager.class.php 2013-04-11 16:56:27 +0000
1071@@ -31,6 +31,7 @@
1072 private $name = '';
1073 private $pageName = '';
1074 private $vars = null;
1075+ private $config = null;
1076
1077 public function __construct(database $db, user $user) {
1078
1079@@ -52,17 +53,24 @@
1080 // Store the theme name for later
1081 $this->name = $globalTheme;
1082
1083- static::$instance = $this;
1084+ // Get config
1085+ if (!file_exists('theme/' . $this->name . '/config.php'))
1086+ throw new Exception(__('The theme "%s" config file does not exist', $globalTheme));
1087+
1088+ require_once('theme/' . $this->name . '/config.php');
1089+ $this->config = $config;
1090+
1091+ self::$instance = $this;
1092 }
1093
1094 /**
1095 * GetInstance of Theme
1096 */
1097 private static function GetInstance() {
1098- if (!isset(static::$instance))
1099+ if (!isset(self::$instance))
1100 throw new Exception(__("Theme not initialised"));
1101
1102- return static::$instance;
1103+ return self::$instance;
1104 }
1105
1106 /**
1107@@ -113,11 +121,31 @@
1108
1109 // See if we have the requested file in the theme folder
1110 if (file_exists('theme/' . $theme->name . '/img/' . $item)) {
1111- return '<img ' . (($class != '') ? $class : '') . ' src="theme/' . $theme->name . '/img/' . $item . '" />';
1112- }
1113- // If not, then use the default folder
1114- elseif (file_exists('theme/default/img/' . $item)) {
1115- return '<img ' . (($class != '') ? $class : '') . ' src="theme/default/img/' . $item . '" />';
1116+ return '<img ' . (($class != '') ? 'class="' . $class . '"' : '') . ' src="theme/' . $theme->name . '/img/' . $item . '" />';
1117+ }
1118+ // If not, then use the default folder
1119+ elseif (file_exists('theme/default/img/' . $item)) {
1120+ return '<img ' . (($class != '') ? 'class="' . $class . '"' : '') . ' src="theme/default/img/' . $item . '" />';
1121+ }
1122+ else
1123+ return '';
1124+ }
1125+
1126+ /**
1127+ * Get an image URL
1128+ * @param [string] $item the image
1129+ */
1130+ public static function ImageUrl($item) {
1131+
1132+ $theme = Theme::GetInstance();
1133+
1134+ // See if we have the requested file in the theme folder
1135+ if (file_exists('theme/' . $theme->name . '/img/' . $item)) {
1136+ return 'theme/' . $theme->name . '/img/' . $item;
1137+ }
1138+ // If not, then use the default folder
1139+ elseif (file_exists('theme/default/img/' . $item)) {
1140+ return 'theme/default/img/' . $item;
1141 }
1142 else
1143 return '';
1144@@ -171,6 +199,27 @@
1145 return Theme::GetInstance()->dateManager->GetClock();
1146 }
1147
1148+ public static function ApplicationName() {
1149+ return Theme::GetInstance()->config['app_name'];
1150+ }
1151+
1152+ public static function ThemeName() {
1153+ return Theme::GetInstance()->config['theme_name'];
1154+ }
1155+
1156+ public static function ThemeFolder() {
1157+ return Theme::GetInstance()->name;
1158+ }
1159+
1160+ public static function GetConfig($settingName) {
1161+ $theme = Theme::GetInstance();
1162+
1163+ if (isset($theme->config[$settingName]))
1164+ return $theme->config[$settingName];
1165+ else
1166+ return '';
1167+ }
1168+
1169 /**
1170 * Get Menu
1171 * @param string $menu The Name of the Menu
1172@@ -191,9 +240,17 @@
1173 $item['class'] = Kit::ValidateParam($menuItem['Class'], _WORD);
1174 $item['title'] = __(Kit::ValidateParam($menuItem['Text'], _STRING));
1175 $item['img'] = Kit::ValidateParam($menuItem['Img'], _STRING);
1176+ $item['external'] = Kit::ValidateParam($menuItem['External'], _INT);
1177
1178 $item['selected'] = ($item['page'] == $theme->pageName);
1179- $item['link'] = 'index.php?p=' . $item['page'] . '&' . $item['args'];
1180+
1181+ if ($item['external'] == 0) {
1182+ $item['link'] = 'index.php?p=' . $item['page'] . '&' . $item['args'];
1183+ }
1184+ else {
1185+ $item['link'] = $item['args'];
1186+ }
1187+
1188 $item['li'] = '<li class="' . $item['class'] . '"><a href="' . $item['link'] . '" class="' . $item['class'] . (($item['selected']) ? ' current' : '') . '">' . $item['title'] . '</a></li>';
1189
1190 $array[] = $item;
1191@@ -213,14 +270,15 @@
1192 * @param string Key for item class
1193 * @return string
1194 */
1195- public static function SelectList($listName, $listValues, $idColumn, $nameColumn, $selectedId = '', $callBack = '', $classColumn = '')
1196+ public static function SelectList($listName, $listValues, $idColumn, $nameColumn, $selectedId = null, $callBack = '', $classColumn = '', $styleColumn = '')
1197 {
1198 $list = '<select name="' . $listName . '" id="' . $listName . '"' . $callBack . '>';
1199
1200 foreach ($listValues as $listItem)
1201 {
1202 $class = ($classColumn == '') ? '' : 'class="' . $listItem[$classColumn] . '"';
1203- $list .= '<option ' . $class . ' value="' . $listItem[$idColumn] . '" ' . (($listItem[$idColumn] === $selectedId) ? 'selected' : '') . '>' . $listItem[$nameColumn] . '</option>';
1204+ $style = ($styleColumn == '') ? '' : 'style="' . $listItem[$styleColumn] . '"';
1205+ $list .= '<option ' . $style . ' ' . $class . ' value="' . $listItem[$idColumn] . '" ' . (($listItem[$idColumn] == $selectedId) ? 'selected' : '') . '>' . $listItem[$nameColumn] . '</option>';
1206 }
1207
1208 $list .= '</select>';
1209
1210=== modified file 'server/lib/data/dataset.data.class.php'
1211--- server/lib/data/dataset.data.class.php 2013-02-02 16:22:59 +0000
1212+++ server/lib/data/dataset.data.class.php 2013-04-11 16:56:27 +0000
1213@@ -231,7 +231,14 @@
1214 foreach ($filter as $filterPair)
1215 {
1216 $filterPair = explode('=', $filterPair);
1217- $where .= sprintf(" AND %s = '%s' ", $filterPair[0], $db->escape_string($filterPair[1]));
1218+
1219+ // Validate filter pair 1 doesn't contain any disallowed words
1220+ $disallowedKeywords = array('AND', 'OR');
1221+
1222+ if (in_array($filterPair[1], $disallowedKeywords))
1223+ continue;
1224+
1225+ $where .= sprintf(" AND %s = %s ", $filterPair[0], $filterPair[1]);
1226 }
1227
1228 $SQL .= $where . ' ';
1229
1230=== modified file 'server/lib/data/datasetcolumn.data.class.php'
1231--- server/lib/data/datasetcolumn.data.class.php 2013-02-02 16:22:59 +0000
1232+++ server/lib/data/datasetcolumn.data.class.php 2013-04-11 16:56:27 +0000
1233@@ -22,12 +22,12 @@
1234
1235 class DataSetColumn extends Data
1236 {
1237- public function Add($dataSetId, $heading, $dataTypeId, $listContent, $columnOrder = '')
1238+ public function Add($dataSetId, $heading, $dataTypeId, $listContent, $columnOrder = 0)
1239 {
1240 $db =& $this->db;
1241
1242 // Is the column order provided?
1243- if ($columnOrder == '')
1244+ if ($columnOrder == 0)
1245 {
1246 $SQL = "";
1247 $SQL .= "SELECT IFNULL(MAX(ColumnOrder), 1) AS ColumnOrder ";
1248
1249=== modified file 'server/lib/data/layout.data.class.php'
1250--- server/lib/data/layout.data.class.php 2013-03-04 22:01:30 +0000
1251+++ server/lib/data/layout.data.class.php 2013-04-11 16:56:27 +0000
1252@@ -230,7 +230,7 @@
1253 // Notify (dont error)
1254 Kit::ClassLoader('display');
1255 $displayObject = new Display($db);
1256- $displayObject->NotifyDisplays($layoutId);
1257+ $displayObject->NotifyDisplays($campaignId);
1258
1259 return true;
1260 }
1261@@ -777,7 +777,7 @@
1262
1263 $region = new region($db);
1264
1265- if (!$region->EditBackground($layoutId, '#' . $color, $bg_image, $width, $height))
1266+ if (!$region->EditBackground($layoutId, '#' . $color, $bg_image, $width, $height, $resolutionId))
1267 {
1268 //there was an ERROR
1269 $response->SetError($region->errorMsg);
1270
1271=== modified file 'server/lib/data/region.data.class.php'
1272--- server/lib/data/region.data.class.php 2013-02-16 15:03:26 +0000
1273+++ server/lib/data/region.data.class.php 2013-04-11 16:56:27 +0000
1274@@ -75,11 +75,16 @@
1275 return false;
1276 }
1277
1278- // Notify (dont error)
1279- Kit::ClassLoader('display');
1280- $displayObject = new Display($db);
1281- $displayObject->NotifyDisplays($layoutid);
1282-
1283+ // Get the Campaign ID
1284+ Kit::ClassLoader('campaign');
1285+ $campaign = new Campaign($db);
1286+ $campaignId = $campaign->GetCampaignId($layoutid);
1287+
1288+ // Notify (dont error)
1289+ Kit::ClassLoader('display');
1290+ $displayObject = new Display($db);
1291+ $displayObject->NotifyDisplays($campaignId);
1292+
1293 return true;
1294 }
1295
1296@@ -470,7 +475,7 @@
1297 return true;
1298 }
1299
1300- public function EditBackground($layoutid, $bg_color, $bg_image, $width, $height)
1301+ public function EditBackground($layoutid, $bg_color, $bg_image, $width, $height, $resolutionId)
1302 {
1303 $db =& $this->db;
1304
1305@@ -483,6 +488,7 @@
1306 $xml->documentElement->setAttribute("bgcolor", $bg_color);
1307 $xml->documentElement->setAttribute('width', $width);
1308 $xml->documentElement->setAttribute('height', $height);
1309+ $xml->documentElement->setAttribute('resolutionid', $resolutionId);
1310 $xml->documentElement->setAttribute("schemaVersion", Config::Version($db, 'XlfVersion'));
1311
1312 //Convert back to XML
1313
1314=== modified file 'server/lib/data/userdata.data.class.php'
1315--- server/lib/data/userdata.data.class.php 2012-04-16 12:05:26 +0000
1316+++ server/lib/data/userdata.data.class.php 2013-04-11 16:56:27 +0000
1317@@ -20,6 +20,18 @@
1318 */
1319 defined('XIBO') or die(__('Sorry, you are not allowed to directly access this page.<br /> Please press the back button in your browser.'));
1320
1321+// These constants may be changed without breaking existing hashes.
1322+define("PBKDF2_HASH_ALGORITHM", "sha256");
1323+define("PBKDF2_ITERATIONS", 1000);
1324+define("PBKDF2_SALT_BYTES", 24);
1325+define("PBKDF2_HASH_BYTES", 24);
1326+
1327+define("HASH_SECTIONS", 4);
1328+define("HASH_ALGORITHM_INDEX", 0);
1329+define("HASH_ITERATION_INDEX", 1);
1330+define("HASH_SALT_INDEX", 2);
1331+define("HASH_PBKDF2_INDEX", 3);
1332+
1333 class Userdata extends Data
1334 {
1335 public function __construct(database $db)
1336@@ -37,12 +49,20 @@
1337 */
1338 public function ChangePassword($userId, $oldPassword, $newPassword, $retypedNewPassword, $forceChange = false)
1339 {
1340+ // Validate
1341+ if ($userId == 0)
1342+ return $this->SetError(26001, __('User not selected'));
1343+
1344 // We can force the users password to change without having to provide the old one.
1345 // Is this a potential security hole - we must have validated that we are an admin to get to this point
1346 if (!$forceChange)
1347 {
1348+ // Get the stored hash
1349+ if (!$good_hash = $this->db->GetSingleValue(sprintf("SELECT UserPassword FROM `user` WHERE UserID = %d", $userId), 'UserPassword', _STRING))
1350+ return $this->SetError(26000, __('Incorrect Password Provided'));
1351+
1352 // Check the Old Password is correct
1353- if ($this->db->GetCountOfRows(sprintf("SELECT UserId FROM `user` WHERE UserID = %d AND UserPassword = '%s'", $userId, md5($oldPassword))) == 0)
1354+ if ($this->validate_password($oldPassword, $good_hash) === false)
1355 return $this->SetError(26000, __('Incorrect Password Provided'));
1356 }
1357
1358@@ -54,8 +74,15 @@
1359 if (!$this->TestPasswordAgainstPolicy($newPassword))
1360 return false;
1361
1362+ // Generate a new SALT and Password
1363+ $hash = $this->create_hash($newPassword);
1364+
1365+ $SQL = sprintf("UPDATE `user` SET UserPassword = '%s', CSPRNG = 1 WHERE UserID = %d", $hash, $userId);
1366+
1367+ Debug::LogEntry($this->db, 'audit', $SQL);
1368+
1369 // Run the update
1370- if (!$this->db->query(sprintf("UPDATE `user` SET UserPassword = '%s' WHERE UserID = %d", md5($newPassword), $userId)))
1371+ if (!$this->db->query($SQL))
1372 {
1373 trigger_error($this->db->error());
1374 return $this->SetError(25000, __('Could not edit Password'));
1375@@ -84,5 +111,100 @@
1376
1377 return true;
1378 }
1379+
1380+ /*
1381+ * Password hashing with PBKDF2.
1382+ * Author: havoc AT defuse.ca
1383+ * www: https://defuse.ca/php-pbkdf2.htm
1384+ */
1385+ public function create_hash($password)
1386+ {
1387+ // format: algorithm:iterations:salt:hash
1388+ $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM));
1389+ return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" . $salt . ":" .
1390+ base64_encode($this->pbkdf2(
1391+ PBKDF2_HASH_ALGORITHM,
1392+ $password,
1393+ $salt,
1394+ PBKDF2_ITERATIONS,
1395+ PBKDF2_HASH_BYTES,
1396+ true
1397+ ));
1398+ }
1399+
1400+ public function validate_password($password, $good_hash)
1401+ {
1402+ $params = explode(":", $good_hash);
1403+ if(count($params) < HASH_SECTIONS)
1404+ return false;
1405+ $pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
1406+ return $this->slow_equals(
1407+ $pbkdf2,
1408+ $this->pbkdf2(
1409+ $params[HASH_ALGORITHM_INDEX],
1410+ $password,
1411+ $params[HASH_SALT_INDEX],
1412+ (int)$params[HASH_ITERATION_INDEX],
1413+ strlen($pbkdf2),
1414+ true
1415+ )
1416+ );
1417+ }
1418+
1419+ // Compares two strings $a and $b in length-constant time.
1420+ public function slow_equals($a, $b)
1421+ {
1422+ $diff = strlen($a) ^ strlen($b);
1423+ for($i = 0; $i < strlen($a) && $i < strlen($b); $i++)
1424+ {
1425+ $diff |= ord($a[$i]) ^ ord($b[$i]);
1426+ }
1427+ return $diff === 0;
1428+ }
1429+
1430+ /*
1431+ * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
1432+ * $algorithm - The hash algorithm to use. Recommended: SHA256
1433+ * $password - The password.
1434+ * $salt - A salt that is unique to the password.
1435+ * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
1436+ * $key_length - The length of the derived key in bytes.
1437+ * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
1438+ * Returns: A $key_length-byte key derived from the password and salt.
1439+ *
1440+ * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
1441+ *
1442+ * This implementation of PBKDF2 was originally created by https://defuse.ca
1443+ * With improvements by http://www.variations-of-shadow.com
1444+ */
1445+ public function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false)
1446+ {
1447+ $algorithm = strtolower($algorithm);
1448+ if(!in_array($algorithm, hash_algos(), true))
1449+ die('PBKDF2 ERROR: Invalid hash algorithm.');
1450+ if($count <= 0 || $key_length <= 0)
1451+ die('PBKDF2 ERROR: Invalid parameters.');
1452+
1453+ $hash_length = strlen(hash($algorithm, "", true));
1454+ $block_count = ceil($key_length / $hash_length);
1455+
1456+ $output = "";
1457+ for($i = 1; $i <= $block_count; $i++) {
1458+ // $i encoded as 4 bytes, big endian.
1459+ $last = $salt . pack("N", $i);
1460+ // first iteration
1461+ $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
1462+ // perform the other $count - 1 iterations
1463+ for ($j = 1; $j < $count; $j++) {
1464+ $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
1465+ }
1466+ $output .= $xorsum;
1467+ }
1468+
1469+ if($raw_output)
1470+ return substr($output, 0, $key_length);
1471+ else
1472+ return bin2hex(substr($output, 0, $key_length));
1473+ }
1474 }
1475 ?>
1476
1477=== modified file 'server/lib/include.php'
1478--- server/lib/include.php 2013-03-04 22:01:30 +0000
1479+++ server/lib/include.php 2013-04-11 16:56:27 +0000
1480@@ -20,6 +20,8 @@
1481 */
1482 defined('XIBO') or die("Sorry, you are not allowed to directly access this page.<br /> Please press the back button in your browser.");
1483
1484+define('WEBSITE_VERSION', 62);
1485+
1486 // No errors reported until we read the settings from the DB
1487 error_reporting(E_ALL);
1488 ini_set('display_errors', 1);
1489@@ -92,12 +94,12 @@
1490
1491 if (!$db->connect_db($dbhost, $dbuser, $dbpass))
1492 {
1493- die('Xibo has a database connection problem.');
1494+ die('Database connection problem.');
1495 }
1496
1497 if (!$db->select_db($dbname))
1498 {
1499- die('Xibo has a database connection problem.');
1500+ die('Database connection problem.');
1501 }
1502
1503 date_default_timezone_set(Config::GetSetting($db, "defaultTimezone"));
1504@@ -109,8 +111,8 @@
1505 Config::Version($db);
1506
1507 // Does the version in the DB match the version of the code?
1508-if (DBVERSION != '60')
1509- die(sprintf('Incompatible database version detected. Please ensure your database and website versions match. You have %d and the website for %d', DBVERSION, 60));
1510+if (DBVERSION != WEBSITE_VERSION)
1511+ die(sprintf('Incompatible database version detected. Please ensure your database and website versions match. You have database %d and website %d', DBVERSION, WEBSITE_VERSION));
1512
1513 // What is the production mode of the server?
1514 if(Config::GetSetting($db, 'SERVER_MODE') == 'Test') ini_set('display_errors', 1);
1515
1516=== modified file 'server/lib/modules/module.class.php'
1517--- server/lib/modules/module.class.php 2013-03-04 22:01:30 +0000
1518+++ server/lib/modules/module.class.php 2013-04-11 16:56:27 +0000
1519@@ -487,7 +487,7 @@
1520
1521 // Messages
1522 $msgTitle = __('Return to the Region Options');
1523- $msgWarn = __('Are you sure you want to remove this item from Xibo?');
1524+ $msgWarn = __('Are you sure you want to remove this item?');
1525 $msgWarnLost = __('It will be lost');
1526 $msgYes = __('Yes');
1527 $msgNo = __('No');
1528@@ -502,7 +502,7 @@
1529 <p>$msgWarn <span class="required">$msgWarnLost</span>.</p>
1530 </form>
1531 END;
1532- $this->response->AddButton(__('No'), 'XiboFormRender("index.php?p=layout&layoutid=' . $layoutid . '&regionid=' . $regionid . '&q=RegionOptions")');
1533+ $this->response->AddButton(__('No'), 'XiboFormRender("index.php?p=timeline&layoutid=' . $layoutid . '&regionid=' . $regionid . '&q=RegionOptions")');
1534 $this->response->AddButton(__('Yes'), '$("#MediaDeleteForm").submit()');
1535 }
1536 else
1537@@ -1689,7 +1689,7 @@
1538 $response->AddButton(__('Help'), 'XiboHelpRender("' . (($this->layoutid != 0) ? $helpManager->Link('LayoutMedia', 'Permissions') : $helpManager->Link('Media', 'Permissions')) . '")');
1539
1540 if ($this->assignedMedia) {
1541- $response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=layout&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions")');
1542+ $response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=timeline&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions")');
1543 }
1544 else {
1545 $response->AddButton(__('Cancel'), 'XiboDialogClose()');
1546@@ -1938,7 +1938,7 @@
1547
1548 // Decide where the cancel button will take us
1549 if ($this->showRegionOptions)
1550- $this->response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=layout&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions")');
1551+ $this->response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=timeline&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions")');
1552 else
1553 $this->response->AddButton(__('Cancel'), 'XiboDialogClose()');
1554
1555@@ -2001,7 +2001,7 @@
1556 {
1557 // We want to load a new form
1558 $this->response->loadForm = true;
1559- $this->response->loadFormUri = 'index.php?p=layout&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions';
1560+ $this->response->loadFormUri = 'index.php?p=timeline&layoutid=' . $this->layoutid . '&regionid=' . $this->regionid . '&q=RegionOptions';
1561 }
1562
1563 return $this->response;
1564
1565=== modified file 'server/lib/pages/admin.class.php'
1566--- server/lib/pages/admin.class.php 2013-03-04 22:01:30 +0000
1567+++ server/lib/pages/admin.class.php 2013-04-11 16:56:27 +0000
1568@@ -101,7 +101,7 @@
1569
1570 if (!is_writable($value . 'temp'))
1571 {
1572- trigger_error(__('The Library Location you have picked is not writable to the Xibo Server.'), E_USER_ERROR);
1573+ trigger_error(__('The Library Location you have picked is not writable'), E_USER_ERROR);
1574 }
1575 }
1576
1577@@ -560,7 +560,7 @@
1578 $mail_to = Kit::ValidateParam(Config::GetSetting($db, "mail_to"),_PASSWORD);
1579 $mail_from = Kit::ValidateParam(Config::GetSetting($db, "mail_from"),_PASSWORD);
1580 $subject = __('Email Test');
1581- $body = __('Test email sent from Xibo');
1582+ $body = __('Test email sent');
1583 $headers = sprintf("From: %s",$mail_from);
1584
1585 $output = sprintf(__('Sending test email to %s.'),$mail_to);
1586@@ -593,7 +593,7 @@
1587
1588 $form = '';
1589 $form .= '<p>' . __('This will create a dump file of your database that you can restore later using the import functionality.') . '</p>';
1590- $form .= '<p>' . __('You should also manually take a backup of your Xibo library.') . '</p>';
1591+ $form .= '<p>' . __('You should also manually take a backup of your library.') . '</p>';
1592 $form .= '<p>' . __('Please note: The folder location for mysqldump must be available in your path environment variable for this to work and the php "exec" command must be enabled.') . '</p>';
1593 $form .= '<a href="index.php?p=admin&q=BackupDatabase" title="' . __('Export Database. Right click to save as.') . '">' . __('Click here to Export') . '</a>';
1594
1595
1596=== modified file 'server/lib/pages/content.class.php'
1597--- server/lib/pages/content.class.php 2013-03-04 20:20:04 +0000
1598+++ server/lib/pages/content.class.php 2013-04-11 16:56:27 +0000
1599@@ -206,82 +206,37 @@
1600 */
1601 function LibraryAssignForm()
1602 {
1603- $db =& $this->db;
1604- $user =& $this->user;
1605- $response = new ResponseManager();
1606- $formMgr = new FormManager($db, $user);
1607- $helpManager = new HelpManager($db, $user);
1608-
1609- $mediatype = '';
1610- $name = '';
1611-
1612- if (isset($_SESSION['content']['mediatype'])) $mediatype = $_SESSION['content']['mediatype'];
1613-
1614- //Media Type drop down list
1615- $sql = "SELECT 'all', 'all' ";
1616- $sql .= "UNION ";
1617- $sql .= "SELECT type, type ";
1618- $sql .= "FROM media WHERE 1=1 ";
1619- $sql .= " GROUP BY type ";
1620-
1621- $type_list = $formMgr->DropDown($sql, 'type', $mediatype);
1622-
1623- //Input vars
1624+ $db =& $this->db;
1625+ $user =& $this->user;
1626+ $response = new ResponseManager();
1627+
1628+ $id = uniqid();
1629+ Theme::Set('id', $id);
1630+ Theme::Set('form_meta', '<input type="hidden" name="p" value="content"><input type="hidden" name="q" value="LibraryAssignView">');
1631+ Theme::Set('pager', ResponseManager::Pager($id));
1632+
1633+ // Module types filter
1634+ $types = $db->GetArray("SELECT Module AS moduleid, Name AS module FROM `module` WHERE RegionSpecific = 0 AND Enabled = 1 ORDER BY 2");
1635+ array_unshift($types, array('moduleid' => '', 'module' => 'All'));
1636+ Theme::Set('module_field_list', $types);
1637+
1638+ // Call to render the template
1639+ $output = Theme::RenderReturn('library_form_assign');
1640+
1641+ // Input vars
1642 $layoutId = Kit::GetParam('layoutid', _REQUEST, _INT);
1643 $regionId = Kit::GetParam('regionid', _REQUEST, _STRING);
1644
1645- // Messages
1646- $msgName = __('Name');
1647- $msgType = __('Type');
1648-
1649- $form = <<<HTML
1650- <form>
1651- <input type="hidden" name="p" value="content">
1652- <input type="hidden" name="q" value="LibraryAssignView">
1653- <table>
1654- <tr>
1655- <td>$msgName</td>
1656- <td><input type="text" name="name" id="name" value="$name"></td>
1657- <td>$msgType</td>
1658- <td>$type_list</td>
1659- </tr>
1660- </table>
1661- </form>
1662-HTML;
1663-
1664- $id = uniqid();
1665-
1666- $msgAssignBox = __('Media to Assign');
1667- $msgInfoMessage = __('Drag or double click to move items between lists');
1668-
1669- $xiboGrid = <<<HTML
1670- <div class="XiboGrid LibraryAssign" id="$id">
1671- <div class="XiboFilter">
1672- $form
1673- </div>
1674- <center>$msgInfoMessage</center>
1675- <div class="XiboData LibraryAssignLeftSortableList connectedlist">
1676-
1677- </div>
1678- <div class="LibraryAssignRightSortableList connectedlist">
1679- <h3>$msgAssignBox</h3>
1680- <ul id="LibraryAssignSortable" class="connectedSortable">
1681-
1682- </ul>
1683- </div>
1684- </div>
1685-HTML;
1686-
1687 // Construct the Response
1688- $response->html = $xiboGrid;
1689- $response->success = true;
1690- $response->dialogSize = true;
1691- $response->dialogWidth = '780px';
1692+ $response->html = $output;
1693+ $response->success = true;
1694+ $response->dialogSize = true;
1695+ $response->dialogWidth = '780px';
1696 $response->dialogHeight = '580px';
1697- $response->dialogTitle = __('Assign an item from the Library');
1698+ $response->dialogTitle = __('Assign an item from the Library');
1699
1700- $response->AddButton(__('Help'), 'XiboHelpRender("' . $helpManager->Link('Library', 'Assign') . '")');
1701- $response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=layout&layoutid=' . $layoutId . '&regionid=' . $regionId . '&q=RegionOptions")');
1702+ $response->AddButton(__('Help'), 'XiboHelpRender("' . HelpManager::Link('Library', 'Assign') . '")');
1703+ $response->AddButton(__('Cancel'), 'XiboSwapDialog("index.php?p=timeline&layoutid=' . $layoutId . '&regionid=' . $regionId . '&q=RegionOptions")');
1704 $response->AddButton(__('Assign'), 'LibraryAssignSubmit("' . $layoutId . '","' . $regionId . '")');
1705
1706 $response->Respond();
1707@@ -298,73 +253,27 @@
1708 $response = new ResponseManager();
1709
1710 //Input vars
1711- $mediatype = Kit::GetParam('type', _POST, _STRING, 'all');
1712- $name = Kit::GetParam('name', _POST, _STRING, 'all');
1713-
1714- setSession('content', 'mediatype', $mediatype);
1715- setSession('content', 'name', $name);
1716-
1717- // query to get all media that is in the database ready to display
1718- $SQL = "";
1719- $SQL .= "SELECT media.mediaID, ";
1720- $SQL .= " media.name, ";
1721- $SQL .= " media.type, ";
1722- $SQL .= " media.duration ";
1723- $SQL .= " FROM media ";
1724- $SQL .= " WHERE retired = 0 AND isEdited = 0 ";
1725-
1726- // Filter on media type
1727- if($mediatype != 'all')
1728- $SQL.= sprintf(" AND media.type = '%s'", $mediatype);
1729-
1730- // Filter on name
1731- if ($name != 'all')
1732- {
1733- // convert into a space delimited array
1734- $names = explode(' ', $name);
1735-
1736- foreach($names as $searchName)
1737- {
1738- // Not like, or like?
1739- if (substr($searchName, 0, 1) == '-')
1740- $SQL.= " AND (media.name NOT LIKE '%" . sprintf('%s', ltrim($db->escape_string($searchName), '-')) . "%') ";
1741- else
1742- $SQL.= " AND (media.name LIKE '%" . sprintf('%s', $db->escape_string($searchName)) . "%') ";
1743- }
1744- }
1745-
1746- $SQL .= " ORDER BY media.name ";
1747-
1748- if(!$results = $db->query($SQL))
1749- {
1750- trigger_error($db->error());
1751- trigger_error(__('Cannot get list of media in the library'), E_USER_ERROR);
1752- }
1753-
1754- $response->html = '<h3>' . __('Library') . '</h3>';
1755- $response->html .= '<ul id="LibraryAvailableSortable" class="connectedSortable">';
1756-
1757- // while loop
1758- while ($row = $db->get_row($results))
1759- {
1760- $mediaId = Kit::ValidateParam($row[0], _INT);
1761- $media = Kit::ValidateParam($row[1], _STRING);
1762- $mediatype = Kit::ValidateParam($row[2], _WORD);
1763- $length = sec2hms(Kit::ValidateParam($row[3], _DOUBLE));
1764-
1765- // Permissions
1766- $auth = $this->user->MediaAuth($mediaId, true);
1767-
1768- // Is this user allowed to see this
1769- if ($auth->view)
1770- $response->html .= '<li class="li-sortable" id="MediaID_' . $mediaId . '">' . $media . ' (' . $mediatype . ') - Duration (sec): ' . $length . '</li>';
1771- }
1772-
1773- //table ending
1774- $response->html .= '</ul>';
1775-
1776- // Construct the Response
1777- $response->success = true;
1778+ $mediatype = Kit::GetParam('filter_type', _POST, _STRING);
1779+ $name = Kit::GetParam('filter_name', _POST, _STRING);
1780+
1781+ // Get a list of media
1782+ $mediaList = $user->MediaList($mediatype, $name);
1783+
1784+ $rows = array();
1785+
1786+ // Add some extra information
1787+ foreach ($mediaList as $row) {
1788+
1789+ $row['duration_text'] = sec2hms($row['duration']);
1790+ $row['list_id'] = 'MediaID_' . $row['mediaid'];
1791+
1792+ $rows[] = $row;
1793+ }
1794+
1795+ Theme::Set('table_rows', $rows);
1796+
1797+ // Render the Theme
1798+ $response->SetGridResponse(Theme::RenderReturn('library_form_assign_list'));
1799 $response->callBack = 'LibraryAssignCallback';
1800 $response->Respond();
1801 }
1802
1803=== modified file 'server/lib/pages/dashboard.class.php'
1804--- server/lib/pages/dashboard.class.php 2013-02-20 21:02:28 +0000
1805+++ server/lib/pages/dashboard.class.php 2013-04-11 16:56:27 +0000
1806@@ -34,7 +34,7 @@
1807 function displayPage()
1808 {
1809 // Render the Theme and output
1810- Theme::Render('dashboard_page');
1811+ Theme::Render('homepage_dashboard');
1812 }
1813 }
1814 ?>
1815\ No newline at end of file
1816
1817=== modified file 'server/lib/pages/dataset.class.php'
1818--- server/lib/pages/dataset.class.php 2013-03-03 21:53:46 +0000
1819+++ server/lib/pages/dataset.class.php 2013-04-11 16:56:27 +0000
1820@@ -374,15 +374,15 @@
1821 if (!$auth->edit)
1822 trigger_error(__('Access Denied'));
1823
1824- $heading = Kit::GetParam('heading', _POST, _WORD);
1825+ $heading = Kit::GetParam('heading', _POST, _STRING);
1826 $listContent = Kit::GetParam('listcontent', _POST, _STRING);
1827 $columnOrder = Kit::GetParam('columnorder', _POST, _INT);
1828
1829 $dataSetObject = new DataSetColumn($db);
1830- if (!$dataSetObject->Add($dataSetId, $heading, 1, $listContent))
1831+ if (!$dataSetObject->Add($dataSetId, $heading, 1, $listContent, $columnOrder))
1832 trigger_error($dataSetObject->GetErrorMessage(), E_USER_ERROR);
1833
1834- $response->SetFormSubmitResponse(__('Column Edited'));
1835+ $response->SetFormSubmitResponse(__('Column Added'));
1836 $response->hideMessage = true;
1837 $response->loadForm = true;
1838 $response->loadFormUri = 'index.php?p=dataset&q=DataSetColumnsForm&datasetid=' . $dataSetId . '&dataset=' . $dataSet;
1839@@ -414,7 +414,7 @@
1840 if (!$row = $db->GetSingleRow($SQL))
1841 trigger_error(__('Unabled to get Data Column information'), E_USER_ERROR);
1842
1843- Theme::Set('heading', Kit::ValidateParam($row['Heading'], _WORD));
1844+ Theme::Set('heading', Kit::ValidateParam($row['Heading'], _STRING));
1845 Theme::Set('listcontent', Kit::ValidateParam($row['ListContent'], _STRING));
1846 Theme::Set('columnorder', Kit::ValidateParam($row['ColumnOrder'], _INT));
1847
1848@@ -441,7 +441,7 @@
1849 trigger_error(__('Access Denied'));
1850
1851 $dataSetColumnId = Kit::GetParam('datasetcolumnid', _POST, _INT);
1852- $heading = Kit::GetParam('heading', _POST, _WORD);
1853+ $heading = Kit::GetParam('heading', _POST, _STRING);
1854 $listContent = Kit::GetParam('listcontent', _POST, _STRING);
1855 $columnOrder = Kit::GetParam('columnorder', _POST, _INT);
1856
1857
1858=== modified file 'server/lib/pages/group.class.php'
1859--- server/lib/pages/group.class.php 2013-02-24 18:52:30 +0000
1860+++ server/lib/pages/group.class.php 2013-04-11 16:56:27 +0000
1861@@ -291,7 +291,7 @@
1862
1863 if ($db->num_rows($results) == 0)
1864 {
1865- echo "";
1866+ echo '';
1867 exit;
1868 }
1869
1870@@ -305,7 +305,7 @@
1871 $row['assigned'] = (($row['AssignedID'] == 1) ? Theme::Image('act.gif') : Theme::Image('disact.gif'));
1872 $row['assignedid'] = $row['AssignedID'];
1873 $row['checkbox_value'] = $row['AssignedID'] . ',' . $row['pagegroupID'];
1874- $row['checkbox_ticked'] = (($row['AssignedID'] == 1) ? ' checked' : '');
1875+ $row['checkbox_ticked'] = '';
1876
1877 $rows[] = $row;
1878 }
1879@@ -552,7 +552,7 @@
1880 $row['assigned'] = (($row['AssignedID'] == 1) ? Theme::Image('act.gif') : Theme::Image('disact.gif'));
1881 $row['assignedid'] = $row['AssignedID'];
1882 $row['checkbox_value'] = $row['AssignedID'] . ',' . $row['MenuItemID'];
1883- $row['checkbox_ticked'] = (($row['AssignedID'] == 1) ? ' checked' : '');
1884+ $row['checkbox_ticked'] = '';
1885
1886 $rows[] = $row;
1887 }
1888
1889=== modified file 'server/lib/pages/index.class.php'
1890--- server/lib/pages/index.class.php 2013-03-02 13:15:42 +0000
1891+++ server/lib/pages/index.class.php 2013-04-11 16:56:27 +0000
1892@@ -38,11 +38,10 @@
1893 global $session;
1894
1895 //this page must be called from a form therefore we expect POST variables
1896- $username = Kit::GetParam('username', _POST, _USERNAME);
1897- $password = Kit::GetParam('password', _POST, _PASSWORD);
1898- $password = md5($password);
1899+ $username = Kit::GetParam('username', _POST, _USERNAME);
1900+ $password = Kit::GetParam('password', _POST, _PASSWORD);
1901
1902- $referingpage = Kit::GetParam('referingPage', _GET, _WORD);
1903+ $referingpage = Kit::GetParam('referingPage', _GET, _WORD);
1904
1905 if (isset($_REQUEST['ajax']))
1906 {
1907@@ -88,7 +87,6 @@
1908
1909 setMessage($username . ' logged in');
1910 $session->set_user(session_id(), $userid, 'user');
1911-
1912 }
1913
1914 Debug::LogEntry($db, 'audit', 'Login with refering page: ' . $referingpage);
1915@@ -261,7 +259,7 @@
1916 // Render the Theme and output
1917 $output = Theme::RenderReturn('about_text');
1918
1919- $response->SetFormRequestResponse($output, __('About Xibo'), '500', '500');
1920+ $response->SetFormRequestResponse($output, __('About'), '500', '500');
1921 $response->AddButton(__('Close'), 'XiboDialogClose()');
1922 $response->Respond();
1923 }
1924
1925=== modified file 'server/lib/pages/layout.class.php'
1926--- server/lib/pages/layout.class.php 2013-03-04 20:20:04 +0000
1927+++ server/lib/pages/layout.class.php 2013-04-11 16:56:27 +0000
1928@@ -104,7 +104,7 @@
1929 if (Kit::IsFilterPinned('layout', 'LayoutFilter')) {
1930 Theme::Set('filter_pinned', 'checked');
1931 Theme::Set('layout', Session::Get('layout', 'filter_layout'));
1932- Theme::Set('retired', Session::Get('layout', 'retired'));
1933+ Theme::Set('retired', Session::Get('layout', 'filter_retired'));
1934 Theme::Set('filter_userid', Session::Get('layout', 'filter_userid'));
1935 Theme::Set('filter_tags', Session::Get('layout', 'filter_tags'));
1936 }
1937@@ -487,6 +487,7 @@
1938 $backgroundColor = (string) $xml['bgcolor'];
1939 $width = (string) $xml['width'];
1940 $height = (string) $xml['height'];
1941+ $resolutionid = (int)$xml['resolutionid'];
1942 $bgImageId = 0;
1943
1944 // Do we need to override the background with one passed in?
1945@@ -528,14 +529,16 @@
1946 Theme::Set('background_color_list', gwsc());
1947
1948 // Get the ID of the current resolution
1949- $SQL = sprintf("SELECT resolutionID FROM resolution WHERE width = %d AND height = %d", $width, $height);
1950+ if ($resolutionid == 0) {
1951+ $SQL = sprintf("SELECT resolutionID FROM resolution WHERE width = %d AND height = %d", $width, $height);
1952+
1953+ if (!$resolutionid = $db->GetSingleValue($SQL, 'resolutionID', _INT))
1954+ {
1955+ trigger_error($db->error());
1956+ trigger_error(__("Unable to get the Resolution information"), E_USER_ERROR);
1957+ }
1958+ }
1959
1960- if (!$resolutionid = $db->GetSingleValue($SQL, 'resolutionID', _INT))
1961- {
1962- trigger_error($db->error());
1963- trigger_error(__("Unable to get the Resolution information"), E_USER_ERROR);
1964- }
1965-
1966 Theme::Set('resolutionid', $resolutionid);
1967 Theme::Set('resolution_field_list', $db->GetArray('SELECT resolutionid, resolution FROM resolution ORDER BY resolution'));
1968
1969@@ -591,8 +594,32 @@
1970 $xml->loadXML($this->xml);
1971
1972 // get the width and the height
1973+ $resolutionid = (int)$xml->documentElement->getAttribute('resolutionid');
1974 $width = $xml->documentElement->getAttribute('width');
1975 $height = $xml->documentElement->getAttribute('height');
1976+
1977+ // Get the display width / height
1978+ if ($resolutionid != 0) {
1979+ $SQL = sprintf("SELECT intended_width, intended_height FROM `resolution` WHERE resolutionid = %d", $resolutionid);
1980+ }
1981+ else {
1982+ $SQL = sprintf("SELECT intended_width, intended_height FROM `resolution` WHERE width = %d AND height = %d", $width, $height);
1983+ }
1984+
1985+ if (!$resolution = $db->GetSingleRow($SQL)) {
1986+ trigger_error(__('Unable to determine display resolution'));
1987+
1988+ $intended_width = $width;
1989+ $intended_height = $height;
1990+ }
1991+ else {
1992+ $intended_width = $resolution['intended_width'];
1993+ $intended_height = $resolution['intended_height'];
1994+ }
1995+
1996+ // Work out the scaling factor for the tip
1997+ // _scaleFactor = Math.Min(_clientSize.Width / _layoutWidth, _clientSize.Height / _layoutHeight);
1998+ $scaleFactor = min($intended_width / $width, $intended_height / $height);
1999
2000 // do we have a background? Or a background color (or both)
2001 $bgImage = $xml->documentElement->getAttribute('background');
2002@@ -626,10 +653,10 @@
2003 foreach ($regionNodeList as $region)
2004 {
2005 // get dimensions
2006- $tipWidth = $region->getAttribute('width');
2007- $tipHeight = $region->getAttribute('height');
2008- $tipTop = $region->getAttribute('top');
2009- $tipLeft = $region->getAttribute('left');
2010+ $tipWidth = round($region->getAttribute('width') * $scaleFactor, 0);
2011+ $tipHeight = round($region->getAttribute('height') * $scaleFactor, 0);
2012+ $tipTop = round($region->getAttribute('top') * $scaleFactor, 0);
2013+ $tipLeft = round($region->getAttribute('left') * $scaleFactor, 0);
2014
2015 $regionWidth = $region->getAttribute('width') . "px";
2016 $regionHeight = $region->getAttribute('height') . "px";
2017@@ -650,7 +677,7 @@
2018 $regionTransparency = '<div class="regionTransparency ' . $regionAuthTransparency . '" style="width:100%; height:100%;"></div>';
2019 $doubleClickLink = ($regionAuth->edit) ? "XiboFormRender($(this).attr('href'))" : '';
2020
2021- $regionHtml .= "<div id='region_$regionid' regionEnabled='$regionAuth->edit' regionid='$regionid' layoutid='$this->layoutid' href='index.php?p=timeline&layoutid=$this->layoutid&regionid=$regionid&q=Timeline' ondblclick=\"$doubleClickLink\"' class='$regionDisabledClass $regionPreviewClass' style=\"position:absolute; width:$regionWidth; height:$regionHeight; top: $regionTop; left: $regionLeft;\">
2022+ $regionHtml .= "<div id='region_$regionid' regionEnabled='$regionAuth->edit' regionid='$regionid' layoutid='$this->layoutid' scale='$scaleFactor' width='$regionWidth' height='$regionHeight' href='index.php?p=timeline&layoutid=$this->layoutid&regionid=$regionid&q=Timeline' ondblclick=\"$doubleClickLink\"' class='$regionDisabledClass $regionPreviewClass' style=\"position:absolute; width:$regionWidth; height:$regionHeight; top: $regionTop; left: $regionLeft;\">
2023 $regionTransparency";
2024
2025 if ($regionAuth->view)
2026@@ -731,7 +758,7 @@
2027 $copyMediaChecked = (Config::GetSetting($db, 'LAYOUT_COPY_MEDIA_CHECKB') == 'Checked') ? 'checked' : '';
2028
2029 Theme::Set('form_id', 'LayoutCopyForm');
2030- Theme::Set('form_url', 'index.php?p=layout&q=Copy');
2031+ Theme::Set('form_action', 'index.php?p=layout&q=Copy');
2032 Theme::Set('form_meta', '<input type="hidden" name="layoutid" value="' . $layoutid . '">');
2033 Theme::Set('copy_media_checked', $copyMediaChecked);
2034 Theme::Set('new_layout_default', $oldLayout . ' 2');
2035
2036=== modified file 'server/lib/pages/log.class.php'
2037--- server/lib/pages/log.class.php 2013-03-04 20:20:04 +0000
2038+++ server/lib/pages/log.class.php 2013-04-11 16:56:27 +0000
2039@@ -54,23 +54,23 @@
2040 Theme::Set('filter_seconds', Session::Get('user', 'filter_seconds'));
2041 }
2042 else {
2043- Theme::Set('filter_type', 0);
2044+ Theme::Set('filter_type', '0');
2045 Theme::Set('filter_seconds', 120);
2046- Theme::Set('filter_page', 0);
2047- Theme::Set('filter_function', 0);
2048+ Theme::Set('filter_page', '0');
2049+ Theme::Set('filter_function', '0');
2050 Theme::Set('filter_display', 0);
2051 }
2052
2053 // Lists
2054- $types = array(array('typeid' => 0, 'type' => 'All'), array('typeid' => 'audit', 'type' => 'Audit'), array('typeid' => 'error', 'type' => 'Error'));
2055+ $types = array(array('typeid' => '0', 'type' => 'All'), array('typeid' => 'audit', 'type' => 'Audit'), array('typeid' => 'error', 'type' => 'Error'));
2056 Theme::Set('type_field_list', $types);
2057
2058 $pages = $db->GetArray("SELECT DISTINCT IFNULL(page, '-1') AS pageid, page FROM log ORDER BY 2");
2059- array_unshift($pages, array('pageid' => 0, 'page' => 'All'));
2060+ array_unshift($pages, array('pageid' => '0', 'page' => 'All'));
2061 Theme::Set('page_field_list', $pages);
2062
2063 $functions = $db->GetArray("SELECT DISTINCT IFNULL(function, '-1') AS functionid, function FROM log ORDER BY 2");
2064- array_unshift($functions, array('functionid' => 0, 'function' => 'All'));
2065+ array_unshift($functions, array('functionid' => '0', 'function' => 'All'));
2066 Theme::Set('function_field_list', $functions);
2067
2068 $displays = $db->GetArray('SELECT displayid, display FROM display WHERE licensed = 1 ORDER BY 2');
2069
2070=== modified file 'server/lib/pages/mediamanager.class.php'
2071--- server/lib/pages/mediamanager.class.php 2011-10-05 20:05:31 +0000
2072+++ server/lib/pages/mediamanager.class.php 2013-04-11 16:56:27 +0000
2073@@ -1,7 +1,7 @@
2074 <?php
2075 /*
2076 * Xibo - Digitial Signage - http://www.xibo.org.uk
2077- * Copyright (C) 2011 Daniel Garner
2078+ * Copyright (C) 2011-2013 Daniel Garner
2079 *
2080 * This file is part of Xibo.
2081 *
2082@@ -31,72 +31,32 @@
2083 $this->user =& $user;
2084 }
2085
2086- function on_page_load()
2087- {
2088- return "";
2089- }
2090-
2091- function echo_page_heading()
2092- {
2093- global $user;
2094-
2095- $userid = Kit::GetParam('userid', _SESSION, _INT);
2096- $uid = $user->getNameFromID($userid);
2097-
2098- echo "$uid's " . __('Dashboard');
2099- return true;
2100- }
2101-
2102- function displayPage()
2103+ public function displayPage()
2104 {
2105 $db =& $this->db;
2106- $user =& $this->user;
2107-
2108- include_once("template/pages/mediamanager.php");
2109- }
2110-
2111- public function MediaManagerFilter()
2112- {
2113- $msgLayout = __('Layout');
2114- $msgRegion = __('Region');
2115- $msgMedia = __('Media');
2116- $msgMediaType = __('Type');
2117-
2118- $modules = $this->db->GetArray("SELECT Module, Name FROM module WHERE Enabled = 1 ORDER BY 2", true);
2119- $modules[] = array('Module' => 'all', 'Name' => 'All');
2120-
2121- $mediaTypeList = Kit::SelectList('filterMediaType', $modules, 'Module', 'Name', 'all');
2122-
2123+
2124+ // Default options
2125+ if (Kit::IsFilterPinned('mediamanager', 'Filter')) {
2126+ Theme::Set('filter_pinned', 'checked');
2127+ Theme::Set('filter_layout_name', Session::Get('mediamanager', 'filter_layout_name'));
2128+ Theme::Set('filter_region_name', Session::Get('mediamanager', 'filter_region_name'));
2129+ Theme::Set('filter_media_name', Session::Get('mediamanager', 'filter_media_name'));
2130+ Theme::Set('filter_type', Session::Get('mediamanager', 'filter_type'));
2131+ }
2132+
2133 $id = uniqid();
2134-
2135- $xiboGrid = <<<HTML
2136- <div class="XiboGrid" id="$id">
2137- <div class="XiboFilter">
2138- <form onsubmit="return false">
2139- <input type="hidden" name="p" value="mediamanager">
2140- <input type="hidden" name="q" value="MediaManagerGrid">
2141- <table class="mediamanager_filterform">
2142- <tr>
2143- <td>$msgLayout</td>
2144- <td><input type="text" name="filterLayout"></td>
2145- <td>$msgMedia</td>
2146- <td><input type="text" name="filterMediaName"></td>
2147- </tr>
2148- <tr>
2149- <td>$msgRegion</td>
2150- <td><input type="text" name="filterRegion"></td>
2151- <td>$msgMediaType</td>
2152- <td>$mediaTypeList</td>
2153- </tr>
2154- </table>
2155- </form>
2156- </div>
2157- <div class="XiboData">
2158-
2159- </div>
2160- </div>
2161-HTML;
2162- echo $xiboGrid;
2163+ Theme::Set('id', $id);
2164+ Theme::Set('filter_id', 'XiboFilterPinned' . uniqid('filter'));
2165+ Theme::Set('pager', ResponseManager::Pager($id));
2166+ Theme::Set('form_meta', '<input type="hidden" name="p" value="mediamanager"><input type="hidden" name="q" value="MediaManagerGrid">');
2167+
2168+ // Module types filter
2169+ $types = $db->GetArray("SELECT Module AS moduleid, Name AS module FROM `module` WHERE Enabled = 1 ORDER BY 2");
2170+ array_unshift($types, array('moduleid' => '', 'module' => 'All'));
2171+ Theme::Set('module_field_list', $types);
2172+
2173+ // Call to render the template
2174+ Theme::Render('homepage_mediamanager');
2175 }
2176
2177 public function MediaManagerGrid()
2178@@ -105,40 +65,22 @@
2179 $user =& $this->user;
2180 $response = new ResponseManager();
2181
2182- $filterLayout = Kit::GetParam('filterLayout', _POST, _STRING);
2183- $filterRegion = Kit::GetParam('filterRegion', _POST, _STRING);
2184- $filterMediaName = Kit::GetParam('filterMediaName', _POST, _STRING);
2185- $filterMediaType = Kit::GetParam('filterMediaType', _POST, _STRING);
2186+ $filterLayout = Kit::GetParam('filter_layout_name', _POST, _STRING);
2187+ $filterRegion = Kit::GetParam('filter_region_name', _POST, _STRING);
2188+ $filterMediaName = Kit::GetParam('filter_media_name', _POST, _STRING);
2189+ $filterMediaType = Kit::GetParam('filter_type', _POST, _STRING);
2190+
2191+ setSession('mediamanager', 'filter_layout_name', $filterLayout);
2192+ setSession('mediamanager', 'filter_region_name', $filterRegion);
2193+ setSession('mediamanager', 'filter_media_name', $filterMediaName);
2194+ setSession('mediamanager', 'filter_type', $filterMediaType);
2195+ setSession('mediamanager', 'Filter', Kit::GetParam('XiboFilterPinned', _REQUEST, _CHECKBOX, 'off'));
2196
2197 // We would like a list of all layouts, media and media assignments that this user
2198 // has access to.
2199 $layouts = $user->LayoutList($filterLayout);
2200
2201- $msgLayout = __('Layout');
2202- $msgRegion = __('Region');
2203- $msgMedia = __('Media');
2204- $msgMediaType = __('Type');
2205- $msgSeq = __('Sequence');
2206-
2207- $msgAction = __('Action');
2208- $msgEdit = __('Edit');
2209- $msgDelete = __('Delete');
2210-
2211- $output = <<<END
2212- <div class="info_table">
2213- <table style="width:100%">
2214- <thead>
2215- <tr>
2216- <th>$msgLayout</th>
2217- <th>$msgRegion</th>
2218- <th>$msgMedia</th>
2219- <th>$msgMediaType</th>
2220- <th>$msgSeq</th>
2221- <th>$msgAction</th>
2222- </tr>
2223- </thead>
2224- <tbody>
2225-END;
2226+ $rows = array();
2227
2228 foreach ($layouts as $layout)
2229 {
2230@@ -146,8 +88,6 @@
2231 if (!$layout['edit'])
2232 continue;
2233
2234- Debug::LogEntry($db, 'audit', 'Permission to edit layout ' . $layout['layout'], 'mediamanager', 'MediaManagerGrid');
2235-
2236 // Every layout this user has access to.. get the regions
2237 $layoutXml = new DOMDocument();
2238 $layoutXml->loadXML($layout['xml']);
2239@@ -174,15 +114,13 @@
2240 if ($filterRegion != '' && !stristr($regionName, $filterRegion))
2241 continue;
2242
2243- Debug::LogEntry($db, 'audit', 'Permissions granted for ' . $regionId . ' owned by ' . $ownerId, 'mediamanager', 'MediaManagerGrid');
2244-
2245 // Media
2246 $xpath = new DOMXPath($layoutXml);
2247- $mediaNodes = $xpath->query("//region[@id='$regionId']/media");
2248+ $mediaNodes = $xpath->query("//region[@id='$regionId']/media");
2249 $mediaNodeSequence = 0;
2250
2251- foreach ($mediaNodes as $mediaNode)
2252- {
2253+ foreach ($mediaNodes as $mediaNode)
2254+ {
2255 $mediaId = $mediaNode->getAttribute('id');
2256 $lkId = $mediaNode->getAttribute('lkid');
2257 $mediaOwnerId = ($mediaNode->getAttribute('userId') == '') ? $layout['ownerid'] : $mediaNode->getAttribute('userId');
2258@@ -202,30 +140,35 @@
2259 if ($filterMediaName != '' && !stristr($mediaName, $filterMediaName))
2260 continue;
2261
2262- Debug::LogEntry($db, 'audit', $filterMediaType . ' ' . $mediaType);
2263-
2264- if ($filterMediaType != 'all' && $mediaType != strtolower($filterMediaType))
2265+ if ($filterMediaType != '' && $mediaType != strtolower($filterMediaType))
2266 continue;
2267
2268- $editLink = '<button class="XiboFormButton" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=EditForm&showRegionOptions=0&layoutid=' . $layout['layoutid'] . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '">' . $msgEdit . '</button>';
2269 $mediaNodeSequence++;
2270
2271- $output .= '<tr>';
2272- $output .= ' <td>' . $layout['layout'] . '</td>';
2273- $output .= ' <td>' . $regionName . '</td>';
2274- $output .= ' <td>' . $mediaName . '</td>';
2275- $output .= ' <td>' . $mediaType . '</td>';
2276- $output .= ' <td>' . $mediaNodeSequence . '</td>';
2277- $output .= ' <td>' . $editLink . '</td>';
2278- $output .= '</tr>';
2279+ $layout['region'] = $regionName;
2280+ $layout['media'] = $mediaName;
2281+ $layout['mediatype'] = $mediaType;
2282+ $layout['seq'] = $mediaNodeSequence;
2283+ $layout['buttons'] = array();
2284+
2285+ // Edit
2286+ $layout['buttons'][] = array(
2287+ 'id' => 'homepage_mediamanager_edit_button',
2288+ 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=EditForm&showRegionOptions=0&layoutid=' . $layout['layoutid'] . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId,
2289+ 'text' => __('Edit')
2290+ );
2291+
2292+ $rows[] = $layout;
2293 }
2294 }
2295 }
2296
2297- $output .= '</tbody></table></div>';
2298+ Theme::Set('table_rows', $rows);
2299+
2300+ $output = Theme::RenderReturn('homepage_mediamanager_grid');
2301
2302 $response->SetGridResponse($output);
2303 $response->Respond();
2304 }
2305 }
2306-?>
2307\ No newline at end of file
2308+?>
2309
2310=== modified file 'server/lib/pages/module.class.php'
2311--- server/lib/pages/module.class.php 2013-03-04 22:01:30 +0000
2312+++ server/lib/pages/module.class.php 2013-04-11 16:56:27 +0000
2313@@ -213,6 +213,7 @@
2314 $validExtensions = Kit::GetParam('ValidExtensions', _POST, _STRING, '');
2315 $imageUri = Kit::GetParam('ImageUri', _POST, _STRING);
2316 $enabled = Kit::GetParam('Enabled', _POST, _CHECKBOX);
2317+ $previewEnabled = Kit::GetParam('PreviewEnabled', _POST, _CHECKBOX);
2318
2319 // Validation
2320 if ($moduleId == 0 || $moduleId == '')
2321@@ -222,8 +223,8 @@
2322 trigger_error(__('Image Uri is a required field.'), E_USER_ERROR);
2323
2324 // Deal with the Edit
2325- $SQL = "UPDATE `module` SET ImageUri = '%s', ValidExtensions = '%s', Enabled = %d WHERE ModuleID = %d";
2326- $SQL = sprintf($SQL, $db->escape_string($imageUri), $db->escape_string($validExtensions), $enabled, $moduleId);
2327+ $SQL = "UPDATE `module` SET ImageUri = '%s', ValidExtensions = '%s', Enabled = %d, PreviewEnabled = %d WHERE ModuleID = %d";
2328+ $SQL = sprintf($SQL, $db->escape_string($imageUri), $db->escape_string($validExtensions), $enabled, $previewEnabled, $moduleId);
2329
2330 if (!$db->query($SQL))
2331 {
2332
2333=== modified file 'server/lib/pages/oauth.class.php'
2334--- server/lib/pages/oauth.class.php 2013-03-02 10:30:43 +0000
2335+++ server/lib/pages/oauth.class.php 2013-04-11 16:56:27 +0000
2336@@ -115,9 +115,9 @@
2337
2338 foreach($list as $row)
2339 {
2340- $row['received'] = Kit::ValidateParam($logEntry['received'], _STRING);
2341- $row['notes'] = Kit::ValidateParam($logEntry['notes'], _STRING);
2342- $row['timestamp'] = Kit::ValidateParam($logEntry['timestamp'], _STRING);
2343+ $row['received'] = Kit::ValidateParam($row['received'], _STRING);
2344+ $row['notes'] = Kit::ValidateParam($row['notes'], _STRING);
2345+ $row['timestamp'] = Kit::ValidateParam($row['timestamp'], _STRING);
2346
2347 $rows[] = $row;
2348 }
2349@@ -263,16 +263,16 @@
2350
2351 foreach ($list as $app)
2352 {
2353- $row['application_title'] = Kit::ValidateParam($app['application_title'], _STRING);
2354- $row['enabled'] = Kit::ValidateParam($app['enabled'], _STRING);
2355- $row['status'] = Kit::ValidateParam($app['status'], _STRING);
2356+ $app['application_title'] = Kit::ValidateParam($app['application_title'], _STRING);
2357+ $app['enabled'] = Kit::ValidateParam($app['enabled'], _STRING);
2358+ $app['status'] = Kit::ValidateParam($app['status'], _STRING);
2359
2360 $rows[] = $app;
2361 }
2362
2363 Theme::Set('table_rows', $rows);
2364
2365- $output = Theme::RenderReturn('applications_form_view_log');
2366+ $output = Theme::RenderReturn('application_form_user_applications');
2367
2368 $response->SetFormRequestResponse($output, __('Authorized applications for user'), '650', '450');
2369 $response->AddButton(__('Help'), "XiboHelpRender('index.php?p=help&q=Display&Topic=Schedule&Category=General')");
2370
2371=== modified file 'server/lib/pages/schedule.class.php'
2372--- server/lib/pages/schedule.class.php 2013-03-04 22:01:30 +0000
2373+++ server/lib/pages/schedule.class.php 2013-04-11 16:56:27 +0000
2374@@ -1,7 +1,7 @@
2375 <?php
2376 /*
2377 * Xibo - Digitial Signage - http://www.xibo.org.uk
2378- * Copyright (C) 2006-2012 Daniel Garner
2379+ * Copyright (C) 2006-2013 Daniel Garner
2380 *
2381 * This file is part of Xibo.
2382 *
2383@@ -26,42 +26,71 @@
2384 private $user;
2385
2386 private $lastEventID;
2387- private $eventsList;
2388+ private $eventsList;
2389
2390 /**
2391 * Constructor
2392- * @return
2393- * @param $db Object
2394 */
2395 function __construct(database $db, user $user)
2396 {
2397- $this->db =& $db;
2398- $this->user =& $user;
2399+ $this->db =& $db;
2400+ $this->user =& $user;
2401
2402 require_once('lib/data/schedule.data.class.php');
2403
2404 return true;
2405 }
2406-
2407- function on_page_load()
2408- {
2409- return '';
2410- }
2411-
2412- function echo_page_heading()
2413- {
2414- echo 'Schedule';
2415- return true;
2416- }
2417-
2418+
2419 function displayPage()
2420 {
2421 $db =& $this->db;
2422- $user =& $this->user;
2423-
2424- include_once("template/pages/schedule_view.php");
2425-
2426- return false;
2427+
2428+ // Configure the theme
2429+ $id = uniqid();
2430+ Theme::Set('id', $id);
2431+ Theme::Set('form_meta', '<input type="hidden" name="p" value="schedule"><input type="hidden" name="q" value="DisplayList">');
2432+ Theme::Set('filter_id', 'XiboFilterPinned' . uniqid('filter'));
2433+ Theme::Set('pager', ResponseManager::Pager($id));
2434+
2435+ // Render the Theme and output
2436+ Theme::Render('schedule_page');
2437+ }
2438+
2439+ /**
2440+ * Shows a list of displays
2441+ */
2442+ public function DisplayList()
2443+ {
2444+ $user =& $this->user;
2445+
2446+ $response = new ResponseManager();
2447+ $displayGroupIDs = Kit::GetParam('DisplayGroupIDs', _SESSION, _ARRAY);
2448+
2449+ // Build 2 lists
2450+ $groups = array();
2451+ $displays = array();
2452+
2453+ foreach ($user->DisplayGroupList() as $display) {
2454+
2455+ $display['checked_text'] = (in_array($display['displaygroupid'], $displayGroupIDs)) ? 'checked' : '';
2456+
2457+ if ($display['isdisplayspecific'] == 1) {
2458+ $displays[] = $display;
2459+ }
2460+ else {
2461+ $groups[] = $display;
2462+ }
2463+ }
2464+
2465+ Theme::Set('id', 'DisplayList');
2466+ Theme::Set('group_list_items', $groups);
2467+ Theme::Set('display_list_items', $displays);
2468+
2469+ $output = Theme::RenderReturn('schedule_page_display_list');
2470+
2471+ $response->SetGridResponse($output);
2472+ $response->callBack = 'DisplayListRender';
2473+ $response->Respond();
2474 }
2475
2476 /**
2477@@ -74,7 +103,7 @@
2478 $displayGroupIDs = Kit::GetParam('DisplayGroupIDs', _GET, _ARRAY);
2479
2480 // if we have some displaygroupids then add them to the session info so we can default everything else.
2481- Session::Set('DisplayGroupIDs', $displayGroupIDs);
2482+ Session::Set('DisplayGroupIDs', $displayGroupIDs);
2483
2484 if ($view == 'month')
2485 {
2486@@ -1015,56 +1044,7 @@
2487 return $events;
2488 }
2489
2490- /**
2491- * Shows a list of display groups and displays
2492- * @return
2493- */
2494- public function DisplayFilter()
2495- {
2496- $db =& $this->db;
2497- $user =& $this->user;
2498-
2499- $filterForm = <<<END
2500- <div id="DisplayListFilter">
2501- <form onsubmit="return false">
2502- <input type="hidden" name="p" value="schedule">
2503- <input type="hidden" name="q" value="DisplayList">
2504- <input class="DisplayListInput" type="text" name="name" />
2505- </form>
2506- </div>
2507-END;
2508-
2509- $id = uniqid();
2510-
2511- $xiboGrid = <<<HTML
2512- <div class="XiboGrid" id="$id">
2513- <div class="XiboFilter">
2514- $filterForm
2515- </div>
2516- <div class="XiboData">
2517-
2518- </div>
2519- </div>
2520-HTML;
2521- echo $xiboGrid;
2522- }
2523
2524- /**
2525- * Shows a list of displays
2526- * @return
2527- */
2528- public function DisplayList()
2529- {
2530- $response = new ResponseManager();
2531- $displayGroupIDs = Kit::GetParam('DisplayGroupIDs', _SESSION, _ARRAY);
2532- $output = '';
2533- $output .= '<div id="checkAllForDisplayList" class="scheduleFormCheckAll"><label for="checkAll">' . __('Check All') . '</label><input type="checkbox" name="checkAll"></div>';
2534- $output .= $this->UnorderedListofDisplays(true, $displayGroupIDs);
2535-
2536- $response->SetGridResponse($output);
2537- $response->callBack = 'DisplayListRender';
2538- $response->Respond();
2539- }
2540
2541 /**
2542 * Outputs an unordered list of displays optionally with a form
2543@@ -1431,7 +1411,7 @@
2544 <tr>
2545 <td><label for="rec_range" title="When should this event stop repeating?">Until</label></td>
2546 <td>$rec_range
2547- <input id="repeatTime" type="text" size="12" name="repeatTime" value="00:00" />
2548+ <input id="repeatTime" class="time-pick" type="text" size="12" name="repeatTime" value="00:00" />
2549 </td>
2550 </tr>
2551 END;
2552@@ -1578,7 +1558,7 @@
2553 <tr>
2554 <td><label for="rec_range" title="When should this event stop repeating?">Until</label></td>
2555 <td>$rec_range
2556- <input id="repeatTime" type="text" size="12" name="repeatTime" value="$recToDtText" />
2557+ <input id="repeatTime" class="time-pick" type="text" size="12" name="repeatTime" value="$recToTimeText" />
2558 </td>
2559 </tr>
2560 END;
2561@@ -1630,16 +1610,15 @@
2562 Debug::LogEntry($db, 'audit', 'To DT: ' . $toDT);
2563
2564 // Validate the times
2565- if (!strstr($fromTime, ':') || !strstr($toTime, ':'))
2566- {
2567+ $regEx = '/([01]?[0-9]|2[0-3]):([0-5][0-9])/';
2568+ if (!preg_match($regEx, $fromTime) || !preg_match($regEx, $toTime) || ($repeatTime != '' && !preg_match($regEx, $repeatTime)))
2569 trigger_error(__('Times must be in the format 00:00'), E_USER_ERROR);
2570- }
2571
2572 $fromDT = $datemanager->GetDateFromUS($fromDT, $fromTime);
2573 $toDT = $datemanager->GetDateFromUS($toDT, $toTime);
2574
2575- if ($recToDT != '')
2576- $recToDT = $datemanager->GetDateFromUS($recToDT, $repeatTime);
2577+ if ($recToDT != '')
2578+ $recToDT = $datemanager->GetDateFromUS($recToDT, $repeatTime);
2579
2580 // Validate layout
2581 if ($campaignId == 0)
2582@@ -1719,10 +1698,9 @@
2583 Debug::LogEntry($db, 'audit', 'To DT: ' . $toDT);
2584
2585 // Validate the times
2586- if (!strstr($fromTime, ':') || !strstr($toTime, ':'))
2587- {
2588+ $regEx = '/([01]?[0-9]|2[0-3]):([0-5][0-9])/';
2589+ if (!preg_match($regEx, $fromTime) || !preg_match($regEx, $toTime) || ($repeatTime != '' && !preg_match($regEx, $repeatTime)))
2590 trigger_error(__('Times must be in the format 00:00'), E_USER_ERROR);
2591- }
2592
2593 $fromDT = $datemanager->GetDateFromUS($fromDT, $fromTime);
2594 $toDT = $datemanager->GetDateFromUS($toDT, $toTime);
2595
2596=== modified file 'server/lib/pages/template.class.php'
2597--- server/lib/pages/template.class.php 2013-03-04 22:01:30 +0000
2598+++ server/lib/pages/template.class.php 2013-04-11 16:56:27 +0000
2599@@ -61,9 +61,9 @@
2600
2601 // Field list for a "retired" dropdown list
2602 Theme::Set('is_system_field_list', array(
2603- array('is_systemid' => '-1', 'is_system' => 'All'),
2604- array('is_systemid' => '1', 'is_system' => 'Yes'),
2605- array('is_systemid' => '0', 'is_system' => 'No')
2606+ array('is_systemid' => -1, 'is_system' => 'All'),
2607+ array('is_systemid' => 1, 'is_system' => 'Yes'),
2608+ array('is_systemid' => 0, 'is_system' => 'No')
2609 )
2610 );
2611
2612
2613=== modified file 'server/lib/pages/timeline.class.php'
2614--- server/lib/pages/timeline.class.php 2013-02-16 15:03:26 +0000
2615+++ server/lib/pages/timeline.class.php 2013-04-11 16:56:27 +0000
2616@@ -122,12 +122,13 @@
2617
2618 $regionid = Kit::GetParam('regionid', _GET, _STRING);
2619 $layoutid = Kit::GetParam('layoutid', _GET, _INT);
2620- $top = Kit::GetParam('top', _GET, _INT);
2621- $left = Kit::GetParam('left', _GET, _INT);
2622- $width = Kit::GetParam('width', _GET, _INT);
2623- $height = Kit::GetParam('height', _GET, _INT);
2624+ $top = Kit::GetParam('top', _GET, _DOUBLE);
2625+ $left = Kit::GetParam('left', _GET, _DOUBLE);
2626+ $width = Kit::GetParam('width', _GET, _DOUBLE);
2627+ $height = Kit::GetParam('height', _GET, _DOUBLE);
2628 $layoutWidth = Kit::GetParam('layoutWidth', _GET, _INT);
2629 $layoutHeight = Kit::GetParam('layoutHeight', _GET, _INT);
2630+ $scale = Kit::GetParam('scale', _GET, _DOUBLE);
2631
2632 Kit::ClassLoader('region');
2633 $region = new region($db);
2634@@ -137,18 +138,30 @@
2635 $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutid, $regionid, true);
2636 if (!$regionAuth->edit)
2637 trigger_error(__('You do not have permissions to edit this region'), E_USER_ERROR);
2638+
2639+ // Scale the layout width/height
2640+ $layoutWidth = round($layoutWidth * $scale, 0);
2641+ $layoutHeight = round($layoutHeight * $scale, 0);
2642+
2643+ // Set some information about the form
2644+ Theme::Set('form_id', 'RegionProperties');
2645+ Theme::Set('form_action', 'index.php?p=timeline&q=ManualRegionPosition');
2646+ Theme::Set('form_meta', '<input type="hidden" name="layoutid" value="' . $layoutid .'"><input type="hidden" name="regionid" value="' . $regionid . '"><input id="layoutWidth" type="hidden" name="layoutWidth" value="' . $layoutWidth . '"><input id="layoutHeight" type="hidden" name="layoutHeight" value="' . $layoutHeight . '"><input type="hidden" name="scale" value="' . $scale .'">');
2647
2648- // Include some logic for the region exit transition?
2649- $transition = $region->GetOption($layoutid, $regionid, 'transOut', '');
2650- $duration = $region->GetOption($layoutid, $regionid, 'transOutDuration', 0);
2651- $direction = $region->GetOption($layoutid, $regionid, 'transOutDirection', '');
2652+ // Theme Variables
2653+ Theme::Set('width', round($width * $scale, 0));
2654+ Theme::Set('height', round($height * $scale, 0));
2655+ Theme::Set('top', round($top * $scale, 0));
2656+ Theme::Set('left', round($left * $scale, 0));
2657+ Theme::Set('transition', $region->GetOption($layoutid, $regionid, 'transOut', ''));
2658+ Theme::Set('duration', $region->GetOption($layoutid, $regionid, 'transOutDuration', 0));
2659+ Theme::Set('direction', $region->GetOption($layoutid, $regionid, 'transOutDirection', ''));
2660
2661 // Add none to the list
2662 $transitions = $this->user->TransitionAuth('out');
2663 $transitions[] = array('code' => '', 'transition' => 'None', 'class' => '');
2664-
2665- // Prepare a list of options
2666- $transitionDropdown = Kit::SelectList('transitionType', $transitions, 'code', 'transition', $transition, '', 'class');
2667+
2668+ Theme::Set('transition_field_list', $transitions);
2669
2670 // Compass points for direction
2671 $compassPoints = array(
2672@@ -161,60 +174,18 @@
2673 array('id' => 'W', 'name' => __('West')),
2674 array('id' => 'NW', 'name' => __('North West'))
2675 );
2676-
2677- // Prepare a list of compass points
2678- $directionDropdown = Kit::SelectList('transitionDirection', $compassPoints, 'id', 'name', $direction);
2679-
2680- // Some messages for the form
2681- $msgTransition = __('What transition should be applied when this region is finished?');
2682- $msgDuration = __('The duration for this transition, in milliseconds.');
2683- $msgDirection = __('The direction for this transtion.');
2684-
2685- // Construct the form
2686- $form = <<<END
2687- <form id="RegionProperties" class="XiboForm" method="post" action="index.php?p=layout&q=ManualRegionPosition">
2688- <input type="hidden" name="layoutid" value="$layoutid">
2689- <input type="hidden" name="regionid" value="$regionid">
2690- <input id="layoutWidth" type="hidden" name="layoutWidth" value="$layoutWidth">
2691- <input id="layoutHeight" type="hidden" name="layoutHeight" value="$layoutHeight">
2692- <table>
2693- <tr>
2694- <td><label for="name" title="Name of the Region">Name</label></td>
2695- <td><input name="name" type="text" id="name" value="$regionName" tabindex="1" /></td>
2696- </tr>
2697- <tr>
2698- <td><label for="top" title="Offset from the Top Corner">Top Offset</label></td>
2699- <td><input name="top" type="text" id="top" value="$top" tabindex="2" /></td>
2700- </tr>
2701- <tr>
2702- <td><label for="left" title="Offset from the Left Corner">Left Offset</label></td>
2703- <td><input name="left" type="text" id="left" value="$left" tabindex="3" /></td>
2704- </tr>
2705- <tr>
2706- <td><label for="width" title="Width of the Region">Width</label></td>
2707- <td><input name="width" type="text" id="width" value="$width" tabindex="4" /></td>
2708- </tr>
2709- <tr>
2710- <td><label for="height" title="Height of the Region">Height</label></td>
2711- <td><input name="height" type="text" id="height" value="$height" tabindex="5" /></td>
2712- </tr>
2713- <tr>
2714- <td><label for="tranisitionType" title="$msgTransition">$msgTransition</label></td>
2715- <td>$transitionDropdown</td>
2716- </tr>
2717- <tr class="transitionDuration">
2718- <td><label for="transitionDuration">$msgDuration</label></td>
2719- <td><input type="text" class="numeric" name="transitionDuration" id="transitionDuration" value="$duration" /></td>
2720- </tr>
2721- <tr class="transitionDirection">
2722- <td><label for="transitionDirection">$msgDirection</label></td>
2723- <td>$directionDropdown</td>
2724- </tr>
2725- </table>
2726- </form>
2727-END;
2728-
2729- $response->SetFormRequestResponse($form, __('Manual Region Positioning'), '350px', '275px', 'transitionFormLoad');
2730+
2731+ Theme::Set('direction_field_list', $compassPoints);
2732+
2733+ if (count($this->user->TransitionAuth('out')) > 0) {
2734+ $form = Theme::RenderReturn('region_form_options');
2735+ }
2736+ else {
2737+ $form = Theme::RenderReturn('region_form_options_no_transition');
2738+ }
2739+
2740+
2741+ $response->SetFormRequestResponse($form, __('Region Options'), '350px', '275px', 'transitionFormLoad');
2742 $response->AddButton(__('Cancel'), 'XiboDialogClose()');
2743 $response->AddButton(__('Save'), '$("#RegionProperties").submit()');
2744 $response->AddButton(__('Set Full Screen'), 'setFullScreenLayout()');
2745@@ -234,6 +205,13 @@
2746 $left = Kit::GetParam('left', _POST, _INT);
2747 $width = Kit::GetParam('width', _POST, _INT);
2748 $height = Kit::GetParam('height', _POST, _INT);
2749+ $scale = Kit::GetParam('scale', _POST, _DOUBLE);
2750+
2751+ // Adjust the dimensions
2752+ $top = $top / $scale;
2753+ $left = $left / $scale;
2754+ $width = $width / $scale;
2755+ $height = $height / $scale;
2756
2757 // Transitions?
2758 $transitionType = Kit::GetParam('transitionType', _POST, _WORD);
2759@@ -344,7 +322,7 @@
2760
2761 //we can delete
2762 $form = <<<END
2763- <form id="RegionDeleteForm" class="XiboForm" method="post" action="index.php?p=layout&q=DeleteRegion">
2764+ <form id="RegionDeleteForm" class="XiboForm" method="post" action="index.php?p=timeline&q=DeleteRegion">
2765 <input type="hidden" name="layoutid" value="$layoutid">
2766 <input type="hidden" name="regionid" value="$regionid">
2767 <p>$msgDelete $msgDelete2</p>
2768@@ -445,7 +423,7 @@
2769 // We want to load a new form
2770 $response->SetFormSubmitResponse(sprintf(__('%d Media Items Assigned'), count($mediaList)));
2771 $response->loadForm = true;
2772- $response->loadFormUri = "index.php?p=layout&layoutid=$layoutId&regionid=$regionId&q=RegionOptions";
2773+ $response->loadFormUri = "index.php?p=timeline&layoutid=$layoutId&regionid=$regionId&q=Timeline";
2774 $response->Respond();
2775 }
2776
2777@@ -554,7 +532,7 @@
2778 trigger_error(__("You do not have permissions to edit this regions permissions"), E_USER_ERROR);
2779
2780 // Form content
2781- $form = '<form id="RegionPermissionsForm" class="XiboForm" method="post" action="index.php?p=layout&q=RegionPermissions">';
2782+ $form = '<form id="RegionPermissionsForm" class="XiboForm" method="post" action="index.php?p=timeline&q=RegionPermissions">';
2783 $form .= '<input type="hidden" name="layoutid" value="' . $layoutid . '" />';
2784 $form .= '<input type="hidden" name="regionid" value="' . $regionid . '" />';
2785 $form .= '<div class="dialog_table">';
2786@@ -624,7 +602,7 @@
2787 $region = new region($db);
2788 $ownerId = $region->GetOwnerId($layoutId, $regionId);
2789
2790- $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutid, $regionId, true);
2791+ $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutId, $regionId, true);
2792 if (!$regionAuth->modifyPermissions)
2793 trigger_error(__('You do not have permissions to edit this regions permissions'), E_USER_ERROR);
2794
2795@@ -748,7 +726,7 @@
2796
2797 $response->html .= '<li class="timelineModuleListItem">';
2798 $response->html .= ' <a class="XiboFormButton timelineModuleButtonAnchor" title="' . $title . '" href="' . $uri . '">';
2799- $response->html .= ' <img class="timelineModuleButtonImage" src="' . $img . '" alt="' . __('Module Image') . '" />';
2800+ $response->html .= Theme::Image($img, 'timelineModuleButtonImage');
2801 $response->html .= ' <span class="timelineModuleButtonText">' . $caption . '</span>';
2802 $response->html .= ' </a>';
2803 $response->html .= '</li>';
2804@@ -829,9 +807,11 @@
2805 if ($auth->modifyPermissions)
2806 $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=PermissionsForm&layoutid=' . $layoutId . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="Click to change permissions for this media">' . __('Permissions') . '</a></li>';
2807
2808- $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=in&layoutid=' . $layoutId . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('In Transition') . '</a></li>';
2809- $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=out&layoutid=' . $layoutId . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('Out Transition') . '</a></li>';
2810-
2811+ if (count($this->user->TransitionAuth('in')) > 0)
2812+ $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=in&layoutid=' . $layoutId . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('In Transition') . '</a></li>';
2813+
2814+ if (count($this->user->TransitionAuth('out')) > 0)
2815+ $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=out&layoutid=' . $layoutId . '&regionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('Out Transition') . '</a></li>';
2816
2817 $response->html .= ' </ul>';
2818
2819
2820=== modified file 'server/lib/pages/user.class.php'
2821--- server/lib/pages/user.class.php 2013-03-02 12:38:40 +0000
2822+++ server/lib/pages/user.class.php 2013-04-11 16:56:27 +0000
2823@@ -666,7 +666,6 @@
2824 // Set some information about the form
2825 Theme::Set('form_id', 'ChangePasswordForm');
2826 Theme::Set('form_action', 'index.php?p=user&q=ChangePassword');
2827- Theme::Set('form_meta', '<input type="hidden" name="UserId" value="' . $userId . '" />');
2828
2829 $form = Theme::RenderReturn('user_form_change_password');
2830
2831@@ -717,7 +716,7 @@
2832
2833 $form = Theme::RenderReturn('user_form_set_password');
2834
2835- $response->SetFormRequestResponse($form, __('Change Password'), '450', '300');
2836+ $response->SetFormRequestResponse($form, __('Set Password'), '450', '300');
2837 $response->AddButton(__('Help'), 'XiboHelpRender("' . HelpManager::Link('User', 'SetPassword') . '")');
2838 $response->AddButton(__('Close'), 'XiboDialogClose()');
2839 $response->AddButton(__('Save'), '$("#SetPasswordForm").submit()');
2840@@ -735,7 +734,7 @@
2841 $newPassword = Kit::GetParam('newPassword', _POST, _STRING);
2842 $retypeNewPassword = Kit::GetParam('retypeNewPassword', _POST, _STRING);
2843
2844- $userId = Kit::GetParam('userId', _GET, _INT);
2845+ $userId = Kit::GetParam('UserId', _POST, _INT);
2846
2847 // Check we are an admin
2848 if ($this->user->usertypeid != 1)
2849
2850=== modified file 'server/lib/service/service.wsdl'
2851--- server/lib/service/service.wsdl 2011-09-01 20:42:49 +0000
2852+++ server/lib/service/service.wsdl 2013-04-11 16:56:27 +0000
2853@@ -102,7 +102,7 @@
2854 </message>
2855 <portType name="xmdsPortType">
2856 <operation name="RegisterDisplay">
2857- <documentation>Registered the Display on the Xibo Network</documentation>
2858+ <documentation>Register the Display with the CMS</documentation>
2859 <input message="tns:RegisterDisplayRequest"/>
2860 <output message="tns:RegisterDisplayResponse"/>
2861 </operation>
2862
2863=== modified file 'server/lib/service/xmdssoap.class.php'
2864--- server/lib/service/xmdssoap.class.php 2013-03-04 22:01:30 +0000
2865+++ server/lib/service/xmdssoap.class.php 2013-04-11 16:56:27 +0000
2866@@ -59,7 +59,7 @@
2867
2868 // Make sure we are talking the same language
2869 if (!$this->CheckVersion($version))
2870- throw new SoapFault('Sender', 'Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk');
2871+ throw new SoapFault('Sender', 'Your client is not of the correct version for communication with this server.');
2872
2873 Debug::LogEntry($db, "audit", "[IN]", "xmds", "RegisterDisplay");
2874 Debug::LogEntry($db, "audit", "serverKey [$serverKey], hardwareKey [$hardwareKey], displayName [$displayName]", "xmds", "RegisterDisplay");
2875@@ -144,7 +144,7 @@
2876
2877 // Make sure we are talking the same language
2878 if (!$this->CheckVersion($version))
2879- throw new SoapFault('Sender', 'Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk');
2880+ throw new SoapFault('Sender', 'Your client is not of the correct version for communication with this server.');
2881
2882 // Make sure we are sticking to our bandwidth limit
2883 if (!$this->CheckBandwidth())
2884@@ -403,7 +403,7 @@
2885 // Make sure we are talking the same language
2886 if (!$this->CheckVersion($version))
2887 {
2888- throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2889+ throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server.");
2890 }
2891
2892 // Make sure we are sticking to our bandwidth limit
2893@@ -485,7 +485,7 @@
2894
2895 // Make sure we are talking the same language
2896 if (!$this->CheckVersion($version))
2897- throw new SoapFault('Sender', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2898+ throw new SoapFault('Sender', "Your client is not of the correct version for communication with this server.");
2899
2900 // Make sure we are sticking to our bandwidth limit
2901 if (!$this->CheckBandwidth())
2902@@ -615,7 +615,7 @@
2903 // Make sure we are talking the same language
2904 if (!$this->CheckVersion($version))
2905 {
2906- throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk", $serverKey);
2907+ throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server.", $serverKey);
2908 }
2909
2910 // Make sure we are sticking to our bandwidth limit
2911@@ -699,7 +699,7 @@
2912 // Make sure we are talking the same language
2913 if (!$this->CheckVersion($version))
2914 {
2915- throw new SoapFault('Sender', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2916+ throw new SoapFault('Sender', "Your client is not of the correct version for communication with this server.");
2917 }
2918
2919 // Make sure we are sticking to our bandwidth limit
2920@@ -815,7 +815,7 @@
2921 // Make sure we are talking the same language
2922 if (!$this->CheckVersion($version))
2923 {
2924- throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2925+ throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server.");
2926 }
2927
2928 // Make sure we are sticking to our bandwidth limit
2929@@ -909,7 +909,7 @@
2930
2931 // Make sure we are talking the same language
2932 if (!$this->CheckVersion($version))
2933- throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2934+ throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server.");
2935
2936 // Make sure we are sticking to our bandwidth limit
2937 if (!$this->CheckBandwidth())
2938@@ -981,7 +981,7 @@
2939
2940 // Make sure we are talking the same language
2941 if (!$this->CheckVersion($version))
2942- throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server. You can get the latest from http://www.xibo.org.uk");
2943+ throw new SoapFault('Receiver', "Your client is not of the correct version for communication with this server.");
2944
2945 // Make sure we are sticking to our bandwidth limit
2946 if (!$this->CheckBandwidth())
2947@@ -989,9 +989,7 @@
2948
2949 // Auth this request...
2950 if (!$this->AuthDisplay($hardwareKey))
2951- {
2952 throw new SoapFault('Receiver', "This display client is not licensed");
2953- }
2954
2955 // What type of module is this?
2956 Kit::ClassLoader('region');
2957@@ -1001,6 +999,11 @@
2958 if ($type == '')
2959 throw new SoapFault('Receiver', 'Unable to get the media node type');
2960
2961+ // Dummy User Object
2962+ $user = new User($db);
2963+ $user->userid = 0;
2964+ $user->usertypeid = 1;
2965+
2966 // Get the resource from the module
2967 require_once('modules/' . $type . '.module.php');
2968 $module = new $type($db, $user, $mediaId, $layoutId, $regionId);
2969@@ -1053,7 +1056,7 @@
2970 $msgTo = Kit::ValidateParam(Config::GetSetting($db, "mail_to"),_PASSWORD);
2971 $msgFrom = Kit::ValidateParam(Config::GetSetting($db, "mail_from"),_PASSWORD);
2972
2973- $subject = sprintf(__("Xibo Recovery for Display %s"),$row[7]);
2974+ $subject = sprintf(__("Recovery for Display %s"),$row[7]);
2975 $body = sprintf(__("Display %s with ID %d is now back online."), $row[7], $row[3]);
2976
2977 Kit::SendEmail($msgTo, $msgFrom, $subject, $body);
2978
2979=== modified file 'server/maintenance.php'
2980--- server/maintenance.php 2012-04-12 06:41:56 +0000
2981+++ server/maintenance.php 2013-04-11 16:56:27 +0000
2982@@ -93,10 +93,9 @@
2983 print '<html>';
2984 print ' <head>';
2985 print ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
2986-print ' <title>Xibo Open Source Digital Signage - Maintenance</title>';
2987+print ' <title>Open Source Digital Signage - Maintenance</title>';
2988 print ' </head>';
2989 print '<body>';
2990-print ' <!-- Copyright 2010 - Alex Harrington, part of Xibo Open Source Digital Signage -->';
2991
2992 // Should the Scheduled Task script be running at all?
2993 if(Config::GetSetting($db, "MAINTENANCE_ENABLED")=="Off")
2994@@ -195,7 +194,7 @@
2995 {
2996 if ((($email_alert == 1) && $alwaysAlert) || (($loggedin == 1) && ($email_alert == 1)))
2997 {
2998- $subject = sprintf(__("Xibo Email Alert for Display %s"),$display_name);
2999+ $subject = sprintf(__("Email Alert for Display %s"),$display_name);
3000 $body = sprintf(__("Display %s with ID %d was last seen at %s."),$display_name,$displayid,$last_seen);
3001
3002 if (Kit::SendEmail($msgTo, $msgFrom, $subject, $body))
3003
3004=== added directory 'server/manual'
3005=== added directory 'server/manual/content'
3006=== added directory 'server/manual/content/admin'
3007=== added file 'server/manual/content/admin/advanced.php'
3008--- server/manual/content/admin/advanced.php 1970-01-01 00:00:00 +0000
3009+++ server/manual/content/admin/advanced.php 2013-04-11 16:56:27 +0000
3010@@ -0,0 +1,57 @@
3011+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3012+<?php include('../../template.php'); ?>
3013+<html>
3014+ <head>
3015+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3016+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
3017+ <link rel=stylesheet type="text/css" href="../../css/doc.css">
3018+ <meta http-equiv="Content-Type" content="text/html" />
3019+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
3020+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
3021+
3022+ <link href="img/favicon.ico" rel="shortcut icon"/>
3023+ <!-- Javascript Libraries -->
3024+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
3025+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
3026+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
3027+ </head>
3028+ <body>
3029+
3030+ <h1>Advanced</h1>
3031+ <p>The Advanced page is mainly used by system administrator to help troubleshooting system problem or reporting fault
3032+ to the <?php echo PRODUCT_NAME; ?> xstreamedia team for assistance</p>
3033+ <p>Click Advanced from the Navigation Bar. System loads the Log page by default.</p>
3034+
3035+ <blockquote>
3036+ <a name="Error_Log_Help" id="Error_Log_Help"></a><h3>System Log</h3>
3037+
3038+ <p><img alt="SA Advanced" src="sa_advanced.png"
3039+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3040+ width="803" height="161"></p>
3041+
3042+ <p>The system log is used to help troubleshoot problems with <?php echo PRODUCT_NAME; ?>. When you encounter an error it will be logged
3043+ and listed in the system here. These error messages can help the xstreamedia team solve your problem.</p>
3044+ <p>Truncating the log helps you to troubleshoot a problem by clearing the current error messages</p>
3045+ <p>The page and sub page items helps locate where the error has been generated from.</p>
3046+ <ul>
3047+ <li><strong>Log Date</strong><p> states the date and time the error message was logged.</p></li>
3048+ <li><strong>Page</strong><p> states the page that the error has been generated from.</p></li>
3049+ <li><strong>Function</strong><p>state function that the error message has been generated from.</p></li>
3050+ <li><strong>Message</strong><p> gives details of what error has occurred in the system.</p></li>
3051+ </ul>
3052+ <a name="Session" id="Session"></a><h3>Sessions</h3>
3053+ <p>Sessions provide details of the current user activity on the network</p>
3054+ <p><img alt="SA Advanced Session" src="sa_advanced_sessions.png"
3055+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3056+ width="805" height="208"></p>
3057+
3058+ <a name="Report_Fault" id="Report_Fault"></a><h3>Report Fault</h3>
3059+ <p>Simple instruaction on the collection of system error and report fault to <?php echo PRODUCT_NAME; ?> xsteamedia team.</p>
3060+
3061+ <a name="License" id="License"></a><h3>License Information</h3>
3062+ <p>The license page provides details of all the relevant licenses for the system.</p>
3063+ </blockquote>
3064+
3065+ <?php include('../../template/footer.php'); ?>
3066+ </body>
3067+</html>
3068
3069=== added file 'server/manual/content/admin/api.php'
3070--- server/manual/content/admin/api.php 1970-01-01 00:00:00 +0000
3071+++ server/manual/content/admin/api.php 2013-04-11 16:56:27 +0000
3072@@ -0,0 +1,396 @@
3073+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3074+<?php include('../../template.php'); ?>
3075+<html>
3076+ <head>
3077+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3078+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
3079+ <link rel=stylesheet type="text/css" href="../../css/doc.css">
3080+ <meta http-equiv="Content-Type" content="text/html" />
3081+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
3082+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
3083+
3084+ <link href="img/favicon.ico" rel="shortcut icon"/>
3085+ <!-- Javascript Libraries -->
3086+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
3087+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
3088+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
3089+ </head>
3090+ <body>
3091+ <h1><?php echo PRODUCT_NAME; ?> API</h1>
3092+
3093+ <p><img alt="SA <?php echo PRODUCT_NAME; ?> API" src="sa_api.png"
3094+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3095+ width="805" height="149"></p>
3096+
3097+ <a name="Authorization" id="Authorization"></a><h2>Authorization</h2>
3098+ <p>OAuth will be used to provide authorization for access to the <?php echo PRODUCT_NAME; ?> API.</p>
3099+
3100+<blockquote>
3101+ <a name="OAuth_Information" id="OAuth_Information"></a><h3>OAuth Information</h3>
3102+ <p>Service location: services.php</p>
3103+ <p>OAuth methods:</p>
3104+
3105+ <ul>
3106+ <li> XRDS: services.php?xrds</li>
3107+ <li> Request Token: services.php?service=oauth&amp;method=request_token</li>
3108+ <li> Authorize Token: index.php?p=oauth&amp;q=authorize</li>
3109+ <li> Access Token: services.php?service=oauth&amp;method=access_token</li>
3110+ </ul>
3111+
3112+ <a name="XRDS" id="XRDS"></a><h3>XRDS</h3>
3113+ <pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
3114+ &lt;XRDS xmlns="xri://$xrds"&gt;
3115+ &lt;XRD xmlns:simple="<a href="http://xrds-simple.net/core/1.0" class="external free" title="http://xrds-simple.net/core/1.0"
3116+ rel="nofollow">http://xrds-simple.net/core/1.0</a>"
3117+ xmlns="xri://$XRD*($v*2.0)" xmlns:openid="<a href="http://openid.net/xmlns/1.0" class="external free" title="http://openid.net/xmlns/1.0" rel="nofollow">http://openid.net/xmlns/1.0</a>" version="2.0" xml:id="main"&gt;
3118+ &lt;Type&gt;xri://$xrds*simple&lt;/Type&gt;
3119+ &lt;Service&gt;
3120+ &lt;Type&gt;<a href="http://oauth.net/discovery/1.0" class="external free" title="http://oauth.net/discovery/1.0" rel="nofollow">http://oauth.net/discovery/1.0</a>&lt;/Type&gt;
3121+ &lt;URI&gt;#main&lt;/URI&gt;
3122+ &lt;/Service&gt;
3123+ &lt;Service&gt;
3124+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/endpoint/request" class="external free" title="http://oauth.net/core/1.0/endpoint/request" rel="nofollow">http://oauth.net/core/1.0/endpoint/request</a>&lt;/Type&gt;
3125+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/parameters/auth-header" class="external free" title="http://oauth.net/core/1.0/parameters/auth-header" rel="nofollow">http://oauth.net/core/1.0/parameters/auth-header</a>&lt;/Type&gt;
3126+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/parameters/uri-query" class="external free" title="http://oauth.net/core/1.0/parameters/uri-query" rel="nofollow">http://oauth.net/core/1.0/parameters/uri-query</a>&lt;/Type&gt;
3127+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/signature/HMAC-SHA1" class="external free" title="http://oauth.net/core/1.0/signature/HMAC-SHA1" rel="nofollow">http://oauth.net/core/1.0/signature/HMAC-SHA1</a>&lt;/Type&gt;
3128+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/signature/PLAINTEXT" class="external free" title="http://oauth.net/core/1.0/signature/PLAINTEXT" rel="nofollow">http://oauth.net/core/1.0/signature/PLAINTEXT</a>&lt;/Type&gt;
3129+ &lt;URI&gt;http://<a href="/index.php?title=Template:XRDS_LOCATION&amp;action=edit&amp;redlink=1" class="new" title="Template:XRDS LOCATION (page does not exist)">Template:XRDS LOCATION</a>/services.php?service=oauth&amp;method=request_token&lt;/URI&gt;
3130+ &lt;/Service&gt;
3131+ &lt;Service&gt;
3132+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/endpoint/authorize" class="external free" title="http://oauth.net/core/1.0/endpoint/authorize" rel="nofollow">http://oauth.net/core/1.0/endpoint/authorize</a>&lt;/Type&gt;
3133+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/parameters/uri-query" class="external free" title="http://oauth.net/core/1.0/parameters/uri-query" rel="nofollow">http://oauth.net/core/1.0/parameters/uri-query</a>&lt;/Type&gt;
3134+ &lt;URI&gt;http://<a href="/index.php?title=Template:XRDS_LOCATION&amp;action=edit&amp;redlink=1" class="new" title="Template:XRDS LOCATION (page does not exist)">Template:XRDS LOCATION</a>/index.php?p=oauth&amp;q=authorize&lt;/URI&gt;
3135+ &lt;/Service&gt;
3136+ &lt;Service&gt;
3137+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/endpoint/access" class="external free" title="http://oauth.net/core/1.0/endpoint/access" rel="nofollow">http://oauth.net/core/1.0/endpoint/access</a>&lt;/Type&gt;
3138+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/parameters/auth-header" class="external free" title="http://oauth.net/core/1.0/parameters/auth-header" rel="nofollow">http://oauth.net/core/1.0/parameters/auth-header</a>&lt;/Type&gt;
3139+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/parameters/uri-query" class="external free" title="http://oauth.net/core/1.0/parameters/uri-query" rel="nofollow">http://oauth.net/core/1.0/parameters/uri-query</a>&lt;/Type&gt;
3140+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/signature/HMAC-SHA1" class="external free" title="http://oauth.net/core/1.0/signature/HMAC-SHA1" rel="nofollow">http://oauth.net/core/1.0/signature/HMAC-SHA1</a>&lt;/Type&gt;
3141+ &lt;Type&gt;<a href="http://oauth.net/core/1.0/signature/PLAINTEXT" class="external free" title="http://oauth.net/core/1.0/signature/PLAINTEXT" rel="nofollow">http://oauth.net/core/1.0/signature/PLAINTEXT</a>&lt;/Type&gt;
3142+ &lt;URI&gt;http://<a href="/index.php?title=Template:XRDS_LOCATION&amp;action=edit&amp;redlink=1" class="new" title="Template:XRDS LOCATION (page does not exist)">Template:XRDS LOCATION</a>/services.php?service=oauth&amp;method=access_token&lt;/URI&gt;
3143+ &lt;/Service&gt;
3144+ &lt;/XRD&gt;
3145+ &lt;/XRDS&gt;
3146+ </pre>
3147+
3148+ <a name="Registered_Applications" id="Registered_Applications"></a><h3>Registered Applications</h3>
3149+ <p>You must obtain a consumer_key and consumer_secret for your application. Keys for "Supported" applications
3150+ will be shipped with <?php echo PRODUCT_NAME; ?> meaning no extra steps are required. If you have made your own application you will need
3151+ to register it with your <?php echo PRODUCT_NAME; ?> Server using the following address:</p>
3152+ <p>Register Service: index.php?p=oauth</p>
3153+ <p>You will be asked for:</p>
3154+ <ul>
3155+ <li>Your Name</li>
3156+ <li> Your email address</li>
3157+ <li> A URL for your Application</li>
3158+ <li> A Callback URL</li>
3159+ </ul>
3160+ <p><?php echo PRODUCT_NAME; ?> will (at a later date) have a UI for displaying all registered applications.</p>
3161+
3162+ <a name="Callback_URL" id="Callback_URL"></a><h3>Callback URL</h3>
3163+ <p>The Callback URL will be automatically called by <?php echo PRODUCT_NAME; ?> on a completely Authorize request. It will be called regardless
3164+ of whether the authorization was successful and will contain an OAuth message indicating the authorize success.</p>
3165+ <p>If you do not specify a Callback URL <?php echo PRODUCT_NAME; ?> will show a message requesting the user return to the application once authorized.</p>
3166+</blockquote>
3167+
3168+ <a name="Request_Formats" id="Request_Formats"></a><h2>Request Formats</h2>
3169+ <p><?php echo PRODUCT_NAME; ?> supports the following request formats</p>
3170+
3171+ <ul><li>REST</li></ul>
3172+
3173+<blockquote>
3174+ <a name="REST" id="REST"></a><h3>REST</h3>
3175+ <p>A simple POST or GET.</p>
3176+ <p>To request the <?php echo PRODUCT_NAME; ?> Version method:</p>
3177+ <pre>services.php?service=rest&amp;method=version</pre>
3178+ <p>By default the response type is xml. To get a different response type send "&amp;response="</p>
3179+</blockquote>
3180+
3181+ <a name="Response_Types" id="Response_Types"></a><h2>Response Types</h2>
3182+ <p><?php echo PRODUCT_NAME; ?> supports the following response types</p>
3183+
3184+ <blockquote>
3185+ <ul><li>JSON</li>
3186+ <li> XML</li></ul>
3187+
3188+ <a name="JSON" id="JSON"></a><h3>JSON</h3>
3189+ <p>To return a JSON object specify the response to be JSON (response="json")</p>
3190+ <p>A method call returns:</p>
3191+ <pre><?php echo PRODUCT_NAME; ?>Api({
3192+ "stat":"ok",
3193+ "response": {...}
3194+ })
3195+ </pre>
3196+
3197+ <p>A failure call returns:</p>
3198+ <pre><?php echo PRODUCT_NAME; ?>Api({
3199+ "stat":"error",
3200+ "error": {
3201+ "code": "[error-code]",
3202+ "message": "[error-message]"
3203+ }
3204+ })
3205+ </pre>
3206+
3207+ <a name="XML" id="XML"></a><h3>XML</h3>
3208+ <p>A successful call returns this:</p>
3209+ <pre>&lt;?xml version="1.0" encoding="utf-8"&nbsp;?&gt;
3210+ &lt;rsp status="ok"&gt;
3211+ [xml-payload-here]
3212+ &lt;/rsp&gt;
3213+ </pre>
3214+ <p>A failure call returns this:</p>
3215+ <pre>&lt;?xml version="1.0" encoding="utf-8"&nbsp;?&gt;
3216+ &lt;rsp status="error"&gt;
3217+ &lt;error code="[error-code]" message="[error-message]"
3218+ &lt;/rsp&gt;
3219+ </pre>
3220+</blockquote>
3221+
3222+ <a name="Error_Codes" id="Error_Codes"></a><h2>Error Codes</h2>
3223+ <p>A complete list of error codes can be found here: <a href="http://wiki.<?php echo PRODUCT_NAME; ?>.org.uk/wiki/Error_codes"
3224+ class="external free" title="http://wiki.<?php echo PRODUCT_NAME; ?>.org.uk/wiki/Error_codes" rel="nofollow">http://wiki.<?php echo PRODUCT_NAME; ?>.org.uk/wiki/Error_codes</a></p>
3225+ <p>A list of the potential error codes from each method call can be found with the documentation of that call.</p>
3226+
3227+ <a name="Methods" id="Methods"></a><h2>Methods</h2>
3228+ <p>Transactions supported by <?php echo PRODUCT_NAME; ?></p>
3229+
3230+ <blockquote>
3231+ <a name="Displays" id="Displays"></a><h3>Displays</h3>
3232+ <ul><li>DisplayList</li>
3233+ <li>DisplayEdit</li>
3234+ <li>DisplayRetire</li>
3235+ <li>DisplayDelete</li>
3236+ <li>DisplayUserGroupSecurity</li>
3237+ <li>DisplayUserGroupEdit</li>
3238+ </ul>
3239+
3240+ <a name="DisplayGroups" id="DisplayGroups"></a><h3>DisplayGroups</h3>
3241+ <ul><li> DisplayGroupList</li>
3242+ <li> DisplayGroupAdd</li>
3243+ <li> DisplayGroupEdit</li>
3244+ <li> DisplayGroupDelete</li>
3245+ <li> DisplayGroupMembersList</li>
3246+ <li> DisplayGroupMembersEdit</li>
3247+ <li> DisplayGroupUserGroupList</li>
3248+ <li> DisplayGroupUserGroupEdit</li></ul>
3249+
3250+ <a name="Layout" id="Layout"></a><h3>Layout</h3>
3251+ <ul><li> LayoutList</li>
3252+ <li> LayoutAdd</li>
3253+ <li> LayoutEdit</li>
3254+ <li> LayoutCopy</li>
3255+ <li> LayoutDelete</li>
3256+ <li> LayoutRetire</li>
3257+ <li> LayoutBackgroundList</li>
3258+ <li> LayoutBackgroundEdit</li>
3259+ <li> LayoutGetXlf</li>
3260+ <li> LayoutRegionList</li>
3261+ <li> LayoutRegionAdd</li><li> LayoutRegionEdit</li>
3262+ <li> LayoutRegionPosition</li><li> LayoutRegionTimelineList</li>
3263+ <li> LayoutRegionMediaAdd</li>
3264+ <li> LayoutRegionMediaReorder</li>
3265+ <li> LayoutRegionMediaDelete</li>
3266+ <li> LayoutRegionLibraryAdd</li>
3267+ <li> LayoutRegionMediaEdit</li>
3268+ <li> LayoutRegionMediaDetails</li></ul>
3269+
3270+ <a name="Library" id="Library"></a><h3>Library</h3>
3271+ <ul><li> LibraryMediaFileUpload</li>
3272+ <li> LibraryMediaFileRevise</li>
3273+ <li> LibraryMediaAdd</li>
3274+ <li> LibraryMediaEdit</li>
3275+ <li> LibraryMediaRetire</li>
3276+ <li> LibraryMediaDownload</li>
3277+ <li> LibraryMediaList</li></ul>
3278+
3279+ <a name="Schedule" id="Schedule"></a><h3>Schedule</h3>
3280+ <ul><li> ScheduleList</li>
3281+ <li> ScheduleAdd</li>
3282+ <li> ScheduleEdit</li>
3283+ <li> ScheduleDelete</li></ul>
3284+
3285+ <a name="Template" id="Template"></a><h3>Template</h3>
3286+ <ul><li> TemplateList</li>
3287+ <li> TemplateDelete</li></ul>
3288+
3289+ <a name="Resolution" id="Resolution"></a><h3>Resolution</h3>
3290+ <ul><li> ResolutionList</li></ul>
3291+
3292+ <a name="Modules" id="Modules"></a><h3>Modules</h3>
3293+ <ul><li> ModuleList</li></ul>
3294+
3295+ <a name="Other" id="Other"></a><h3>Other</h3>
3296+ <ul><li> Version</li>
3297+ <li> ServerStatus</li></ul>
3298+ </blockquote>
3299+
3300+ <a name="Method_Calls" id="Method_Calls"></a><h2>Method Calls</h2>
3301+
3302+ <blockquote>
3303+ <a name="LayoutAdd" id="LayoutAdd"></a><h3>LayoutAdd</h3>
3304+ <p>Parameters</p>
3305+ <ul><li> layout - The Name of the Layout</li>
3306+ <li> description - The Description of the Layout</li>
3307+ <li> permissionid - PermissionID for the layout</li>
3308+ <li> tags - Tags for the Layout</li>
3309+ <li> templateid - Template for the Layout</li>
3310+ </ul>
3311+
3312+ <p>Response</p>
3313+ <ul><li> layout - The ID of the layout</li></ul>
3314+
3315+ <p>Errors</p>
3316+ <ul><li> Code 1 - Access Denied</li>
3317+ <li> Code 25001 - Layout Name must be between 1 and 50 characters</li>
3318+ <li> Code 25002 - Description must be less than 254 characters</li>
3319+ <li> Code 25003 - All tags combined must be less that 254 characters</li>
3320+ <li> Code 25004 - User already has a layout with this name</li>
3321+ <li> Code 25005 - Database error adding layout</li>
3322+ <li> Code 25006 - Failed to Parse Tags</li>
3323+ <li> Code 25007 - Unable to update layout xml</li>
3324+ <li> Code 25008 - Unable to Delete layout on failure</li>
3325+ </ul>
3326+
3327+ <a name="LayoutEdit" id="LayoutEdit"></a><h3> <span class="mw-headline"> LayoutEdit </span></h3>
3328+ <p>Not implemented</p>
3329+
3330+ <a name="LayoutUpdateXlf" id="LayoutUpdateXlf"></a><h3> <span class="mw-headline"> LayoutUpdateXlf </span></h3>
3331+ <p>Not Implemented</p>
3332+
3333+ <a name="LayoutBackground" id="LayoutBackground"></a><h3> <span class="mw-headline"> LayoutBackground </span></h3>
3334+ <p>Not Implemented</p>
3335+
3336+ <a name="LayoutDelete" id="LayoutDelete"></a><h3> <span class="mw-headline"> LayoutDelete </span></h3>
3337+ <p>Parameters</p>
3338+ <ul><li> layoutId - The ID of the layout to delete</li></ul>
3339+ <p>Response</p>
3340+ <ul><li> success = true</li></ul>
3341+ <p>Errors</p>
3342+ <ul><li> Code 1 - Access Denied</li><li> Code 25008 - Unable to delete layout</li></ul>
3343+
3344+ <a name="TemplateDelete" id="TemplateDelete"></a><h3> <span class="mw-headline"> TemplateDelete </span></h3>
3345+ <p>Parameters</p>
3346+ <ul><li> templateId - The ID of the template to delete</li></ul>
3347+ <p>Response</p>
3348+ <ul><li> success = true</li></ul>
3349+ <p>Errors</p>
3350+ <ul><li> Code 1 - Access Denied</li><li> Code 25105 - Unable to delete template</li></ul>
3351+
3352+ <a name="LibraryMediaFileUpload" id="LibraryMediaFileUpload"></a><h3> <span class="mw-headline"> LibraryMediaFileUpload </span></h3>
3353+ <p>Parameters</p>
3354+ <ul>
3355+ <li> FileID - Null for 1st call</li><li> Chunk Offset</li>
3356+ <li> Check Sum (MD5)</li></ul>
3357+ <p>Response</p>
3358+ <ul><li> FileID</li>
3359+ <li> Offset (file length)</li></ul>
3360+ <p>Errors</p>
3361+ <ul><li> 1 - Access Denied</li>
3362+ <li> 2 - Payload Checksum doesn't match provided checksum</li>
3363+ <li> 3 - Unable to add File record to the Database</li>
3364+ <li> 4 - Library location does not exist</li>
3365+ <li> 5 - Unable to create file in the library location</li>
3366+ <li> 6 - Unable to write to file in the library location</li>
3367+ <li> 7 - File does not exist</li></ul>
3368+
3369+ <a name="LibraryMediaAdd" id="LibraryMediaAdd"></a><h3> <span class="mw-headline"> LibraryMediaAdd </span></h3>
3370+ <p>Parameters </p>
3371+ <ul><li> fileId</li>
3372+ <li>type (image|video|flash|ppt)</li>
3373+ <li> name</li>
3374+ <li>duration</li>
3375+ <li> permissionId (1|2|3)</li>
3376+ <li> fileName (including extension)</li></ul>
3377+ <p>Response</p>
3378+ <ul><li> MediaID</li></ul>
3379+ <p>Errors</p>
3380+ <ul><li> Code 1 - Access Denied</li>
3381+ <li> Code 10 - The Name cannot be longer than 100 characters</li>
3382+ <li> Code 11 - You must enter a duration</li>
3383+ <li> Code 12 - This user already owns media with this name</li>
3384+ <li> Code 13 - Error inserting media into the database</li>
3385+ <li> Code 14 - Cannot clean up after failure</li>
3386+ <li> Code 15 - Cannot store file</li>
3387+ <li> Code 16 - Cannot update stored file location</li>
3388+ <li> Code 18 - Invalid File Extension</li></ul>
3389+
3390+ <a name="LibraryMediaEdit" id="LibraryMediaEdit"></a><h3> <span class="mw-headline"> LibraryMediaEdit </span></h3>
3391+ <p>Parameters</p>
3392+ <ul><li> mediaId</li>
3393+ <li> name</li>
3394+ <li>duration</li>
3395+ <li> permissionId (1|2|3)</li>
3396+ </ul>
3397+ <p>Response</p>
3398+ <ul><li> success</li></ul>
3399+ <p>Errors</p>
3400+ <ul><li> 1 - Access Denied</li>
3401+ <li> 10 - The Name cannot be longer than 100 characters</li>
3402+ <li> 11 - You must enter a duration</li>
3403+ <li> 12 - This user already owns media with this name</li>
3404+ <li> 30 - Database failure updating media</li>
3405+ </ul>
3406+
3407+ <a name="LibraryMediaFileRevise" id="LibraryMediaFileRevise"></a><h3> <span class="mw-headline"> LibraryMediaFileRevise </span></h3>
3408+ <p>Parameters</p>
3409+ <ul><li> mediaId</li>
3410+ <li> fileId</li>
3411+ <li> fileName (including extension)</li></ul>
3412+ <p>Response</p>
3413+ <ul><li> mediaId</li></ul>
3414+ <p>Errors</p>
3415+ <ul><li> 1 - Access Denied</li>
3416+ <li> 13 - Error inserting media into the database</li>
3417+ <li> 14 - Cannot clean up after failure</li>
3418+ <li> 15 - Cannot store file</li>
3419+ <li> 16 - Cannot update stored file location</li>
3420+ <li> 18 - Invalid File Extension</li>
3421+ <li> 31 - Unable to get information about existing media record</li>
3422+ <li> 32 - Unable to update existing media record</li>
3423+ </ul>
3424+
3425+ <a name="LibraryMediaRetire" id="LibraryMediaRetire"></a><h3> <span class="mw-headline"> LibraryMediaRetire </span></h3>
3426+ <p>Parameters</p>
3427+ <ul><li> mediaId</li></ul>
3428+ <p>Response</p>
3429+ <ul><li> success</li></ul>
3430+ <p>Error Codes</p>
3431+ <ul><li> 1 - Access Denied</li>
3432+ <li> 19 - Error retiring media</li></ul>
3433+
3434+ <a name="LibraryMediaDelete" id="LibraryMediaDelete"></a><h3> <span class="mw-headline"> LibraryMediaDelete </span></h3>
3435+ <p>Parameters</p>
3436+ <ul><li> mediaId</li></ul>
3437+ <p>Response</p>
3438+ <ul><li> Success = True</li></ul>
3439+ <p>Error Codes</p>
3440+ <ul><li> 1 - Access Denied</li>
3441+ <li> 20 - Cannot check if media is assigned to layouts</li>
3442+ <li> 21 - Media is in use</li>
3443+ <li> 22 - Cannot locate stored files, unable to delete</li>
3444+ <li> 23 - Database error deleting media</li>
3445+ </ul>
3446+
3447+ <a name="ModuleList" id="ModuleList"></a><h3> <span class="mw-headline"> ModuleList </span></h3>
3448+ <p>Response A list of modules with the following attributes:</p>
3449+ <ul><li> module - The Module Name</li>
3450+ <li> layoutOnly- Whether the module is a library based module or only available for layouts</li>
3451+ <li> description - A description of the module</li>
3452+ <li> extensions - Extensions allowed by this module</li>
3453+ </ul>
3454+ <p>Error Codes</p>
3455+ <ul><li> 40 - Unable to query for modules</li></ul>
3456+
3457+ <a name="Version" id="Version"></a><h3> <span class="mw-headline"> Version </span></h3>
3458+ <p>Response</p>
3459+ <pre>&lt;?xml version="1.0"?&gt;
3460+ &lt;rsp status="ok"&gt;
3461+ &lt;version app_ver="1.1.1" XlfVersion="1" XmdsVersion="2" DBVersion="22"/&gt;
3462+ &lt;/rsp&gt;
3463+ </pre>
3464+ </blockquote>
3465+
3466+ <?php include('../../template/footer.php'); ?>
3467+ </body>
3468+</html>
3469
3470=== added file 'server/manual/content/admin/displays.php'
3471--- server/manual/content/admin/displays.php 1970-01-01 00:00:00 +0000
3472+++ server/manual/content/admin/displays.php 2013-04-11 16:56:27 +0000
3473@@ -0,0 +1,189 @@
3474+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3475+<?php include('../../template.php'); ?>
3476+<html>
3477+ <head>
3478+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3479+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
3480+ <link rel=stylesheet type="text/css" href="../../css/doc.css">
3481+ <meta http-equiv="Content-Type" content="text/html" />
3482+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
3483+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
3484+
3485+ <link href="img/favicon.ico" rel="shortcut icon"/>
3486+ <!-- Javascript Libraries -->
3487+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
3488+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
3489+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
3490+ </head>
3491+ <body>
3492+ <a name="Displays" id="Displays"></a><h1>Displays</h1>
3493+
3494+ <p>Displays are how you output your layouts with <?php echo PRODUCT_NAME; ?>.</p>
3495+ <p>Each client application registered with the server creates a new display record in <?php echo PRODUCT_NAME; ?> server. You can then choose a
3496+ default layout for that display, schedule further layouts on the display and control who has access to the display,
3497+ as well as monitor its status from the Display Management page.</p>
3498+
3499+ <p>The Display Manamagement page is accessed from the Nagivation Bar by clicking on "Displays > Displays"</p>
3500+
3501+ <p><img alt="SA Displays" src="sa_displays.png"
3502+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3503+ width="820" height="262"></p>
3504+ <blockquote>
3505+ <a name="Display_Edit" id="Display_Edit"></a><h3>Display Edit</h3>
3506+ <p>After a new display client is registered with <?php echo PRODUCT_NAME; ?> server, you need to perform Edit granting license to the client
3507+ to work.</p>
3508+ <p> Click on the 'Edit" button of the Display loads its editing window. You can then proceed to change the settings for
3509+ the chosen Display. </p>
3510+
3511+ <p><img alt="Display Edit" src="sa_display_edit.png"
3512+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3513+ width="493" height="231"></p>
3514+
3515+ <a name="Display_Delete" id="Display_Delete"></a><h3>Display Delete</h3>
3516+ <p>After a display client is registered and licensed with <?php echo PRODUCT_NAME; ?> server, you can "unlicense" a client which will prevent it from connecting
3517+ to the server.</p>
3518+ <p> Click on the 'Delete" button of the Display you want to unlicense; and the below form is loaded. </p>
3519+
3520+ <p><img alt="Display Delete" src="sa_display_delete.png"
3521+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3522+ width="357" height="217"></p>
3523+
3524+ <p>Note: Delete a display cannot be undone. The client needs to re-regisiter and liscense before it is allowed to connect to the server again.</p>
3525+
3526+ <a name="Media_Inventory" id="Media_Inventory"></a><h3>Media Inventory</h3>
3527+ <p>When you schedule new content, or change existing content, it is helpful to know that the displays have updated with the new
3528+ information. In a <?php echo PRODUCT_NAME; ?> server and client system, the client applications will connect in to the server periodically
3529+ and update itself on the media items that they have stored locally. Media Inventory allows you to look at a glance to check if
3530+ your updates were pulled by the clients yet.</p>
3531+ <p>On the display management page, you'll see a column "Status". The status light can be one of either green, amber or red.</p>
3532+ <p>When you make a change that affects the output of the server to a given client (for example if you modify a layout scheduled
3533+ on that client, schedule a new layout or change the default layout), the status light will immediately goes red. That signifies
3534+ that as far as the server is aware there are updates pending for that client and it has not received them yet.</p>
3535+ <p>The client will then connect up to the server on a schedule and will read the new information that is available. If there
3536+ are new files to download (for example if you modified a layout or scheduled something completely new), the status light will
3537+ turn amber while the files are being downloaded.</p>
3538+ <p>Once the client is satisfied that all files have been downloaded, it will send an inventory of all the files it has active
3539+ in it is cache back to the server, and the server will change the status light to green.</p>
3540+ <p>If you are curious to see what files the client is actively monitoring, you can click the "Media Inventory" button and a popup
3541+ will appear showing the status of each file, along with the last time the client checked it was still stored correctly on disk.
3542+ You will also see any files that the client is in the process of downloading. (Note here that what you will not see is files
3543+ that the client needs to download, but that it is unaware of at the present time. For example. If you schedule a new layout
3544+ and immediately go to the Media Inventory before the client has connected up to the server, you'll see the status light is red,
3545+ but the content of the media inventory will not show the new files that are required. Once the client connects, those new files
3546+ will be included in the inventory automatically.)</p>
3547+
3548+ <p><img alt="Display Media Inventory" src="sa_display_media_inventory.png"
3549+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3550+ width="418" height="268"></p>
3551+
3552+ <a name="Display_Group_Member" id="Display_Group_Member"></a><h3>Group Members</h3>
3553+ <p>To find the Group that the Display is belonged to, click on the "Group Members" on the corresponding row.</p>
3554+
3555+ <p><img alt="SA Display Group Edit" src="sa_display_groups_edit.png"
3556+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3557+ width="408" height="218"></p>
3558+ </blockquote>
3559+
3560+ <h2>Wake On LAN (WOL)</h2>
3561+ <blockquote>
3562+ <h3>Introducing Wake On Lan for Display Clients</h3>
3563+ <p>This section will look at the Wake On Lan (WOL) feature of <?php echo PRODUCT_NAME; ?>.</p>
3564+
3565+ <p>There has been a lot of interest over the years <?php echo PRODUCT_NAME; ?> has been running for a solution to be "green", "save power" and
3566+ generally not have the <?php echo PRODUCT_NAME; ?> display screen solution on unnecessarily.</p>
3567+
3568+ <p>The WOL function is intended to be used for display clients that are addressable by the server, by this we mean that there
3569+ has to be a clear addressable network route between the server and the client that needs to wake up. It is also required that
3570+ WOL is turned on in any necessary settings on the client PC.</p>
3571+
3572+ <p>The WOL configuration happens on a display by display basis from the Edit Display form. Each display has new settings for:</p>
3573+ <ul>
3574+ <li><strong>Enable Wake On LAN</strong> - (Turn WOL on/off for the display)</li>
3575+ <li><strong>Wake On LAN Time</strong> - (Specify a time for this display to wake, using the 24 hr clock)</li>
3576+ <li><strong>BroadCast Address</strong> - (The BroadCast address of the client, if unknown use the IP address and fill in the CIDR field)</li>
3577+ <li><strong>Wake On LAN Secure On</strong> - (The SecureOn password for the client, if supported)</li>
3578+ <li><strong>Wake On LAN CIDR</strong> - (The CIDR subnet mask, if the BroadCast Address is unknown)</li>
3579+ </ul>
3580+
3581+ <p>Once the display has these settings it can be woken up in 2 ways:</p>
3582+ <h3>Wake On LAN Now</h3>
3583+
3584+ <p><img alt="SA Display WOL" src="sa_display_wol.png"
3585+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3586+ width="308" height="158"></p>
3587+
3588+ <p>Each display has the "Wake On LAN" button which can be used to send a wake on LAN command on demand. Clicking the button displays
3589+ a form for confirmation, once this is pressed the command is send immediately to the client.</p>
3590+
3591+ <h3>Wake On LAN Time - Maintenance Script</h3>
3592+ <p>In addition to the WOL now function, the <?php echo PRODUCT_NAME; ?> maintenance module has been altered to send a WOL packet to any display which has
3593+ a "Wake On LAN Time" specified. It will only send the command once, as the time window is passed.</p>
3594+
3595+ <p>The maintenance script has to be running for this to work correctly. Maintenance instructions can be found on the
3596+ <a title="Maintenance Instructions" href="settings.php">Settings -> Maintenance</a>.</p>
3597+
3598+ <h3>Putting the client to sleep</h3>
3599+ <p>There are a few different options for putting the client to sleep - such as a scheduled task. However, the next article in this series
3600+ will look at an option built into <?php echo PRODUCT_NAME; ?>. The "Shell Command" module.</p>
3601+
3602+ <p>Note: WOL is not routable. The <?php echo PRODUCT_NAME; ?> server is unable to see clients over the internet that are behind NAT,
3603+ or on a different subnet.</p>
3604+ </blockquote>
3605+
3606+ <a name="Display_Group" id="Display_Group"></a><h1>Display Groups</h1>
3607+ <p>A group should be added when there is a new set of components required for a particular group of users.
3608+ It could be that you want certain users to only have access to certain components or that certain users
3609+ should not be able to share their content, playlists and schedules with each other.</p>
3610+
3611+ <p><strong>Components</strong> refer to parts of <?php echo PRODUCT_NAME; ?>, e.g. Content, or Playlists.</p>
3612+
3613+ <blockquote>
3614+ <a name="Adding_a_Group" id="Adding_a_Group"></a><h3>Adding a Group</h3>
3615+ <p>Click the navigation menu "Displays > Display Groups" to go to Display Groups page. To add a group click on
3616+ the "Add Group" button found at the top of the Displays list.</p>
3617+
3618+ <a name="Edit_Group" id="Edit_Group"></a><h3>Edit a Group</h3>
3619+ <p>To edit a group click on the edit button on the row belonging to the group you wish to edit.</p>
3620+
3621+ <p><img alt="SA Display Group" src="sa_display_groups.png"
3622+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3623+ width="621" height="226"></p>
3624+
3625+ <p><strong>Name</strong> is a unique identifier for a group.</p>
3626+
3627+ <a name="Delete_Group" id="Delete_Group"></a><h3>Delete a Group</h3>
3628+ <p>To delete a group click on the delete button on the row belonging to the group you wish to delete.</p>
3629+
3630+ <a name="Group_Component_Security" id="Group_Component_Security"></a><h3>Group / Component Security</h3>
3631+ <p>When editing a group the components that are assigned / unassigned to that group are show. These
3632+ determine the permissions of the users belonging to that group.</p>
3633+ <p>You should always have at least one group.</p>
3634+
3635+ <a name="Group_Members" id="Group_Members"></a><h3>Group Members</h3>
3636+
3637+ <p>Click on "Group Members" load the "Manage Membership" form for editing. All the Displays on the system will be shown.
3638+ You can assign or remove group members.</p>
3639+
3640+ <p><img alt="SA Display Group Members" src="sa_display_group_members.png"
3641+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3642+ width="408" height="270"></p>
3643+
3644+ </blockquote>
3645+
3646+ <a name="Display_Statistic" id="Display_Statistic"></a><h1>Display Statistic</h1>
3647+ <p>Click on "Statistic" shows a page giving statistic detail of all the system Displys on the followings. You can define
3648+ the filters i.e. Date, Display &amp; Media, for the required statistical data display.</p>
3649+
3650+ <ul>
3651+ <li><h3>Layout ran</h3>Statistical data on layouts run for each Display.</li>
3652+ <li><h3>Library Media ran</h3>Statistical data on Media played for each Display.</li>
3653+ <li><h3>Media on Layouts ran</h3>Statistical data on Media played on all layouts run for each Display.</li>
3654+ </ul>
3655+
3656+ <p><img alt="SA Display Statistic" src="sa_display_statistic.png"
3657+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3658+ width="648" height="650"></p>
3659+
3660+ <?php include('../../template/footer.php'); ?>
3661+ </body>
3662+</html>
3663
3664=== added file 'server/manual/content/admin/modules.php'
3665--- server/manual/content/admin/modules.php 1970-01-01 00:00:00 +0000
3666+++ server/manual/content/admin/modules.php 2013-04-11 16:56:27 +0000
3667@@ -0,0 +1,66 @@
3668+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3669+<?php include('../../template.php'); ?>
3670+<html>
3671+ <head>
3672+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3673+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
3674+ <link rel=stylesheet type="text/css" href="../../css/doc.css">
3675+ <meta http-equiv="Content-Type" content="text/html" />
3676+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
3677+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
3678+
3679+ <link href="img/favicon.ico" rel="shortcut icon"/>
3680+ <!-- Javascript Libraries -->
3681+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
3682+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
3683+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
3684+ </head>
3685+ <body>
3686+
3687+ <h1>Modules</h1>
3688+ <p><?php echo PRODUCT_NAME; ?> server content handling is done by Modules.</p>
3689+ <p>Click "Administration -> Modules" load the modules parameters for edit.</p>
3690+
3691+ <p><img alt="SA_Modules" src="sa_modules.png"
3692+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3693+ width="644" height="418"></p>
3694+
3695+ <p><?php echo PRODUCT_NAME; ?> server modules table contains parameters for user edit.</p>
3696+ <ul>
3697+ <li><strong>Name:</strong>
3698+ <p>System given Name for the specific module.</p</li>
3699+ <li><strong>Description:</strong>
3700+ <p>A breif description of the modules.</p</li>
3701+ <li><strong>Library Media:</strong>
3702+ <p>Indicated if the content is saved in the <?php echo PRODUCT_NAME; ?> Library. Unchecked indicate the specific content is only save
3703+ with the Layout-Regions.</p</li>
3704+ <li><strong>Valid Extensions:</strong>
3705+ <p>Valid file extensions that are supported by the specific module.</p</li>
3706+ <li><strong>Image Uri:</strong>
3707+ <p>Link to the module icon for UI display, usually leave as it.</p></li>
3708+ <li><strong>Enabled:</strong>
3709+ <p>System administrator may enable/disable the specific content for <?php echo PRODUCT_NAME; ?> user access.</p</li>
3710+ </ul>
3711+
3712+ <h2>Edit</h2>
3713+ <p>Click Edit button for the specific content type load the following form for user changes.</p>
3714+
3715+ <ul>
3716+ <li><h3>Content Without Extension:</h3>
3717+ <p>Admininstrator may enable or disable the content for user access.</p>
3718+
3719+ <p><img alt="SA_Modules" src="sa_modules_text.png"
3720+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3721+ width="358" height="179"></p></li>
3722+
3723+ <li><h3>Content With Extension:</h3>
3724+ <p>Administrator may add other valid files extensions that are supported by the <?php echo PRODUCT_NAME; ?> Client Display e.g. mp4.</p>
3725+
3726+ <p><img alt="SA_Modules" src="sa_modules_video.png"
3727+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3728+ width="358" height="211"></p></li>
3729+ </ul>
3730+
3731+ <?php include('../../template/footer.php'); ?>
3732+ </body>
3733+</html>
3734
3735=== added file 'server/manual/content/admin/overview.php'
3736Binary files server/manual/content/admin/overview.php 1970-01-01 00:00:00 +0000 and server/manual/content/admin/overview.php 2013-04-11 16:56:27 +0000 differ
3737=== added file 'server/manual/content/admin/sa_advanced.png'
3738Binary files server/manual/content/admin/sa_advanced.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_advanced.png 2013-04-11 16:56:27 +0000 differ
3739=== added file 'server/manual/content/admin/sa_advanced_sessions.png'
3740Binary files server/manual/content/admin/sa_advanced_sessions.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_advanced_sessions.png 2013-04-11 16:56:27 +0000 differ
3741=== added file 'server/manual/content/admin/sa_api.png'
3742Binary files server/manual/content/admin/sa_api.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_api.png 2013-04-11 16:56:27 +0000 differ
3743=== added file 'server/manual/content/admin/sa_display_delete.png'
3744Binary files server/manual/content/admin/sa_display_delete.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_delete.png 2013-04-11 16:56:27 +0000 differ
3745=== added file 'server/manual/content/admin/sa_display_edit.png'
3746Binary files server/manual/content/admin/sa_display_edit.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_edit.png 2013-04-11 16:56:27 +0000 differ
3747=== added file 'server/manual/content/admin/sa_display_group_members.png'
3748Binary files server/manual/content/admin/sa_display_group_members.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_group_members.png 2013-04-11 16:56:27 +0000 differ
3749=== added file 'server/manual/content/admin/sa_display_groups.png'
3750Binary files server/manual/content/admin/sa_display_groups.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_groups.png 2013-04-11 16:56:27 +0000 differ
3751=== added file 'server/manual/content/admin/sa_display_groups_edit.png'
3752Binary files server/manual/content/admin/sa_display_groups_edit.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_groups_edit.png 2013-04-11 16:56:27 +0000 differ
3753=== added file 'server/manual/content/admin/sa_display_media_inventory.png'
3754Binary files server/manual/content/admin/sa_display_media_inventory.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_media_inventory.png 2013-04-11 16:56:27 +0000 differ
3755=== added file 'server/manual/content/admin/sa_display_statistic.png'
3756Binary files server/manual/content/admin/sa_display_statistic.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_statistic.png 2013-04-11 16:56:27 +0000 differ
3757=== added file 'server/manual/content/admin/sa_display_wol.png'
3758Binary files server/manual/content/admin/sa_display_wol.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_display_wol.png 2013-04-11 16:56:27 +0000 differ
3759=== added file 'server/manual/content/admin/sa_displays.png'
3760Binary files server/manual/content/admin/sa_displays.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_displays.png 2013-04-11 16:56:27 +0000 differ
3761=== added file 'server/manual/content/admin/sa_modules.png'
3762Binary files server/manual/content/admin/sa_modules.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_modules.png 2013-04-11 16:56:27 +0000 differ
3763=== added file 'server/manual/content/admin/sa_modules_text.png'
3764Binary files server/manual/content/admin/sa_modules_text.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_modules_text.png 2013-04-11 16:56:27 +0000 differ
3765=== added file 'server/manual/content/admin/sa_modules_video.png'
3766Binary files server/manual/content/admin/sa_modules_video.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_modules_video.png 2013-04-11 16:56:27 +0000 differ
3767=== added file 'server/manual/content/admin/sa_setting_content.png'
3768Binary files server/manual/content/admin/sa_setting_content.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_content.png 2013-04-11 16:56:27 +0000 differ
3769=== added file 'server/manual/content/admin/sa_setting_default.png'
3770Binary files server/manual/content/admin/sa_setting_default.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_default.png 2013-04-11 16:56:27 +0000 differ
3771=== added file 'server/manual/content/admin/sa_setting_error.png'
3772Binary files server/manual/content/admin/sa_setting_error.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_error.png 2013-04-11 16:56:27 +0000 differ
3773=== added file 'server/manual/content/admin/sa_setting_general.png'
3774Binary files server/manual/content/admin/sa_setting_general.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_general.png 2013-04-11 16:56:27 +0000 differ
3775=== added file 'server/manual/content/admin/sa_setting_maintenance.png'
3776Binary files server/manual/content/admin/sa_setting_maintenance.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_maintenance.png 2013-04-11 16:56:27 +0000 differ
3777=== added file 'server/manual/content/admin/sa_setting_path.png'
3778Binary files server/manual/content/admin/sa_setting_path.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_path.png 2013-04-11 16:56:27 +0000 differ
3779=== added file 'server/manual/content/admin/sa_setting_permissions.png'
3780Binary files server/manual/content/admin/sa_setting_permissions.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_permissions.png 2013-04-11 16:56:27 +0000 differ
3781=== added file 'server/manual/content/admin/sa_setting_pwd.png'
3782Binary files server/manual/content/admin/sa_setting_pwd.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/sa_setting_pwd.png 2013-04-11 16:56:27 +0000 differ
3783=== added file 'server/manual/content/admin/settings.php'
3784--- server/manual/content/admin/settings.php 1970-01-01 00:00:00 +0000
3785+++ server/manual/content/admin/settings.php 2013-04-11 16:56:27 +0000
3786@@ -0,0 +1,311 @@
3787+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3788+<html>
3789+ <head>
3790+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3791+ <title>Xibo Documentation</title>
3792+ <link rel=stylesheet type="text/css" href="../../css/doc.css">
3793+ <meta http-equiv="Content-Type" content="text/html" />
3794+ <meta name="keywords" content="digital signage, signage, narrow-casting, xibo, open source, agpl" />
3795+ <meta name="description" content="Xibo is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
3796+
3797+ <link href="img/favicon.ico" rel="shortcut icon"/>
3798+ <!-- Javascript Libraries -->
3799+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
3800+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
3801+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
3802+ </head>
3803+<body>
3804+ <a name="Settings" id="Settings"></a><h1>Settings</h1>
3805+ <p>This page provides you with all the settings options to configure Xibo to your environment. Each tab provides a set of forms
3806+ where you can alter default settings and paths.</p>
3807+ <p>The items in the boxes provide you with details of your PHP settings on the server with Xibo installed.</p>
3808+ <p>Settings should only be modified by the administrator of the system, as incorrect settings could cause system
3809+ stablility issues.</p>
3810+
3811+ <a name="Content" id="Content"></a><h2>Content</h2>
3812+ <blockquote>
3813+ <p>This tab allows you to set default content item settings - default length. This helps Xibo if the
3814+ file does not contain duration information.</p>
3815+
3816+ <p><img alt="Setting_Content" src="sa_setting_content.png"
3817+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3818+ width="536" height="298"></p>
3819+
3820+ <h3>Library Size &amp; Bandwidth</h3>
3821+ <p>To manage limits on the library file size and monthly bandwidth usage. This is done by virtue of two settings in the database
3822+ table (LIBRARY_SIZE_LIMIT_KB &amp; MONTHLY_XMDS_TRANSFER_LIMIT_KB).</p>
3823+
3824+ <p>If no limits are entered in database, everything continues to work without restriction; however once a limit is entered Xibo will start
3825+ validating against these limits, and when they are exceeded will prevent the upload of new media / updates to clients.</p>
3826+
3827+ <p>However these two settings are currently not available through the user interface; Only the statistical data is shown in Content page</p>
3828+ </blockquote>
3829+
3830+ <a name="Default_Settings" id="Default_Settings"></a><h2>Default Settings</h2>
3831+ <blockquote>
3832+ <p>Default Settings set the default options on some forms to always appear and be applied unless altered. You can also change
3833+ your time zone in this section.</p>
3834+
3835+ <p><img alt="Setting_Default" src="sa_setting_default.png"
3836+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3837+ width="536" height="298"></p>
3838+ </blockquote>
3839+
3840+ <a name="Error" id="Error"></a><h2>Error</h2>
3841+ <blockquote>
3842+ <p>Tab allows you to alter how Xibo handles errors. You can turn the error and audit logs on and off. As logs records
3843+ size growth rapidly, you should take care to enable it only when necessary e.g. during system debug.</p>
3844+
3845+ <p><img alt="Setting_Error" src="sa_setting_error.png"
3846+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3847+ width="538" height="274"></p>
3848+ </blockquote>
3849+
3850+ <a name="General_Setting" id="General_Setting"></a><h2>General Settings</h2>
3851+ <blockquote>
3852+ <p>General setting provide details of your current settings in your PHP.ini file on your server. It also allows you to setup
3853+ whether you are collecting statics off your Xibo displays.</p>
3854+
3855+ <p><img alt="Setting_General" src="sa_setting_general.png"
3856+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3857+ width="539" height="451"></p>
3858+
3859+ <a name="Server_Key" id="Server_Key"></a><h3>Server Key (SERVER_KEY)</h3>
3860+ <p>The Server Key must be provided and required by the Client during the initial Client Display setup.</p>
3861+
3862+ <a name="Required_Files_LookAhead" id="Required_Files_LookAhead"></a><h3>Required Files Look Ahead (REQUIRED_FILES_LOOKAHEAD)</h3>
3863+ <p>The local client library may get larger and larger if its obsoleted contents are not deleted as time goes by.</p>
3864+ <p><strong>Clearing up old and unused files:</strong><br />
3865+ The client manages its content library automatically, clearing up files that are no longer needed (including temporary files).</p>
3866+ <p>This is managed by using the "Required Files Look Ahead" setting in the server; increasing this value causes the client
3867+ to consider media to be required for longer period of time.</p>
3868+
3869+ </blockquote>
3870+
3871+ <a name="Maintenance" id="Maintenance"></a><h2>Maintenance</h2>
3872+ <blockquote>
3873+ <p>Tab allows you configure Xibo maintenance.</p>
3874+
3875+ <a name="Introduction" id="Introduction"></a><h3>Introduction</h3>
3876+ <p>When Xibo is running, logs and statistics slowly accumulate on the server and consume disk space. In extreme cases the sheer
3877+ volume of those records can cause the server interface to slow and become unresponsive.</p>
3878+
3879+ <p>It is also reassuring to know that if there is a problem with a display and it stops checking in with the Xibo server, you will
3880+ be notified by email so you can take action to resolve the problem.</p>
3881+
3882+ <p>The maintenance script can be scheduled to run periodically and perform background cleanup tasks such as deleting old logs and
3883+ statistics, and checking the status of the displays.</p>
3884+
3885+ <a name="Prerequisites" id="Prerequisites"></a><h3>Prerequisites</h3>
3886+ <p>In order to send email notifications, your PHP must have a working mail() command.</p>
3887+ <p>You need to ensure your PHP installation is configured to send mail via a
3888+ <a href="http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Local_Mail_Server_for_Sending_Mail.htm" class="external text"
3889+ title="http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Local_Mail_Server_for_Sending_Mail.htm" rel="nofollow">local</a>
3890+ or <a href="http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm" class="external text"
3891+ title="http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm" rel="nofollow">remote</a>
3892+ SMTP server.</p>
3893+
3894+ <p>Once you have verified that your PHP installation has a working mail() command, you can proceed to the next step.</p>
3895+
3896+ <a name="Setup_for_New_Xibo_Installations" id="Setup_for_New_Xibo_Installations"></a><h3>Setup for New Xibo Installations</h3>
3897+ <p>Xibo server 1.2.0 and later have the maintenance functionality.</p>
3898+ <p>New Xibo installations come pre-populated with some default values for the maintenance script, but with the entire system
3899+ disabled. You can proceed to the configuration section.</p>
3900+
3901+ <a name="Setup_for_Xibo_Installations_.3C_1.2.0" id="Setup_for_Xibo_Installations_.3C_1.2.0"></a><h3>Setup for Xibo Installations &lt; 1.2.0</h3>
3902+ <p>Only Xibo server versions 1.2.0 and later have this functionality. If you're upgrading your older Xibo server installations to 1.2.0
3903+ then you will be prompted to modify the default settings as part of the upgrade process.</p>
3904+ <p>If you decide to enable the maintenance script as part of your upgrade, it will automatically be configured to use "protected"
3905+ mode as this is the most secure option. The other options are discussed in detail below. You should change your Maintenance Key immediately
3906+ in protected mode as the default key is publicly available and offers no protection.</p>
3907+
3908+ <a name="Configuration" id="Configuration"></a><h3>Configuration</h3>
3909+ <p>Configuration for the maintenance script can be found in Xibo server at "Administration -&gt; Settings -&gt; Maintenance" tab.</p>
3910+
3911+ <p><img alt="Setting_Maintenance" src="sa_setting_maintenance.png"
3912+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
3913+ width="529" height="577"></p>
3914+
3915+ <p>There are several options associated with the maintenance script:</p>
3916+
3917+ <ul>
3918+ <li>Maintenance Enabled (MAINTENANCE_ENABLED):
3919+ <ul>
3920+ <li><b>Off</b> - All maintenance functionality is disabled.</li>
3921+ <li><b>On</b> - All maintenance functionality is enabled. You can use any of the methods below to call the maintenance script
3922+ on a schedule without specifying a key.</li>
3923+ <li> <b>Protected</b> - All maintenance functionality is enabled. You must specify the correct key when calling the maintenance
3924+ script. This is to prevent unauthorised persons from repeatedly calling the script and generating large amounts of alert email.</li>
3925+ </ul></li>
3926+
3927+ <li>Maintenance Key (MAINTENANCE_KEY)<br />
3928+ The secret key required to allow the maintenance script to run when "Maintenance Enabled" is set to "Protected" mode.</li>
3929+
3930+ <li>Email Alerts (MAINTENANCE_EMAIL_ALERTS)<br />
3931+ Globally enable or disable the sending of email alerts. You can enable/disable alerts for individual displays in Display Management.</li>
3932+
3933+ <li>Alert Timeout (MAINTENANCE_ALERT_TOUT)<br />
3934+ Globally configure how many minutes after a display lasts connects to the server we should consider it to have a problem and cause an
3935+ alert to be sent. You can override this default for individual displays in Display Management. You should make sure this time is longer
3936+ than the collection interval you have configured on your clients to avoid false positive alerts.</li>
3937+
3938+ <li>Email To (mail_to)<br />
3939+ Who should the alert emails be sent to?</li>
3940+
3941+ <li>Email From (mail_from)<br />
3942+ Who should the alert emails appear to be from?</li>
3943+
3944+ <li>Log Maximum Age (MAINTENANCE_LOG_MAXAGE)<br />
3945+ How many days worth of log messages to keep. Logs older than this will be deleted. Set to 0 to keep all logs indefinitely.</li>
3946+
3947+ <li>Statistics Maximum Age (MAINTENANCE_STAT_MAXAGE)<br />
3948+ How many days worth of statistics to keep. Statistics older than this will be deleted. Set to 0 to keep all statistics indefinitely.</li>
3949+ </ul>
3950+ <p>Once you have decided which of the options you want to enable and the parameters required, you need to setup some mechanism for calling
3951+ the <b>maintenance.php</b> script on a schedule. Skip to the appropriate section for your server below.</p>
3952+ <p>If you do not have permission to setup scheduled tasks on your server, you could arrange for a remote computer to call the maintenance.php script.</p>
3953+
3954+ <a name="Windows_Scheduled_Task" id="Windows_Scheduled_Task"></a><h2>Windows Scheduled Task</h2>
3955+ <p>This section is broadly based upon the Moodle Cron documentation available <a href="http://docs.moodle.org/en/Cron#Managing_Cron_on_Windows_systems"
3956+ class="external text" title="http://docs.moodle.org/en/Cron#Managing_Cron_on_Windows_systems" rel="nofollow">here</a>.</p>
3957+
3958+ <ul>
3959+ <li>Find the php.exe or php-win.exe program on your server. It will be in your PHP installation directory.</li>
3960+ <li>Setup a <b>Scheduled Task</b></li>
3961+ <ul>
3962+ <li>Go to Start -&gt; Control Panel -&gt; Scheduled Tasks -&gt; Add Scheduled Task.</li>
3963+ <li>Click "Next" to start the wizard:</li>
3964+ <li>Click the "Browse..." button and browse to your php.exe or php-win.exe and click "Open"</li>
3965+ <li>Type "Xibo Maintenance" as the name of the task and select "Daily" as the schedule. Click "Next".</li>
3966+ <li>Select "12:00 AM" as the start time, perform the task "Every Day" and choose today's date as the starting date. Click "Next".</li>
3967+ <li>Enter the username and password of the user the task will run under (it does not have to be a privileged account at all).
3968+ Make sure you type the password correctly. Click "Next".</li>
3969+ <li>Mark the checkbox titled "Open advanced properties for this task when I click Finish" and click "Finish".</li>
3970+ <li>In the new dialog box, type the following in the "Run:" text box:
3971+ <pre>c:\php\php-win.exe -f c:\path\to\xibo\maintenance.php secret</pre>
3972+ Replace secret with your Maintenance Key if you are running in Protected Mode.</li>
3973+ <li>Click on the "Schedule" tab and there in the "Advanced..." button.</li>
3974+ <li>Mark the "Repeat task" checkbox and set "Every:" to 5 minutes, and set "Until:" to "Duration" and type "23" hours and "59" minutes.
3975+ If you are Alert Timeouts are less than 5 minutes, you may want to run the maintenance script more often.</li>
3976+ <li>Click "OK".</li>
3977+ </ul>
3978+ <li><b>Test your scheduled task</b>.
3979+ <p>You can test that your scheduled task can run successfully by clicking it with the right button
3980+ and chosing "Run". If everything is correctly setup, you will briefly see a DOS command window while php executes and fetches the cron
3981+ page and then it disappears. If you refresh the scheduled tasks folder, you will see the <i>Last Run Time column</i>
3982+ in detailed folder view) reflects the current time, and that the Last Result column displays "0x0" (everything went OK).
3983+ If either of these is different, then you should recheck your setup.</p></li></ul>
3984+
3985+ <a name="Maintenance_on_Unix_Servers" id="Maintenance_on_Unix_Servers"></a><h2>Maintenance on Unix Servers</h2>
3986+ <p>This section is broadly based upon the Moodle Cron documentation available <a href="http://docs.moodle.org/en/Cron#Using_a_cron_command_line_in_Unix"
3987+ class="external text" title="http://docs.moodle.org/en/Cron#Using_a_cron_command_line_in_Unix" rel="nofollow">here</a>.
3988+ There are different command line programs you can use to call the maintenance page from the command line. Not all of them may be available
3989+ on a given server.</p>
3990+
3991+ <p>For example, you can use a Unix utility like 'wget': </p>
3992+ <pre>wget -q -O /dev/null http://example.com/xibo/maintenance.php?key=changeme</pre>
3993+
3994+ <p>Note in this example that the output is thrown away (to /dev/null).</p>
3995+ <p>The same thing using lynx:</p>
3996+ <pre>lynx -dump http://example.com/xibo/maintenance.php changeme &gt; /dev/null</pre>
3997+
3998+ <p>Note in this example that the output is thrown away (to /dev/null).</p>
3999+ <p>Alternatively, you can use a standalone version of PHP, compiled to be run on the command line. The disadvantage is that you need to
4000+ have access to a command-line version of php. The advantage is that your web server logs are not filled with constant requests to
4001+ maintenance.php and you can run at a lower I/O and CPU priority.</p>
4002+ <pre> php /var/www/xibo/maintenance.php changeme</pre>
4003+
4004+ <p>Example command to run at lower priority:</p>
4005+ <pre> ionice -c3 -p$$;nice -n 10 /usr/bin/php /var/www/xibo/maintenance.php changeme &gt; /dev/null</pre>
4006+
4007+ <a name="Running_maintenance_with_crontab" id="Running_maintenance_with_crontab"></a><h3>Running maintenance with crontab</h3>
4008+ <p>This section is broadly based upon the Moodle Cron documentation available <a href="http://docs.moodle.org/en/Cron#Using_the_crontab_program_on_Unix"
4009+ class="external text" title="http://docs.moodle.org/en/Cron#Using_the_crontab_program_on_Unix" rel="nofollow">here</a>.
4010+ Most unix-based servers run a version of cron. Cron executes commands on a schedule.</p>
4011+ <p>Modern Linux distributions use a version of cron that reads its configuration from /etc/crontab. If you have an /etc/crontab,
4012+ edit it with your favourite editor, otherwise run the following to edit the crontab:</p>
4013+ <pre>crontab -e</pre>
4014+
4015+ <p>and then adding one of the above commands like:</p>
4016+ <pre>*/5 * * * * wget -q -O /dev/null http://example.com/xibo/maintenance.php?key=changeme</pre>
4017+
4018+ <p>The first five entries are the times to run values, followed by the command to run. The asterisk is a wildcard, indicating any time.
4019+ The above example means run the command <i>wget -q -O /dev/null...</i> every 5 minutes (*/5), every hour (*), every day of the month (*),
4020+ every month (*), every day of the week (*).</p>
4021+ <p>The "O" of "-O" is the capital letter not zero, and refers the output file destination, in this case "/dev/null" which is a black
4022+ hole and discards the output. If you want to see the output of your cron.php then enter its url in your browser.</p>
4023+
4024+ <ul>
4025+ <li> <a href="http://linuxweblog.com/node/24" class="external text" title="http://linuxweblog.com/node/24" rel="nofollow">A basic crontab tutorial</a></li>
4026+ <li> <a href="http://www.freebsd.org/cgi/man.cgi?query=crontab&amp;apropos=0&amp;sektion=5&amp;manpath=FreeBSD+6.0-RELEASE+and+Ports&amp;format=html"
4027+ class="external text" title="http://www.freebsd.org/cgi/man.cgi?query=crontab&amp;apropos=0&amp;sektion=5&amp;manpath=FreeBSD+6.0-RELEASE+and+Ports&amp;format=html"
4028+ rel="nofollow">Online version of the man page</a></li>
4029+ </ul>
4030+
4031+ <p>For <b>beginners</b>, "EDITOR=nano crontab -e" will allow you to edit the crontab using the <a href="http://www.nano-editor.org/dist/v1.2/faq.html"
4032+ class="external text" title="http://www.nano-editor.org/dist/v1.2/faq.html" rel="nofollow">nano</a> editor. Ubuntu defaults to using the nano editor.</p>
4033+ <p>Usually, the "crontab -e" command will put you into the 'vi' editor. You enter "insert mode" by pressing "i", then type in the line as above, then exit
4034+ insert mode by pressing ESC. You save and exit by typing ":wq", or quit without saving using ":q!" (without the quotes). Here is an
4035+ <a href="http://www.unix-manuals.com/tutorials/vi/vi-in-10-1.html" class="external text" title="http://www.unix-manuals.com/tutorials/vi/vi-in-10-1.html"
4036+ rel="nofollow">intro</a> to the 'vi' editor.</p>
4037+ </blockquote>
4038+
4039+ <a name="Path" id="Path"></a><h2>Path</h2>
4040+ <blockquote>
4041+ <p>Settings allows you to specify particular directory locations for where Xibo will store and look for items.</p>
4042+
4043+ <p><img alt="Setting_Path" src="sa_setting_path.png"
4044+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4045+ width="538" height="140"></p>
4046+ </blockquote>
4047+
4048+ <a name="Permissiions" id="Permissiions"></a><h2>Permissions</h2>
4049+
4050+ <blockquote>
4051+ <p>Settings allows you to define password policy and login error message.</p>
4052+
4053+ <h3>User Password Management</h3>
4054+ <p>This section will take a look at the User Password Management with three features/improvements:</p>
4055+ <ul>
4056+ <li>Users can change their passwords without having access to the user administration page</li>
4057+ <li>Administrators can set a regular expression to test password complexity</li>
4058+ <li>Administrators can override users passwords in a more�intuitive�way</li>
4059+ </ul>
4060+
4061+ <p><img alt="Setting_Permissions" src="sa_setting_permissions.png"
4062+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4063+ width="806" height="365"></p>
4064+
4065+
4066+ <h3>User Passwordd Policy</h3>
4067+ <p>This feature has the utmost flexibility given to the administrator to test passwords in which ever way they chose.
4068+ This is done with a setting in the &#8220;Permissions&#8221; tab called USER_PASSWORD_POLICY.</p>
4069+
4070+ <p>An administrator can put any valid regular expression in this box, which will cause all users password change requests (and new users)
4071+ to be tested against this expression.</p>
4072+ <p>It is also important for the user to know what the policy actually is; the setting USER_PASSWORD_ERROR which will be presented
4073+ to the user when they enter a password that does not validate against the regular expression.</p>
4074+
4075+ <h3>Changing Password</h3>
4076+
4077+ <p><img alt="Setting User Password" src="sa_setting_pwd.png"
4078+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4079+ width="458" height="234"></p>
4080+
4081+ <p>A user can now change their password by clicking on their user name in the top right corner of the admin interface.
4082+ They will be presented with a form requiring them to enter their existing password, a new password and a retyped new password &#8211;
4083+ all fields are required.</p>
4084+
4085+ <h3>Override User Password</h3>
4086+
4087+ <p><img alt="User Password Override" src="user_pwd_override.png"
4088+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4089+ width="559" height="328"></p>
4090+
4091+ <p>An administrator can now easily override / reset a users existing password by editing the the from the user admin screen and
4092+ ticking the box to &#8220;override&#8221;.</p>
4093+ </blockquote>
4094+
4095+ <iframe src="../../template/footer.html" width="100%" frameborder="0">Your browser cannot support iframe</iframe>
4096+ </body>
4097+</html>
4098
4099=== added file 'server/manual/content/admin/user_pwd_override.png'
4100Binary files server/manual/content/admin/user_pwd_override.png 1970-01-01 00:00:00 +0000 and server/manual/content/admin/user_pwd_override.png 2013-04-11 16:56:27 +0000 differ
4101=== added directory 'server/manual/content/config'
4102=== added file 'server/manual/content/config/DWNeverUpload.reg'
4103Binary files server/manual/content/config/DWNeverUpload.reg 1970-01-01 00:00:00 +0000 and server/manual/content/config/DWNeverUpload.reg 2013-04-11 16:56:27 +0000 differ
4104=== added file 'server/manual/content/config/Powerpoint-fix.reg'
4105Binary files server/manual/content/config/Powerpoint-fix.reg 1970-01-01 00:00:00 +0000 and server/manual/content/config/Powerpoint-fix.reg 2013-04-11 16:56:27 +0000 differ
4106=== added file 'server/manual/content/config/client.php'
4107--- server/manual/content/config/client.php 1970-01-01 00:00:00 +0000
4108+++ server/manual/content/config/client.php 2013-04-11 16:56:27 +0000
4109@@ -0,0 +1,137 @@
4110+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4111+<?php include('../../template.php'); ?>
4112+<html>
4113+<head>
4114+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4115+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4116+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4117+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4118+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4119+ <!-- Javascript Libraries -->
4120+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4121+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4122+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4123+</head>
4124+
4125+<body>
4126+ <h1>Client Options</h1>
4127+
4128+ <p>All newly installed client must be configured and registered with the <?php echo PRODUCT_NAME; ?> Server before it can be used. The <?php echo PRODUCT_NAME; ?> Configuration
4129+ Options are accessible on each client installation from the Start Menu -&gt; All programs</p>
4130+
4131+ <p><img alt="Program Menu" src="pm.png"
4132+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4133+ width="230" height="62" border="1px"></p>
4134+
4135+ <p>Select "<?php echo PRODUCT_NAME; ?> Client Options" to register this display on the <?php echo PRODUCT_NAME; ?> Network; or to
4136+ make changes to this display configuration.</p>
4137+
4138+ <h2>Client Options Form</h2>
4139+
4140+ <p>The default - after install - options form is shown below.</p>
4141+
4142+ <blockquote>
4143+ <h3>Options - General</h3>
4144+
4145+ <p><img alt="<?php echo PRODUCT_NAME; ?> General Settings" src="settings_gen.png"
4146+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4147+ width="485" height="393"></p>
4148+
4149+ <br />
4150+ <ul>
4151+ <li>Server Address: Fill in the address of your <?php echo PRODUCT_NAME; ?> server address. If your <?php echo PRODUCT_NAME; ?> server is on the same machine as the client,
4152+ enter "http://localhost/<?php echo PRODUCT_NAME; ?>". If <?php echo PRODUCT_NAME; ?> server is installed on a different computer, enter the IP address or hostname of the
4153+ machine the <?php echo PRODUCT_NAME; ?> server is installed on - for example "http://192.168.0.4/<?php echo PRODUCT_NAME; ?>" or "http://www.my-server.com/<?php echo PRODUCT_NAME; ?>" or similar.<br /><br /></li>
4154+
4155+ <li>Server Key: Enter your server key in the "Server Key" box. If you cannot remember the key you can find it in the
4156+ Settings dialogue on the <a href="../admin/settings.php#server_key">Administration->Settings</a> menu in the
4157+ web interface on the server.<br /><br /></li>
4158+
4159+ <li>Local Library Location: defaults to a folder called "<?php echo PRODUCT_NAME; ?> Library" It is used to cache content from the <?php echo PRODUCT_NAME; ?> server so that
4160+ the client can continue to play if the connection to the <?php echo PRODUCT_NAME; ?> server is lost. If you want to change to a different folder, use
4161+ the "Browse" button to choose an alternative folder. The library folder must be given write access right to the <?php echo PRODUCT_NAME; ?> client.
4162+ <br />
4163+ Note that you must NOT use the server's library location (if it is on the same PC as the client or via a file share)<br /><br /></li>
4164+
4165+ <li>The collection interval for content: is the interval in seconds that the client will poll the server for new content. The more
4166+ frequent the collections, the quicker the client will update when changes are made on the server - but at the expense of bandwidth
4167+ and possibly minor freezes in things like scrolling text when the collection happens. We don't recommend values lower than 60 seconds.<br /><br /></li>
4168+
4169+ <li>The unique key for this client: is a unique identifier for this client machine. It is generated from a mix of Windows system identifiers and
4170+ your hardware. If you are installing for the first time, there is no need to amend this value. If you are changing hardware or want to have
4171+ two clients using the same server account then you can edit the key as required.<br /><br /></li>
4172+
4173+ <li>Scroll Step Amount (px): is the number of pixels scrolling text will advance each time scrolling text items are told to move. You should
4174+ leave this set to 1px for smooth viewing.<br /><br /></li>
4175+
4176+ <li>Enable Powerpoint: Tick the box if you have the full version of PowerPoint 2003 or later installed and want to use PowerPoint media items.
4177+ Be sure to read the notes on Powerpoint setup here: <a href="windows.php"> Windows Modifications.</a><br /><br /></li>
4178+
4179+ <li>Enable Statistics: Tick the box if you want the client to send statistics back to the <?php echo PRODUCT_NAME; ?> server. This will generate alot of data that will be
4180+ stored in the <?php echo PRODUCT_NAME; ?> database. If you don't have any specific use for statistics, we recommend you turn this option off.
4181+
4182+ <p>Click the "Save" button.</p></li>
4183+ </ul>
4184+
4185+ <h3>Options - Proxy</h3>
4186+
4187+ <p>If you use a proxy server to access your <?php echo PRODUCT_NAME; ?> server, go to the "Proxy" server tab and fill in the details for your network,
4188+ then click "Save". Make sure to set your proxy information in Internet Explorer too.</p>
4189+
4190+ <p><img alt="<?php echo PRODUCT_NAME; ?> General Settings" src="settings_proxy.png"
4191+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4192+ width="485" height="393"></p>
4193+
4194+ <h3>Options - Apperance</h3>
4195+
4196+ <p>Click "Apperance" tab to set the client display window size, and the offsets from the screen origin if so required.</p>
4197+ <p>When the specified client display window size i.e. width &amp; height is different from the original layout intended size, some
4198+ of the content will be cropped. e.g. embbedded html, linked html, dataset table etc.</p>
4199+ <p>You may use the "Offset X' i.e. set equal to the primary display width, to place the client diplay window on an extended display monitor.</p>
4200+
4201+ <p><img alt="<?php echo PRODUCT_NAME; ?> General Settings" src="settings_app.png"
4202+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4203+ width="485" height="393"></p>
4204+
4205+ <p>The default <?php echo PRODUCT_NAME; ?> Splash screen is display when the client is first launch. You may specify your own Splash Image by entering
4206+ the image filename in the "Override Splash Screen" box.</p>
4207+
4208+ <h3>Options - Advanced</h3>
4209+
4210+ <p><img alt="<?php echo PRODUCT_NAME; ?> General Settings" src="settings_adv.png"
4211+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4212+ width="485" height="393"></p>
4213+
4214+ <h3>Options - Register</h3>
4215+
4216+ <p>Finally go to the "Register" display tab.</p>
4217+
4218+ <p><img alt="<?php echo PRODUCT_NAME; ?> General Settings" src="settings_reg.png"
4219+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4220+ width="485" height="393"></p>
4221+
4222+ <br />
4223+ <p>Optionally rename the client by entering a name in the "Display Name" box. It defaults to the hostname of the PC.
4224+ Click the "Register" button.</p>
4225+
4226+ <p>You should see a message "Display registered and awaiting licensing". If you don't get that message, ensure you entered
4227+ the correct URL for the <?php echo PRODUCT_NAME; ?> server, and that your server key is entered correctly.</p>
4228+ </blockquote>
4229+
4230+ <h2>Client License Enable</h2>
4231+
4232+ <p>Now log in to the server web interface, go to the <a href="../admin/displays.php">&quot;Display-&gt;Displays&quot;</a> page.
4233+ You should see your newly registered client in the list. Click the "Edit" button next to the display. The "License Display"
4234+ option will automatically change to "Yes". Optionally select a different default layout (the layout the client will play
4235+ if nothing is scheduled).</p>
4236+
4237+ <p>Click "Save" </p>
4238+
4239+ <h2>Start Client Player</h2>
4240+
4241+ <p>You can now start the <?php echo PRODUCT_NAME; ?> Client Player. It should show you the <?php echo PRODUCT_NAME; ?> splash screen while the default layout and its media contents
4242+ (and anything else you have scheduled) are downloaded and then begin playing layouts'contents.
4243+
4244+ <?php include('../../template/footer.php'); ?>
4245+</body>
4246+</html>
4247
4248=== added file 'server/manual/content/config/client_feature.php'
4249--- server/manual/content/config/client_feature.php 1970-01-01 00:00:00 +0000
4250+++ server/manual/content/config/client_feature.php 2013-04-11 16:56:27 +0000
4251@@ -0,0 +1,194 @@
4252+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4253+<?php include('../../template.php'); ?>
4254+<html>
4255+<head>
4256+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4257+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4258+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4259+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4260+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4261+ <!-- Javascript Libraries -->
4262+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4263+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4264+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4265+</head>
4266+
4267+<body>
4268+ <h1><?php echo PRODUCT_NAME; ?> Client Features</h1>
4269+
4270+ <p>The <?php echo PRODUCT_NAME; ?> client comes in three flavours &#8211; the .NET Windows Client, the Python Linux Client and an Android Client. The windows client was born first and is therefore the client of choice for a stable installation. The Python client has greater potential in the future and will eventually become the only client for Windows and Linux.</p>
4271+
4272+ <table>
4273+ <col width=40%><col width=30%><col width=30%>
4274+ <thead>
4275+ <tr>
4276+ <th>Feature</th>
4277+ <th>.Net Client</th>
4278+ <th>Python</th>
4279+ <th>Android</th>
4280+ </tr>
4281+ </thead>
4282+
4283+ <tbody>
4284+ <tr>
4285+ <td>Schedule Layouts</td>
4286+ <td class="y">Yes</td>
4287+ <td class="y">Yes</td>
4288+ <td class="y">Yes</td>
4289+ </tr>
4290+ <tr>
4291+ <td>Priority Schedules</td>
4292+ <td class="y">Yes</td>
4293+ <td class="y">Yes</td>
4294+ <td class="y">Yes</td>
4295+ </tr>
4296+ <tr>
4297+ <td>Video</td>
4298+ <td class="y">Yes</td>
4299+ <td class="y">Yes</td>
4300+ <td class="y">Yes</td>
4301+ </tr>
4302+ <tr>
4303+ <td>Flash</td>
4304+ <td class="y">Yes</td>
4305+ <td class="partial-support">Some Support</td>
4306+ <td class="n">No</td>
4307+ </tr>
4308+ <tr>
4309+ <td>Images</td>
4310+ <td class="y">Yes</td>
4311+ <td class="y">Yes</td>
4312+ <td class="y">Yes</td>
4313+ </tr>
4314+ <tr>
4315+ <td>PowerPoint</td>
4316+ <td class="y">Yes</td>
4317+ <td class="n">No</td>
4318+ <td class="n">No</td>
4319+ </tr>
4320+ <tr>
4321+ <td>Text</td>
4322+ <td class="y">Yes</td>
4323+ <td class="y">Yes</td>
4324+ <td class="y">Yes</td>
4325+ </tr>
4326+ <tr>
4327+ <td>RSS</td>
4328+ <td class="y">Yes</td>
4329+ <td class="y">Yes</td>
4330+ <td class="y">Yes</td>
4331+ </tr>
4332+ <tr>
4333+ <td>Web Page</td>
4334+ <td class="y">Yes</td>
4335+ <td class="y">Yes</td>
4336+ <td class="y">Yes</td>
4337+ </tr>
4338+ <tr>
4339+ <td>Embedded HTML</td>
4340+ <td class="y">Yes</td>
4341+ <td class="y">Yes</td>
4342+ <td class="y">Yes</td>
4343+ </tr>
4344+ <tr>
4345+ <td>Microblog</td>
4346+ <td class="n">No</td>
4347+ <td class="y">Yes</td>
4348+ <td class="n">No</td>
4349+ </tr>
4350+ <tr>
4351+ <td>DataSets</td>
4352+ <td class="y">Yes</td>
4353+ <td class="y">Yes</td>
4354+ <td class="n">No</td>
4355+ </tr>
4356+ <tr>
4357+ <td>Background Image</td>
4358+ <td class="y">Yes (jpg only)</td>
4359+ <td class="y">Yes</td>
4360+ <td class="y">Yes</td>
4361+ </tr>
4362+ <tr>
4363+ <td>Media Stats</td>
4364+ <td class="y">Yes</td>
4365+ <td class="y">Yes</td>
4366+ <td class="n">No</td>
4367+ </tr>
4368+ <tr>
4369+ <td>Layout Stats</td>
4370+ <td class="y">Yes</td>
4371+ <td class="n">No</td>
4372+ <td class="n">No</td>
4373+ </tr>
4374+ <tr>
4375+ <td>Report Inventory</td>
4376+ <td class="y">Yes</td>
4377+ <td class="y">Yes</td>
4378+ <td class="y">Yes</td>
4379+ </tr>
4380+ <tr>
4381+ <td>File Resume</td>
4382+ <td class="y">Yes</td>
4383+ <td class="y">Yes</td>
4384+ <td class="y">Yes</td>
4385+ </tr>
4386+ <tr>
4387+ <td>Counter Media</td>
4388+ <td class="n">No</td>
4389+ <td class="y">Yes</td>
4390+ <td class="n">No</td>
4391+ </tr>
4392+ <tr>
4393+ <td>Socket Listener</td>
4394+ <td class="n">No</td>
4395+ <td class="y">Yes</td>
4396+ <td class="n">No</td>
4397+ </tr>
4398+ <tr>
4399+ <td>Lift/Serial Interface Support</td>
4400+ <td class="n">No</td>
4401+ <td class="y">Yes (16 inputs / 4 per serial port)</td>
4402+ <td class="n">No</td>
4403+ </tr>
4404+ <tr>
4405+ <td>Client Runtime Information Screen</td>
4406+ <td class="y">Yes</td>
4407+ <td class="y">Yes</td>
4408+ <td class="y">Yes</td>
4409+ </tr>
4410+ <tr>
4411+ <td>Offline Update via USB Drive</td>
4412+ <td class="n">No</td>
4413+ <td class="y">Yes</td>
4414+ <td class="n">No</td>
4415+ </tr>
4416+ <tr>
4417+ <td>Full Compositing (overlapping regions)</td>
4418+ <td class="n">No</td>
4419+ <td class="y">Yes</td>
4420+ <td class="n">No</td>
4421+ </tr>
4422+ <tr>
4423+ <td>Webpage Transparency</td>
4424+ <td class="n">No</td>
4425+ <td class="y">Yes</td>
4426+ <td class="n">No</td>
4427+ </tr>
4428+ <tr>
4429+ <td>Video Transparency</td>
4430+ <td class="n">No</td>
4431+ <td class="y">Yes</td>
4432+ <td class="n">No</td>
4433+ </tr>
4434+ <tr>
4435+ <td>Image Transparency</td>
4436+ <td class="n">No</td>
4437+ <td class="y">Yes</td>
4438+ <td class="n">No</td>
4439+ </tr>
4440+ </tbody>
4441+ </table>
4442+
4443+ <?php include('../../template/footer.php'); ?>
4444+</body>
4445+</html>
4446
4447=== added file 'server/manual/content/config/config.php'
4448--- server/manual/content/config/config.php 1970-01-01 00:00:00 +0000
4449+++ server/manual/content/config/config.php 2013-04-11 16:56:27 +0000
4450@@ -0,0 +1,36 @@
4451+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4452+<?php include('../../template.php'); ?>
4453+<html>
4454+<head>
4455+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4456+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4457+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4458+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4459+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4460+ <!-- Javascript Libraries -->
4461+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4462+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4463+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4464+</head>
4465+
4466+<body>
4467+ <h1 lang="en-GB" class="western">Configuring <?php echo PRODUCT_NAME; ?></h1>
4468+
4469+ <p>After the Installtion process the <?php echo PRODUCT_NAME; ?> Client must be registered with the
4470+ <?php echo PRODUCT_NAME; ?> Admin Panel. This is done using the <?php echo PRODUCT_NAME; ?> Options application.</p>
4471+
4472+ <p><a href="client.php">Please click here for information regarding the <?php echo PRODUCT_NAME; ?>
4473+ Options and configuring the <?php echo PRODUCT_NAME; ?> client application.</a></p>
4474+
4475+ <h2>Admin Panel Settings</h2>
4476+
4477+ <p>The <?php echo PRODUCT_NAME; ?> admin panel can be customised in a number of ways using the
4478+ settings pages. These settings pages are available only to users with
4479+ administrator privilages.</p>
4480+
4481+ <p><a href="settings.php">Please click here for information regarding the
4482+ <?php echo PRODUCT_NAME; ?> Admin Panel Settings.</a></p>
4483+
4484+ <?php include('../../template/footer.php'); ?>
4485+</body>
4486+</html>
4487
4488=== added file 'server/manual/content/config/pm.png'
4489Binary files server/manual/content/config/pm.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/pm.png 2013-04-11 16:56:27 +0000 differ
4490=== added file 'server/manual/content/config/settings.php'
4491--- server/manual/content/config/settings.php 1970-01-01 00:00:00 +0000
4492+++ server/manual/content/config/settings.php 2013-04-11 16:56:27 +0000
4493@@ -0,0 +1,41 @@
4494+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4495+<?php include('../../template.php'); ?>
4496+<html>
4497+<head>
4498+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4499+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4500+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4501+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4502+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4503+ <!-- Javascript Libraries -->
4504+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4505+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4506+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4507+</head>
4508+
4509+<body>
4510+ <h1>Settings Page</h1>
4511+
4512+ <p>The Settings Page is the primary location for configuring <?php echo PRODUCT_NAME; ?>. </p>
4513+
4514+ <p>It is constructed from a number of different categories. Each setting
4515+ within these categories has an explanation above it. The settings page is
4516+ accessible from the Dashboard or Navigation bar.</p>
4517+
4518+ <h2>Catagories</h2>
4519+
4520+ <h3 lang="en-GB" class="western"><strong>Content</strong></h3>
4521+
4522+ <p lang="en-GB" class="western">This tab allows you to set default content
4523+ item settings, such as a default length and ratio. This helps <?php echo PRODUCT_NAME; ?> if the
4524+ file does not contain duration information.</p>
4525+
4526+ <h3 lang="en-GB" class="western"><strong>Default</strong></h3>
4527+
4528+ <p lang="en-GB" class="western">Sets the default options on some forms to
4529+ always appear and be applied unless altered. You can also change your time
4530+ zone in this section.</p>
4531+
4532+ <?php include('../../template/footer.php'); ?>
4533+</body>
4534+</html>
4535
4536=== added file 'server/manual/content/config/settings_adv.png'
4537Binary files server/manual/content/config/settings_adv.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/settings_adv.png 2013-04-11 16:56:27 +0000 differ
4538=== added file 'server/manual/content/config/settings_app.png'
4539Binary files server/manual/content/config/settings_app.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/settings_app.png 2013-04-11 16:56:27 +0000 differ
4540=== added file 'server/manual/content/config/settings_gen.png'
4541Binary files server/manual/content/config/settings_gen.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/settings_gen.png 2013-04-11 16:56:27 +0000 differ
4542=== added file 'server/manual/content/config/settings_proxy.png'
4543Binary files server/manual/content/config/settings_proxy.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/settings_proxy.png 2013-04-11 16:56:27 +0000 differ
4544=== added file 'server/manual/content/config/settings_reg.png'
4545Binary files server/manual/content/config/settings_reg.png 1970-01-01 00:00:00 +0000 and server/manual/content/config/settings_reg.png 2013-04-11 16:56:27 +0000 differ
4546=== added file 'server/manual/content/config/windows.php'
4547--- server/manual/content/config/windows.php 1970-01-01 00:00:00 +0000
4548+++ server/manual/content/config/windows.php 2013-04-11 16:56:27 +0000
4549@@ -0,0 +1,81 @@
4550+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4551+<?php include('../../template.php'); ?>
4552+<html>
4553+<head>
4554+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4555+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4556+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4557+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4558+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4559+ <!-- Javascript Libraries -->
4560+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4561+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4562+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4563+</head>
4564+
4565+<body>
4566+ <h1 lang="en-GB" class="western">Windows Modifications</h1>
4567+ <p>Here are some suggested settings for Windows / PowerPoint for a Display Client:</p>
4568+ <ul>
4569+ <li>Turn off all <a href="http://www.microsoft.com/windowsxp/using/setup/personalize/screensaver.mspx"
4570+ title="http://www.microsoft.com/windowsxp/using/setup/personalize/screensaver.mspx" rel="nofollow">screensavers</a></li>
4571+
4572+ <li>Turn off screen <a href="http://www.microsoft.com/windowsxp/using/setup/tips/sleep.mspx"
4573+ title="http://www.microsoft.com/windowsxp/using/setup/tips/sleep.mspx" rel="nofollow">power saving</a></li>
4574+
4575+ <li>Load the "No Sounds" <a href="http://www.microsoft.com/windowsxp/using/accessibility/soundscheme.mspx"
4576+ title="http://www.microsoft.com/windowsxp/using/accessibility/soundscheme.mspx" rel="nofollow">Sound Scheme</a>
4577+ (Control Panel -&gt; Sounds and Audio Devices Properties)</li>
4578+
4579+ <li>Set a plain wallpaper (Hopefully nobody will see it, but you might need to reboot the client, or restart <?php echo PRODUCT_NAME; ?> and a sane wallpaper is a help)</li>
4580+
4581+ <li>If the client is accessible from where you manage your displays from, you might want to install <a href="http://www.uvnc.com/"
4582+ title="http://www.uvnc.com/" rel="nofollow">UltraVNC</a> server so you can connect in and check on the client from time to time.
4583+ Use the "View only" option in the VNC client to avoid disturbing the display.</li>
4584+
4585+ <li>Set Windows to <a href="http://www.mvps.org/marksxp/WindowsXP/welskip.php" title="http://www.mvps.org/marksxp/WindowsXP/welskip.php"
4586+ rel="nofollow">log on as your display client user automatically</a></li>
4587+
4588+ <li>Disable <a href="http://support.microsoft.com/kb/307729" title="http://support.microsoft.com/kb/307729" rel="nofollow">
4589+ balloon tips in the notification area</a></li>
4590+
4591+ <li>Disable Windows Error Reporting. Occasionally PowerPoint seems to "crash" when <?php echo PRODUCT_NAME; ?> closes it. Unfortunately this leaves an unsightly
4592+ "PowerPoint has encountered a problem and needs to close" message on the display. Follow the steps
4593+ <a href="http://www.windowsnetworking.com/articles_tutorials/Disable-Error-Reporting-Windows-XP-Server-2003.html"
4594+ title="http://www.windowsnetworking.com/articles_tutorials/Disable-Error-Reporting-Windows-XP-Server-2003.html" rel="nofollow">here</a>
4595+ to disable Windows Error Reporting completely - including notifications.</li>
4596+
4597+ <li>Also disable Office Application Error reporting. Follow instructions at <a href="http://support.microsoft.com/kb/325075"
4598+ title="http://support.microsoft.com/kb/325075" rel="nofollow">KB325075</a> or merge <a href="DWNeverUpload.reg"
4599+ title="DWNeverUpload.reg"> this registry patch</a>.</li>
4600+ </ul>
4601+
4602+ <p>If you're using PowerPoint, then there are a couple of extra steps:</p>
4603+ <p>First consider if you would be better converting your PowerPoint content to video files. PowerPoint 2010 and later can "Save As" a WMV file
4604+ which can be loaded straight in to Xibo and is far more reliable. If however you still need to play PowerPoint files, please ensure you action
4605+ the following:</p>
4606+
4607+ <ul>
4608+ <li>The first time you run <?php echo PRODUCT_NAME; ?> with a PowerPoint, you might get a popup appear that asks what <?php echo PRODUCT_NAME; ?> should do with the PowerPoint file.
4609+ The popup actually originates from Internet Explorer. Choose to "Open" the file, and untick the box so you won't be prompted again.</li>
4610+
4611+ <li>In some circumstances, you may find that PowerPoint, the application, loads instead of the file opening within <?php echo PRODUCT_NAME; ?> itself. If that happens,
4612+ try merging <a href="Powerpoint-fix.reg" title="Powerpoint-fix.reg"> this registry patch</a>. (Taken from
4613+ <a href="http://www.pptfaq.com/FAQ00189.htm" title="http://www.pptfaq.com/FAQ00189.htm" rel="nofollow">pptfaq.com</a>).
4614+ Users of Powerpoint 2007 should go to Microsoft <a href="http://support.microsoft.com/kb/927009"
4615+ title="http://support.microsoft.com/kb/927009" rel="nofollow">KB927009</a> and run the FixIT application instead. Users of PowerPoint 2010
4616+ should go here instead <a href="http://support.microsoft.com/kb/982995/en-us" title="http://support.microsoft.com/kb/982995/en-us"
4617+ rel="nofollow">KB982995</a></li>
4618+
4619+ <li>Note also that PowerPoint will put scroll bars up the side of your presentation, unless you do the following for each PowerPoint file BEFORE you upload it:</li>
4620+ </ul>
4621+
4622+ <ul>
4623+ o Open your PowerPoint Document<br />
4624+ o Slide Show -&gt; Setup Show<br />
4625+ o Under "Show Type", choose "Browsed by an individual (window)" and then untick "Show scrollbar"
4626+ </ul>
4627+
4628+ <?php include('../../template/footer.php'); ?>
4629+</body>
4630+</html>
4631
4632=== added directory 'server/manual/content/content'
4633=== added file 'server/manual/content/content/adding.php'
4634--- server/manual/content/content/adding.php 1970-01-01 00:00:00 +0000
4635+++ server/manual/content/content/adding.php 2013-04-11 16:56:27 +0000
4636@@ -0,0 +1,80 @@
4637+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4638+<?php include('../../template.php'); ?>
4639+<html>
4640+ <head>
4641+ <meta name="generator" content="HTML Tidy, see www.w3.org">
4642+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4643+
4644+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4645+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4646+ <meta http-equiv="Content-Type" content="text/html">
4647+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4648+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
4649+ <link href="img/favicon.ico" rel="shortcut icon">
4650+ <!-- Javascript Libraries -->
4651+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4652+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4653+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4654+ </head>
4655+
4656+ <body>
4657+ <h1>Adding Content</h1>
4658+
4659+ <p>In order to display content on <?php echo PRODUCT_NAME; ?> it first needs to be added to the system. The
4660+ following instructions deal with adding content. This section deals only with media
4661+ content that are stored in the Media Library.</p>
4662+
4663+ <p><img alt="Library Add Media" src="library_media_add.png"
4664+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4665+ width="425" height="225"></p>
4666+
4667+ <p>In order to add content you must be at the "Media" page by click "Library -> Media". When at the Media
4668+ page click the "Add Media" button at top. This will take you to the following screen:</p>
4669+
4670+ <p>Note: The media can also be added when creating layouts using the layout designer.</p>
4671+
4672+ <p>You can add different types of content by clicking on the media icon in the form. Doing this will
4673+ show you the correct form for the content you have selected and allow <?php echo PRODUCT_NAME; ?> to collect the appropriate information.</p>
4674+
4675+ <blockquote>
4676+ <h3>Add Image</h3>
4677+ <p>Following form show the required information when adding new image</p>
4678+
4679+ <p><img alt="Library Add Image" src="library_add_image.png"
4680+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4681+ width="458" height="226"></p>
4682+
4683+ <h3>Add DataSet</h3>
4684+ <p>Following form show the required information when adding DataSet</p>
4685+
4686+ <p><img alt="Library Add Image" src="library_add_dataset.png"
4687+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4688+ width="358" height="179"></p>
4689+
4690+ <p>Refef to <a href="../layout/assigncontent.php#datasets">Assigning Content - DataSets</a> in Layouts section for further information on
4691+ defining DataSets.</p>
4692+
4693+ <a name="To_edit_content" id="To_edit_content"></a><h3>Edit Content</h3>
4694+ <p>Click on the "Edit" button in the action column.<br />
4695+ <strong>Note:</strong> If there is no edit button then you do not have permission to edit that content.</p>
4696+
4697+ <p>Once you have entered the information <?php echo PRODUCT_NAME; ?> requires, click on the "Save" button and your
4698+ content will be added to <?php echo PRODUCT_NAME; ?>.</p>
4699+ </blockquote>
4700+
4701+ <h2>Non-Media Content</h2>
4702+ <p>Following contents are not saved in the <?php echo PRODUCT_NAME; ?> media library. Instead they are embbedded within the Regions in which they are
4703+ assigned. Refef to <a href="../layout/assigncontent.php#text">Assigning Content - Text...</a> sections in Layout on adding
4704+ these items to regions</p>
4705+
4706+ <ul>
4707+ <li>Text</li>
4708+ <li>Ticker</li>
4709+ <li>MicroBlog</li>
4710+ <li>Counter</li>
4711+ </ul>
4712+
4713+ <?php include('../../template/footer.php'); ?>
4714+ </body>
4715+</html>
4716+
4717
4718=== added file 'server/manual/content/content/library_add_dataset.png'
4719Binary files server/manual/content/content/library_add_dataset.png 1970-01-01 00:00:00 +0000 and server/manual/content/content/library_add_dataset.png 2013-04-11 16:56:27 +0000 differ
4720=== added file 'server/manual/content/content/library_add_image.png'
4721Binary files server/manual/content/content/library_add_image.png 1970-01-01 00:00:00 +0000 and server/manual/content/content/library_add_image.png 2013-04-11 16:56:27 +0000 differ
4722=== added file 'server/manual/content/content/library_media.png'
4723Binary files server/manual/content/content/library_media.png 1970-01-01 00:00:00 +0000 and server/manual/content/content/library_media.png 2013-04-11 16:56:27 +0000 differ
4724=== added file 'server/manual/content/content/library_media_add.png'
4725Binary files server/manual/content/content/library_media_add.png 1970-01-01 00:00:00 +0000 and server/manual/content/content/library_media_add.png 2013-04-11 16:56:27 +0000 differ
4726=== added file 'server/manual/content/content/licensing.php'
4727--- server/manual/content/content/licensing.php 1970-01-01 00:00:00 +0000
4728+++ server/manual/content/content/licensing.php 2013-04-11 16:56:27 +0000
4729@@ -0,0 +1,31 @@
4730+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4731+<?php include('../../template.php'); ?>
4732+<html>
4733+ <head>
4734+ <meta name="generator" content="HTML Tidy, see www.w3.org">
4735+ <meta http-equiv="Content-Type" content=
4736+ "text/html; charset=iso-8859-1">
4737+
4738+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4739+ <link rel="stylesheet" type="text/css" href=
4740+ "../../css/doc.css">
4741+ <meta http-equiv="Content-Type" content="text/html">
4742+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4743+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
4744+ <link href="img/favicon.ico" rel="shortcut icon">
4745+ <!-- Javascript Libraries -->
4746+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4747+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4748+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4749+ </head>
4750+
4751+ <body>
4752+ <h2 lang="en-GB" class="western">Licensing</h2>
4753+
4754+ <p>Please be aware that <?php echo PRODUCT_NAME; ?> takes no measures to control what is put on your displays.
4755+ Please make sure that any content is either appropriately attributed or you own the rights to it.</p>
4756+
4757+ <?php include('../../template/footer.php'); ?>
4758+ </body>
4759+</html>
4760+
4761
4762=== added file 'server/manual/content/content/overview.php'
4763--- server/manual/content/content/overview.php 1970-01-01 00:00:00 +0000
4764+++ server/manual/content/content/overview.php 2013-04-11 16:56:27 +0000
4765@@ -0,0 +1,44 @@
4766+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4767+<?php include('../../template.php'); ?>
4768+<html>
4769+ <head>
4770+ <meta name="generator" content="HTML Tidy, see www.w3.org">
4771+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4772+
4773+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4774+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4775+ <meta http-equiv="Content-Type" content="text/html">
4776+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4777+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
4778+ <link href="img/favicon.ico" rel="shortcut icon">
4779+ <!-- Javascript Libraries -->
4780+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4781+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4782+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4783+ </head>
4784+
4785+ <body>
4786+ <h1>Content</h1>
4787+ <h2>Overview</h2>
4788+
4789+ <p><?php echo PRODUCT_NAME; ?> uses content to on layouts. The content library is a store of all the content that
4790+ has been used on layouts in the past, and content to be used on new layouts.</p>
4791+
4792+ <p>In <?php echo PRODUCT_NAME; ?> content refers to individual &ldquo;items&rdquo; that you want to be
4793+ available for displaying.</p>
4794+
4795+ <p">For example a picture is considered as a piece of content and so is a piece of text.
4796+ Each piece of content has information relating to it that <?php echo PRODUCT_NAME; ?> uses to display it in the best way. You will be
4797+ prompted to enter all the required information when you come to add pieces of content.</p>
4798+
4799+ <p>Adding content on its own is not enough to actually display it on the screen, there
4800+ are further steps required before this can happen (i.e. Layouts).</p>
4801+
4802+ <a name="When_should_content_be_added" id="When_should_content_be_added"></a><h2>When should content be added?</h2>
4803+ <p>From this content library page, content should be added before it is needed. However
4804+ content can also be added when creating layouts using the layout designer.</p>
4805+
4806+ <?php include('../../template/footer.php'); ?>
4807+ </body>
4808+</html>
4809+
4810
4811=== added file 'server/manual/content/content/types.php'
4812--- server/manual/content/content/types.php 1970-01-01 00:00:00 +0000
4813+++ server/manual/content/content/types.php 2013-04-11 16:56:27 +0000
4814@@ -0,0 +1,92 @@
4815+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4816+<?php include('../../template.php'); ?>
4817+<html>
4818+ <head>
4819+ <meta name="generator" content="HTML Tidy, see www.w3.org">
4820+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4821+
4822+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4823+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4824+ <meta http-equiv="Content-Type" content="text/html">
4825+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4826+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." />
4827+ <link href="img/favicon.ico" rel="shortcut icon">
4828+ <!-- Javascript Libraries -->
4829+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4830+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4831+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4832+ </head>
4833+
4834+ <body>
4835+ <h2>Types of Content</h2>
4836+
4837+ <p>A content item is piece of media that you wish to display. This can be different types of media, such as
4838+ Videos, Flash animations, RSS feeds, Pictures and more.</p>
4839+ <p>The library table comprises of all the content items that you have uploaded or created. You can also see any other
4840+ content items that a user has shared within this table</p>
4841+
4842+ <blockquote>
4843+ <h3>Filter</h3>
4844+ <p>You can use the filter to search for the content item that you would like to modify.</p>
4845+ <ul>
4846+ <p><strong>Name: </strong>Partial Name matching with the media items for display.</p>
4847+ <p><strong>Type: </strong>List specific media type i.e. all, image or video</p>
4848+ <p><strong>Retired: </strong>List inactive media items in the library.</p>
4849+ <p><strong>Owner: </strong>List media items with the specified owner</p>
4850+ <p><strong>Original Filename: </strong>Display extra colume that shows the original file name for each media item.</p>
4851+ </ul>
4852+
4853+ <p><img alt="Library Media" src="library_media.png"
4854+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4855+ width="650" height="463"></p>
4856+
4857+ <h3>Files</h3>
4858+ <p><strong>Files</strong> consist of media files such as JPEG, WMV, AVI, SWF, PPT files that are stored on the server.</p>
4859+
4860+ <ul>
4861+ <p><strong>JPG</strong> is the common type of file used for still photos</p>
4862+ <p><strong>WMV</strong> stands for Windows Media Video files. These files allow full motion video to be shown on your display</p>
4863+ <p><strong>SWF</strong> these are flash animation files.</p>
4864+ <p><strong>PPT</strong> PowerPoint files can also be media types. If you wish to set an automated PowerPoint presentation to display all your slides you must configure this prior to upload. PowerPoint
4865+ support is only available under Internet Explorer and with client machines that have Microsoft Office installed.</p>
4866+ </ul>
4867+
4868+ <h3>RSS</h3>
4869+
4870+ <p><strong>RSS</strong> is used to retrieve information from the web that is syndicated in RSS.
4871+ News feeds are commonly distributed this way. RSS is the best way to get up to date information
4872+ to your displays with less interaction on your behalf.</p>
4873+
4874+ <p>The RSS Style provides information for the automation of the feed. If you would like to display
4875+ each story/item one at a time or if you would like a scroll effect. New custom effects can be built in
4876+ the RSS Styles page and will appear in the drop down list when adding a RSS item.</p>
4877+
4878+ <p><?php echo PRODUCT_NAME; ?> has default RSS Styles which are available for selection when adding RSS content
4879+ items. The RSS styles control how the RSS Feed is displayed. If the default RSS Styles do not achieve
4880+ the desired effect for a particular RSS feed additional RSS Styles can be added by an <?php echo PRODUCT_NAME; ?> admin.</p>
4881+
4882+ <p>Note: This involves a knowledge of the way RSS, XSL and CSS are constructed.</p>
4883+
4884+ <h3>Text</h3>
4885+
4886+ <p><strong>Text</strong> provides the ability to create information directly into the system.
4887+ Reports or messages can be created that can then be displayed on any layouts. Text input supports the
4888+ selections of fonts, colours and sizes.</p>
4889+
4890+ <h3>Website</h3>
4891+
4892+ <p><?php echo PRODUCT_NAME; ?> allows an entire web page to be added to a slide. Possible uses for this would
4893+ be a news article on a intranet news site.</p>
4894+
4895+ <p>Please note that <?php echo PRODUCT_NAME; ?> can not guarantee that the website will fit on the displays
4896+ that it gets scheduled on. The area that the website takes up on the slide will resize to fit,
4897+ but due to its design the containing website may not.</p>
4898+
4899+ <h3>Datasets</h3>
4900+ <p>DataSets are a new <?php echo PRODUCT_NAME; ?> feature to design and display tabular data, formatted nicely, in a region on a layout.</p>
4901+ </blockquote>
4902+
4903+ <?php include('../../template/footer.php'); ?>
4904+ </body>
4905+</html>
4906+
4907
4908=== added directory 'server/manual/content/dashboard'
4909=== added file 'server/manual/content/dashboard/dashboard.php'
4910--- server/manual/content/dashboard/dashboard.php 1970-01-01 00:00:00 +0000
4911+++ server/manual/content/dashboard/dashboard.php 2013-04-11 16:56:27 +0000
4912@@ -0,0 +1,62 @@
4913+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4914+<?php include('../../template.php'); ?>
4915+<html>
4916+<head>
4917+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4918+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4919+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4920+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4921+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4922+ <!-- Javascript Libraries -->
4923+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4924+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4925+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4926+</head>
4927+
4928+<body>
4929+ <h1 lang="en-GB" class="western">Dashboard</h1>
4930+
4931+ <p>There are two types of dashboard which can be presented to a user on log in.</p>
4932+
4933+ <h2>Default Dashboard</h2>
4934+
4935+ <p>When a user first logs in they are presented with the <?php echo PRODUCT_NAME; ?> Dashboard. This
4936+ page presents all the options available to maintain your <?php echo PRODUCT_NAME; ?> Network. </p>
4937+
4938+ <p><img alt="Default Dashboard" src="dashboard_admin.png"
4939+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4940+ width="545" height="318"></p>
4941+
4942+ <a name="Dashboard" id="Dashboard"></a><h2>Dashboard Icons</h2>
4943+
4944+ <p>The dashboard icons allow the user to navigate to specific sections of the
4945+ <?php echo PRODUCT_NAME; ?> Interface, below is a discription of each icon.</p>
4946+ <ul>
4947+ <li>Schedule - Access the schedule for each display, and schedule new or existing layouts to displays.</li>
4948+ <li>Layouts - Links to manage all the user's defined layouts i.e. create, edit or delete layouts.</li>
4949+ <li>Library - Links to server library to manage its media contentes i.e. create, replace or delete media items.</li>
4950+ <li>Templates - View the templates that are offered to users when they create new layouts.</li>
4951+ <li>Users - Allows administration of users on the system (Admins Only).</li>
4952+ <li>Settings - <?php echo PRODUCT_NAME; ?> server configuration settings (Admins Only)</li>
4953+ <li>License - Information about the licenses <?php echo PRODUCT_NAME; ?> is released under.</li>
4954+ <li>Manual - Access <?php echo PRODUCT_NAME; ?> online manual</li>
4955+ </ul>
4956+
4957+ <a name="Media_Dashboard" id="Media_Dashboard"></a><h2>Media Manager Dashboard</h2>
4958+
4959+ <p>The media manager dashboard is used to delegate specific tasks to users of
4960+ the system. When a user has had their homepage configured they will no longer
4961+ be able to access admin parts of <?php echo PRODUCT_NAME; ?>. The media manager will replace the default
4962+ dashboard with a simple dashboard, pictured below.</p>
4963+
4964+ <p><img alt="Media Manager Dashboard" src="dashboard_user.png"
4965+ style="display: block; text-align: center; margin-left: auto; margin-right: auto"
4966+ width="567" height="189"></p>
4967+
4968+ <p>This icon provides the user with a direct link to the region of the
4969+ template that they have been delegated. To learn more about setting users
4970+ permissions click <a href="../users/overview.php">here</a>.</p>
4971+
4972+ <?php include('../../template/footer.php'); ?>
4973+</body>
4974+</html>
4975
4976=== added file 'server/manual/content/dashboard/dashboard_admin.png'
4977Binary files server/manual/content/dashboard/dashboard_admin.png 1970-01-01 00:00:00 +0000 and server/manual/content/dashboard/dashboard_admin.png 2013-04-11 16:56:27 +0000 differ
4978=== added file 'server/manual/content/dashboard/dashboard_user.png'
4979Binary files server/manual/content/dashboard/dashboard_user.png 1970-01-01 00:00:00 +0000 and server/manual/content/dashboard/dashboard_user.png 2013-04-11 16:56:27 +0000 differ
4980=== added file 'server/manual/content/dashboard/navbar.php'
4981--- server/manual/content/dashboard/navbar.php 1970-01-01 00:00:00 +0000
4982+++ server/manual/content/dashboard/navbar.php 2013-04-11 16:56:27 +0000
4983@@ -0,0 +1,183 @@
4984+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4985+<?php include('../../template.php'); ?>
4986+<html>
4987+<head>
4988+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4989+ <title><?php echo PRODUCT_NAME; ?> Documentation</title>
4990+ <link rel="stylesheet" type="text/css" href="../../css/doc.css">
4991+ <meta name="keywords" content="digital signage, signage, narrow-casting, <?php echo PRODUCT_NAME; ?>, open source, agpl" />
4992+ <meta name="description" content="<?php echo PRODUCT_NAME; ?> is an open source digital signage solution. It supports all main media types and can be interfaced to other sources of data using CSV, Databases or RSS." /> <link href="img/favicon.ico" rel="shortcut icon">
4993+ <!-- Javascript Libraries -->
4994+ <script type="text/javascript" src="lib/jquery.pack.js"></script>
4995+ <script type="text/javascript" src="lib/jquery.dimensions.pack.js"></script>
4996+ <script type="text/javascript" src="lib/jquery.ifixpng.js"></script>
4997+</head>
4998+
4999+<body>
5000+ <h1>Navigation</h1>
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches