2 /************************************************************************/
4 /************************************************************************/
5 /* Copyright (c) 2002-2007 by Greg Gay, Joel Kronenberg & Heidi Hazelton*/
6 /* Adaptive Technology Resource Centre / University of Toronto */
9 /* This program is free software. You can redistribute it and/or */
10 /* modify it under the terms of the GNU General Public License */
11 /* as published by the Free Software Foundation. */
12 /************************************************************************/
15 if (!defined('AT_INCLUDE_PATH')) { exit; }
21 /* config variables. if they're not in the db then it uses the installation default values: */
22 $_config_defaults = array();
23 $_config_defaults['contact_email'] = '';
24 $_config_defaults['email_notification'] = 1; // enabled
25 $_config_defaults['allow_instructor_requests'] = 1; // enabled
26 $_config_defaults['auto_approve_instructors'] = 0; // disabled
27 $_config_defaults['max_file_size'] = 1048576; // 1MB
28 $_config_defaults['max_course_size'] = 10485760; // 10 MB
29 $_config_defaults['max_course_float'] = 2097152; // 2MB
30 $_config_defaults['illegal_extentions'] = 'exe|asp|php|php3|bat|cgi|pl|com|vbs|reg|pcd|pif|scr|bas|inf|vb|vbe|wsc|wsf|wsh';
31 $_config_defaults['site_name'] = '';
32 $_config_defaults['home_url'] = ''; // empty means disabled
33 $_config_defaults['default_language'] = 'en';
34 $_config_defaults['cache_dir'] = ''; // empty means disabled
35 $_config_defaults['enable_category_themes'] = 0; // disabled
36 $_config_defaults['course_backups'] = 5; // number of backups
37 $_config_defaults['email_confirmation'] = 0; // disabled
38 $_config_defaults['master_list'] = 0; // disabled
39 $_config_defaults['user_notes'] = 0; // disabled - whether to enable the user contributed handbook notes
40 $_config_defaults['theme_categories'] = 0; // disabled
41 $_config_defaults['main_defaults'] = 'forum/list.php|glossary/index.php|file_storage/index.php';
42 $_config_defaults['home_defaults'] = 'forum/list.php|file_storage/index.php|glossary/index.php|chat/index.php|tile.php|faq/index.php|links/index.php|tools/my_tests.php|sitemap.php|export.php|my_stats.php|polls/index.php|directory.php|groups.php|reading_list/index.php|blogs/index.php';
43 $_config_defaults['side_defaults'] = 'menu_menu|related_topics|users_online|glossary|search|poll|posts';
44 $_config_defaults['pref_defaults'] = 'a:4:{s:10:"PREF";s:7:"default";s:14:"PREF_NUMBERING";i:1;s:18:"PREF_JUMP_REDIRECT";i:1;s:15:"PREF_FORM_FOCUS";i:1;}';
45 $_config_defaults['pref_inbox_notify'] = 0; // disabled
46 $_config_defaults['check_version'] = 0; // disabled
47 $_config_defaults['fs_versioning'] = 1; // enabled - file storage version control
48 $_config_defaults['last_cron'] = 0; // cron has to be enabled manually
49 $_config_defaults['enable_mail_queue'] = 0; // mail queue can only be enabled if cron is running
50 $_config_defaults['auto_install_languages'] = 0; // auto install languages can only be enabled if cron is running
51 $_config_defaults['display_name_format'] = 1; // 0-5, see (array) display_name_formats
52 $_config_defaults['time_zone'] = ''; // empty means disabled or not supported
53 $_config_defaults['prof_pic_max_file_size'] = 819200; // max size of an uploaded profile pic, in bytes. default 800 KB
54 $_config_defaults['sent_msgs_ttl'] = 120; // number of days till saved sent inbox msgs are deleted
55 $_config_defaults['mysql_group_concat_max_len'] = null; // null = check, 0 = disabled, 0 < enabled
57 $_config = $_config_defaults;
60 /* display name formats
65 $display_name_formats = array();
66 $display_name_formats[0] = 'display_name_format_l';
67 $display_name_formats[1] = 'display_name_format_fst';
68 $display_name_formats[2] = 'display_name_format_fstl';
69 $display_name_formats[3] = 'display_name_format_fl';
70 $display_name_formats[4] = 'display_name_format_lf';
71 $display_name_formats[5] = 'display_name_format_lfst';
74 /* the atutor.ca language translation server: */
75 define('AT_LANG_DB_HOST', 'atutorsvn.atrc.utoronto.ca');
76 define('AT_LANG_DB_USER', 'read_dev_lang');
77 define('AT_LANG_DB_PASS', 'read_dev_lang');
80 define('LINK_CAT_COURSE', 1);
81 define('LINK_CAT_GROUP', 2);
82 define('LINK_CAT_SELF', 3);
84 define('LINK_CAT_AUTH_NONE', 0);
85 define('LINK_CAT_AUTH_ALL', 1);
86 define('LINK_CAT_AUTH_COURSE', 2);
87 define('LINK_CAT_AUTH_GROUP', 3);
89 /* drafting room constants */
90 define('WORKSPACE_COURSE', 1); // aka Course Files
91 define('WORKSPACE_PERSONAL', 2); // aka My Files
92 define('WORKSPACE_ASSIGNMENT', 3);
93 define('WORKSPACE_GROUP', 4);
94 define('WORKSPACE_SYSTEM', 5);
95 define('WORKSPACE_PATH_DEPTH', 1); // how deep the directories should be
96 define('WORKSPACE_FILE_PATH', AT_CONTENT_DIR . 'file_storage/');
98 /* how many related topics can be listed */
99 define('NUM_RELATED_TOPICS', 5);
101 /* how many days until the password reminder link expires */
102 define('AT_PASSWORD_REMINDER_EXPIRY', 2);
104 /* taking a test an unlimited # of times */
105 define('AT_TESTS_TAKE_UNLIMITED', 0);
107 /* how many announcements listed */
108 define('NUM_ANNOUNCEMENTS', 10);
110 /* how long cache objects can persist */
111 /* in seconds. should be low initially, but doesn't really matter. */
112 /* in practice should be 0 (ie. INF) */
113 define('CACHE_TIME_OUT', 60);
115 /* member status field options */
116 define('AT_STATUS_DISABLED', 0);
117 define('AT_STATUS_UNCONFIRMED', 1);
118 define('AT_STATUS_STUDENT', 2);
119 define('AT_STATUS_INSTRUCTOR', 3);
121 /* $_pages sections */
122 define('AT_NAV_PUBLIC', 'AT_NAV_PUBLIC');
123 define('AT_NAV_START', 'AT_NAV_START');
124 define('AT_NAV_COURSE', 'AT_NAV_COURSE');
125 define('AT_NAV_HOME', 'AT_NAV_HOME');
126 define('AT_NAV_ADMIN', 'AT_NAV_ADMIN');
128 /* user permissions */
130 /* $_privs[priv number] = array(String name, Boolean pen, Boolean tools) */
131 define('AT_PRIV_RETURN', true);
132 define('AT_PRIV_NONE', 0);
134 define('AT_PRIV_ADMIN', 1);
137 define('AT_ADMIN_PRIV_NONE', 0);
138 define('AT_ADMIN_PRIV_ADMIN', 1);
140 /* admin log (type of operations) */
141 define('AT_ADMIN_LOG_UPDATE', 1);
142 define('AT_ADMIN_LOG_DELETE', 2);
143 define('AT_ADMIN_LOG_INSERT', 3);
144 define('AT_ADMIN_LOG_REPLACE', 4);
145 define('AT_ADMIN_LOG_OTHER', 5); //for non-db operations
147 if (strpos(@ini_get('arg_separator.input'), ';') !== false) {
153 /* the URL to the AChecker server of choice. must include trailing slash. */
154 define('AT_ACHECKER_URL', 'http://checker.atrc.utoronto.ca/servlet/');
156 if (!isset($_SERVER['REQUEST_URI'])) {
157 $REQUEST_URI = $_SERVER['SCRIPT_NAME'];
158 if ($_SERVER['QUERY_STRING'] != '') {
159 $REQUEST_URI .= '?'.$_SERVER['QUERY_STRING'];
161 $_SERVER['REQUEST_URI'] = $REQUEST_URI;
164 /* get the base url */
165 if (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on')) {
166 $server_protocol = 'https://';
168 $server_protocol = 'http://';
172 $dir_deep = substr_count(AT_INCLUDE_PATH, '..');
173 $url_parts = explode('/', $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
174 $_base_href = array_slice($url_parts, 0, count($url_parts) - $dir_deep-1);
175 $_base_href = $server_protocol . implode('/', $_base_href).'/';
176 $_base_path = substr($_base_href, strlen($server_protocol . $_SERVER['HTTP_HOST']));
178 define('AT_BASE_HREF', $_base_href);
181 $_rel_url = '/'.implode('/', array_slice($url_parts, count($url_parts) - $dir_deep-1));
183 /* where the gudes are (could be a full URL if needed): */
184 define('AT_GUIDES_PATH', $_base_path . 'documentation/');
186 define('AT_BACKUP_DIR', AT_CONTENT_DIR . 'backups/'); // where the backups get stored
188 define('VERSION', '1.5.4');
189 define('ONLINE_UPDATE', 3); /* update the user expiry every 3 min */
191 /* valid date format_types: */
192 /* @see ./include/lib/date_functions.inc.php */
193 define('AT_DATE_MYSQL_DATETIME', 1); /* YYYY-MM-DD HH:MM:SS */
194 define('AT_DATE_MYSQL_TIMESTAMP_14', 2); /* YYYYMMDDHHMMSS */
195 define('AT_DATE_UNIX_TIMESTAMP', 3); /* seconds since epoch */
196 define('AT_DATE_INDEX_VALUE', 4); /* index to the date arrays */
198 define('AT_ROLE_STUDENT', 0);
199 define('AT_ROLE_INSTRUCTOR', 1);
201 define('AT_KBYTE_SIZE', 1024);
203 define('AT_COURSESIZE_UNLIMITED', -1);
204 define('AT_COURSESIZE_DEFAULT', -2); /* can be changed in config.inc.php */
205 define('AT_FILESIZE_DEFAULT', -3); /* this too */
206 define('AT_FILESIZE_SYSTEM_MAX', -4);
207 $editable_file_types = array('txt', 'html', 'htm', 'xml', 'css', 'asc', 'csv', 'sql');
209 /* how many poll choices are available: */
210 define('AT_NUM_POLL_CHOICES', 7);
212 /* ways of releasing a test */
213 define('AT_RELEASE_NEVER', 0); // do not release
214 define('AT_RELEASE_IMMEDIATE', 1); // release after submitted
215 define('AT_RELEASE_MARKED', 2); // release after all q's marked
217 /* QPROP = question property: */
218 define('AT_TESTS_QPROP_WORD', 1);
219 define('AT_TESTS_QPROP_SENTENCE', 2);
220 define('AT_TESTS_QPROP_PARAGRAPH', 3);
221 define('AT_TESTS_QPROP_PAGE', 4);
222 define('AT_TESTS_QPROP_ALIGN_VERT', 5); // align question options vertically
223 define('AT_TESTS_QPROP_ALIGN_HORT', 6); // align question options horizontally
225 /* enrollment types for $_SESSION['enroll'] */
226 define('AT_ENROLL_NO', 0);
227 define('AT_ENROLL_YES', 1);
228 define('AT_ENROLL_ALUMNUS', 2);
230 // constants for reading list module
231 define ('RL_TYPE_BOOK', 1);
232 define ('RL_TYPE_URL', 2);
233 define ('RL_TYPE_HANDOUT', 3);
234 define ('RL_TYPE_AV', 4);
235 define ('RL_TYPE_FILE', 5);
237 $_rl_types = array ();
238 $_rl_types[RL_TYPE_BOOK] = 'rl_book';
239 $_rl_types[RL_TYPE_URL] = 'rl_url';
240 $_rl_types[RL_TYPE_HANDOUT] = 'rl_handout';
241 $_rl_types[RL_TYPE_AV] = 'rl_av';
242 $_rl_types[RL_TYPE_FILE] = 'rl_file';
244 /* control how user inputs get formatted on output: */
245 /* note: v131 not all formatting options are available on each section. */
247 define('AT_FORMAT_NONE', 0); /* LEQ to ~AT_FORMAT_ALL */
248 define('AT_FORMAT_EMOTICONS', 1);
249 define('AT_FORMAT_LINKS', 2);
250 define('AT_FORMAT_IMAGES', 4);
251 define('AT_FORMAT_HTML', 8);
252 define('AT_FORMAT_GLOSSARY', 16);
253 define('AT_FORMAT_ATCODES', 32);
254 define('AT_FORMAT_CONTENT_DIR', 64); /* remove CONTENT_DIR */
255 define('AT_FORMAT_QUOTES', 128); /* remove double quotes (does this get used?) */
256 define('AT_FORMAT_ALL', AT_FORMAT_EMOTICONS
262 + AT_FORMAT_CONTENT_DIR);
264 $_field_formatting = array();
266 $_field_formatting['content.keywords'] = AT_FORMAT_NONE;
267 $_field_formatting['content.title'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML | AT_FORMAT_QUOTES;
268 $_field_formatting['content.text'] = AT_FORMAT_ALL;
270 $_field_formatting['course_cats.cat_name'] = AT_FORMAT_NONE;
272 $_field_formatting['courses.*'] = AT_FORMAT_ALL & ~AT_FORMAT_EMOTICONS & ~AT_FORMAT_ATCODES & ~AT_FORMAT_LINKS & ~AT_FORMAT_IMAGES;
274 $_field_formatting['forums.title'] = AT_FORMAT_NONE;
275 $_field_formatting['forums.description'] = AT_FORMAT_ALL;
277 $_field_formatting['forums_threads.subject'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
278 $_field_formatting['forums_threads.body'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
280 $_field_formatting['glossary.word'] = AT_FORMAT_NONE;
281 $_field_formatting['glossary.definition'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
283 $_field_formatting['instructor_approvals.notes']= AT_FORMAT_NONE;
285 $_field_formatting['members.*'] = AT_FORMAT_NONE; /* wildcards are okay */
287 $_field_formatting['messages.subject'] = AT_FORMAT_EMOTICONS + AT_FORMAT_LINKS + AT_FORMAT_IMAGES;
288 $_field_formatting['messages.body'] = AT_FORMAT_EMOTICONS + AT_FORMAT_LINKS + AT_FORMAT_IMAGES + AT_FORMAT_ATCODES;
290 $_field_formatting['news.title'] = AT_FORMAT_EMOTICONS | AT_FORMAT_LINKS & ~AT_FORMAT_HTML;
291 $_field_formatting['news.body'] = AT_FORMAT_ALL;
293 $_field_formatting['resource_categories.CatName']= AT_FORMAT_NONE;
294 $_field_formatting['resource_categories.Url'] = AT_FORMAT_NONE;
295 $_field_formatting['resource_links.LinkName'] = AT_FORMAT_NONE;
296 $_field_formatting['resource_links.Description']= AT_FORMAT_NONE;
297 $_field_formatting['resource_links.SubmitName']= AT_FORMAT_NONE;
299 $_field_formatting['tests.title'] = AT_FORMAT_ALL;
300 $_field_formatting['tests.instructions'] = AT_FORMAT_ALL;
302 $_field_formatting['themes.title'] = AT_FORMAT_NONE;
304 $_field_formatting['tests_answers.answer'] = AT_FORMAT_NONE;
305 $_field_formatting['tests_answers.notes'] = AT_FORMAT_ALL;
306 $_field_formatting['tests_questions.*'] = AT_FORMAT_ALL;
308 $_field_formatting['tests_questions_categories.title'] = AT_FORMAT_NONE;
310 $_field_formatting['polls.*'] = AT_FORMAT_ALL;
312 $_field_formatting['blog_posts.body'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
313 $_field_formatting['blog_posts.title'] = AT_FORMAT_NONE;
315 $_field_formatting['blog_posts_comments.comment'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
317 $_field_formatting['courses.banner'] = AT_FORMAT_ALL;
319 if (isset($_GET['cid'])) {
320 $cid = intval($_GET['cid']);
321 } else if (isset($_POST['cid'])) {
322 $cid = intval($_POST['cid']);