Merge lp:~dangarner/xibo/server-150-theme-pt2 into lp:xibo/1.5

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

Subscribers

People subscribed via source and target branches