made a copy
[atutor.git] / include / lib / constants.inc.php
1 <?php
2 /************************************************************************/
3 /* ATutor                                                                                                                               */
4 /************************************************************************/
5 /* Copyright (c) 2002-2008 by Greg Gay, Joel Kronenberg & Heidi Hazelton*/
6 /* Adaptive Technology Resource Centre / University of Toronto                  */
7 /* http://atutor.ca                                                                                                             */
8 /*                                                                                                                                              */
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 /************************************************************************/
13 // $Id$
14
15 if (!defined('AT_INCLUDE_PATH')) { exit; }
16
17 /***************
18  * constants
19  ******/
20
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['max_login']                             = 5; //maximum login attempt 
31 $_config_defaults['illegal_extentions']        = 'exe|asp|php|php3|bat|cgi|pl|com|vbs|reg|pcd|pif|scr|bas|inf|vb|vbe|wsc|wsf|wsh';
32 $_config_defaults['site_name']                 = '';
33 $_config_defaults['home_url']                  = ''; // empty means disabled
34 $_config_defaults['default_language']          = 'en';
35 $_config_defaults['allow_registration']        = 1;
36 $_config_defaults['allow_browse']              = 1;
37 $_config_defaults['just_social']              = 0;
38 $_config_defaults['allow_instructor_registration']        = 1;
39 $_config_defaults['use_captcha']                           = 0; //use captcha?
40 $_config_defaults['allow_unenroll']            = 1;
41 $_config_defaults['cache_dir']                 = ''; // empty means disabled
42 $_config_defaults['enable_category_themes']    = 0; // disabled
43 $_config_defaults['course_backups']            = 5; // number of backups
44 $_config_defaults['email_confirmation']        = 0; // disabled
45 $_config_defaults['master_list']               = 0; // disabled
46 $_config_defaults['user_notes']                = 0; // disabled - whether to enable the user contributed handbook notes
47 $_config_defaults['theme_categories']          = 0; // disabled
48 $_config_defaults['main_defaults']                 = 'forum/list.php|glossary/index.php|file_storage/index.php|mods/_standard/social/index.php';
49 $_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|mods/_standard/social/index.php';
50 $_config_defaults['side_defaults']             = 'social|menu_menu|related_topics|users_online|glossary|search|poll|posts';
51 $_config_defaults['pref_defaults']                         = 'a:34:{s:14:"PREF_NUMBERING";i:1;s:10:"PREF_THEME";s:7:"default";s:13:"PREF_TIMEZONE";s:0:"";s:18:"PREF_JUMP_REDIRECT";i:1;s:15:"PREF_FORM_FOCUS";i:1;s:19:"PREF_CONTENT_EDITOR";i:0;s:15:"PREF_SHOW_GUIDE";i:1;s:14:"PREF_FONT_FACE";s:0:"";s:15:"PREF_FONT_TIMES";s:1:"1";s:14:"PREF_FG_COLOUR";s:0:"";s:14:"PREF_BG_COLOUR";s:0:"";s:14:"PREF_HL_COLOUR";s:0:"";s:28:"PREF_USE_ALTERNATIVE_TO_TEXT";i:0;s:16:"PREF_ALT_TO_TEXT";s:5:"audio";s:34:"PREF_ALT_TO_TEXT_APPEND_OR_REPLACE";s:6:"append";s:25:"PREF_ALT_TEXT_PREFER_LANG";s:2:"en";s:29:"PREF_USE_ALTERNATIVE_TO_AUDIO";i:0;s:17:"PREF_ALT_TO_AUDIO";s:4:"text";s:35:"PREF_ALT_TO_AUDIO_APPEND_OR_REPLACE";s:6:"append";s:26:"PREF_ALT_AUDIO_PREFER_LANG";s:2:"en";s:30:"PREF_USE_ALTERNATIVE_TO_VISUAL";i:0;s:18:"PREF_ALT_TO_VISUAL";s:4:"text";s:36:"PREF_ALT_TO_VISUAL_APPEND_OR_REPLACE";s:6:"append";s:27:"PREF_ALT_VISUAL_PREFER_LANG";s:2:"en";s:15:"PREF_DICTIONARY";i:1;s:14:"PREF_THESAURUS";i:1;s:16:"PREF_NOTE_TAKING";i:1;s:15:"PREF_CALCULATOR";i:1;s:11:"PREF_ABACUS";i:1;s:10:"PREF_ATLAS";i:1;s:17:"PREF_ENCYCLOPEDIA";i:1;s:18:"PREF_SHOW_CONTENTS";i:1;s:31:"PREF_SHOW_NEXT_PREVIOUS_BUTTONS";s:1:"1";s:22:"PREF_SHOW_BREAD_CRUMBS";s:1:"1";}';
52 $_config_defaults['pref_inbox_notify']             = 0; // disabled
53 $_config_defaults['pref_is_auto_login']            = "disable"; // disabled
54 $_config_defaults['check_version']                 = 0; // disabled
55 $_config_defaults['fs_versioning']             = 1; // enabled - file storage version control
56 $_config_defaults['last_cron']                 = 0; // cron has to be enabled manually
57 $_config_defaults['enable_mail_queue']         = 0; // mail queue can only be enabled if cron is running
58 $_config_defaults['auto_install_languages']    = 0; // auto install languages can only be enabled if cron is running
59 $_config_defaults['display_name_format']       = 1; // 0-5, see (array) display_name_formats
60 $_config_defaults['time_zone']                 = ''; // empty means disabled or not supported
61 $_config_defaults['prof_pic_max_file_size']        = 819200; // max size of an uploaded profile pic, in bytes. default 800 KB
62 $_config_defaults['sent_msgs_ttl']             = 120; // number of days till saved sent inbox msgs are deleted
63 $_config_defaults['mysql_group_concat_max_len'] = null; // null = check, 0 = disabled/unsupported, (non-zero is the actual mysql value)
64 $_config_defaults['latex_server']              = 'http://www.atutor.ca/cgi/mimetex.cgi?'; // the full URL to an external LaTeX parse
65 $_config_defaults['gtype']                                         = 0; //Defaulted to be original google search, @author Harris
66 $_config_defaults['pretty_url']                            = 0; //pretty url, disabled
67 $_config_defaults['course_dir_name']               = 0; //course dir name (course slug), disabled
68 $_config_defaults['apache_mod_rewrite']            = 0; //apache mod_rewrite extension, disabled by default.
69 $_config = $_config_defaults;
70
71
72 /* display name formats
73  * L = login name
74  * F = first name
75  * S = second name
76  * T = last name */
77 $display_name_formats = array();
78 $display_name_formats[0] = 'display_name_format_l';
79 $display_name_formats[1] = 'display_name_format_fst';
80 $display_name_formats[2] = 'display_name_format_fstl';
81 $display_name_formats[3] = 'display_name_format_fl';
82 $display_name_formats[4] = 'display_name_format_lf';
83 $display_name_formats[5] = 'display_name_format_lfst';
84
85
86 /* the atutor.ca language translation server: */
87 define('AT_LANG_DB_HOST', 'atutorsvn.atrc.utoronto.ca');
88 define('AT_LANG_DB_USER', 'read_dev_lang');
89 define('AT_LANG_DB_PASS', 'read_dev_lang');
90
91 /* links */
92 define('LINK_CAT_COURSE',       1);
93 define('LINK_CAT_GROUP',        2);
94 define('LINK_CAT_SELF',         3);
95
96 define('LINK_CAT_AUTH_NONE',    0);
97 define('LINK_CAT_AUTH_ALL',             1);
98 define('LINK_CAT_AUTH_COURSE',  2);
99 define('LINK_CAT_AUTH_GROUP',   3);
100
101 /* drafting room constants */
102 define('WORKSPACE_COURSE',     1); // aka Course Files
103 define('WORKSPACE_PERSONAL',   2); // aka My Files
104 define('WORKSPACE_ASSIGNMENT', 3);
105 define('WORKSPACE_GROUP',      4);
106 define('WORKSPACE_SYSTEM',     5);
107 define('WORKSPACE_PATH_DEPTH', 1); // how deep the directories should be
108 define('WORKSPACE_FILE_PATH',  AT_CONTENT_DIR . 'file_storage/');
109
110 /* how many related topics can be listed */
111 define('NUM_RELATED_TOPICS', 5);
112
113 /* how many days until the password reminder link expires */
114 define('AT_PASSWORD_REMINDER_EXPIRY', 2);
115
116 /* taking a test an unlimited # of times */
117 define('AT_TESTS_TAKE_UNLIMITED', 0);
118
119 /* how many announcements listed */
120 define('NUM_ANNOUNCEMENTS', 10);
121
122 /* how long cache objects can persist   */
123 /* in seconds. should be low initially, but doesn't really matter. */
124 /* in practice should be 0 (ie. INF)    */
125 define('CACHE_TIME_OUT',        60);
126
127 /* member status field options */
128 define('AT_STATUS_DISABLED',    0);
129 define('AT_STATUS_UNCONFIRMED', 1);
130 define('AT_STATUS_STUDENT',     2);
131 define('AT_STATUS_INSTRUCTOR',  3);
132
133 /* $_pages sections */
134 define('AT_NAV_PUBLIC', 'AT_NAV_PUBLIC');
135 define('AT_NAV_START',  'AT_NAV_START');
136 define('AT_NAV_COURSE', 'AT_NAV_COURSE');
137 define('AT_NAV_HOME',   'AT_NAV_HOME');
138 define('AT_NAV_ADMIN',  'AT_NAV_ADMIN');
139
140 /* user permissions */
141
142 /* $_privs[priv number] = array(String name, Boolean pen, Boolean tools) */
143 define('AT_PRIV_RETURN',                true);
144 define('AT_PRIV_NONE',                  0);
145
146 define('AT_PRIV_ADMIN',                 1);
147
148 /* admin privs: */
149 define('AT_ADMIN_PRIV_NONE',        0);
150 define('AT_ADMIN_PRIV_ADMIN',       1);
151
152 /* admin log (type of operations) */
153 define('AT_ADMIN_LOG_UPDATE',  1);
154 define('AT_ADMIN_LOG_DELETE',  2);
155 define('AT_ADMIN_LOG_INSERT',  3);
156 define('AT_ADMIN_LOG_REPLACE', 4);
157 define('AT_ADMIN_LOG_OTHER',   5); //for non-db operations
158
159 if (strpos(@ini_get('arg_separator.input'), ';') !== false) {
160         define('SEP', ';');
161 } else {
162         define('SEP', '&');
163 }
164
165 /* the URL to the AChecker server of choice. must include trailing slash. */
166 //define('AT_ACHECKER_URL', 'http://checker.atrc.utoronto.ca/servlet/');
167 define('AT_ACHECKER_URL', 'http://www.achecker.ca/');
168 define('AT_ACHECKER_WEB_SERVICE_ID', '2f4149673d93b7f37eb27506905f19d63fbdfe2d');
169
170 if (!isset($_SERVER['REQUEST_URI'])) {
171         $REQUEST_URI = $_SERVER['SCRIPT_NAME'];
172         if ($_SERVER['QUERY_STRING'] != '') {
173                 $REQUEST_URI .= '?'.$_SERVER['QUERY_STRING'];
174         }
175         $_SERVER['REQUEST_URI'] = $REQUEST_URI;
176 }
177
178 /* get the base url     */
179 if (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on')) {
180         $server_protocol = 'https://';
181 } else {
182         $server_protocol = 'http://';
183 }
184
185 /* Handles pretty url - @author Harris */
186 define('AT_PRETTY_URL_HANDLER',         'go.php');      
187 define('AT_PRETTY_URL_NOT_HEADER',      false);
188 define('AT_PRETTY_URL_IS_HEADER',       true);
189
190 $dir_deep        = substr_count(AT_INCLUDE_PATH, '..');
191 $url_parts       = explode('/', $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
192 $_base_href      = array_slice($url_parts, 0, count($url_parts) - $dir_deep-1);
193 $_base_href      = $server_protocol . implode('/', $_base_href).'/';
194
195 if (($temp = strpos($_base_href, AT_PRETTY_URL_HANDLER)) > 0){
196         $endpos = $temp;
197 } else {
198         $endpos = strlen($_base_href); 
199
200 }
201 $_base_href      = substr($_base_href, 0, $endpos);
202 $_base_path  = substr($_base_href, strlen($server_protocol . $_SERVER['HTTP_HOST']));
203
204 define('AT_BASE_HREF', $_base_href);
205
206 /* relative uri */
207 $_rel_url = '/'.implode('/', array_slice($url_parts, count($url_parts) - $dir_deep-1));
208
209 /* where the gudes are (could be a full URL if needed): */
210 define('AT_GUIDES_PATH', $_base_path . 'documentation/');
211
212 define('AT_BACKUP_DIR', AT_CONTENT_DIR . 'backups/'); // where the backups get stored
213
214 define('VERSION',               '1.6.4');
215 define('ONLINE_UPDATE', 3); /* update the user expiry every 3 min */
216
217 /* valid date format_types:                                             */
218 /* @see ./include/lib/date_functions.inc.php    */
219 define('AT_DATE_MYSQL_DATETIME',                1); /* YYYY-MM-DD HH:MM:SS      */
220 define('AT_DATE_MYSQL_TIMESTAMP_14',    2); /* YYYYMMDDHHMMSS           */
221 define('AT_DATE_UNIX_TIMESTAMP',                3); /* seconds since epoch      */
222 define('AT_DATE_INDEX_VALUE',                   4); /* index to the date arrays */
223
224 define('AT_ROLE_STUDENT',                               0);
225 define('AT_ROLE_INSTRUCTOR',                    1);
226
227 define('AT_KBYTE_SIZE',                  1024);
228
229 define('AT_COURSESIZE_UNLIMITED',          -1); 
230 define('AT_COURSESIZE_DEFAULT',            -2);  /* can be changed in config.inc.php */
231 define('AT_FILESIZE_DEFAULT',              -3);  /* this too */
232 define('AT_FILESIZE_SYSTEM_MAX',           -4);
233 $editable_file_types = array('txt', 'html', 'htm', 'xml', 'css', 'asc', 'csv', 'sql');
234
235 /* how many poll choices are available: */
236 define('AT_NUM_POLL_CHOICES',   7);
237
238 /* ways of releasing a test */
239 define('AT_RELEASE_NEVER',                 0); // do not release 
240 define('AT_RELEASE_IMMEDIATE',     1); // release after submitted
241 define('AT_RELEASE_MARKED',                2); // release after all q's marked
242
243 /* QPROP = question property: */
244 define('AT_TESTS_QPROP_WORD',       1);
245 define('AT_TESTS_QPROP_SENTENCE',   2);
246 define('AT_TESTS_QPROP_PARAGRAPH',  3);
247 define('AT_TESTS_QPROP_PAGE',       4);
248 define('AT_TESTS_QPROP_ALIGN_VERT',     5); // align question options vertically
249 define('AT_TESTS_QPROP_ALIGN_HORT',     6); // align question options horizontally
250
251 /* enrollment types for $_SESSION['enroll'] */
252 define('AT_ENROLL_NO',                  0);
253 define('AT_ENROLL_YES',                 1);
254 define('AT_ENROLL_ALUMNUS',             2);
255
256 // constants for reading list module
257 define ('RL_TYPE_BOOK', 1);
258 define ('RL_TYPE_URL',  2);
259 define ('RL_TYPE_HANDOUT', 3);
260 define ('RL_TYPE_AV', 4);
261 define ('RL_TYPE_FILE', 5);
262
263 // content type
264 define ('CONTENT_TYPE_CONTENT',  0);
265 define ('CONTENT_TYPE_FOLDER', 1);
266 define ('CONTENT_TYPE_WEBLINK', 2);
267
268 // content pre-requisite type
269 define ('CONTENT_PRE_TEST',  'test');
270
271 $_rl_types = array ();
272 $_rl_types[RL_TYPE_BOOK]        = 'rl_book';
273 $_rl_types[RL_TYPE_URL]         = 'rl_url';
274 $_rl_types[RL_TYPE_HANDOUT]     = 'rl_handout';
275 $_rl_types[RL_TYPE_AV]          = 'rl_av';
276 $_rl_types[RL_TYPE_FILE]        = 'rl_file';
277
278 /* control how user inputs get formatted on output: */
279 /* note: v131 not all formatting options are available on each section. */
280
281 define('AT_FORMAT_NONE',              0); /* LEQ to ~AT_FORMAT_ALL */
282 define('AT_FORMAT_EMOTICONS',     1);
283 define('AT_FORMAT_LINKS',         2);
284 define('AT_FORMAT_IMAGES',        4);
285 define('AT_FORMAT_HTML',          8);
286 define('AT_FORMAT_GLOSSARY',     16);
287 define('AT_FORMAT_ATCODES',      32);
288 define('AT_FORMAT_CONTENT_DIR', 64); /* remove CONTENT_DIR */
289 define('AT_FORMAT_QUOTES',      128); /* remove double quotes (does this get used?) */
290 define('AT_FORMAT_ALL',       AT_FORMAT_EMOTICONS 
291                                                            + AT_FORMAT_LINKS 
292                                                        + AT_FORMAT_IMAGES 
293                                                        + AT_FORMAT_HTML 
294                                                        + AT_FORMAT_GLOSSARY 
295                                                            + AT_FORMAT_ATCODES
296                                                            + AT_FORMAT_CONTENT_DIR);
297
298 $_field_formatting = array();
299
300 $_field_formatting['content.keywords']                  = AT_FORMAT_NONE;
301 $_field_formatting['content.title']                             = AT_FORMAT_ALL & ~AT_FORMAT_HTML | AT_FORMAT_QUOTES;
302 $_field_formatting['content.text']                              = AT_FORMAT_ALL;
303
304 $_field_formatting['course_cats.cat_name']              = AT_FORMAT_NONE;
305
306 $_field_formatting['courses.*']                             = AT_FORMAT_ALL & ~AT_FORMAT_EMOTICONS & ~AT_FORMAT_ATCODES & ~AT_FORMAT_LINKS & ~AT_FORMAT_IMAGES;
307
308 $_field_formatting['forums.title']                              = AT_FORMAT_NONE;
309 $_field_formatting['forums.description']                = AT_FORMAT_ALL;
310
311 $_field_formatting['forums_threads.subject']    = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
312 $_field_formatting['forums_threads.body']               = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
313
314 $_field_formatting['glossary.word']                             = AT_FORMAT_NONE;
315 $_field_formatting['glossary.definition']               = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
316
317 $_field_formatting['instructor_approvals.notes']= AT_FORMAT_NONE;
318
319 $_field_formatting['members.*']                 = AT_FORMAT_NONE; /* wildcards are okay */
320
321 $_field_formatting['messages.subject']                  = AT_FORMAT_EMOTICONS + AT_FORMAT_IMAGES;
322 $_field_formatting['messages.body']                             = AT_FORMAT_EMOTICONS + AT_FORMAT_LINKS + AT_FORMAT_IMAGES + AT_FORMAT_ATCODES;
323
324 $_field_formatting['news.title']                                = AT_FORMAT_EMOTICONS | AT_FORMAT_LINKS & ~AT_FORMAT_HTML;
325 $_field_formatting['news.body']                                 = AT_FORMAT_ALL;
326
327 $_field_formatting['resource_categories.CatName']= AT_FORMAT_NONE;
328 $_field_formatting['resource_categories.Url']   = AT_FORMAT_NONE;
329 $_field_formatting['resource_links.LinkName']   = AT_FORMAT_NONE;
330 $_field_formatting['resource_links.Description']= AT_FORMAT_NONE;
331 $_field_formatting['resource_links.SubmitName']= AT_FORMAT_NONE;
332
333 $_field_formatting['tests.title']                               = AT_FORMAT_ALL;
334 $_field_formatting['tests.instructions']                = AT_FORMAT_ALL;
335
336 $_field_formatting['themes.title']                              = AT_FORMAT_NONE;
337
338 $_field_formatting['tests_answers.answer']              = AT_FORMAT_NONE;
339 $_field_formatting['tests_answers.notes']               = AT_FORMAT_ALL;
340 $_field_formatting['tests_questions.*']                 = AT_FORMAT_ALL;
341
342 $_field_formatting['tests_questions_categories.title']  = AT_FORMAT_NONE;
343
344 $_field_formatting['polls.*']            = AT_FORMAT_ALL;
345
346 $_field_formatting['blog_posts.body']        = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
347 $_field_formatting['blog_posts.title']       = AT_FORMAT_NONE;
348
349 $_field_formatting['blog_posts_comments.comment'] = AT_FORMAT_ALL & ~AT_FORMAT_HTML;
350
351 $_field_formatting['courses.banner'] = AT_FORMAT_ALL;
352
353 if (isset($_GET['cid'])) {
354         $cid = intval($_GET['cid']);
355 } else if (isset($_POST['cid'])) {
356         $cid = intval($_POST['cid']);
357 }
358
359
360 /* google type constants - @author Harris */
361 define('GOOGLE_TYPE_SOAP',              0);             //The original soap search with key generated before Dec 2005.
362 define('GOOGLE_TYPE_AJAX',              1);             //The new AJAX search by google
363
364 /* flags for validate_length in vitals. - @author Harris*/
365 define('VALIDATE_LENGTH_FOR_DISPLAY',   1);     
366
367 /* the length of sublink text display in the course index page, detail view */
368 define('SUBLINK_TEXT_LEN', 38);
369
370 /* The lock out time for max login attempts */
371 define('LOGIN_ATTEMPT_LOCKED_TIME', 60);        //in minutes, default an hour, 60 minutes
372 ?>