Compare commits

..

810 Commits

Author SHA1 Message Date
moodlerobot e045c25873 Bumped to 1.7.6 2008-10-15 16:52:54 +00:00
moodlerobot 9fb9a19634 Automatic installer.php lang files by installer_builder (20081013) 2008-10-13 01:38:57 +00:00
moodlerobot ac45cb6868 Automatic installer.php lang files by installer_builder (20081009) 2008-10-09 01:41:27 +00:00
moodlerobot d6398c1aa7 Automatic installer.php lang files by installer_builder (20081005) 2008-10-05 01:30:06 +00:00
tjhunt b959c6e367 MDL-16720 The edit icon in the quiz preview screen pops up the edit form in a window that is too small 2008-09-28 08:59:57 +00:00
moodlerobot c2a020b29c Automatic installer.php lang files by installer_builder (20080928) 2008-09-28 01:33:58 +00:00
stronk7 979078fd7e Backporting MDL-15896 (tabs and recent activity) from HEAD 2008-09-26 09:50:11 +00:00
stronk7 5cb0b4571b Protect message settings with sesskey. MDL-16688 ; backported from 18_STABLE 2008-09-25 22:38:19 +00:00
moodlerobot 3e91a8c1c6 Automatic installer.php lang files by installer_builder (20080925) 2008-09-25 01:35:03 +00:00
moodlerobot 947398763d Automatic installer.php lang files by installer_builder (20080924) 2008-09-24 01:37:34 +00:00
moodlerobot eb09bdfc8f Automatic installer.php lang files by installer_builder (20080922) 2008-09-22 01:27:13 +00:00
moodlerobot 80f906ef5b Automatic installer.php lang files by installer_builder (20080921) 2008-09-21 01:29:12 +00:00
pichetp df5fd088ce MDL-15358 negative data between () bad } closing... 2008-09-20 20:29:54 +00:00
pichetp a7b41a3858 MDL-15358 negative data between () merge from 1.9 as this file is no more in HEAD 2008-09-20 20:16:55 +00:00
moodlerobot 8729b26e66 Automatic installer.php lang files by installer_builder (20080902) 2008-09-02 01:33:13 +00:00
tjhunt 4c01616d7e MDL-15655 - address_in_subnet does not work on 64 bit architectures. Also, we found some other issues with this funtion while diagnosing the problem. 2008-09-01 04:17:01 +00:00
moodlerobot d7a113ccf6 Automatic installer.php lang files by installer_builder (20080829) 2008-08-29 01:33:21 +00:00
tjhunt 16cebcc326 MDL-16243 Implement a health-centre check that the question categories are arranged properly in tree structures. 2008-08-28 05:06:20 +00:00
moodlerobot 01642a7176 Automatic installer.php lang files by installer_builder (20080828) 2008-08-28 01:36:24 +00:00
moodlerobot fb24b67aa0 Automatic installer.php lang files by installer_builder (20080825) 2008-08-25 01:27:15 +00:00
moodlerobot faf39f00fc Automatic installer.php lang files by installer_builder (20080824) 2008-08-24 01:25:34 +00:00
moodlerobot eeb562d148 Automatic installer.php lang files by installer_builder (20080823) 2008-08-23 01:27:00 +00:00
moodlerobot b3c5d55d51 Automatic installer.php lang files by installer_builder (20080822) 2008-08-22 01:31:55 +00:00
moodlerobot e0c4317044 Automatic installer.php lang files by installer_builder (20080821) 2008-08-21 01:32:09 +00:00
tjhunt 2abc0d001d MDL-15605 merge problem. 2008-08-20 08:56:38 +00:00
tjhunt f285be0eaf MDL-15605 Convert question bank consistency checks described in MoodleDocs (http://docs.moodle.org/en/Development:Question_bank_consistency_check) to health centre checks. 2008-08-20 08:52:47 +00:00
tjhunt 55954755f4 MDL-16141 Need an sql_position function to do POSITION(needle IN haystack) on crappy databases. Backported from HEAD. 2008-08-20 08:51:03 +00:00
moodlerobot cdeb1274c4 Automatic installer.php lang files by installer_builder (20080819) 2008-08-19 01:29:50 +00:00
moodlerobot d658317313 Automatic installer.php lang files by installer_builder (20080818) 2008-08-18 01:26:22 +00:00
moodlerobot 297c72fd2f Automatic installer.php lang files by installer_builder (20080817) 2008-08-17 01:22:23 +00:00
tjhunt ef40013c24 MDL-16056 - Aiken format should treat input as plain text, and so escape HTML special characters. 2008-08-15 03:13:31 +00:00
tjhunt 9ed313978a MDL-16056 - Backporting comment changes before merging the acutal fix. 2008-08-15 03:08:12 +00:00
tjhunt 2caa535789 Oops! RISK_DATALOSS did not exist before 1.9. 2008-08-14 02:09:19 +00:00
tjhunt e38099e42d MDL-15819 - Review the RISK_XXX flags on all quiz and question capabilites. 2008-08-13 07:05:27 +00:00
moodlerobot 579ef29363 Automatic installer.php lang files by installer_builder (20080812) 2008-08-12 01:34:25 +00:00
moodlerobot 321cc00de4 Automatic installer.php lang files by installer_builder (20080811) 2008-08-11 01:05:52 +00:00
moodlerobot 66a1817c9c Automatic installer.php lang files by installer_builder (20080809) 2008-08-09 01:26:18 +00:00
moodlerobot 0561809c5d Automatic installer.php lang files by installer_builder (20080808) 2008-08-08 01:30:55 +00:00
moodlerobot 863b73aff3 Automatic installer.php lang files by installer_builder (20080807) 2008-08-07 01:33:51 +00:00
moodlerobot 14439b54d0 Automatic installer.php lang files by installer_builder (20080806) 2008-08-06 01:32:30 +00:00
moodlerobot ecbd19b23a Automatic installer.php lang files by installer_builder (20080805) 2008-08-05 01:27:57 +00:00
moodlerobot bf5ee9d9d6 Automatic installer.php lang files by installer_builder (20080802) 2008-08-02 01:26:52 +00:00
skodak 00e1dce31e MDL-15410 Require PHP 5.2.4 instead of 5.2.0 in HEAD because PHP 5.2.0 has many known problems :-( 2008-08-01 10:10:09 +00:00
moodlerobot a7f0a47456 Automatic installer.php lang files by installer_builder (20080728) 2008-07-28 01:28:26 +00:00
skodak 3e4fae4d8d MDL-15823 format_string() improvements; merged from MOODLE_19_STABLE 2008-07-25 22:45:46 +00:00
moodlerobot 84ca389754 Automatic installer.php lang files by installer_builder (20080723) 2008-07-23 01:27:23 +00:00
moodlerobot 4874505398 Automatic installer.php lang files by installer_builder (20080722) 2008-07-22 01:35:06 +00:00
moodlerobot c1dcb5d292 Automatic installer.php lang files by installer_builder (20080721) 2008-07-21 01:22:48 +00:00
moodlerobot ce4c57764c Added autogenerated bn_utf8 installer file. 2008-07-20 21:21:35 +00:00
moodlerobot d46a3b303d file installer.php was added on branch MOODLE_17_STABLE on 2008-07-20 21:21:35 +0000 2008-07-20 21:20:08 +00:00
moodlerobot 66ef299f5e Automatic installer.php lang files by installer_builder (20080719) 2008-07-19 01:23:49 +00:00
moodler 603cf45886 MDL-6850 Removed apparent-size from du 2008-07-18 06:38:32 +00:00
gbateson 81a74ce130 improvements to generation of html from xml:
JCloze: set textbox size allowing for minimum gap size setting and longest answer;
JMatch: allow for duplicates and distractors in RHS items;
JQuiz: set textbox size allowing for longest answer, and use textarea if answer longer than 29 chars;
2008-07-13 12:16:31 +00:00
moodler bf1e6b85f5 BUmped post release 2008-07-11 05:45:41 +00:00
moodler 7055e88f97 Bumped to release 2008-07-11 05:29:10 +00:00
dongsheng 7d8c97dcc4 MDL-14932, improve accessibility in role assigning page. 2008-07-11 04:56:38 +00:00
skodak 2d60f585aa MDL-15450 CSRF prevention; merged from MOODLE_16_STABLE 2008-07-08 13:05:09 +00:00
moodlerobot 95416b9889 Automatic installer.php lang files by installer_builder (20080708) 2008-07-08 01:27:21 +00:00
skodak 6649c902cd MDL-15516 prevent access to deleted profiles; backported from HEAD 2008-07-05 14:59:44 +00:00
moodlerobot 2fd1b1a9a3 Automatic installer.php lang files by installer_builder (20080705) 2008-07-05 01:28:32 +00:00
arborrow 1e5575ae9e MDL-7571 - shuffles 'mode' before displaying, merged from 18STABLE 2008-07-04 22:24:40 +00:00
moodlerobot 41f7e89fb6 Automatic installer.php lang files by installer_builder (20080704) 2008-07-04 01:25:22 +00:00
gbateson e6da58fb3c MDL-15184: fix sql injection vulnerability 2008-07-01 10:47:40 +00:00
moodlerobot 81590f6553 Automatic installer.php lang files by installer_builder (20080701) 2008-07-01 01:23:06 +00:00
moodlerobot 30c6a88aee Automatic installer.php lang files by installer_builder (20080630) 2008-06-30 01:27:27 +00:00
scyrma cd4a340157 MDL-15392: fix output sanitization. 2008-06-27 03:35:44 +00:00
moodlerobot 7446f0d0ff Automatic installer.php lang files by installer_builder (20080626) 2008-06-26 01:29:34 +00:00
Francois Marier 478503ba0f Fix drift between CVS and git (deleted files only) 2008-06-24 01:26:46 +00:00
moodlerobot ec573b8969 Automatic installer.php lang files by installer_builder (20080624) 2008-06-24 01:26:46 +00:00
tjhunt 886ef74dff MDL-15372 - Links in course summary and section summaries not recoded on restore. Petr thinks it is a bad idea to recode links in course summaries, becuase he thinks there should not be links there at all, but I disagree, and as long as links are there, and we have the code to stop them breaking on backup and restore, we should fix the bug. 2008-06-23 17:02:24 +00:00
moodlerobot 860a2858f4 Automatic installer.php lang files by installer_builder (20080623) 2008-06-23 01:23:38 +00:00
moodlerobot 06ecd61c8b Automatic installer.php lang files by installer_builder (20080621) 2008-06-21 01:26:25 +00:00
gbateson 88010c44ce replace get_jmatch_items by set_jmatch_items 2008-06-20 22:26:51 +00:00
gbateson fc7de9bb75 allow <img> and other tags in LHS side of JMatch in "v6" output format 2008-06-19 05:53:30 +00:00
tjhunt 70484742a9 MDL-15290 - Missing question types not handled properly on backup. 2008-06-18 14:29:38 +00:00
moodlerobot 52b6a471c5 Automatic installer.php lang files by installer_builder (20080616) 2008-06-16 01:28:20 +00:00
moodlerobot e7288e1e7e Automatic installer.php lang files by installer_builder (20080612) 2008-06-12 01:40:47 +00:00
moodlerobot e487fa20dc Automatic installer.php lang files by installer_builder (20080610) 2008-06-10 01:38:31 +00:00
gbateson 92bb71dcec fix conversion of relative URLs in Hot Potatoes "<=" and "=>" buttons on sites where slasharguments as disabled (Site Admin -> Server -> HTTP -> Use slash arguments) 2008-06-07 01:40:01 +00:00
moodlerobot 21a6060f3d Automatic installer.php lang files by installer_builder (20080531) 2008-05-31 01:36:23 +00:00
mchurch 3a5677d49c MDL-15035 - Changed error message to more meaningful one. 2008-05-28 14:57:24 +00:00
moodlerobot 6494eb8fe0 Automatic installer.php lang files by installer_builder (20080523) 2008-05-23 01:39:47 +00:00
moodlerobot 1b8dbf5466 Automatic installer.php lang files by installer_builder (20080522) 2008-05-22 01:40:41 +00:00
moodlerobot aafb64be36 Automatic installer.php lang files by installer_builder (20080521) 2008-05-21 01:44:01 +00:00
tjhunt dfd00d9d32 MDL-14928 - Adding random questions from a category with an apostrophe in the name does not work. Stupid bloody addslashes. Roll on dmllib 2.0. 2008-05-20 17:09:42 +00:00
moodlerobot 0c76f8bc3a Automatic installer.php lang files by installer_builder (20080520) 2008-05-20 01:35:47 +00:00
moodlerobot e1ecf0a918 Automatic installer.php lang files by installer_builder (20080517) 2008-05-17 01:37:20 +00:00
stronk7 4f75c6c949 Avoid $_REQUEST["id"] usage. MDL-14806 ; backported from 19_STABLE 2008-05-13 01:52:25 +00:00
tjhunt d02317b6da MDL-14804 - question_list_instances is broken - It does not include the each modules lib file before doing function_exists($module->name.'_question_list_instances'). 2008-05-12 17:29:54 +00:00
tjhunt 9ba3aacb99 MDL-14797 - Error when moving a course to an empty category on Postgres 2008-05-12 10:44:46 +00:00
moodlerobot fb6099f56d Automatic installer.php lang files by installer_builder (20080512) 2008-05-12 01:36:50 +00:00
moodlerobot 45e83c7913 New uz installer lang 2008-05-10 02:58:25 +00:00
moodlerobot 895ac595b7 file installer.php was added on branch MOODLE_17_STABLE on 2008-05-10 02:58:25 +0000 2008-05-10 02:57:14 +00:00
tjhunt 34710324e5 MDL-14750 - Multianswer questions get broken by backup and restore becuase question->parent is not recoded properly in the database. 2008-05-09 15:22:45 +00:00
moodlerobot eed364d080 Automatic installer.php lang files by installer_builder (20080509) 2008-05-09 01:39:33 +00:00
moodlerobot 2422634052 Automatic installer.php lang files by installer_builder (20080508) 2008-05-08 01:37:34 +00:00
tjhunt 4340e07b2c MDL-5482 - Backup and restore problems for match, random and truefalse question types.
All the credit goes to Paulo Matos who carefully worked out and tested this fix, and updated the patch several times over more than a year while I very slowly got around to reviewing it and checking it in.
2008-05-07 12:31:49 +00:00
moodlerobot 468eff4e21 Automatic installer.php lang files by installer_builder (20080504) 2008-05-04 01:44:13 +00:00
moodlerobot fc74c5674a New lang supported by installer: cy_utf8 2008-05-04 00:45:01 +00:00
moodlerobot dc8320a6f8 file installer.php was added on branch MOODLE_17_STABLE on 2008-05-04 00:45:01 +0000 2008-05-04 00:42:16 +00:00
moodlerobot 6b7b9ad10c Automatic installer.php lang files by installer_builder (20080503) 2008-05-03 01:32:40 +00:00
jerome e18bc77b56 MDL-11382 added a link 'Profil' to the administration block 2008-05-02 06:14:36 +00:00
scyrma 8440f947ca MDL-8592: Get spellchecking to work over https (backport from 1.9) 2008-05-02 03:38:22 +00:00
moodlerobot 11abfe0569 Automatic installer.php lang files by installer_builder (20080501) 2008-05-01 01:38:01 +00:00
moodlerobot ad08d64332 Automatic installer.php lang files by installer_builder (20080430) 2008-04-30 01:34:41 +00:00
moodlerobot f468c0e4c1 Automatic installer.php lang files by installer_builder (20080429) 2008-04-29 01:36:36 +00:00
moodlerobot 1c8e6588aa Automatic installer.php lang files by installer_builder (20080425) 2008-04-25 01:35:38 +00:00
tjhunt 443fd25436 MDL-13982 - Performance problem when deleting questions from large question banks. Thanks to Michael Spall for this fix. 2008-04-23 13:44:29 +00:00
tjhunt 3c956dbd60 MDL-11978 - Backport admin notification from MDL-11061 about bogus $CFG->wwwroot from 1.9 to 1.8 and 1.7. 2008-04-23 10:38:13 +00:00
tjhunt bdda301ebf MDL-14352 - General feedback for descriptions not showing up on the review page, as it should. 2008-04-22 16:17:03 +00:00
moodler fbdc843096 MDL-11142 Roles upgrade was losing timestart and timeend for teachers and students :-( 2008-04-18 03:28:27 +00:00
gbateson 7f3c24f40b removed setting of timeclose and timeopen when course format == "weeks" 2008-04-18 00:58:07 +00:00
moodlerobot 5834d7813a Automatic installer.php lang files by installer_builder (20080417) 2008-04-17 01:32:05 +00:00
dongsheng ca0908b961 check.gif should keep in this mod 2008-04-15 03:37:26 +00:00
dongsheng d40e15ee7a MDL-8188, moved from mod/glossary/check.gif 2008-04-15 03:33:05 +00:00
dongsheng 207c5454b9 MDL-8188, move check.gif to pix/i/approve.gif 2008-04-15 03:31:56 +00:00
moodlerobot 0875ca82c2 Automatic installer.php lang files by installer_builder (20080414) 2008-04-14 01:36:45 +00:00
moodlerobot a1a85b1779 Automatic installer.php lang files by installer_builder (20080413) 2008-04-13 01:30:30 +00:00
moodlerobot f15a666f64 Automatic installer.php lang files by installer_builder (20080412) 2008-04-12 01:29:50 +00:00
gbateson 1b81ef9090 do not show hidden HotPots in mod/hotpot/index.php 2008-04-11 05:14:10 +00:00
moodlerobot 4b0ce9f3b7 Automatic installer.php lang files by installer_builder (20080408) 2008-04-08 01:36:50 +00:00
stronk7 cca8a446da Fix wrong conversion from '0' to '' in oracle_diry_hack. MDL-14182 ; backported from HEAD 2008-04-04 11:28:04 +00:00
moodlerobot db3568deb4 Automatic installer.php lang files by installer_builder (20080404) 2008-04-04 01:18:42 +00:00
moodlerobot 2240b6c451 Automatic installer.php lang files by installer_builder (20080326) 2008-03-26 03:19:28 +00:00
moodlerobot ebe6a497eb Automatic installer.php lang files by installer_builder (20080325) 2008-03-25 03:16:44 +00:00
moodlerobot b7b280b44c Automatic installer.php lang files by installer_builder (20080315) 2008-03-15 03:15:41 +00:00
moodlerobot 7da25cbffe Automatic installer.php lang files by installer_builder (20080314) 2008-03-14 03:16:01 +00:00
nicolasconnault 817a4d47b1 MDL-13919 Fixed undefined variable. Merging from MOODLE_16_STABLE 2008-03-13 14:01:37 +00:00
moodlerobot 9609d14e81 Automatic installer.php lang files by installer_builder (20080312) 2008-03-12 03:25:38 +00:00
ethem 13b8d2e6eb Race condition in cron for Scheduled-Capture (very very big sites and order review enabled only).
In one cron, 250-500 orders may be processed (based on 5 minutes).
If an admin sets cron time up smaller than 5 minutes and
250-500> new transactions are made after last cron executed, it can be blocked.
Authorize cron sets up an_lastcron every time when admin/cron.php executes.
This must be set up after blocking check code.

As result, if pending orders aren't accepted with in 30 days at payment management page, they expired and users cannot enrol.
When an admin enabled order review, he is guaranteed 'Payment managers accept/deny transactions manually'.
Scheduled-Capture is designed for forgotten orders only ;)

Backported from HEAD.
2008-03-11 08:38:04 +00:00
moodlerobot 9228301b3f Automatic installer.php lang files by installer_builder (20080311) 2008-03-11 03:25:24 +00:00
pichetp b6630ed3dc MDL-12503 Loguniform merging from head 2008-03-10 21:51:37 +00:00
andreabix d0f3b3f6fc Fixed [MDL-12830] 2008-03-10 15:58:03 +00:00
gbateson 42e5c3de66 add "mp3" (used by DewPlayer) to the list of query string parameters to search for when converting relative urls to absolute urls 2008-03-10 01:36:13 +00:00
moodlerobot 70efd67049 Automatic installer.php lang files by installer_builder (20080308) 2008-03-08 03:32:19 +00:00
moodlerobot 7e836fe858 Automatic installer.php lang files by installer_builder (20080307) 2008-03-07 03:31:48 +00:00
moodlerobot 328f98af9b Automatic installer.php lang files by installer_builder (20080304) 2008-03-04 03:41:17 +00:00
skodak 5a045ae328 MDL-13705 2008-03-01 13:12:40 +00:00
moodlerobot a45e386284 Automatic installer.php lang files by installer_builder (20080229) 2008-02-29 03:29:15 +00:00
skodak e5375362ac MDL-13705 2008-02-28 21:19:15 +00:00
skodak 052547f2e7 MDL-13705 2008-02-28 21:02:41 +00:00
moodlerobot ff29df4190 Automatic installer.php lang files by installer_builder (20080228) 2008-02-28 03:33:49 +00:00
moodlerobot b02d7ca8fd Automatic installer.php lang files by installer_builder (20080227) 2008-02-27 03:35:07 +00:00
moodlerobot 1a38880ad2 Automatic installer.php lang files by installer_builder (20080223) 2008-02-23 03:20:48 +00:00
moodlerobot 03ccee2431 Automatic installer.php lang files by installer_builder (20080222) 2008-02-22 03:31:11 +00:00
tjhunt f4f3ac35a5 MDL-13551 - preview question capability wrongly denied to student who has moodle/question:manage capability - This was already fixed in 1.9. 2008-02-21 22:34:47 +00:00
moodler 02bbdb1a05 MDLSITE-359 FIxed bad installer strings 2008-02-21 05:54:45 +00:00
moodlerobot b055ae802b Automatic installer.php lang files by installer_builder (20080221) 2008-02-21 03:34:10 +00:00
moodlerobot e3ce6d9434 Automatic installer.php lang files by installer_builder (20080220) 2008-02-20 03:30:26 +00:00
moodlerobot ae933e4f1f Automatic installer.php lang files by installer_builder (20080218) 2008-02-18 03:28:46 +00:00
moodlerobot 0b920406c8 Automatic installer.php lang files by installer_builder (20080215) 2008-02-15 03:32:11 +00:00
ethem d1620b4c11 Moved libraries to index.php 2008-02-11 15:25:45 +00:00
ethem 3abe79ff52 Moved libraries to index.php 2008-02-11 15:18:48 +00:00
moodlerobot 7614a54d59 Automatic installer.php lang files by installer_builder (20080209) 2008-02-09 03:27:12 +00:00
moodlerobot c617406e19 Automatic installer.php lang files by installer_builder (20080208) 2008-02-08 03:23:10 +00:00
ethem 58d2845b5c Cron handles all expired unenrolments. It is time to use own enrolment method when calling funcs enrol_into_course, role_assign.
Zend Studio Warning: Assignment in condition (line XX), Solved, one more ()
2008-02-07 16:03:48 +00:00
moodler 2bff64d017 Fix subject lines and corrupted emails from messages MDL-13364 (merged) 2008-02-07 05:20:57 +00:00
gbateson 678165c2f5 MDL-13328 correct the counting of attempts when clickreporting has been enabled 2008-02-07 04:18:32 +00:00
moodlerobot 2b298ce72c Added lang 2008-02-07 03:29:59 +00:00
moodlerobot 9a3bb4366c Automatic installer.php lang files by installer_builder (20080207) 2008-02-07 03:19:49 +00:00
nicolasconnault 85ca3686cb MDL-12158 Applied Matt's patch, merging from 1.6 2008-02-05 10:38:32 +00:00
gbateson 84620a0041 MDL-10451 remove extraneous closing </b> tag from lang/en_utf8/help/hotpot/outputformat.html 2008-02-05 04:21:58 +00:00
gbateson 95fcbce2a1 MDL-13048 fix undefined course id when importing a Hot Potatoes quiz into the Lesson module 2008-02-05 04:09:16 +00:00
scyrma 40777e9fd0 MDL-13060 - removing old entries fro VA and CD 2008-02-04 00:48:28 +00:00
moodler 26c2a9b587 Automatic installer.php lang files by installer_builder (20080203) 2008-02-03 03:29:35 +00:00
moodler 68d87c70d4 Automatic installer.php lang files by installer_builder (20080202) 2008-02-02 03:38:19 +00:00
moodler da837fdb78 Automatic installer.php lang files by installer_builder (20080201) 2008-02-01 03:32:41 +00:00
gbateson 162e13cc89 fix for MDL-13174 : replace calls to html_entity_decode() with hotpot_charcode_to_utf8() because html_entity_decode is broken in PHP 4 2008-01-31 07:25:27 +00:00
moodler 59d4af490e Automatic installer.php lang files by installer_builder (20080131) 2008-01-31 03:38:43 +00:00
tjhunt 7e555c8958 MDL-13110 - Manually grading random questions does not work. Fix thanks to Ken Burres. 2008-01-30 18:18:40 +00:00
mchurch becdc870ed MDL-13252 Fix context to always use course context, rather than instance->page. 2008-01-30 16:54:38 +00:00
mchurch ebf2deff6a MDL-13252 Fix context to always use course context, rather than instance->page. 2008-01-30 16:48:09 +00:00
scyrma 75407fe763 Imported and replaced country list to fix MDL-13060. The new list is the exact ISO list. Note that an official list also exists in French, but we will need to
do translations to other languages.  This commit also includes the restorelib upgrade path.
2008-01-30 07:42:13 +00:00
moodler 7c437a57e0 Automatic installer.php lang files by installer_builder (20080130) 2008-01-30 03:35:01 +00:00
scyrma a8a80afccd Upgrade path for MDL-13060. 2008-01-29 05:48:53 +00:00
moodler 23c58c6375 Automatic installer.php lang files by installer_builder (20080129) 2008-01-29 03:30:45 +00:00
moodler 8d45fcc505 Merged pdf php5 fix from MDL-13207 2008-01-28 05:28:54 +00:00
moodler 70e1cd76c8 Automatic installer.php lang files by installer_builder (20080128) 2008-01-28 03:34:32 +00:00
gbateson 79c57d1b99 fix for MDL-13173: quotes in HotPot activity name 2008-01-26 08:26:17 +00:00
moodler 70c7e67dcb Automatic installer.php lang files by installer_builder (20080126) 2008-01-26 03:26:40 +00:00
tjhunt ff073582cf MDL-13096 - Student can view all text for all questions in a course. 2008-01-24 15:26:56 +00:00
moodler 1d3318d93f Automatic installer.php lang files by installer_builder (20080124) 2008-01-24 04:00:24 +00:00
moodler 39ca046247 Automatic installer.php lang files by installer_builder (20080123) 2008-01-23 03:38:33 +00:00
moodler fb0d5a229e Automatic installer.php lang files by installer_builder (20080122) 2008-01-22 03:32:22 +00:00
moodler 0ff0cbe326 Automatic installer.php lang files by installer_builder (20080121) 2008-01-21 03:31:48 +00:00
moodler cdae66cbad Automatic installer.php lang files by installer_builder (20080120) 2008-01-20 03:29:49 +00:00
moodler f639d4fdae Automatic installer.php lang files by installer_builder (20080118) 2008-01-18 03:34:04 +00:00
nicolasconnault 85c62f1c93 MDL-4218 Added require_once deprecatedlib.php 2008-01-17 08:45:57 +00:00
nicolasconnault a0f6fa7987 MDL-4218 Disabling the check for admin dir 2008-01-17 08:09:52 +00:00
nicolasconnault 4a1cbc606d MDL-4218 Disabling the check for web root URL 2008-01-17 07:48:21 +00:00
moodler 5c457d48e9 Automatic installer.php lang files by installer_builder (20080117) 2008-01-17 03:34:47 +00:00
moodler 509f1f07a9 Automatic installer.php lang files by installer_builder (20080116) 2008-01-16 03:31:39 +00:00
Martin Langhoff 8885b483cb cvsimport fixups - binary 2008-01-14 08:54:34 +00:00
Martin Langhoff 773242671f cvsimport fixups 2008-01-14 08:54:34 +00:00
moodler 47cc17f258 Moved to + after release 2008-01-14 08:54:34 +00:00
moodler 6450b75034 Automatic installer.php lang files by installer_builder (20080114) 2008-01-14 03:45:36 +00:00
poltawski e4cfa65450 MDL-8269 - stats wasn't paying attention to run time settings as the strtotime
arguments were the wrong way round. Thanks to Mark Nielsen
backported from MOODLE_19_STABLE
2008-01-13 20:07:06 +00:00
moodler 3b798d4e6c Automatic installer.php lang files by installer_builder (20080113) 2008-01-13 03:28:04 +00:00
skodak 6253ee1ef2 MDL-12914 Register globals trouble; backported from MOODLE_19_STABLE 2008-01-11 23:25:41 +00:00
moodler cda4480961 Bump to 1.7.4 release 2008-01-11 14:42:09 +00:00
moodler 94fdd21d38 Automatic installer.php lang files by installer_builder (20080111) 2008-01-11 03:33:00 +00:00
moodler 77aafcbbfb Automatic installer.php lang files by installer_builder (20080110) 2008-01-10 03:31:20 +00:00
poltawski 137c04383f MDL-12889 - fix bad invalid capability check
backported from MOODLE_18_STABLE
2008-01-09 15:44:45 +00:00
arborrow 00a2ce3bf9 MDL-12889 - uncommitting previous change - since grade:viewall is new to 1.9 (my bad) 2008-01-09 15:18:44 +00:00
arborrow a789bed6ef MDL-12889 - bad capability check [thanks Tim!] in assignment recent activity report
merged from MOODLE_19_STABLE
2008-01-09 15:09:59 +00:00
moodler 897e6a3507 Automatic installer.php lang files by installer_builder (20080108) 2008-01-08 03:31:18 +00:00
moodler a49d9fe97f Automatic installer.php lang files by installer_builder (20080107) 2008-01-07 03:28:44 +00:00
moodler ec5e9fc647 Automatic installer.php lang files by installer_builder (20080106) 2008-01-06 03:18:49 +00:00
iarenaza 4abc7c0630 MDL-10921 Fix backport of patch to 1.7.x (was using the new plugin settings syntax).
Thanks to Patrick Pollet for pointing this out and providing a fix.
2008-01-05 14:33:55 +00:00
moodler 528ddea1b3 Automatic installer.php lang files by installer_builder (20080104) 2008-01-04 03:25:21 +00:00
moodler a9608e5795 Automatic installer.php lang files by installer_builder (20080103) 2008-01-03 03:17:47 +00:00
skodak e8b2de8d18 MDL-12793 PARAM_HOST incorrect cleaning; backported from MOODLE_19_STABLE 2008-01-01 17:27:14 +00:00
stronk7 abc597e27b Better behaviour for "-" course searches under MSSQL and Oracle. MDL-7312 2008-01-01 11:28:19 +00:00
moodler 296f1fc6c3 Automatic installer.php lang files by installer_builder (20080101) 2008-01-01 03:09:25 +00:00
moodler ccf77fbe00 Automatic installer.php lang files by installer_builder (20071231) 2007-12-31 03:13:19 +00:00
moodler a5db1182c4 Automatic installer.php lang files by installer_builder (20071230) 2007-12-30 03:10:18 +00:00
moodler ce4da52bb8 Automatic installer.php lang files by installer_builder (20071229) 2007-12-29 03:11:44 +00:00
iarenaza 2f2dafc16a MDL-12323 MDL-4061 Don't connect to the LDAP server if update external is not set for any field.
Backported from MOODLE_18_STABLE.
2007-12-28 23:15:16 +00:00
stronk7 e21492da15 Prevent race condition in event creation. MDL-5956.
Credit goes to Penny, Luke and Martin @ Catalyst.

Merged from MOODLE_16_STABLE
2007-12-28 18:37:50 +00:00
moodler 34ca70feba Automatic installer.php lang files by installer_builder (20071228) 2007-12-28 03:28:21 +00:00
moodler c83adc965f Automatic installer.php lang files by installer_builder (20071225) 2007-12-25 03:12:06 +00:00
moodler d5c871bbd0 Automatic installer.php lang files by installer_builder (20071224) 2007-12-24 03:15:25 +00:00
moodler 2bbe9bcb1c Automatic installer.php lang files by installer_builder (20071221) 2007-12-21 03:18:33 +00:00
tjhunt 3e2d9e9567 MDL-12635 - Manual grading report does not check capabilites - also, only show the tabs for the reports people can access. Backported from MOODLE_19_STABLE. 2007-12-18 16:12:36 +00:00
moodler 40beb0f097 Automatic installer.php lang files by installer_builder (20071218) 2007-12-18 03:21:04 +00:00
tjhunt 1bc05922bc Fix Javascript error from essay questions on the review page. 2007-12-12 18:10:46 +00:00
tjhunt fb18d9cab7 MDL-12542 - backup_todb not called on restore on date before it is inserted into mdl_user. This would cause a backup from a pre 1.7 site (or a pre 1.7 that has been upgraded to 1.9) to a 1.9 fresh install, to fail sometimes. Backported from MOODLE_19_STABLE. 2007-12-11 15:55:38 +00:00
moodler 4520a06ef1 Automatic installer.php lang files by installer_builder (20071206) 2007-12-06 05:10:40 +00:00
moodler 3514c326aa Automatic installer.php lang files by installer_builder (20071204) 2007-12-04 05:17:07 +00:00
fmarier 93bb63f06f ddllib: Mark table_column() as deprecated
Signed-off-by: Eloy Lafuente
2007-12-03 23:14:47 +00:00
moodler 8d43fd582f New installer files added - stronk7
Backported from HEAD
2007-11-29 17:01:25 +00:00
moodler 5ce3dfb28e file installer.php was added on branch MOODLE_17_STABLE on 2007-11-29 17:01:25 +0000 2007-11-29 16:59:26 +00:00
moodler e76d70aaef Automatic installer.php lang files by installer_builder (20071129) 2007-11-29 05:54:46 +00:00
moodler 1910bda1d6 Automatic installer.php lang files by installer_builder (20071125) 2007-11-25 03:51:23 +00:00
moodler 8d81931a47 Automatic installer.php lang files by installer_builder (20071123) 2007-11-23 04:56:35 +00:00
ikawhero f37cb203d8 Reverting previous changes to MOODLE_17_STABLE
$configvar is an object so need to work with $configvar-value
2007-11-21 03:07:33 +00:00
moodler 3f5c88c898 Automatic installer.php lang files by installer_builder (20071120) 2007-11-20 05:11:29 +00:00
moodler a85da4da7e Automatic installer.php lang files by installer_builder (20071118) 2007-11-18 04:43:01 +00:00
arborrow 0c412f3b3c MDL-11743 - SHOW LOCAL VARIABLES more accurately returns database character set on some hosts and makes explicit what is normally the default behavior. 2007-11-13 23:52:36 +00:00
gbateson e0d2d6ec88 replaced use of CFG->dbfamily with CFG->dbtype, because CFG->dbfmaily is only available Moodle 1.8 and later 2007-11-13 03:41:21 +00:00
gbateson 9d9a65e9af fix for MDL-9713 : use XMLDB functions to create tables when mod/hotpot/db/mysql.sql is not found. This allows upgrade direct from Moodle 1.5 (or earlier) to Moodle 1.8 (or later) 2007-11-12 08:53:09 +00:00
skodak 845df47c11 MFC: MDL-12079 fixed use of clean_param() 2007-11-10 14:52:42 +00:00
fmarier abe9371c58 Add missing fields when upgrading/installing on Postgres
mod/exercise, mod/scorm and question/type/rqp
MDL-12023
2007-11-09 01:21:56 +00:00
moodler 3e79f5f4f9 Automatic installer.php lang files by installer_builder (20071108) 2007-11-08 05:18:45 +00:00
moodler 8fefbc38ad Simple grammar fix 2007-11-07 07:08:14 +00:00
nicolasconnault 7c534ccd8a MDL-8853 Applied Ann's Patch 2007-11-06 13:25:34 +00:00
moodler d8c68f7860 New installer file added to CVS repo. 2007-11-04 17:05:25 +00:00
moodler 2dbe84a629 Automatic installer.php lang files by installer_builder (20071103) 2007-11-03 05:04:03 +00:00
pichetp 9a94ae5494 MDL-11867 setting real null when response is null in calculated question merged from
head
2007-11-01 00:40:01 +00:00
moodler 3af6627e64 Automatic installer.php lang files by installer_builder (20071031) 2007-10-31 04:31:57 +00:00
tjhunt 8d9e5477a4 MDL-9375 (and dups) - Each attempt builds on last with multi-page quizzes gives the wrong score on the second attempt. It turns out that this was already fixed in Moodle 1.9 (part of commit 1.115 -> 1.116) so I have just backported the relevant changes. I have tested that this fixes the reported problem. I have not had time to test that it does not break one of the other billion possible combinations of settings possible with the quiz. Code review and testing welcome. 2007-10-30 18:22:21 +00:00
mchurch 0e3dd76c50 Removing the questionnaire language file from main release. 2007-10-29 21:33:08 +00:00
mchurch 0820aedbf7 Removing the questionnaire language file from main release. 2007-10-29 21:04:04 +00:00
tjhunt ce26bd19ea MDL-11416 - Support for nonsortable columns in table lib. Backported from MOODLE_19_STABLE so that the fix for MDL-5262 works. 2007-10-29 15:25:05 +00:00
joseph_rezeau 691d35efc2 removed mistakenly committed regexp plugin 2007-10-28 08:38:23 +00:00
joseph_rezeau a0a1aeb694 committed from 18_stable 2007-10-28 08:30:38 +00:00
moodler cb1113b7c8 Automatic installer.php lang files by installer_builder (20071028) 2007-10-28 05:09:00 +00:00
moodler d36088f711 Automatic installer.php lang files by installer_builder (20071023) 2007-10-23 05:07:23 +00:00
tjhunt 40cc3341ad MDL-11824 - Literal asterisk (\*) in shortanswer question not handled correctly by get_correct_responses + Unit tests. Backported from MOODLE_18_STABLE.
Also backported the fix for MDL-11703.
2007-10-22 15:38:10 +00:00
tjhunt d7414e9068 file testquestiontype.php was added on branch MOODLE_17_STABLE on 2007-10-22 15:38:10 +0000 2007-10-22 15:37:32 +00:00
moodler f5563d1efd Automatic installer.php lang files by installer_builder (20071021) 2007-10-21 04:18:27 +00:00
moodler 67e9830697 Automatic installer.php lang files by installer_builder (20071018) 2007-10-18 05:35:42 +00:00
tjhunt d01b47381b MDL-5262 - PHP notice when sorting on R% coloumn in the Item analysis report - I adopted the simple solution of stopping people sorting on that column, since it is the same as sorting on rcount, I think. Backported from MOODLE_19_STABLE. 2007-10-16 21:26:46 +00:00
nicolasconnault c6a10296eb MDL-10905 iterating properly through readdir() 2007-10-15 05:53:20 +00:00
moodler 3674039ca0 Automatic installer.php lang files by installer_builder (20071015) 2007-10-15 04:28:49 +00:00
gbateson f0417bf3cb where the correct responses on a JQuiz multiple choice question all have a score of 0%, the scores will be corrected to 100% 2007-10-15 01:03:30 +00:00
moodler 13e60ec63c POst 1.73 2007-10-14 08:23:03 +00:00
moodler 07cd3ecabd 1.7.3 2007-10-14 08:22:17 +00:00
moodler 1d68f3cd73 Automatic installer.php lang files by installer_builder (20071011) 2007-10-11 04:15:52 +00:00
iarenaza 23290eea4d Fix MDL-11632: Multiple files with emtpy lines outside PHP open/close tags
There are multiple issues with Moodle files containing empty or blank lines
(lines consisting of white spaces or tabs only) and/or white space before or
after the PHP open and close tags, notably with config.php and theme files.
2007-10-10 21:33:29 +00:00
moodler f050e82eb6 Automatic installer.php lang files by installer_builder (20071010) 2007-10-10 04:45:55 +00:00
nfreear 8aa669ca72 Fixes MDL-11676, Skip block links are broken in Internet Explorer 6. Merged. 2007-10-09 16:06:59 +00:00
skodak 8abba9e902 MDL-11663 sanitise submitted data when editing users; merged from MOODLE_16_STABLE 2007-10-08 19:57:39 +00:00
gbateson 023dc2c338 added escaping of quotes in TimesUp message, so that apostrophes do not cause Javascript errors 2007-10-08 06:40:37 +00:00
pichetp 11db0ce1ec checking that there remain $oldwrappedids before deleting them lines 87-..
add         if(is_array($oldwrappedids) && count($oldwrappedids)){
2007-10-06 20:59:49 +00:00
stronk7 c9379ddbaa MDL-11597. Backported from HEAD to 17_STABLE 2007-10-04 22:20:54 +00:00
moodler 2bd2bb878d Automatic installer.php lang files by installer_builder (20071004) 2007-10-04 05:19:09 +00:00
moodler fe8aad143d Automatic installer.php lang files by installer_builder (20071003) 2007-10-03 05:13:24 +00:00
whchuang cae4cdb309 added missing string definition for sectionerror. Fixed MDL-10766 2007-10-03 00:02:37 +00:00
gbateson 8809ff2b35 use new function "hotpot_stripslashes()" instead of PHP's "stripslashes()" to remove slashes after preg_replace with "e" modifier, because when MSSQL Server is installed, PHP's "stripslashes()" does not remove slashes, even if the Moodle database is not MSSQL 2007-09-30 04:18:18 +00:00
toyomoyo 6bea13a914 MDL-11391, grades are not displayed because gradebookroles can not be set 2007-09-27 02:57:44 +00:00
gbateson 0e04dc36c2 change CONTEXT_MODULE to CONTEXT_COURSE in order to fix "Invalid context creation for level 50 instance" error on "mod/hotpot/index.php" caused by get_context_instance(CONTEXT_MODULE, $course->id) in "mod/hotpot/lib.php" 2007-09-26 07:14:33 +00:00
iarenaza 68d924ce8a MDL-10921 LDAP Auth to Active Directory requires LDAP_OPT_REFERRALS option set; backported from HEAD 2007-09-25 21:05:57 +00:00
skodak bf5cc256fd MDL-11413 I hope now it is correct solution; backported from HEAD 2007-09-25 14:06:59 +00:00
nfreear 247958fbe9 MDL-1149 Accessibility: Current week/topic is NOT indicated non-visually, only in styling. Merged. 2007-09-25 12:45:29 +00:00
nfreear bf4fe92223 MDL-11436 Accessibility: Encapsulate "accesshide" HTML class in function, and use. Merged partial fix - just weblib. 2007-09-25 12:35:37 +00:00
skodak 9bcbf6a743 MDL-11237 raising memory limit for preg_xxxx(), backported from HEAD 2007-09-24 16:35:40 +00:00
skodak 7c84c844f9 MDL-11413 revisited; backported from HEAD 2007-09-24 15:26:58 +00:00
tjhunt 676dbd7285 MDL-10916 - Import and Export of Cloze question misses out "generalfeedback" column. 2007-09-24 14:16:58 +00:00
skodak 81ac2c8630 MDL-11414 fixed handling of log urls (problem reported by Andreas Nolden); backported from HEAD; fixing previous commit :-( 2007-09-23 13:20:36 +00:00
skodak 55f9f1432f MDL-11414 fixed handling of log urls (problem reported by Andreas Nolden); backported from HEAD 2007-09-23 13:15:26 +00:00
skodak 9f476e5fe2 MDL-11413 improved text cleaning (problem reported by Andreas Nolden); backported from HEAD 2007-09-23 12:29:58 +00:00
skodak 4663bd9f09 MDL-11413 improved text cleaning (problem reported by Andreas Nolden); backported from HEAD 2007-09-23 12:24:39 +00:00
moodler bde6d304f9 Automatic installer.php lang files by installer_builder (20070920) 2007-09-20 04:29:46 +00:00
iarenaza 764d44c11e MDL-11299 - Make objectClass string comparison case insensitive.
LDAP serves accept attribute names in a case insensitive way, so don't
force the users to use any particular spelling. (backported from HEAD).
2007-09-18 09:18:16 +00:00
moodler c2c3f6e885 Automatic installer.php lang files by installer_builder (20070918) 2007-09-18 04:27:50 +00:00
stronk7 22f8303fc7 Interlinking from/to data module added. MDL-9576
Backported from HEAD
2007-09-17 22:06:12 +00:00
stronk7 b0cfc7cbd5 Now, under quick grading, when new assignment_submissions records are
created, we provide a default for data1 and data2 text not null
columns. MDL-11268
2007-09-17 16:57:54 +00:00
moodler 118a639ff3 Automatic installer.php lang files by installer_builder (20070917) 2007-09-17 05:00:46 +00:00
stronk7 f4989ae561 Backported from MOODLE_18_STABLE
Show the roll dates option only if the backup course has a start date
(some formats like main page, social..., haven't it and rolling dates
from 0 produces crazy dates. MDL-10125
2007-09-16 17:40:55 +00:00
moodler 4ff82c1505 Automatic installer.php lang files by installer_builder (20070916) 2007-09-16 04:19:16 +00:00
iarenaza e2a7235da8 Remove additional check when dealing with hidden courses in LDAP enrolment.
The check is superfluous and uses an inexistant variable ($type) that
was removed when we switched to role based enrolment.

Fixes MDL-11098 MDL-10282 and MDL-8346. (backported from HEAD)
2007-09-15 21:59:11 +00:00
stronk7 062c59e346 Now using one cross-db solution to be able to
simulate the status boolean ins assignment
submissions. MDL-8164 & MDL-10846

Backported from MOODLE_HEAD
2007-09-13 18:01:05 +00:00
tjhunt 3cc55cab9e MDL-11081 and MDL-11211 - Implement quiz_question_list_instances. The lach of this function was causing a horrible dataloss bug: MDL-11211. Fix thanks to Janne Mikkonen, refined by me. Merged from MOODLE_16_STABLE. 2007-09-13 17:29:02 +00:00
tjhunt 3742f86ac1 Take out duplicate $Id$ CVS tags. 2007-09-10 11:06:12 +00:00
moodler 9a28eacb84 Automatic installer.php lang files by installer_builder (20070908) 2007-09-08 04:02:56 +00:00
moodler 446b5e025c Automatic installer.php lang files by installer_builder (20070907) 2007-09-07 04:45:11 +00:00
pichetp 5c89371717 Correcting a little error: datesetitem = array(); instead of datasetitem = array();
line +-550 $question->dataset[$datasetname]->datasetitem = array();
2007-09-07 02:46:12 +00:00
stronk7 2b27d0a946 Now restoring groups is cross-db (the detection of existing groups) 2007-09-05 18:37:34 +00:00
stronk7 15ef45da52 Repeated fields aren't necessary at all since Moodle 1.7
and, in fact, they throw error if using limits! MDL-9592
2007-09-05 15:25:33 +00:00
skodak 3444317011 MDL-11053 Course object not escaped before insert - patch by Aaron C Spike; backported from HEAD 2007-08-29 13:55:10 +00:00
stronk7 e17d507d5a Now Moodle >= 1.9 requires PostgreSQL >= 8.0. MDL-11033 2007-08-28 15:31:34 +00:00
nicolasconnault 7db37fd580 MDL-9005 Fixed this and another multilang issue (module name in preview didn't filter multilang tags either). 2007-08-28 13:22:16 +00:00
moodler 6497764c84 Automatic installer.php lang files by installer_builder (20070828) 2007-08-28 05:53:27 +00:00
nicolasconnault 37829534f6 MDL-7574 Applying Matthew Davidson's patch. 2007-08-27 17:04:56 +00:00
nicolasconnault 554fbddf7d MDL-7574 Applying the patch as is, with a bit extra code formatting for the JS section (indents etc.) 2007-08-27 15:36:37 +00:00
moodler 529d7f47bf Automatic installer.php lang files by installer_builder (20070827) 2007-08-27 06:08:41 +00:00
moodler 45b3a8554a Automatic installer.php lang files by installer_builder (20070826) 2007-08-26 05:51:58 +00:00
moodler 8f3d4e4ef5 Automatic installer.php lang files by installer_builder (20070825) 2007-08-25 04:10:45 +00:00
gbateson a067240cbf fixed results not being sent caused by commenting out of "interceptFeedback" (probably left over from debugging) 2007-08-25 01:42:16 +00:00
nicolasconnault ef2f763ee8 MDL-10970 Someone was using
$locations = array('location1');
$locations += array('location2', 'location3', 'location4');

to save the hassle of doing one $locations[] = 'location1'; for each location.

But += doesn't add any entry if the key of the new array already exists in the original array. So, using my example, the resulting array would be:

$locations: array('location1', 'location3', 'location4');
2007-08-24 07:18:13 +00:00
moodler 56d3da5a01 Automatic installer.php lang files by installer_builder (20070824) 2007-08-24 05:59:47 +00:00
moodler 1aa8ff170f Automatic installer.php lang files by installer_builder (20070823) 2007-08-23 05:59:35 +00:00
moodler 8ec088f738 Automatic installer.php lang files by installer_builder (20070822) 2007-08-22 09:02:48 +00:00
nicolasconnault e7c13fcb46 MDL-10177 Applied lovely hack (not ugly!) suggested by Pablo. It's lovely because it solves an ugly design error in the previous code: modifying a parameter variable in the function body. 2007-08-20 17:57:44 +00:00
nfreear 343a1ea8e0 MDL-5400 "Accessibility modifications..." - fixing the 4 themes that don't use <h1>. Merged. 2007-08-20 11:00:10 +00:00
moodler 216237369e Automatic installer.php lang files by installer_builder (20070816) 2007-08-16 06:46:47 +00:00
tjhunt 10fc5f6e22 MDL-10834 - Restore of quiz module may create calendar events without a date/time. Fix thanks to Derek Woolhead. 2007-08-14 13:33:09 +00:00
moodler 462f360429 Automatic installer.php lang files by installer_builder (20070814) 2007-08-14 06:10:46 +00:00
tjhunt c0ea84fbf3 Accessign wrong field of $mod from course.modinfo. 2007-08-10 10:36:35 +00:00
tjhunt 3a6b6c0d74 MDL-10759 - Bogus get_context_instance call in quiz_print_recent_mod_activity 2007-08-08 11:30:16 +00:00
pichetp 64aa333345 Merging MDL-10680 resolved by thepurplebob from 1.9 2007-08-08 02:09:32 +00:00
moodler ea41587638 Automatic installer.php lang files by installer_builder (20070806) 2007-08-06 03:52:37 +00:00
stronk7 fbadfe0295 fix insert_record() call using arrays instead of objects 2007-08-05 22:47:20 +00:00
moodler 4b1edf80c1 Automatic installer.php lang files by installer_builder (20070804) 2007-08-04 05:42:43 +00:00
moodler 1286c71e5a Automatic installer.php lang files by installer_builder (20070803) 2007-08-03 07:12:18 +00:00
gbateson 62eefc5487 fix javascript error: "parseint not defined" 2007-08-01 05:26:09 +00:00
moodler aafc01514e Fixed typo from MDL-9222 2007-08-01 05:13:32 +00:00
stronk7 671b83e238 Since now, Moodle 2.0 will require PHP 5.2. MDL-10390 2007-07-30 16:37:31 +00:00
moodler 0197c39ba1 Automatic installer.php lang files by installer_builder (20070730) 2007-07-30 04:35:43 +00:00
toyomoyo 40168efe75 fix for MDL-10640, adding missing index during upgrade fo mdl_role_capabilities table 2007-07-30 02:40:14 +00:00
wildgirl dfa4162d8a MDL-4912 docs directory clean-up 2007-07-28 20:27:21 +00:00
moodler 0c05267ff4 Automatic installer.php lang files by installer_builder (20070728) 2007-07-28 06:08:50 +00:00
mchurch 992c135e19 Bug #MDL-10632, fixing the use of 'delete_event'. 2007-07-27 18:45:24 +00:00
moodler b3c7ea0c94 Automatic installer.php lang files by installer_builder (20070726) 2007-07-26 05:14:01 +00:00
toyomoyo 1e281f706a merged fix for MDL-10564, wrong userid used for get_my_courses in blogs 2007-07-26 02:45:40 +00:00
stronk7 9ae0b39497 Adding two missing strings. MDL-6017
NOTE: These are OUT for Moodle 1.9 and new Grade System, so don't
      translate them!

Merged from MOODLE_16_STABLE
2007-07-25 22:09:21 +00:00
stronk7 137fcd2015 Fixing two get_string() calls when restoring gradebook preferences. MDL-6017
Merged from MOODLE_16_STABLE
2007-07-25 21:32:46 +00:00
moodler 7ccfee94ad Automatic installer.php lang files by installer_builder (20070724) 2007-07-24 06:16:45 +00:00
moodler 5e7ee078a9 Automatic installer.php lang files by installer_builder (20070721) 2007-07-21 05:32:34 +00:00
moodler 28dcf434c6 Automatic installer.php lang files by installer_builder (20070719) 2007-07-19 05:51:35 +00:00
toyomoyo 0042320984 merged fix for MDL-10149, prevent the deletion of the last admin role 2007-07-19 05:20:57 +00:00
toyomoyo 8da1406e3a DML-10461, timemodified in role_assignements not preserved during restore 2007-07-19 03:38:59 +00:00
moodler 0ef8d9cab6 Automatic installer.php lang files by installer_builder (20070718) 2007-07-18 06:24:56 +00:00
moodler d55f1be549 Bye bye CHANGES http://moodle.org/mod/forum/discuss.php?d=75777 2007-07-17 02:21:26 +00:00
stronk7 d4097a429c Now the glossary->allowcoments setting is respected. MDL-8056
Credit goes to Matt Clarkson. Thanks.

Backported from HEAD
2007-07-15 22:31:09 +00:00
tjhunt 9b4327c71d MDL-10452 - start quiz UI is confusing if you have quiz:preview capability. Change the 'start/continue attempt button' to say 'start/continue preview' in this case. 2007-07-13 15:57:29 +00:00
moodler 097eb89c65 Automatic installer.php lang files by installer_builder (20070713) 2007-07-13 08:29:04 +00:00
nfreear 8c21e87a7b Part fix of bug MDL-10332 "Data module not filtering list by group on .." - restore bug. Merged. 2007-07-12 14:25:25 +00:00
moodler 253f9eee33 Merged changes from MDL-8451 from 1.8 2007-07-11 09:14:54 +00:00
moodler bb803227f1 Automatic installer.php lang files by installer_builder (20070710) 2007-07-10 06:31:44 +00:00
poltawski f0d60d1631 MDL-10356 - typo in player.php in MOODLE_17_STABLE 2007-07-08 00:15:39 +00:00
moodler 99c4cc6fdf Automatic installer.php lang files by installer_builder (20070706) 2007-07-06 04:50:20 +00:00
moodler 58e24e2f1a Automatic installer.php lang files by installer_builder (20070705) 2007-07-05 05:50:55 +00:00
skodak bca26abf4c MDL-10341 fixed user search cleaning; backported from MOODLE_18_STABLE 2007-07-04 08:33:04 +00:00
bobopinna 9241a50fb7 Refixed bug MLD-7325 2007-07-03 14:11:20 +00:00
bobopinna 6d1bb31cda Added missing help file 2007-07-03 12:34:53 +00:00
bobopinna 661406a466 file maxattempt.html was added on branch MOODLE_17_STABLE on 2007-07-03 12:34:53 +0000 2007-07-03 12:13:52 +00:00
bobopinna cd57295a36 file whatgrade.html was added on branch MOODLE_17_STABLE on 2007-07-03 12:34:54 +0000 2007-07-03 12:04:18 +00:00
bobopinna 6acef6e30b file skipview.html was added on branch MOODLE_17_STABLE on 2007-07-03 12:34:54 +0000 2007-07-03 12:04:18 +00:00
bobopinna 1610eb0f85 Fixed bug MDL-9486 2007-07-03 09:24:38 +00:00
bobopinna 6cf7303684 Added some missing strings
bug MDL-9720
2007-07-03 08:05:57 +00:00
moodler 4ed23b4f9e Automatic installer.php lang files by installer_builder (20070702) 2007-07-02 04:53:58 +00:00
moodler fabdbdb3f6 Automatic installer.php lang files by installer_builder (20070629) 2007-06-29 04:56:09 +00:00
moodler 43e2896e63 Automatic installer.php lang files by installer_builder (20070628) 2007-06-28 05:33:39 +00:00
skodak 025451ff7d MDL-10276 Text cleaning trouble; backported from HEAD 2007-06-27 12:05:05 +00:00
gbateson cafaa207ef make sure $hotpot->id is set when adding calendar events for new HotPot 2007-06-26 12:02:34 +00:00
moodler e59461215d Implemented fix for MDL-10254, thanks Valery! 2007-06-26 09:06:44 +00:00
moodler 0ebee25007 Automatic installer.php lang files by installer_builder (20070626) 2007-06-26 07:51:48 +00:00
gbateson ce197abbef in XML source files of HP quizzes, convert relative URLs to absolute URLs in links using window.open(...) 2007-06-26 05:02:03 +00:00
gbateson 9036033b8a change relative URLs to absolute URLs in window.open(...) 2007-06-26 02:31:57 +00:00
urs_hunkler 81bf069328 changed navmenuwidth to the standard value 2007-06-25 12:21:58 +00:00
moodler 9ff8ae7953 Automatic installer.php lang files by installer_builder (20070625) 2007-06-25 06:43:38 +00:00
moodler 4527713fdc Automatic installer.php lang files by installer_builder (20070623) 2007-06-23 05:57:55 +00:00
tjhunt ae4dc90cb7 MDL-10213 - layuout problem for question in IE in Moodle 1.7. I'm taking the opportunity to clean up the CSS in 1.8 and HEAD to match what I did in 1.7. Fix and CSS cleanup back-ported from MOODLE_18_STABLE. 2007-06-22 13:46:32 +00:00
jamiesensei 7ab78c274b making environment colours css selector refer to table class instead of body id. So that colours show up on other pages besides admin page. 2007-06-22 11:04:58 +00:00
gbateson 20f08456a8 allow display of results by group 2007-06-21 03:54:45 +00:00
gbateson 94bbc1f5e2 fix selection of individual students in the report conditions selector panel, (use PARAM_ALPHANUM instead of PARAM_ALPHA for reportusers parameter) 2007-06-21 02:53:23 +00:00
moodler 4610edf1b6 Automatic installer.php lang files by installer_builder (20070620) 2007-06-20 08:43:38 +00:00
jamiesensei 847da17ddb added styles to install.php for colours for environment table 2007-06-20 06:34:08 +00:00
stronk7 f3fa18a199 Now calendar export have some correct defaults. MDL-10175
Backported from MOODLE_18_STABLE
2007-06-19 18:58:23 +00:00
jamiesensei 8b85c2cf5d accidentally added these, removing them 2007-06-19 18:01:01 +00:00
jamiesensei c309cf8612 *** empty log message *** 2007-06-19 17:40:31 +00:00
jamiesensei 2685a2eee1 MDL-10168 improvements to display of results from environment checks 2007-06-19 16:25:59 +00:00
jamiesensei 416622f005 elaborated phpdoc comment slightly for doc_link 2007-06-19 15:18:22 +00:00
jamiesensei 8f95983a3e refactored page_doc_link into two functions. doc_link returns a link to docs. page_doc_link returns the link for this page. 2007-06-19 14:59:22 +00:00
poltawski 0a16e0f268 MDL-10148 - hard coded lang strings in user/message.html 2007-06-18 19:17:57 +00:00
bobopinna 37646f6f0e Fixed a typo added during last commit 2007-06-18 12:08:55 +00:00
ethem aa7b876f03 MDL-9836
Authorize.net / SSL Config Bug prevents display of options from enrol/authorize/enrol.php
2007-06-15 17:52:28 +00:00
csantossaenz 16f89f2ccf Fixed bug mdl-7516 2007-06-15 09:03:47 +00:00
pichetp 524e369670 Removing question/type/datasetdependent/categorydatasetdefinitions.php MDL-10072 2007-06-13 07:49:59 +00:00
toyomoyo c72ab7a328 fixing a bug when setting granular bug during restore 2007-06-13 06:33:15 +00:00
pichetp c74677ca95 solving lost of dataitems MDL-10087 merging from 1.8 2007-06-13 03:44:13 +00:00
pichetp 0f8c983585 giving to questiondatasets.html all the features of datasetdefinitions_form.php of HTML
QuickForm
2007-06-12 03:27:40 +00:00
pichetp 59a6d971a4 replacing "saveas" by "next page" and a greater size to answers formula <input> 2007-06-11 20:12:04 +00:00
moodler 45e948f87e Automatic installer.php lang files by installer_builder (20070611) 2007-06-11 06:11:26 +00:00
pichetp c0226d096a correcting the custom_genrator line 610-611 2007-06-11 00:17:57 +00:00
pichetp aaf3348589 Adding various improvements (MDL-8565, MDL-9496, MDL10070 etc.)to calculated question 2007-06-10 22:45:34 +00:00
moodler 158c4b5c80 Added two recent installer langs to CVS 2007-06-09 08:22:46 +00:00
moodler a3eba6f2d2 Automatic installer.php lang files by installer_builder (20070609) 2007-06-09 04:47:52 +00:00
martinlanghoff 8d7e790de7 moodlelib:moodle_request_shutdown() - only call apache_child_terminate if child_terminate is true - MDL-9350
Apparently there _is_ a PHP ini setting controlling
it -- defaults to off.
2007-06-07 21:22:36 +00:00
poltawski ed289f97e5 MDL-8080 Grade exceptions broken for teacher by invalid capability check.i
Thanks to Paul Ortman for the patch.
2007-06-04 22:52:05 +00:00
mark-nielsen 5d7ce9bf29 Fix for MDL-9947, remap activity links during restore process 2007-05-28 17:18:54 +00:00
jamiesensei fbb5ad35e7 MDL-9734 fix for clean_param PARAM_LOCALURL bug 2007-05-27 11:21:55 +00:00
moodler 9e2df8519a Automatic installer.php lang files by installer_builder (20070527) 2007-05-27 04:33:24 +00:00
moodler e4cc5dbc7f Automatic installer.php lang files by installer_builder (20070526) 2007-05-26 04:08:44 +00:00
moodler 34e92f9b8b Automatic installer.php lang files by installer_builder (20070525) 2007-05-25 04:33:33 +00:00
tjhunt 6e2284138b MDL-9878 - fix call-time pass by references. Backported from HEAD. 2007-05-22 14:11:16 +00:00
moodler 73a4864b82 Automatic installer.php lang files by installer_builder (20070522) 2007-05-22 05:22:03 +00:00
gbateson 1a6a597fff use PARAM_ALPHANUM on "section" parameter so that "section=all" is allowed 2007-05-22 04:27:28 +00:00
moodler 9df49de633 Merged fix for MDL-9859 2007-05-21 14:45:05 +00:00
sam_marshall 404d380856 MDL-8227 Merged wiki locking fix 2007-05-21 12:02:24 +00:00
moodler cbc0bc50b1 Fix from MDL-7233 for LDAP change passwords 2007-05-21 05:27:54 +00:00
moodler ae767e7bd3 Automatic installer.php lang files by installer_builder (20070521) 2007-05-21 04:50:35 +00:00
moodler 2ccbd6ccf1 Automatic installer.php lang files by installer_builder (20070519) 2007-05-19 04:43:42 +00:00
skodak 8dbf6bb9e0 MDL-9418 use proper addslashes before each insert; backported from MOODLE_18_STABLE 2007-05-16 20:09:32 +00:00
poltawski 652fab8576 MDL-9819 - Restoring numerical questions was broken 2007-05-15 14:49:14 +00:00
moodler 31942aff61 Automatic installer.php lang files by installer_builder (20070515) 2007-05-15 04:52:50 +00:00
pichetp 5006792896 merging from head so that calculated questions can be imported and other improvments 2007-05-15 03:30:33 +00:00
pichetp 786542c572 merging from head so that calculated questions can be imported and other improvments 2007-05-15 03:23:32 +00:00
pichetp edaaa46655 merging small modifications from head mostly for calculated questions 2007-05-15 03:13:38 +00:00
moodler c0bea40aaf Automatic installer.php lang files by installer_builder (20070512) 2007-05-12 05:47:40 +00:00
csantossaenz 7dd535056e Deleted addslashes_js() because it was impossible to add it to weblib.php 2007-05-11 11:10:10 +00:00
csantossaenz 555bfa16d0 Added function addslashes_js() to make the javacript receive the strings correctly 2007-05-11 10:57:20 +00:00
moodler 470be2688b Automatic installer.php lang files by installer_builder (20070511) 2007-05-11 06:33:10 +00:00
gbateson 135d93ec9e when inserting 'Give Up' button, if site encoding is not iso-8859-1, then set page encoding to get_string('thischarset') 2007-05-11 05:17:42 +00:00
moodler 75943600ed Added CSS for current language MDL-9750 2007-05-09 06:46:37 +00:00
gbateson 7fd3f594da modified "hpNewFunction" to allow Rottmeier quizze (Find-It, Dropdown) s to run on Safari (Mac) 2007-05-07 02:47:17 +00:00
poltawski 55904e49dc MDL-8971 - Fixed typo 2007-05-06 09:39:46 +00:00
moodler 4c5da8022e Automatic installer.php lang files by installer_builder (20070506) 2007-05-06 04:56:05 +00:00
gbateson 2f47a361ff remove duplicate id attribute from body tag; microincrement version to 2006091203 (release 2.2.2) 2007-05-04 02:43:35 +00:00
gbateson 9197627ade set default body font size to "small" 2007-05-03 00:55:20 +00:00
gbateson 4b168cfabc add HP 6.2 templates; add compatability with Safari (Mac browser); microincrement version to 2006091202 (release 2.2.1) 2007-05-02 23:49:59 +00:00
moodler ffa6c35826 Automatic installer.php lang files by installer_builder (20070501) 2007-05-01 04:21:00 +00:00
moodler b0e924a51e Automatic installer.php lang files by installer_builder (20070429) 2007-04-29 04:32:54 +00:00
moodler 58a9623c54 Automatic installer.php lang files by installer_builder (20070428) 2007-04-28 04:25:04 +00:00
tjhunt 1bde9b823c Fix comedy require_once. Merged from MOODLE_16_STABLE. 2007-04-24 21:16:10 +00:00
stronk7 76eea68b9e Now resource/view.php?r=XXX links are recoded properly in backup/restore. MDL-9450
Backported from MOODLE_18_STABLE
2007-04-22 22:07:49 +00:00
skodak 8c0a6839f2 MDL-9483 Problem with question restore relinking when quiz not selected 2007-04-21 12:36:57 +00:00
thepurpleblob a1f951f3a4 MDL-9395:
Trued to call function that did not exist. Old function has been modified
to return valid list of categories and we call that instead.
2007-04-20 12:59:36 +00:00
thepurpleblob 72449953e4 MDL-9395:
Tried to call function that didn't exist. Made old function have
the functionality to return valid categories list and used that.
2007-04-20 12:57:55 +00:00
tjhunt f359daab58 MDL-9432 - Forgot to return success/failure in two places. 2007-04-19 17:37:20 +00:00
tjhunt b33888d124 Fix error message to say the right thing. 2007-04-19 17:16:29 +00:00
skodak 1a5e85a22c fixed MDL-9411 : MDL-9012 has partially wrong fix; backporting of MDL-9207 2007-04-19 12:10:38 +00:00
tjhunt 0dd1becdc7 MDL-9432 - When restoring questions, links are not recoded. Merged from OU moodle. 2007-04-18 15:56:30 +00:00
donal72 61e35a87da MDL-9424 Removing call to MDL1.8 function 2007-04-18 06:56:33 +00:00
cataluke 0c34a17b09 admin/uploaduser.php: Fixed not enrolling user into course if user already exists
Author: Patrick Li <patrick@catalyst.net.nz>
Committer: Luke Hudson <luke@catalyst.net.nz>
2007-04-18 02:45:14 +00:00
donal72 52f24bfec6 Fix for MDL-9216 ("Login as" doesn't work) backported from head 2007-04-18 01:09:15 +00:00
cataluke b2787982b7 MDL-7856 - make database search case-insensitive for PostgreSQL too.
Signed-off-by: Luke Hudson <luke@catalyst.net.nz>


Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
Committer: Luke Hudson <luke@catalyst.net.nz>
2007-04-17 05:57:06 +00:00
stronk7 8f4c3dae23 Fixed quesry to work agains Oracle. Repeated fields + limit
are incompatible for Oracle. MDL-9321
2007-04-16 14:42:30 +00:00
moodler a8c2fc5dee Automatic installer.php lang files by installer_builder (20070416) 2007-04-16 04:23:55 +00:00
martinlanghoff a3b2f4cbeb moodle_request_shutdown(): silence errors when apache_child_terminate() is disallowed - (MDL-9350) 2007-04-16 00:24:44 +00:00
tjhunt 1e066cbf29 MDL-5799 - quiz previews were sometimes showing up in the quiz overview report. 2007-04-12 20:10:47 +00:00
jamiesensei 79dd326093 making notifytiny style a little bigger 2007-04-12 15:35:57 +00:00
stronk7 1f775e8c46 Fixing typo causing some (a few) sites to break on upgrade. Credit
goes to Rafa Gutierrez. MDL-9316

Merged from MOODLE_16_STABLE
2007-04-12 15:31:21 +00:00
martinlanghoff 7b6c65a560 moodle_request_shutdown(): raise $CFG->apachemaxmem to 25MiB for 1.7 and newer 2007-04-12 03:30:20 +00:00
toyomoyo c935b991a1 MDL-9291, temporarily disabling blog this link 2007-04-12 02:17:09 +00:00
martinlanghoff 28ca56c93d Fixed 'off by one' month bug in month select boxes generated by
print_date_selector when users time zone set to GMT-13.


Author: Matt Clarkson <mattc@catalyst.net.nz>
Committer: Matt <mattc@catalyst.net.nz>
2007-04-12 00:45:35 +00:00
mjollnir_ ec3200262d merged: fixing warnings in stats lib - rather than doing an include_once and noticing for every missing mod, check the file exists first from MOODLE_16_STABLE, and fixed up some weirdness in the reports 2007-04-11 23:52:31 +00:00
tjhunt 8539018ed4 MDL-9079 - Paging broken in quiz overview report. 2007-04-11 20:37:36 +00:00
tjhunt 245de1a597 MDL-9303 - General Feedback not shown for essay questions on review screen. 2007-04-11 19:03:34 +00:00
thepurpleblob 3fdd49a75a MDL-9123:
Added language string for error message
2007-04-11 12:19:16 +00:00
thepurpleblob 3ff6c931ee MDL-9123:
No check was made of the validity of the category id read from the form.
So it could theoretically have been spoofed.
2007-04-11 11:02:48 +00:00
toyomoyo c7da0d864e fix for MDL-9268 2007-04-10 05:15:14 +00:00
moodler e97c7b28c5 Automatic installer.php lang files by installer_builder (20070410) 2007-04-10 03:31:59 +00:00
mjollnir_ 2ffbe91234 add support for https source for popups
previously fullscreen.php tried to load any javascript files that were
running in the popup's parent.
If the source of the script didn't start with "http:" it was assumed
that it must be a relative path. This caused problems when it tried to
make it into an absolute path.
Fixed Regex to include support for https
Credit: Peter Bulmer <peterb@catalyst.net.nz>
2007-04-09 20:38:49 +00:00
stronk7 4f3835b601 Now $CFG->apachemaxmem is respected.
Merged from MOODLE_16_STABLE
2007-04-07 16:05:54 +00:00
skodak 445a3c1233 MDL-9227 Inconsistent HTTPS for profile edit page 2007-04-06 07:46:41 +00:00
jamiesensei 4989bc7951 added a style for the required field description that was forgotten. More are missing judging by appearances. 2007-04-06 06:45:16 +00:00
jamiesensei 8eb102ff1c see MDL-8886.
fixes bug that meant :

       $mform->disabledIf('studentfeedbackurl', 'studentfeedback', 'eq', 0);
       $mform->disabledIf('studentfeedbackurl', 'studentfeedback', 'eq', 3);
       $mform->disabledIf('studentfeedbackurl', 'studentfeedback', 'eq', 4);

didn't work.
2007-04-06 06:08:19 +00:00
toyomoyo 9b6cf38c96 fix for MDL-9186, capability fix for calendar 2007-04-05 08:00:40 +00:00
toyomoyo 203743c638 added missing string 2007-04-05 06:06:45 +00:00
toyomoyo c691deff3a fix for MDL-9165, admins should see private blogs 2007-04-05 06:04:24 +00:00
martinlanghoff bf01ed8211 lib/setup moodelib: Introducing moodle_request_shutdown()
Now Moodle will have a 'shutdown_function' function. Right now
registered (and useful) only when running under apache + mod_php.

This initial function checks whether memory usage in this process exceeded
10MiB or $CFG->apachemaxmem (int, in bytes). This is really useful to prevent
using more RAM than we have.
2007-04-05 05:00:23 +00:00
toyomoyo 93cc66aeae fix for MDL-9197, multilang filter not applied to default role in course settings 2007-04-05 03:55:51 +00:00
moodler f103bb199e Automatic installer.php lang files by installer_builder (20070405) 2007-04-05 03:35:14 +00:00
nicolasconnault 476f7cc8ee MDL-9204 New submission wasn't given a timemodified upon creation. 2007-04-05 03:25:27 +00:00
skodak e9a1bffc8f MDL-8802 fixed byteserving broken by adobe anti xss patch; backported from MOODLE_18_STABLE 2007-04-04 19:46:14 +00:00
jamiesensei 377d7c7515 fixes MDL-9195 mform->hardFreeze() doesn't remove id attribute of label for checkbox 2007-04-04 10:29:41 +00:00
moodler 7bc643ebaf Automatic installer.php lang files by installer_builder (20070404) 2007-04-04 03:59:55 +00:00
nicolasconnault 184f9c2b66 MDL-9192:
a.dimmed:link,
a.dimmed:visited {
  color:#AAAAAA;
}
2007-04-04 02:38:19 +00:00
nicolasconnault 93fa4ca922 MDL-9193 2007-04-04 02:20:43 +00:00
nicolasconnault 552de335d0 MDL-9147 2007-04-03 08:41:51 +00:00
toyomoyo 9e6e743dfc fix for broken blog utf8 migration 2007-04-02 08:41:57 +00:00
moodler f9bbb1031e More changes to make mforms compatible in 1.7 with 1.8 MDL-9159 2007-04-02 05:38:04 +00:00
moodler 290b74fd49 Removed conflicts 2007-04-02 05:29:33 +00:00
moodler 7122026066 Fixed a conflict 2007-04-02 05:27:52 +00:00
moodler 70cade16e3 Complete port of Moodle 1.8 formslib.php back into 1.7 to aid development of any modules that may use formslib in 1.7
MDL-9159
2007-04-02 05:26:03 +00:00
toyomoyo 9146dd83de backporting more efficient get_my_courses 2007-04-02 03:50:15 +00:00
toyomoyo 9e162a23da admins should not need course:view 2007-04-02 02:37:09 +00:00
moodler 3df033ca4a Better handling of coursemanagers when none are being shown MDL-9139 2007-04-01 15:51:05 +00:00
moodler 5241345d02 Merged solution for MDL-6458 typo 2007-03-31 05:24:50 +00:00
stronk7 62cf504bdd fixing check of environmental tests. 2007-03-30 15:59:42 +00:00
moodler cf47a79c1d Merged changes from 1.8 for "course creators" problem MDL-8093 2007-03-30 15:39:55 +00:00
stronk7 12e91437f3 Adding a missing parameter to the "add new course" button. MDL-9129
Backported from MOODLE_18_STABLE
2007-03-30 15:38:32 +00:00
tjhunt a065fdd6f9 Backporting a layout fix from Moodle 1.8 2007-03-30 13:50:47 +00:00
tjhunt e0ddea8b8f Small code cleanup to fix an obscure warning. If you got an error in the middle of creating a quiz attempt, you could get an attempt with no states. Then that caused an error when the attempt was deleted. 2007-03-30 10:17:06 +00:00
tjhunt d7df238204 Fix notice. 2007-03-30 09:33:37 +00:00
moodler db2105c889 Bumping after 1.7.2 release 2007-03-30 09:00:54 +00:00
moodler 367dfbd905 Updating for 1.7.2 release 2007-03-30 08:40:02 +00:00
toyomoyo b17e52001c fix for MDL-9021, missing add_to_log() call 2007-03-30 08:04:07 +00:00
gbateson 153fd875b5 fix the display of the special chars keypad (in JCloze and JQuiz) 2007-03-30 03:41:04 +00:00
moodler a43dc9df02 Automatic installer.php lang files by installer_builder (20070330) 2007-03-30 03:35:59 +00:00
toyomoyo f9f150290f adding a missing string 2007-03-30 02:27:27 +00:00
toyomoyo 8779cb8b46 changing help file as helen suggested 2007-03-30 02:23:19 +00:00
tjhunt d7378d19ec MDL-9094 - Penalty factor is meaningless for Essay questions, so remove it from the editing form. 2007-03-29 22:59:09 +00:00
skodak 6219022575 MDL-4313 LDAP doesn't properly escape extra quotes in course details; backported from MOODLE_18_STABLE 2007-03-29 21:57:11 +00:00
andreabix d9ec40f57f Fixed "Call to undefined function print_box()" 2007-03-29 18:42:20 +00:00
tjhunt ea790c7db1 MDL-6269, MDL-8958, MDL-8990 - Major fix to do with each attempt builds on last:
It used not to work with random questions, and there were problems with the computation of the grade, and regrading. Fix thanks to Paulo Matos, who not only fixed the bug and tested it, but was also incredibly patient waiting for me to have time to commit the changes to CVS.

This commit also includes a backport of a small state logic changes to the 1.7 stable branch.
2007-03-29 16:35:14 +00:00
csantossaenz f0403cbba2 Fixed problem with the popup window options. Now, they are saved when you update an SCORM activity and you change those options. 2007-03-29 08:18:35 +00:00
toyomoyo 88b5f9b726 fix for MDL-8983. hidden assignment requires a help file 2007-03-29 06:39:11 +00:00
toyomoyo 4d0ec2a375 file hiddenassign.html was added on branch MOODLE_17_STABLE on 2007-03-29 06:39:11 +0000 2007-03-29 06:38:35 +00:00
tjhunt 7cb4fb6a88 MDL-9061 - Only show global assign roles warning if you are assigning roles in the global context! Also, change name of admin menu entry to reduce confusion. Backported from MOODLE_18_STABLE. 2007-03-28 16:57:45 +00:00
csantossaenz 504317a519 Fixed backup problem for scorm module. Now, it includes needed files in moddata/scorm. even though the backup is done without user data and files 2007-03-28 15:04:57 +00:00
toyomoyo 110351a2a6 fix for MDL-7764, site role definitions not passed down 2007-03-28 07:50:35 +00:00
moodler 9599ee24b9 dos2unix and removed some XHTML brokenness 2007-03-28 02:47:12 +00:00
moodler 78baa1aaad Latest cornflower from Jeff for MDL-9009 2007-03-28 02:40:28 +00:00
moodler 1f4025a70e file hdbgend.jpg was added on branch MOODLE_17_STABLE on 2007-03-28 02:40:30 +0000 2007-03-28 02:24:36 +00:00
moodler 7e147392e1 file hdbg.jpg was added on branch MOODLE_17_STABLE on 2007-03-28 02:40:30 +0000 2007-03-28 02:24:35 +00:00
moodler b7f0d27621 file cornflower.css was added on branch MOODLE_17_STABLE on 2007-03-28 02:40:28 +0000 2007-03-28 02:24:34 +00:00
nicolasconnault 0428d11d76 MDL-9061 2007-03-27 07:28:20 +00:00
nicolasconnault b5a5a482bd MDL-9034: Brought lang file up to sync. The field_mapping string doesn't exist anywhere, it was a typo in enrol/database/config.html, and should have been remote_fields_mapping. 2007-03-27 05:46:11 +00:00
moodler 699768ebbc Merged fix for MDL-9052 from 1.8 2007-03-27 05:14:18 +00:00
moodler 6bd9066b7f Automatic installer.php lang files by installer_builder (20070327) 2007-03-27 03:52:08 +00:00
toyomoyo 6af4e1c8c4 applying inaki's patch for MDL-9012, course autocreation doesn't work in enrol/database 2007-03-26 06:50:56 +00:00
toyomoyo a5c41b6a5a fix for MDL-9010, course request button should not appear if it's disabled 2007-03-26 05:51:28 +00:00
toyomoyo 0bffc5576e fix for MDL-8336, lacking of viewuseractivitiesreport 2007-03-26 04:11:48 +00:00
toyomoyo 21982b71a6 fix for MDL-9035, backporting get_role_users() with hidden param 2007-03-26 02:11:45 +00:00
stronk7 41a5c34f91 Fix a problem with glossary not being able to sort by firstname.
Backported from MOODLE_18_STABLE
2007-03-24 01:00:29 +00:00
stronk7 d08b6757e6 One default was causing author view not being able to sortby firstname or lastname.
Backported from MOODLE_18_STABLE
2007-03-24 00:39:30 +00:00
skodak dfeb385672 MDL-9017 add mime type for ico files; backported from MOODLE_18_STABLE 2007-03-23 13:07:50 +00:00
toyomoyo b36064f742 fix for MDL-9016, clearing context cache after remove_course_content() 2007-03-23 07:20:16 +00:00
moodler 3dfb5e4379 Automatic installer.php lang files by installer_builder (20070323) 2007-03-23 03:42:39 +00:00
toyomoyo 7f9f7ec944 fix for MDL-8987, guests should not be allowed to view blogs flagged as site blogs 2007-03-23 01:42:19 +00:00
skodak 1828849b1e MDL-8347 Cannot create new glossary category if category with same name exists in another course on site; patch by Ray Lawrence; backported from MOODLE_18_STABLE 2007-03-22 22:45:51 +00:00
tjhunt ff7253c2c1 MDL-7241 - Manual grading report, sort by completed time didn't. Merged from MOODLE_16_STABLE. 2007-03-22 21:31:27 +00:00
moodler 52257f15d7 Automatic installer.php lang files by installer_builder (20070322) 2007-03-22 03:56:14 +00:00
toyomoyo 4c1af19cf6 MDL-7164, Mark Nielson's patch for remove_course_content not calling instance_destroy() 2007-03-22 02:09:54 +00:00
tjhunt 48a2b5ad42 MDL-7259 - Item analysis report does not use the right format_text settings. Merged from MOODLE_16_STABLE. 2007-03-21 23:25:23 +00:00
tjhunt 9e8cabd7eb Fix whitespace problems and Eclipse warnings in Item Analysis quiz report. 2007-03-21 23:04:27 +00:00
skodak e28cc09b24 MDL-7647 Broken links on confirmation email (or others) - patch by Paulo Matos 2007-03-21 21:57:00 +00:00
thepurpleblob 6282be2fd9 Check for empty text strings. Thanks to Quedoc. 2007-03-21 11:13:48 +00:00
toyomoyo e6b8565063 adding a string 2007-03-21 06:19:08 +00:00
toyomoyo bce83e8c76 backporting changes for MDL-8981, roles assigned at site level may result in a lot of default subscriptions 2007-03-21 06:05:13 +00:00
moodler e2bf5eec99 Automatic installer.php lang files by installer_builder (20070321) 2007-03-21 03:51:04 +00:00
toyomoyo 87ab475575 fix for MDL-7552, hidden assignments for 1.7 2007-03-21 00:48:41 +00:00
tjhunt 9022696d6d MDL-8978 - Regression from MDL-6386. Merged from MOODLE_16_STABLE. 2007-03-21 00:13:33 +00:00
tjhunt 418cc2032b MDL-8299 - Wrong capability on review.php. 2007-03-20 22:44:32 +00:00
tjhunt 25769ccd61 MDL-8140 Other units disappear from the editing form when there is no unit with multiplier 1. 2007-03-20 22:22:00 +00:00
skodak d0e6183436 MDL-8975 fix parameter handling in repository plugin; backported from MOODLE_18_STABLE 2007-03-20 19:47:58 +00:00
skodak ca3c1ddf40 SC#374 removing obsoleted utf8migration code 2007-03-20 16:24:11 +00:00
tjhunt ec9f7c117e MDL-6386/MDL-6462 - yet more special character issues with multianswer. I think I have got them all this time. Backported from HEAD. 2007-03-20 14:31:26 +00:00
moodler 7f0984c1f3 Automatic installer.php lang files by installer_builder (20070320) 2007-03-20 03:36:20 +00:00
stronk7 dc8207c52a small typo in var name
Merged from MOODLE_16_STABLE
2007-03-19 16:11:01 +00:00
skodak 4419fe33a5 MDL-8759 reverted + backported fix for cron logs 2007-03-19 10:11:27 +00:00
toyomoyo ba0dabcc31 backporting coursemanagers to 1.7 2007-03-19 06:40:59 +00:00
martinlanghoff 3810ca294d Auto-linking filters: fix serious caching bug in forum mailouts
Autolinking of glossaries, activity, resources and wiki names were using a
trivial single-entry cache implemented with static vars. The cache was _not_
keyed on course.

This bug was visible during forum_cron() which walks many courses. The cache
would get "stuck" on the first course that had something to put in the cache.
All mailouts from there onwards would autolink to stuff in the wrong course.
2007-03-19 06:13:13 +00:00
toyomoyo f493763e04 backporting MDL-8578, students can post and reply in news forum 2007-03-19 02:47:30 +00:00
toyomoyo 3140dc600d backporting MDL-8578 students can post and reply in news forums 2007-03-19 02:46:33 +00:00
moodler 30739f6651 Automatic installer.php lang files by installer_builder (20070318) 2007-03-18 03:29:57 +00:00
poltawski 071d36c917 MDL-6386 - Regression from MDL-6462, lost stripslashes in CLOZE question,
thanks to Joseph Joseph Rézeau  for his attention to this issue
Backported from MOODLE_18_STABLE
2007-03-17 22:57:06 +00:00
pichetp 0540d3479c adding </p> lines 110,112 2007-03-16 22:34:06 +00:00
skodak 721a2de984 MDL-8883 fixed double backslashes problem in filter settings; backported from MOODLE_18_STABLE 2007-03-16 22:19:07 +00:00
mark-nielsen 78d68eb5b2 Was missing context in has_capability() call. This was found in MDL-8196 2007-03-16 03:44:04 +00:00
toyomoyo 5c5cb3ec7e back porting changes for MDL-8820, users with moodle/user:editprofile assigned at user context should be able to edit them 2007-03-16 01:35:34 +00:00
bobopinna b06855297c Changed coursepacket string with package 2007-03-15 20:42:41 +00:00
stronk7 dbd0f586a2 Fix small bug only reproduced in tests about changing field names and
amldb_field object becoming modified. Novice OOP bug :-(
2007-03-15 19:58:47 +00:00
bobopinna eb2a36fb55 Fixed the problem with asset and review mode checkbox in view.php 2007-03-15 19:35:25 +00:00
stronk7 a45296043e Testing comments and default clauses containing chars to be escaped. 2007-03-15 19:13:17 +00:00
stronk7 4bf57cbfa6 DB escaping comments. MDL-8918 2007-03-15 18:59:02 +00:00
bobopinna 43d78a231d Removed the last word course in scorm module 2007-03-15 17:40:45 +00:00
bobopinna 45d44e7e80 Fixed a problem with external packages 2007-03-15 15:54:36 +00:00
bobopinna ff6bc9fbc2 Fixed bug MDL-8161 also here 2007-03-15 15:49:33 +00:00
bobopinna 4bdf76ae71 removed a couple of debugging print 2007-03-15 15:25:51 +00:00
tjhunt 97feab527e MDL-6462 - Cloze (multianswer) question special character issues. Merged from MOODLE_16_STABLE. 2007-03-15 12:59:20 +00:00
tjhunt 903f3f54ed Fix notice. 2007-03-15 12:53:07 +00:00
bobopinna a1fec0e3ce fixed a typo (ThaNck Andrea) 2007-03-15 10:49:39 +00:00
toyomoyo e07f4ac436 fix for MDL-8908, draft blogs should not be visible 2007-03-15 06:14:08 +00:00
toyomoyo 25a37d70ff fix for MDL-7939, teachers, non-editting teachers and course creators should see hidden courses 2007-03-15 04:24:28 +00:00
moodler 5446beaa73 Automatic installer.php lang files by installer_builder (20070315) 2007-03-15 03:32:10 +00:00
tjhunt cb6281b339 MDL-8127 - bad use of DESCRIPTION constant in quiz module causes upgrade to fail. Thanks to Pavel Krejci for the fix. Merged from MOODLE_17_STABLE. 2007-03-14 21:24:54 +00:00
tjhunt 3696a3723e Oops, reverting. Eloy had already fixed it. 2007-03-14 21:10:59 +00:00
tjhunt 8fa821d514 MDL-8232 - can't use = on TEXT colums with MSSQL - was breaking numerical question type upgrade. 2007-03-14 21:08:23 +00:00
poltawski 9bb4b97e3d Fixed check for section for MDL-8360, merged from MOODLE_18_STABLE 2007-03-14 16:35:10 +00:00
thepurpleblob 87c39bf549 Fixed true/false bug due to new 'correctanswer' field. 2007-03-14 15:15:27 +00:00
ethem 91f54796bd Code cleanup 2007-03-14 13:43:19 +00:00
poltawski fd52f257ff MDL-8360 - Currently can't bookmark admin searches, so disable the ability to bookmark
the search page
2007-03-14 11:50:53 +00:00
skodak 94c9630d78 MDL-8897 fixed shell commands in tex and algebra filters 2007-03-14 11:10:22 +00:00
toyomoyo 84718c0056 fix for MDL-8885, teachers should not be able to hide courses if they can not view hidden courses 2007-03-14 04:34:54 +00:00
moodler 0a16d1722a Automatic installer.php lang files by installer_builder (20070314) 2007-03-14 03:50:40 +00:00
toyomoyo abb8f34ecf MDL-8885, do not show bulk messaging option if user has no capability 2007-03-14 01:52:36 +00:00
toyomoyo 8af16cbfdb MDL-8885 editting teachers should be able to see all messages in a course 2007-03-14 01:39:43 +00:00
bobopinna 54c5ce36db Fixed bug MDL-8725
Just a typo in regular expression
2007-03-13 21:04:44 +00:00
tjhunt 0b17d072cf Eliminate bizarre use of function_exists. 2007-03-13 17:42:51 +00:00
tjhunt cd4469af52 Entity decoding only done the right number of times on import, not once too often.
Also, fix a notice and and Eclipse warning.
Backported from HEAD.
2007-03-13 16:27:52 +00:00
tjhunt 01d0a4f289 Use the right string processing when outputting question text on import/export. Backported from HEAD 2007-03-13 16:24:36 +00:00
tjhunt 8f8f6e7c92 Use the right string processing functions when outputting question names. Backported from HEAD 2007-03-13 16:21:07 +00:00
poltawski 90fe299739 Regression using the wrong config variables, see MDL-8257 2007-03-13 14:31:56 +00:00
moodler bceb6eb9d8 MERGED MDL-8872 from 1.8 removed "course" mentions from scorm interface 2007-03-13 08:47:52 +00:00
toyomoyo 7989f2ee28 allow guests to see the reply link 2007-03-13 04:46:55 +00:00
toyomoyo 78a0f36730 fixing a warning 2007-03-13 04:33:54 +00:00
toyomoyo b2a48214f8 fix for MDL-8864, reply link bug for users with replypost set to prevent 2007-03-13 04:28:39 +00:00
toyomoyo 76d9513015 fix for MDL-8767, when doing forum_cron, loop by user instead of post, backporting to 1.7 2007-03-13 03:38:06 +00:00
moodler 4d89cba698 Automatic installer.php lang files by installer_builder (20070313) 2007-03-13 03:33:55 +00:00
moodler e8189c3074 fixing a broken has_capability call 2007-03-13 00:54:25 +00:00
thepurpleblob af17ae8a1b MDL-8857
Make numerical and essay question formats more consistent.
2007-03-12 16:29:45 +00:00
skodak 8626d4bc24 MDL-5229 and MDL-6196 adding gb18030 mime header encoding; partial backport from MOODLE_18_STABLE 2007-03-12 08:45:02 +00:00
moodler f0b99a9fec fix for forceloginforprofile for parents 2007-03-12 01:20:32 +00:00
skodak fcb9e23701 MDL-8849 use proper value quoting; backported from MOODLE_18_STABLE 2007-03-11 20:01:15 +00:00
moodler ab496d313c Merged from head MDL-8842 2007-03-10 14:51:51 +00:00
moodler 0e53408ad7 Automatic installer.php lang files by installer_builder (20070310) 2007-03-10 03:29:07 +00:00
tjhunt 4b1f48e2ae MDL-8177 - Random questions selected deleted questions. Backported from MOODLE_18_STABLE. 2007-03-10 00:34:35 +00:00
pichetp 5530732c16 merge from 18 merged 2007-03-09 06:02:16 +00:00
moodler 5b4e26864a Automatic installer.php lang files by installer_builder (20070309) 2007-03-09 03:46:00 +00:00
moodler 1081ccc99b back porting MDL-8681 course import creates duplicate role into 1.7 2007-03-09 02:41:48 +00:00
skodak c0ad0e5a98 MDL-8814 fixed typo; backported from MOODLE_18_STABLE 2007-03-08 15:24:44 +00:00
moodler b6db8ab49d fix for MDL-7552, backporting hidden assignments (teacher) for 1.7 2007-03-08 05:25:42 +00:00
moodler ce455a9a79 merged do not force parents to log in 2007-03-07 06:25:36 +00:00
moodler b6d3fccd59 Merged fixes for MDL-8785 from 1.8
BIG SPEED INCREASE!!!!!!
2007-03-07 05:00:05 +00:00
moodler 78be3cdb8b backporting code to fix hidden teacher upgrade 2007-03-07 01:38:41 +00:00
tjhunt 837588a772 MDL-8349 - responses not being filtered in history display. Backported from MOODLE_18_STABLE. 2007-03-06 18:00:39 +00:00
nicolasconnault f398c77963 MDL-8759 - Unset $USER 2007-03-06 06:09:44 +00:00
nicolasconnault 2fd2fdbdb9 MDL-8771 - Restricted has_capability() sanity checks to DEVELOPER debug mode 2007-03-06 05:29:00 +00:00
moodler 92d3d576fb fix for MDL-8589, found more than one record in get_record_sql 2007-03-06 01:37:54 +00:00
moodler ef06f7f85b Added new string locations to 1.7 2007-03-05 12:28:58 +00:00
moodler e7a5ad8da9 Fix for MDL-8318, show cost info on info page 2007-03-05 05:41:21 +00:00
moodler d8882ec822 Automatic installer.php lang files by installer_builder (20070304) 2007-03-04 03:41:18 +00:00
gbateson e21f0b1042 set JQuiz[7]=false, to fix checking answers for JQuiz Hybrid questions when in ShortAnswer mode 2007-03-04 01:19:42 +00:00
skodak b6057d4afa MDL-8733 fixed approving logic when editing; merged from MOODLE_16_STABLE 2007-03-03 12:25:40 +00:00
pichetp bf18b2aa09 ggrading small numbers MDL-8478 merge from 18_STABLE 2007-03-02 21:14:48 +00:00
skodak db365a121d sesskey added to logout.php MDL-8727 ; backported from HEAD 2007-03-02 17:05:25 +00:00
moodler d243cd17c5 Commenting this out for now for performance reasons, should be fixed soon!
See MDL-8385
2007-03-02 10:10:52 +00:00
stronk7 01be5c29cc Skipping thousands of require_once() calls because PHP5
is really slow (and heavy) with them. MDL-8700
2007-03-02 09:39:50 +00:00
moodler 1ac2df9163 adding backward compatibility for question restore 2007-03-02 08:01:47 +00:00
nicolasconnault 800fa68224 MDL-8633 - Initialised $output at head of function. 2007-03-02 05:48:03 +00:00
moodler 4876f94726 should be manualcomment 2007-03-02 05:20:39 +00:00
moodler c5c47d0c43 fix for MDL-8491, feed back for essay questions not backed up 2007-03-02 04:51:31 +00:00
mjollnir_ 731f877fdb Merged from MOODLE_16_STABLE: fixing bug MDL-8651: import course data should clean up after itself 2007-03-02 01:43:15 +00:00
moodler acb417721d Fixed unenrol_student MDL-8591 2007-03-01 08:04:03 +00:00
moodler 60f8f5bf42 Don't redirect guests to mymoodle page! MDL-8594 2007-03-01 07:56:24 +00:00
nicolasconnault df18c3141e MDL-8693 Fixed the double-equal typos (2) 2007-03-01 07:28:20 +00:00
defacer 4edc434002 Merging from MOODLE_16_STABLE:
Fix for MDL-8515: Prefixing chat messages with a slash should not hide the
user's name unless it's a special command we handle.

I completely removed the emoticon handling case, but it seems like it was
not needed for a long time now? Emoticons work just fine without it.
2007-03-01 07:03:29 +00:00
martinlanghoff 3ce66e9f7b MDL-7385 - stats_cron_daily() - If a module is missing, continue processing 2007-02-28 03:04:05 +00:00
martinlanghoff fb3501f935 Fixing MDL-6795 - Stats never runs. stats_monthly table gets very full - avoid double tz calculations in stats_getmidnight() 2007-02-28 02:51:11 +00:00
martinlanghoff 757d66b504 Stopping warning and possible errors in graphlib.php caused by bugs in statsgraph.php
Ported from LDC (1.5) branch


Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
2007-02-28 00:32:16 +00:00
martinlanghoff 9861a3997a hotpot: Fixing db upgrade script
Note MySQL upgrade (earlier on by version)


Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
2007-02-28 00:28:39 +00:00
martinlanghoff e05e5d132e (Fixing upgrade script) Only try to disable lams if it is installed
Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
2007-02-28 00:25:46 +00:00
martinlanghoff 6488b3be2e blocks: Making UTF8 migration script work with blocks not on course page, etc.
Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
2007-02-28 00:10:12 +00:00
martinlanghoff 748e20f006 Fixing 1.5->1.7 upgrade bug (get_courses was used unnecessarily in upgrade process, and relies on roles)
Author: Andrew Walbran <andrew.walbran@catalyst.net.nz>
2007-02-28 00:07:22 +00:00
stronk7 da0dcaef1b Fixing RSS link to source. http://moodle.org/mod/forum/discuss.php?d=65762 2007-02-27 18:19:47 +00:00
stronk7 9babd808f8 Fix some warnings generated after enrol because of the LAMS module. MDL-8078 2007-02-27 17:39:48 +00:00
defacer 57c07037a7 Not needing this anymore, we now have Moodle Docs. 2007-02-27 14:40:55 +00:00
defacer 2eb862ba18 Merging from MOODLE_16_STABLE:
Fix for MDL-4701: Event URLs now include anchor so that the event is immediately visible.
2007-02-27 14:30:33 +00:00
defacer e5c482b517 Merging from MOODLE_16_STABLE:
Bugfix: skodak's fix for MDL-5991 is needed here as well.
2007-02-27 13:58:56 +00:00
defacer 61c7621b80 Changing email addresses that caught my eye in the comments. 2007-02-27 13:48:49 +00:00
defacer 595687a2f1 Fix for MDL-8402:
$CFG->calendar_weekdays wasn't saved correctly and misbehaved.

I took the opportunity to rewrite a little HTML too.
2007-02-27 12:17:58 +00:00
moodler 6e2e65e499 fixing wrong capability check 2007-02-27 05:48:15 +00:00
moodler 997a36bb09 fix for MDL-8666, groups import broken 2007-02-27 05:42:01 +00:00
moodler 8b03cdac79 fixing typos 2007-02-27 04:38:05 +00:00
defacer 6b0bfc914c Bugfix: $CFG->calendar_adminseesall was not working at all, Moodle behaved
as if it were always on. Reported at http://moodle.org/mod/forum/discuss.php?d=65500.
2007-02-27 00:33:18 +00:00
moodler 9f5ceda372 Automatic installer.php lang files by installer_builder (20070226) 2007-02-26 03:39:18 +00:00
mjollnir_ d550a1409b fixing MDL-8662 2007-02-26 00:18:02 +00:00
defacer e56a129d56 Merged from MOODLE_16_STABLE:
Fix for MDL-4940: Social Activities block disappears when editing course settings.
2007-02-24 23:24:43 +00:00
moodler 9a8d870765 Automatic installer.php lang files by installer_builder (20070224) 2007-02-24 03:37:11 +00:00
mark-nielsen be724f381e [Fixed] MDL-8637: lesson_answers answer field can be null 2007-02-23 17:27:13 +00:00
thepurpleblob c6a0fc48df MDL-8602
Don't count modules where course=0 (ie, they must exist in real courses)
2007-02-21 14:57:18 +00:00
tjhunt 61e6471fce Another wretched adslashes problem. Roll on placeholder. Thanks to Howard Miller. 2007-02-20 15:17:45 +00:00
moodler 3ad11e88b2 fix for MDL-8568, users in modules with sepearate groups can not revert to all participants mode 2007-02-20 03:13:37 +00:00
moodler 156f63c804 applying nick's patch to MDL-8534, typo in restorelib.php 2007-02-20 01:02:32 +00:00
lamsdev ca9de648a8 Changed from using lib/soap/nusoap.lib library directly to using lib/soaplib.php.
Fix for MDL-6224
2007-02-20 00:34:57 +00:00
stronk7 66d6716a02 Changing iso-8859-1 encoding of excel files to windows-1252. It adds support for
some more (a few) characters. MDL-7993

Merged from MOODLE_16_STABLE
2007-02-19 23:21:33 +00:00
stronk7 19906f7074 Backporting excellib with support to $CFG->excelisofiles to 17_STABLE.
MDL-7993. http://moodle.org/mod/forum/discuss.php?d=53302
2007-02-19 22:26:54 +00:00
skodak b8dececceb MDL-8570 outdate flv player; backported from HEAD 2007-02-19 13:59:12 +00:00
ethem 068be51fa0 Removed unnecesary code. 2007-02-19 12:01:54 +00:00
tjhunt 85a430d5be MDL-8145 - Add more options to the add random questions dropdown. 2007-02-19 04:24:09 +00:00
moodler 3b00cdbff0 Automatic installer.php lang files by installer_builder (20070219) 2007-02-19 03:33:45 +00:00
koenr 9e0bad4909 MDL-8400 Changed currency of peru to Nuevo Sol 2007-02-17 23:37:03 +00:00
tjhunt b430f84c4c MDL-8154 - Typo in course search code. Fix thanks to Anthony Borrow. 2007-02-17 17:16:41 +00:00
vyshane 014161956c Fix for MDL-7796 "Default permissions for Course Creators are too permissive". Changed some permissions from allow to inherit. Changed course deletion checks to allow course creators to delete courses. 2007-02-16 08:15:02 +00:00
moodler 5f842b21bd Automatic installer.php lang files by installer_builder (20070216) 2007-02-16 03:38:46 +00:00
moodler ca3a97b8c1 adding missing capability check for manage roles page 2007-02-16 02:39:28 +00:00
moodler 5b6af116c1 fixed wrong context, it should be possible to manage a single block 2007-02-16 01:24:30 +00:00
skodak a9fd5db642 MDL-7722 fixed wrong cleaning in backup paths; backported from HEAD 2007-02-15 10:06:10 +00:00
moodler 2f26b36af3 Merged environment checks during upgrade from 1.8 and 1.9 2007-02-15 06:59:32 +00:00
moodler c2fe49c5e7 Added new strings for upgrade environment checks. MDL-8527 2007-02-15 06:52:34 +00:00
vyshane 7df5ccc871 Fix for MDL-8072 - 'In the "Quiz" activity with the "Adaptive Mode" on, the "Multiple Choice" a message informing the student was penalized with the Penalty Factor is displayed when the answer given by the student is correct.' 2007-02-15 06:05:01 +00:00
stronk7 cf507be4c0 PHP 4 assignment is by value so course_header (containing edited names)
wasn't being modified. MDL-8298
2007-02-14 23:50:04 +00:00
skodak 9e8bc0e590 MDL-8268 fixed block get_string, patch by Mark Nielsen; backported from HEAD 2007-02-14 23:02:15 +00:00
skodak b50965414e MDL-8268 fixed get_user_capability_course(), patch by Mark Nielsen; backported from HEAD 2007-02-14 22:51:17 +00:00
skodak f2592eb65e MDL-8469 increase memory limit in cron due to changed calculation of used memory in PHP 5.2.x - the real memory useage is the same, but the reported size of used memory is now more accurate; backported from HEAD 2007-02-14 21:00:58 +00:00
vyshane e9d837a1a2 Fix for MDL-3681 "Duplicate Message-IDs in Forum mail". 2007-02-14 07:20:18 +00:00
moodler a650e7bb3a Automatic installer.php lang files by installer_builder (20070214) 2007-02-14 03:49:50 +00:00
vyshane 974dde3777 Simple fix for MDL-3583 "tabs text confusing". 2007-02-14 02:54:48 +00:00
vyshane 0ba544e97d Fix for MDL-3370. Forum: Unread messages shouldn't link to read. 2007-02-14 01:57:34 +00:00
stronk7 72395f4d2a Some minor js problems. MDL-7811 and MDL-6481
Merged from MOODLE_16_STABLE
2007-02-13 23:39:21 +00:00
watcanz 74780decb8 Corrected for 1.6.4 2007-02-13 21:05:41 +00:00
skodak f167056a18 MDL-8490 Glossary student not being able to edit entries; backported from HEAD 2007-02-13 19:29:51 +00:00
nfreear 375016e822 Fix for MDL-8507 "Local language pack-name can appear in language code" (merge from HEAD.) 2007-02-13 13:40:58 +00:00
nfreear ec6c6dae3f Fixes bug MDL-7257, "stylesheet bug: text color undefined" (merged from HEAD). 2007-02-13 12:12:36 +00:00
skodak 463b6cbe64 MDL-8498 Assignment - Notification of feedback e-mails to students not being sent 2007-02-13 08:41:26 +00:00
moodler 08f4e03f53 FIxes so that no-one can "login as" users who have "doanything". MDL-8411 2007-02-13 08:30:25 +00:00
vyshane 593d5992c0 Fix for MDL-8431 "In qanda forum: Undefined property: object::$id" 2007-02-13 05:24:32 +00:00
moodler 671a35735b Automatic installer.php lang files by installer_builder (20070213) 2007-02-13 03:51:43 +00:00
toyomoyo c7bbf43c12 fix for MDL-8480, external db user lang sync problem 2007-02-13 03:09:01 +00:00
vyshane 8dd4116941 Added get_my_courses() to forum_get_readable_forums(). Thanks Eloy for patch :-) This is related to MDL-8385. See tracker for discussion. 2007-02-13 02:22:05 +00:00
toyomoyo 821a2a750b fix for MDL-8358, wrong count for not graded assignments 2007-02-12 06:49:37 +00:00
moodler 4351ce8a6b Automatic installer.php lang files by installer_builder (20070212) 2007-02-12 03:51:39 +00:00
vyshane d97feb678a Fix for MDL-8459 (Indent left bug). 2007-02-09 05:15:52 +00:00
toyomoyo 1f49b80193 fix for MDL-8399, can not unassign admin at course level 2007-02-09 03:08:17 +00:00
vyshane 2edb2fbaf1 Fixes for MDL-8420 and MDL-8385. 2007-02-09 01:35:46 +00:00
vyshane 7aa8c1329f Small cleanup 2007-02-09 01:27:34 +00:00
stronk7 04f64ffbe0 Limit table comments to 60cc for MySQL. MDL-7765 2007-02-09 00:32:32 +00:00
stronk7 bdc1bb3358 Delete backup records on course delete. MDL-8314
Merged from MOODLE_16_STABLE
2007-02-09 00:11:45 +00:00
vyshane 8e42353e0e Added new function get_all_subcategories() 2007-02-08 08:04:35 +00:00
vyshane 1ab3830750 Removed IE-specific hack for resource deletion. 2007-02-08 05:34:44 +00:00
vyshane 45ce915b79 Updated YUI Library to 0.12.2. This seems to have fixed MDL-8287. 2007-02-08 05:30:18 +00:00
vyshane 2a28db59c3 file yahoo-dom-event.js was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:57 +0000 2007-02-08 05:19:48 +00:00
vyshane f18d2309fb file utilities.js was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:52 +0000 2007-02-08 05:19:48 +00:00
vyshane bc516d11c1 file README was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:56 +0000 2007-02-08 05:19:48 +00:00
vyshane 75ee3dfa69 file README was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:51 +0000 2007-02-08 05:19:48 +00:00
vyshane 7dac46e80c file tabview.js was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:41 +0000 2007-02-08 05:19:47 +00:00
vyshane 23cbd7e82b file tabview-min.js was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:40 +0000 2007-02-08 05:19:47 +00:00
vyshane e2612a5522 file tabview-debug.js was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:40 +0000 2007-02-08 05:19:47 +00:00
vyshane 41fd2c3924 file reset-fonts-grids.css was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:37 +0000 2007-02-08 05:19:47 +00:00
vyshane 7020a2ac33 file border_tabs.css was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:42 +0000 2007-02-08 05:19:47 +00:00
vyshane cf3f87a641 file README was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:39 +0000 2007-02-08 05:19:47 +00:00
vyshane 2500eb7ead file README was added on branch MOODLE_17_STABLE on 2007-02-08 05:30:37 +0000 2007-02-08 05:19:47 +00:00
thepurpleblob 0115262560 MDL-8349 Some of the overidden methods had got out of sync with parent class. 2007-02-07 11:34:53 +00:00
thepurpleblob 7c944b7cbe MDL-8450 Added support for including question categories in a quiz export. Also a bit of format tidy up and fix a misshandled sesskey. 2007-02-07 10:27:13 +00:00
thepurpleblob e264752381 MDL-8450 Added support for including question categories in a quiz export. 2007-02-07 10:12:36 +00:00
thepurpleblob 075f61025c MDL-8450 Added support for including question categories in a quiz export. 2007-02-07 09:56:57 +00:00
vyshane 085fecaf86 Changed require to require_once to fix function redeclaration error. 2007-02-07 07:08:02 +00:00
moodler 970d2432d7 Automatic installer.php lang files by installer_builder (20070207) 2007-02-07 03:34:57 +00:00
stronk7 0d8057b119 Fixed two schema-fk typos. MDL-8427 2007-02-06 15:50:03 +00:00
stronk7 2786c8fd73 Generators can use ddllib.php stuff (I missed this some days ago) 2007-02-05 17:01:37 +00:00
moodler e1555199db Merged site name apostrophe problem in MDL-8416 2007-02-05 06:53:22 +00:00
stronk7 6defede491 Fixing one little-little bug about user->ajax being nullable. MDL-8421 2007-02-04 20:05:09 +00:00
gbateson 47e1151f92 allow empty JQuiz questions (which have at least one answer) 2007-02-03 01:12:05 +00:00
gbateson e8dc4c6cb1 omit empty answers from JQuiz import 2007-02-03 00:35:54 +00:00
vyshane db8598ca48 Made default for forceloginforprofiles to be 1. Related to MDL-8385. 2007-02-02 08:13:07 +00:00
vyshane b0252a5c00 Fix for MDL-8385. 2007-02-02 07:55:30 +00:00
moodler 47cc07674c Added some help link text for Moodle 1.7 MDL-8378 2007-02-02 06:22:47 +00:00
moodler 29f26fd747 Added missing help file to MOodle 1.7 MDL-8378 2007-02-02 06:16:48 +00:00
moodler 9c336062b7 file switchrole.html was added on branch MOODLE_17_STABLE on 2007-02-02 06:16:48 +0000 2007-02-02 06:15:39 +00:00
mark-nielsen 594f4f574a The main layout table was left aligning in safari. Now matches that in action/continue.html 2007-02-02 03:57:13 +00:00
moodler 3802128b59 Automatic installer.php lang files by installer_builder (20070202) 2007-02-02 03:48:09 +00:00
mark-nielsen 657ed64b03 BugFix for MDL-8390: Changing nullability of field useranswer on table lesson_attempts to null. 2007-02-02 03:42:26 +00:00
mark-nielsen b39a349ec4 BugFix for MDL-8375:
* Student answer and teacher response are now cleaned using PARAM_RAW and are always passed through s() before printing
2007-02-02 02:16:59 +00:00
stronk7 8c30f7fc26 Delete some non cros-db boolean uses from queries, delegating them to PHP. MDL-8164 2007-02-01 23:53:47 +00:00
stronk7 81de99d733 Adding missing tags in code. Credit goes to Greg Lyon. MDL-8383. 2007-02-01 22:35:06 +00:00
moodler 7235680eed $switchroleactive is now passed recursively so switchroles actually works now :-/ 2007-02-01 08:11:32 +00:00
moodler ce5a0d7b65 Automatic installer.php lang files by installer_builder (20070201) 2007-02-01 03:31:34 +00:00
skodak 89719f7030 MDL-8366 not possible to use old en with iso-8859-1 encoding in 1.7 2007-01-31 23:17:51 +00:00
skodak 1d03d41680 MDL-8376 Course list option missing in frontpageloggedin when there are more than 200 courses; backported from HEAD 2007-01-31 22:38:45 +00:00
stronk7 de161d3c49 Restoring one deleted by error }. Grrr. 2007-01-31 18:44:57 +00:00
stronk7 509b0c983d Changing nullability of field response on table lesson_answers to null.
Versions in 17_STABLE are the same, so no problems. MDL-8351
2007-01-31 18:36:53 +00:00
thepurpleblob 877d109b01 MDL-8342 PHP5 migration thing causing string offset fatal error when data not present in XML file. Added some checks. 2007-01-30 15:12:49 +00:00
thepurpleblob dc5ea21614 Changed remark about additional formats to direct to Modules & Plugins database. 2007-01-30 14:03:33 +00:00
thepurpleblob 4a08d3bac9 Output was missing utf8 meta tag. 2007-01-30 13:54:43 +00:00
stronk7 f555bfac15 nothing interesting, just a comment. 2007-01-30 00:21:22 +00:00
stronk7 5fb8a656c1 Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 23:55:42 +00:00
stronk7 bfc8a717df Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 23:44:58 +00:00
stronk7 b65b99cab8 Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 22:14:36 +00:00
koenr 296f9b6a82 typo MDL-8350 2007-01-29 20:41:08 +00:00
stronk7 7409a0e99a Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 19:14:49 +00:00
tjhunt f08318d7fb Fix type on close tag. 2007-01-29 16:22:29 +00:00
stronk7 890cdce488 Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 12:07:14 +00:00
stronk7 5a739340da Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 11:20:44 +00:00
stronk7 751ad21e9c Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 11:05:15 +00:00
stronk7 a9a72d76f9 Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 10:53:14 +00:00
stronk7 31e0c05036 Applying new rs_xxx() functions everywhere. MDL-8134 2007-01-29 10:44:45 +00:00
vyshane 2a0d5695b3 Made non-AJAX deletion of resources only apply to IE browsers. 2007-01-29 07:54:48 +00:00
vyshane cf9281719f Fix for MDL-7847. 2007-01-29 07:36:07 +00:00
mark-nielsen 8cde300d8c Fix for MDL-8137: turned off autocomplete for all forms for which students enter data. 2007-01-29 06:32:17 +00:00
vyshane 50d1bd1c2a Fix for MDL-7415. 2007-01-29 06:00:23 +00:00
vyshane 58cac329b7 Temporarily disabling ajax for module/resource deletions. Related to MDL-8287. 2007-01-29 02:21:12 +00:00
stronk7 011dd960f4 This seems to be the damned line! db must be CFG 2007-01-29 01:11:43 +00:00
stronk7 0389288693 First real test of the new rs_fetchXXX() functions. Applying it
to get_my_courses(). MDL-8134
2007-01-29 00:15:14 +00:00
stronk7 e5b094bed6 Added Oracle DIRTY HACK to both rs_fetchXX functions.
Detecting of EOF in rs_fetch_record()
Big improvement of rs_fetch_next_record() by using FethRow()
with speeds near native fields[]. MDL-8134
2007-01-28 23:08:14 +00:00
skodak 4a0d23143a MDL-6128 special chars and messaging system; backported from HEAD 2007-01-28 21:46:14 +00:00
stronk7 bdd5bba791 Initial commit of the new rs_XXX() functions to fetch, advance and close
ADOdb recordsets in a standard way. Not finished yet but I need them in CVS.
MDL-8134
2007-01-28 20:10:33 +00:00
stronk7 1159927f08 Backported fix for annoying typo from HEAD. 2007-01-28 18:30:42 +00:00
gbateson b9a69f5b1f correct the display of the "Update this Hot Potatoes Quiz" button in Danish (da_utf8) and German (de_utf8) - see mdl-8322 2007-01-28 00:02:55 +00:00
moodler 947e63afb8 Automatic installer.php lang files by installer_builder (20070127) 2007-01-27 03:20:44 +00:00
skodak d221dc7482 MDL-8308 placement of load_all_capabilities() in login page; backported from HEAD 2007-01-26 21:15:25 +00:00
stronk7 14da408e08 Adding two helper functions and modify upgrade to
work properly under MSSQL and Oracle. MDL-8303
2007-01-26 20:44:57 +00:00
stronk7 4ca9e54f7f Oracle doesn't like ; at the end of execute_sql() 2007-01-26 19:25:53 +00:00
vyshane 154877b2ff Some small cleanups. 2007-01-25 04:28:07 +00:00
vyshane 303c064224 Commented out text node addition while moving resources. No idea why it was needed? This was adding extra vertical spaces and screwing up the display after a move in IE 7. 2007-01-24 05:58:14 +00:00
gbateson e521d0f799 added "print_standard_coursemodule_settings" (group and visible settings) to add/update HotPot page, "mod.html" 2007-01-24 02:52:14 +00:00
gbateson 4d4b237efb remove DB dependant code and references to NULL in field values mdl-8169 2007-01-24 02:44:23 +00:00
vyshane 727929f1fa Fixes for MDL-6966. 2007-01-23 06:10:48 +00:00
moodler 26e8b7a96e Fixed site identifier 2007-01-23 04:59:22 +00:00
moodler 4d59b9d9fa Automatic installer.php lang files by installer_builder (20070123) 2007-01-23 03:26:10 +00:00
stronk7 7c018f428c Changing some stripslashes() to stripslashes_safe() because it
was causing some real backslashes to be lost in some qtypes. MDL-8217
2007-01-22 23:13:47 +00:00
moodler 3c3ff8ace3 Automatic installer.php lang files by installer_builder (20070119) 2007-01-19 03:22:34 +00:00
bobopinna 70c6b92b97 Fixed an error in $score initialization 2007-01-18 20:33:02 +00:00
skodak b27229da41 do not send passowrd hashes to other sites SC#353; merged from MOODLE_16_STABLE 2007-01-17 20:10:25 +00:00
skodak 0801278026 force login in course calendar SC#349; backported from HEAD 2007-01-17 19:54:35 +00:00
moodler d9bda8a421 Bump to post 1.7.1 2007-01-17 04:31:01 +00:00
686 changed files with 97995 additions and 98766 deletions
-12256
View File
File diff suppressed because it is too large Load Diff
-185
View File
@@ -1,185 +0,0 @@
<?php // $Id$
// config.php - allows admin to edit all configuration variables
require_once('../config.php');
$focus = '';
if ($site = get_site()) { // If false then this is a new installation
require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID));
}
/// This is to overcome the "insecure forms paradox"
if (isset($secureforms) and $secureforms == 0) {
$match = 'nomatch';
} else {
$match = '';
}
/// If data submitted, then process and store.
if ($config = data_submitted($match)) {
if (!empty($USER->id)) { // Additional identity check
if (!confirm_sesskey()) {
error(get_string('confirmsesskeybad', 'error'));
}
}
validate_form($config, $err);
if (count($err) == 0) {
foreach ($config as $name => $value) {
if ($name == "sessioncookie") {
$value = eregi_replace("[^a-zA-Z0-9_]", "", $value);
}
if ($name == "defaultallowedmodules") {
$value = implode(',',$value);
}
if ($name == 'hiddenuserfields') {
if (in_array('none', $value)) {
$value = '';
} else {
$value = implode(',',$value);
}
}
if ($name == "locale") {
$value = trim($value);
}
$conf = new object();
$conf->name = $name;
$conf->value = $value;
if ($current = get_record('config', 'name', $name)) {
$conf->id = $current->id;
if (! update_record('config', $conf)) {
error("Error: Could not update $name to $value");
}
} else {
if (! insert_record('config', $conf)) {
error("Error: could not add new variable $name !");
}
}
}
redirect('index.php');
exit;
} else {
foreach ($err as $key => $value) {
$focus = "form.$key";
}
}
}
/// Otherwise fill and print the form.
if (empty($config)) {
$config = $CFG;
}
$sesskey = !empty($USER->id) ? $USER->sesskey : '';
$stradmin = get_string('administration');
$strconfiguration = get_string('configuration');
$strconfigvariables = get_string('configvariables', 'admin');
if ($site) {
print_header("$site->shortname: $strconfigvariables", $site->fullname,
"<a href=\"index.php\">$stradmin</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> $strconfigvariables", $focus);
print_heading($strconfigvariables);
} else {
print_header();
print_heading($strconfigvariables);
print_simple_box(get_string('configintro', 'admin'), 'center', "50%");
echo '<br />';
}
/// Get all the configuration fields and helptext
require('configvars.php');
/// Cycle through the sections to get the sectionnames
$linktext = '';
foreach($configvars as $sectionname=>$section) {
if ($linktext !== '') {
$linktext .= ' | ';
}
$linktext .= '<a href="#configsection'.$sectionname.'">'.get_string('configsection'.$sectionname, 'admin').'</a>';
}
echo "<center>$linktext</center>\n";
echo '<form method="post" action="config.php" name="form">';
echo '<center><input type="submit" value="'.get_string('savechanges').'" /></center>';
/// Cycle through each section of the configuration
foreach ($configvars as $sectionname=>$section) {
print_heading('<a name="configsection'.$sectionname.'"></a>'.get_string('configsection'.$sectionname, 'admin'));
$table = NULL;
$table->data = array();
foreach ($section as $configvariable=>$configobject) {
$table->data[] = array ( $configvariable.': ',
$configobject->field
);
if ($configobject->display_warning()) {
$table->data[] = array ( '&nbsp;',
'<span class="configwarning">'.$configobject->warning.'</span>'
);
}
$table->data[] = array ( '&nbsp;',
'<span class="confighelp">'.$configobject->help.'</span>'
);
$table->align = array ('right', 'left');
}
print_table($table);
}
echo '<center>';
echo '<input type="hidden" name="sesskey" value="'.$sesskey.'" />';
echo '<input type="submit" value="'.get_string('savechanges').'" />';
echo '</center>';
echo '</form>';
/// Lock some options
$httpsurl = str_replace('http://', 'https://', $CFG->wwwroot);
if ($httpsurl != $CFG->wwwroot) {
if (ini_get('allow_url_fopen')) {
if ((($fh = @fopen($httpsurl, 'r')) == false) and ($config->loginhttps == 0)) {
echo '<script type="text/javascript">'."\n";
echo '<!--'."\n";
echo "eval('document.form.loginhttps.disabled=true');\n";
echo '-->'."\n";
echo '</script>'."\n";
}
}
}
if ($site) {
print_footer();
}
exit;
/// Functions /////////////////////////////////////////////////////////////////
function validate_form(&$form, &$err) {
// Currently no checks are needed ...
return true;
}
?>
-660
View File
@@ -1,660 +0,0 @@
<?php // $Id$
// Shane Elliott
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
/// Add new sitewide configuration variables to this file.
/// $configvars is parsed by config.php
/// It is an array of arrays of objects
/// $configvars[sectionname][configvariablename] = configvar object
$configvars = array();
/// no, yes strings and menu options are used in a number of places
/// so we define them here to save time on repeatedly calling
/// get_string()
$stryes = get_string('yes');
$strno = get_string('no');
$noyesoptions[0] = $strno;
$noyesoptions[1] = $stryes;
/// A class to hold the configurable information
/// $field - the html code for the form field
/// $help - help text for the field
/// $warning - optional warning text to be displayed
/// method display_warning() - a generic function that can be used in an extended class
/// e.g. enablerssfeeds
class configvar {
var $field;
var $help;
var $warning;
function configvar($help, $field, $warning='') {
$this->help = $help;
$this->field = $field;
$this->warning = $warning;
}
function display_warning() {
return false;
}
}
////////////////////////////////////////////////////////////////////
/// Miscellaneous config variables
////////////////////////////////////////////////////////////////////
$misc = array();
/// maxeditingtime
unset($options);
$options[3600] = get_string('numminutes', '', 60);
$options[2700] = get_string('numminutes', '', 45);
$options[1800] = get_string('numminutes', '', 30);
$options[900] = get_string('numminutes', '', 15);
$options[300] = get_string('numminutes', '', 5);
$options[60] = get_string('numminutes', '', 1);
$misc['maxeditingtime'] = new configvar (get_string('configmaxeditingtime', 'admin'),
choose_from_menu ($options, 'maxeditingtime', $config->maxeditingtime, '', '', '', true) );
/// debug
unset($options);
$options[5] = $strno;
$options[15] = $stryes;
$misc['debug'] = new configvar (get_string('configdebug', 'admin'),
choose_from_menu ($options, 'debug', $config->debug, '', '', '', true) );
$misc['perfdebug'] = new configvar (get_string('configperfdebug', 'admin'),
choose_from_menu ($options, 'perfdebug', $config->perfdebug, '', '', '', true) );
/// enablerssfeeds
class configvarrss extends configvar {
function display_warning() {
return (!function_exists('utf8_encode'));
}
}
$misc['enablerssfeeds'] = new configvarrss (get_string('configenablerssfeeds', 'admin'),
choose_from_menu ($noyesoptions, 'enablerssfeeds', $config->enablerssfeeds, '', '', '', true),
'<font color="red"> You need to add XML support to your PHP installation.</font>' );
$misc['mymoodleredirect'] = new configvar (get_string('configmymoodleredirect','admin'),
choose_from_menu($noyesoptions,'mymoodleredirect',$config->mymoodleredirect,'','','',true));
unset($options);
$options[5] = get_string('worldblogs','blog');
$options[4] = get_string('siteblogs','blog');
$options[3] = get_string('courseblogs','blog');
$options[2] = get_string('groupblogs','blog');
$options[1] = get_string('personalblogs','blog');
$options[0] = get_string('disableblogs','blog');
$misc['bloglevel'] = new configvar (get_string('configbloglevel', 'admin'),
choose_from_menu ($options, 'bloglevel', $config->bloglevel,'','','',true));
////////////////////////////////////////////////////////////////////
/// OPERATING SYSTEM config variables
////////////////////////////////////////////////////////////////////
$operatingsystem = array();
/// gdversion
unset($options);
$options[0] = get_string('gdnot');
$options[1] = get_string('gd1');
$options[2] = get_string('gd2');
$installed = check_gd_version();
$operatingsystem['gdversion'] = new configvar (get_string('configgdversion', 'admin'),
choose_from_menu ($options, 'gdversion', $installed, '', '', '', true) );
/// dbsessions
$operatingsystem['dbsessions'] = new configvar (get_string('configdbsessions', 'admin'),
choose_from_menu ($noyesoptions, 'dbsessions', $config->dbsessions, '', '', '', true) );
/// sessiontimeout
unset($options);
$options[14400] = get_string('numhours', '', 4);
$options[10800] = get_string('numhours', '', 3);
$options[7200] = get_string('numhours', '', 2);
$options[5400] = get_string('numhours', '', '1.5');
$options[3600] = get_string('numminutes', '', 60);
$options[2700] = get_string('numminutes', '', 45);
$options[1800] = get_string('numminutes', '', 30);
$options[900] = get_string('numminutes', '', 15);
$options[300] = get_string('numminutes', '', 5);
$operatingsystem['sessiontimeout'] = new configvar (get_string('configsessiontimeout', 'admin'),
choose_from_menu ($options, 'sessiontimeout', $config->sessiontimeout, '', '', '', true) );
/// sessioncookie
$operatingsystem['sessioncookie'] = new configvar (get_string('configsessioncookie', 'admin'),
'<input name="sessioncookie" type="text" size="10" value="'.s($config->sessioncookie).'" alt="sessioncookie" />' );
$operatingsystem['sessioncookiepath'] = new configvar (get_string('configsessioncookiepath', 'admin'),
'<input name="sessioncookiepath" type="text" size="10" value="'.s($config->sessioncookiepath).'" alt="sessioncookiepath" />' );
/// zip
$operatingsystem['zip'] = new configvar (get_string('configzip', 'admin'),
'<input name="zip" type="text" size="30" value="'.s($config->zip).'" alt="zip" />' );
/// unzip
$operatingsystem['unzip'] = new configvar (get_string('configunzip', 'admin'),
'<input name="unzip" type="text" size="30" value="'.s($config->unzip).'" alt="unzip" />' );
$operatingsystem['pathtodu'] = new configvar(get_string('configpathtodu', 'admin'),
'<input name="pathtodu" type="text" size="30" value="'.s($config->pathtodu).'" alt="pathtodu" />');
/// slasharguments
unset($options);
$options[0] = "file.php?file=/1/pic.jpg";
$options[1] = "file.php/1/pic.jpg";
$operatingsystem['slasharguments'] = new configvar (get_string('configslasharguments', 'admin'),
choose_from_menu ($options, 'slasharguments', $config->slasharguments, '', '', '', true) );
/// proxyhost
$operatingsystem['proxyhost'] = new configvar (get_string('configproxyhost', 'admin'),
'<input name="proxyhost" type="text" size="30" value="'.s($config->proxyhost).'" alt="proxyhost" />' );
/// proxyport
$operatingsystem['proxyport'] = new configvar ('',
'<input name="proxyport" type="text" size="5" value="'.s($config->proxyport).'" alt="proxyport" />' );
////////////////////////////////////////////////////////////////////
/// PERMISSIONS config variables
////////////////////////////////////////////////////////////////////
$permissions = array();
/// teacherassignteachers
$permissions['teacherassignteachers'] = new configvar (get_string('configteacherassignteachers', 'admin'),
choose_from_menu ($noyesoptions, 'teacherassignteachers', $config->teacherassignteachers, '', '', '', true) );
/// allowunenroll
$permissions['allowunenroll'] = new configvar (get_string('configallowunenroll', 'admin'),
choose_from_menu ($noyesoptions, 'allowunenroll', $config->allowunenroll, '', '', '', true) );
/// allusersaresitestudents
$permissions['allusersaresitestudents'] = new configvar (get_string('configallusersaresitestudents', 'admin'),
choose_from_menu ($noyesoptions, 'allusersaresitestudents', $config->allusersaresitestudents, '', '', '', true) );
/// showsiteparticipantslist
unset($options);
$options[0] = get_string('siteteachers');
$options[1] = get_string('allteachers');
$options[2] = get_string('studentsandteachers');
$permissions['showsiteparticipantslist'] = new configvar (get_string('configshowsiteparticipantslist', 'admin'),
choose_from_menu ($options, 'showsiteparticipantslist', $config->showsiteparticipantslist, '', '', '', true) );
/// forcelogin
$permissions['forcelogin'] = new configvar (get_string('configforcelogin', 'admin'),
choose_from_menu ($noyesoptions, 'forcelogin', $config->forcelogin, '', '', '', true) );
/// forceloginforprofiles
$permissions['forceloginforprofiles'] = new configvar (get_string('configforceloginforprofiles', 'admin'),
choose_from_menu ($noyesoptions, 'forceloginforprofiles', $config->forceloginforprofiles, '', '', '', true) );
/// opentogoogle
$permissions['opentogoogle'] = new configvar (get_string('configopentogoogle', 'admin'),
choose_from_menu ($noyesoptions, 'opentogoogle', $config->opentogoogle, '', '', '', true) );
/// maxbytes
$options = get_max_upload_sizes();
$permissions['maxbytes'] = new configvar (get_string('configmaxbytes', 'admin'),
choose_from_menu ($options, 'maxbytes', $config->maxbytes, '', '', 0, true) );
/// messaging
$permissions['messaging'] = new configvar (get_string('configmessaging', 'admin'),
choose_from_menu ($noyesoptions, 'messaging', $config->messaging, '', '', '', true) );
/// allowobjectembed
$permissions['allowobjectembed'] = new configvar (get_string('configallowobjectembed', 'admin'),
choose_from_menu ($noyesoptions, 'allowobjectembed', $config->allowobjectembed, '', '', '', true) );
/// enabletrusttext
$permissions['enabletrusttext'] = new configvar (get_string('configenabletrusttext', 'admin'),
choose_from_menu ($noyesoptions, 'enabletrusttext', $config->enabletrusttext, '', '', '', true) );
unset($options);
$options['none'] = 'No courses';
$options['all'] = 'All courses';
$options['requested'] = 'Requested courses';
$permissions['restrictmodulesfor'] = new configvar (get_string('configrestrictmodulesfor','admin'),
' <script language="JavaScript">
function togglemodules(index) {
if (index == 0) {
document.getElementById(\'allowedmodules\').disabled=true;
}
else {
document.getElementById(\'allowedmodules\').disabled=false;
}
}
</script>'.
choose_from_menu($options,'restrictmodulesfor',$config->restrictmodulesfor,'','togglemodules(this.selectedIndex);','',true) );
$permissions['restrictbydefault'] = new configvar (get_string('configrestrictbydefault','admin'),
choose_from_menu($noyesoptions, 'restrictbydefault',$config->restrictbydefault,'','','',true) );
$allowstr = '<select name="defaultallowedmodules[]" id="allowedmodules" multiple="multiple" size="10"'.((empty($config->restrictmodulesfor)) ? "disabled=\"disabled\"" : "").'>';
$allowedmodules = array();
if (!empty($config->defaultallowedmodules)) {
$allowedmodules = explode(',',$config->defaultallowedmodules);
}
// On a fresh install of Moodle, this could be empty; prevent a warning on the following loop.
if (!$mods = get_records("modules")) {
$mods = array();
}
$s = "selected=\"selected\"";
$allowstr .= '<option value="0" '.((empty($allowedmodules)) ? $s : '').'>'.get_string('allownone').'</option>'."\n";
foreach ($mods as $mod) {
$selected = "";
if (in_array($mod->id,$allowedmodules))
$selected = $s;
$allowstr .= '<option '.$selected.' value="'.$mod->id.'">'.$mod->name.'</option>'."\n";
}
$allowstr .= '</select>';
$permissions['defaultallowedmodules'] = new configvar (get_string('configdefaultallowedmodules','admin'),$allowstr);
/// course requests
$reqcourse['enablecourserequests'] = new configvar (get_string('configenablecourserequests', 'admin'),
choose_from_menu ($noyesoptions,'enablecourserequests',$config->enablecourserequests,'','','',true) );
/// default category for course requests
require_once($CFG->dirroot.'/course/lib.php');
$reqcourse['defaultrequestedcategory'] = new configvar (get_string('configdefaultrequestedcategory', 'admin'),
choose_from_menu (make_categories_options(), 'defaultrequestedcategory',$config->defaultrequestedcategory,'','','',true) );
$reqcourse['requestedteachername'] = new configvar (get_string('configrequestedteachername','admin'),
'<input type="text" name="requestedteachername" size="20" maxlength="100" value="'.s($config->requestedteachername).'" />');
$reqcourse['requestedteachersname'] = new configvar (get_string('configrequestedteachersname','admin'),
'<input type="text" name="requestedteachersname" size="20" maxlength="100" value="'.s($config->requestedteachersname).'" />');
$reqcourse['requestedstudentname'] = new configvar (get_string('configrequestedstudentname','admin'),
'<input type="text" name="requestedstudentname" size="20" maxlength="100" value="'.s($config->requestedstudentname).'" />');
$reqcourse['requestedstudentsname'] = new configvar (get_string('configrequestedstudentsname','admin'),
'<input type="text" name="requestedstudentsname" size="20" maxlength="100" value="'.s($config->requestedstudentsname).'" />');
////////////////////////////////////////////////////////////////////
/// INTERFACE config variables
////////////////////////////////////////////////////////////////////
$interface = array();
/// language settings
$interface['lang'] = new configvar ( get_string('configlang', 'admin'),
choose_from_menu(get_list_of_languages(), 'lang', $config->lang, '', '', '', true) );
/// language menu
$interface['langmenu'] = new configvar ( get_string('configlangmenu', 'admin'),
choose_from_menu($noyesoptions, 'langmenu', $config->langmenu, '', '', '', true) );
/// language list
$interface['langlist'] = new configvar ( get_string('configlanglist', 'admin'),
'<input name="langlist" type="text" size="60" value="'.s($config->langlist).'" alt="langlist" />' );
/// language menu
$interface['langcache'] = new configvar ( get_string('configlangcache', 'admin'),
choose_from_menu($noyesoptions, 'langcache', $config->langcache, '', '', '', true) );
/// locale
$interface['locale'] = new configvar ( get_string('configlocale', 'admin'),
'<input name="locale" type="text" size="15" value="'.s($config->locale).'" alt="locale" />' );
/// docroot
$interface['docroot'] = new configvar ( get_string('configdocroot', 'admin'),
'<input name="docroot" type="text" size="60" value="'.s($config->docroot).'" alt="docroot" />' );
/// doctonewwindow
$interface['doctonewwindow'] = new configvar ( get_string('configdoctonewwindow', 'admin'),
choose_from_menu($noyesoptions, 'doctonewwindow', $config->doctonewwindow, '', '', '', true) );
/// timezone
$interface['timezone'] = new configvar ( get_string('configtimezone', 'admin'),
choose_from_menu (get_list_of_timezones(), 'timezone', $config->timezone, get_string('serverlocaltime'), '', '99', true ) );
/// country
$interface['country'] = new configvar ( get_string('configcountry', 'admin'),
choose_from_menu (get_list_of_countries(), 'country', $config->country, get_string('selectacountry'), '', 0, true) );
/// framename
if (empty($config->framename)) {
$config->framename = "_top";
}
$interface['framename'] = new configvar (get_string('configframename', 'admin'),
'<input name="framename" type="text" size="15" value="'.s($config->framename).'" alt="framename" />' );
/// language list
$interface['themelist'] = new configvar ( get_string('configthemelist', 'admin'),
'<input name="themelist" type="text" size="60" value="'.s($config->themelist).'" alt="themelist" />' );
/// user themes
$interface['allowuserthemes'] = new configvar (get_string('configallowuserthemes', 'admin'),
choose_from_menu ($noyesoptions, 'allowuserthemes', $config->allowuserthemes, '', '', '', true) );
/// course themes
$interface['allowcoursethemes'] = new configvar (get_string('configallowcoursethemes', 'admin'),
choose_from_menu ($noyesoptions, 'allowcoursethemes', $config->allowcoursethemes, '', '', '', true) );
/// allowuserblockhiding
$interface['allowuserblockhiding'] = new configvar (get_string('configallowuserblockhiding', 'admin'),
choose_from_menu ($noyesoptions, 'allowuserblockhiding', $config->allowuserblockhiding, '', '', '', true) );
/// showblocksonmodpages
$interface['showblocksonmodpages'] = new configvar (get_string('configshowblocksonmodpages', 'admin'),
choose_from_menu ($noyesoptions, 'showblocksonmodpages', $config->showblocksonmodpages, '', '', '', true) );
/// tabselectedtofront
$interface['tabselectedtofront'] = new configvar (get_string('tabselectedtofront', 'admin'),
choose_from_menu ($noyesoptions, 'tabselectedtofront', $config->tabselectedtofront, '', '', '', true) );
////////////////////////////////////////////////////////////////////
/// USER config variables
////////////////////////////////////////////////////////////////////
$user = array();
/// sitepolicy
$user['sitepolicy'] = new configvar (get_string('configsitepolicy', 'admin'),
'<input type="text" name="sitepolicy" size="60" value="'.$config->sitepolicy.'" alt="sitepolicy" />' );
/// fullnamedisplay
unset($options);
$options['language'] = get_string('language');
$options['firstname lastname'] = get_string('firstname') . ' + ' . get_string('lastname');
$options['lastname firstname'] = get_string('lastname') . ' + ' . get_string('firstname');
$options['firstname'] = get_string('firstname');
$user['fullnamedisplay'] = new configvar (get_string('configfullnamedisplay', 'admin'),
choose_from_menu ($options, 'fullnamedisplay', $config->fullnamedisplay, '', '', '', true) );
/// extendedusernamechars
$user['extendedusernamechars'] = new configvar (get_string('configextendedusernamechars', 'admin'),
choose_from_menu ($noyesoptions, 'extendedusernamechars', $config->extendedusernamechars, '', '', '', true) );
/// autologinguests
$user['autologinguests'] = new configvar (get_string('configautologinguests', 'admin'),
choose_from_menu ($noyesoptions, 'autologinguests', $config->autologinguests, '', '', '', true) );
/// hiddenuserfields
$fields = array('none', 'description', 'city', 'country', 'webpage', 'icqnumber', 'skypeid', 'yahooid', 'aimid', 'msnid', 'lastaccess');
if (empty($config->hiddenuserfields)) {
$config->hiddenuserfields = 'none';
}
$configfields = array_flip(explode(',', $config->hiddenuserfields));
$fieldoptions = '';
foreach ($fields as $value) {
$fieldoptions .= '<option value="'.$value.'"';
if (isset($configfields[$value])) {
$fieldoptions .= ' selected="selected"';
}
$fieldoptions .= '>'.get_string($value).'</option>';
}
$user['hiddenuserfields'] = new configvar (get_string('confighiddenuserfields', 'admin'),
'<select id="menuhiddenuserfields" name="hiddenuserfields[]" size="10" multiple="multiple">'.$fieldoptions.'</select>' );
////////////////////////////////////////////////////////////////////
/// SECURITY config variables
////////////////////////////////////////////////////////////////////
$security = array();
/// displayloginfailures
unset($options);
$options[''] = get_string('nobody');
$options['admin'] = get_string('administrators');
$options['teacher'] = get_string('administratorsandteachers');
$options['everybody'] = get_string('everybody');
$security['displayloginfailures'] = new configvar (get_string('configdisplayloginfailures', 'admin'),
choose_from_menu($options, 'displayloginfailures', $config->displayloginfailures, '', '', '', true) );
/// notifyloginfailures
unset($options);
$options[''] = get_string('nobody');
$options['mainadmin'] = get_string('administrator');
$options['alladmins'] = get_string('administratorsall');
$security['notifyloginfailures'] = new configvar (get_string('confignotifyloginfailures', 'admin'),
choose_from_menu($options, 'notifyloginfailures', $config->notifyloginfailures, '', '', '', true) );
/// notifyloginthreshold
unset($options);
for ($i=1; $i<=100; $i++) {
$options[$i] = "$i";
}
$security['notifyloginthreshold'] = new configvar (get_string('confignotifyloginthreshold', 'admin'),
choose_from_menu($options, 'notifyloginthreshold', $config->notifyloginthreshold, '', '', '', true) );
/// secureforms
$security['secureforms'] = new configvar (get_string('configsecureforms', 'admin'),
choose_from_menu ($noyesoptions, 'secureforms', $config->secureforms, '', '', '', true) );
/// loginhttps
$security['loginhttps'] = new configvar (get_string('configloginhttps', 'admin'),
choose_from_menu ($noyesoptions, 'loginhttps', $config->loginhttps, '', '', '', true) );
/// runclamonupload
$security['runclamonupload'] = new configvar (get_string('configrunclamonupload', 'admin'),
choose_from_menu($noyesoptions, 'runclamonupload', $config->runclamonupload, '', '', '', true) );
/// pathtoclam
$security['pathtoclam'] = new configvar (get_string('configpathtoclam', 'admin'),
'<input type="text" name="pathtoclam" size="30" value="'.$config->pathtoclam.'" alt="pathtoclam" />' );
/// quarantinedir
$security['quarantinedir'] = new configvar (get_string('configquarantinedir', 'admin'),
'<input type="text" name="quarantinedir" size="30" value="'.$config->quarantinedir.'" alt="quarantinedir" />' );
/// clamfailureonupload
unset($options);
$options['donothing'] = get_string('configclamdonothing', 'admin');
$options['actlikevirus'] = get_string('configclamactlikevirus', 'admin');
$security['clamfailureonupload'] = new configvar (get_string('configclamfailureonupload', 'admin'),
choose_from_menu($options, 'clamfailureonupload', $config->clamfailureonupload, '', '', '', true) );
////////////////////////////////////////////////////////////////////
/// MAINTENANCE config variables
////////////////////////////////////////////////////////////////////
$maintenance = array();
/// longtimenosee
unset($options);
$options[0] = get_string('never');
$options[1000] = get_string('numdays', '', 1000);
$options[365] = get_string('numdays', '', 365);
$options[180] = get_string('numdays', '', 180);
$options[150] = get_string('numdays', '', 150);
$options[120] = get_string('numdays', '', 120);
$options[90] = get_string('numdays', '', 90);
$options[60] = get_string('numdays', '', 60);
$options[30] = get_string('numdays', '', 30);
$options[21] = get_string('numdays', '', 21);
$options[14] = get_string('numdays', '', 14);
$options[7] = get_string('numdays', '', 7);
$maintenance['longtimenosee'] = new configvar (get_string('configlongtimenosee', 'admin'),
choose_from_menu ($options, 'longtimenosee', $config->longtimenosee, '', '', '', true) );
/// deleteunconfirmed
unset($options);
$options[0] = get_string('never');
$options[168] = get_string('numdays', '', 7);
$options[144] = get_string('numdays', '', 6);
$options[120] = get_string('numdays', '', 5);
$options[96] = get_string('numdays', '', 4);
$options[72] = get_string('numdays', '', 3);
$options[48] = get_string('numdays', '', 2);
$options[24] = get_string('numdays', '', 1);
$options[12] = get_string('numhours', '', 12);
$options[6] = get_string('numhours', '', 6);
$options[1] = get_string('numhours', '', 1);
$maintenance['deleteunconfirmed'] = new configvar (get_string('configdeleteunconfirmed', 'admin'),
choose_from_menu ($options, 'deleteunconfirmed', $config->deleteunconfirmed, '', '', '', true) );
/// loglifetime
unset($options);
$options[0] = get_string('neverdeletelogs');
$options[1000] = get_string('numdays', '', 1000);
$options[365] = get_string('numdays', '', 365);
$options[180] = get_string('numdays', '', 180);
$options[150] = get_string('numdays', '', 150);
$options[120] = get_string('numdays', '', 120);
$options[90] = get_string('numdays', '', 90);
$options[60] = get_string('numdays', '', 60);
$options[30] = get_string('numdays', '', 30);
$maintenance['loglifetime'] = new configvar (get_string('configloglifetime', 'admin'),
choose_from_menu ($options, 'loglifetime', $config->loglifetime, '', '', '', true) );
////////////////////////////////////////////////////////////////////
/// MAIL config variables
////////////////////////////////////////////////////////////////////
$mail = array();
/// smtphosts
$mail['smtphosts'] = new configvar (get_string('configsmtphosts', 'admin'),
'<input name="smtphosts" type="text" size="30" value="'.s($config->smtphosts).'" alt="smtphosts" />' );
/// smtpuser
$mail['smtpuser'] = new configvar (get_string('configsmtpuser', 'admin'),
'<input name="smtpuser" type="text" size="10" value="'.s($config->smtpuser).'" alt="smtpuser" />' );
/// smtppass
$mail['smtppass'] = new configvar ('',
'<input name="smtppass" type="password" size="10" value="'.s($config->smtppass).'" alt="smtppass" />' );
/// noreplyaddress
$mail['noreplyaddress'] = new configvar (get_string('confignoreplyaddress', 'admin'),
'<input name="noreplyaddress" type="text" size="30" value="'.s($config->noreplyaddress).'" alt="noreplyaddress" />' );
/// digestmailtime
$hours = array();
for ($i=0; $i<=23; $i++) {
$hours[$i] = sprintf("%02d",$i);
}
$mail['digestmailtime'] = new configvar (get_string('configdigestmailtime', 'admin'),
choose_from_menu($hours, 'digestmailtime', $config->digestmailtime, '', '', 0, true) );
/// allowemailaddresses
$mail['allowemailaddresses'] = new configvar (get_string('configallowemailaddresses', 'admin'),
'<input name="allowemailaddresses" type="text" size="60" value="'.s($config->allowemailaddresses).'" alt="allowemailaddresses" />' );
/// denyemailaddresses
$mail['denyemailaddresses'] = new configvar (get_string('configdenyemailaddresses', 'admin'),
'<input name="denyemailaddresses" type="text" size="60" value="'.s($config->denyemailaddresses).'" alt="denyemailaddresses" />' );
if (!empty($CFG->unicodedb)) { ///These options are only available if running under unicodedb
/// sitemailcharset
unset($options);
unset($charsets);
$charsets = get_list_of_charsets();
$options['0'] = get_string('none');
$options = array_merge($options, $charsets);
$mail['sitemailcharset'] = new configvar (get_string('configsitemailcharset', 'admin'),
choose_from_menu($options, 'sitemailcharset', $config->sitemailcharset, '', '', '', true));
/// allowusermailcharset
$mail['allowusermailcharset'] = new configvar (get_string('configallowusermailcharset', 'admin'),
choose_from_menu($noyesoptions, 'allowusermailcharset', $config->allowusermailcharset, '', '', '', true));
}
/// enable stats
if (empty($CFG->disablestatsprocessing)) {
$stats['enablestats'] = new configvar (get_string('configenablestats','admin'),
choose_from_menu($noyesoptions, 'enablestats', $config->enablestats, '', '', '', true) );
unset($options);
$options['none'] = get_string('none');
$options[60*60*24*7] = get_string('numweeks','moodle',1);
$options[60*60*24*14] = get_string('numweeks','moodle',2);
$options[60*60*24*21] = get_string('numweeks','moodle',3);
$options[60*60*24*28] = get_string('nummonths','moodle',1);
$options[60*60*24*56] = get_string('nummonths','moodle',2);
$options[60*60*24*84] = get_string('nummonths','moodle',3);
$options[60*60*24*112] = get_string('nummonths','moodle',4);
$options[60*60*24*140] = get_string('nummonths','moodle',5);
$options[60*60*24*168] = get_string('nummonths','moodle',6);
$options['all'] = get_string('all');
$stats['statsfirstrun'] = new configvar (get_string('configstatsfirstrun','admin'),
choose_from_menu($options,'statsfirstrun',$config->statsfirstrun,'','','',true) );
unset($options);
$options[0] = get_string('untilcomplete');
$options[60*60] = '1 '.get_string('hour');
$options[60*60*2] = '2 '.get_string('hours');
$options[60*60*3] = '3 '.get_string('hours');
$options[60*60*4] = '4 '.get_string('hours');
$options[60*60*5] = '5 '.get_string('hours');
$options[60*60*6] = '6 '.get_string('hours');
$options[60*60*7] = '7 '.get_string('hours');
$options[60*60*8] = '8 '.get_string('hours');
if (empty($config->statsruntimestarthour)) {
$config->statsruntimestarthour = 0;
}
if (empty($config->statsruntimestartminute)) {
$config->statsruntimestartminute = 0;
}
$stats['statsmaxruntime'] = new configvar (get_string('configstatsmaxruntime','admin'),
choose_from_menu($options,'statsmaxruntime',$config->statsmaxruntime,'','','',true) );
$stats['statsruntimestart'] = new configvar (get_string('configstatsruntimestart','admin'),
print_time_selector("statsruntimestarthour","statsruntimestartminute",make_timestamp(2000,1,1,$config->statsruntimestarthour,$config->statsruntimestartminute),5,true) );
$stats['statsuserthreshold'] = new configvar (get_string('configstatsuserthreshold','admin'),
'<input type="text" name="statsuserthreshold" size="4" value="'.$config->statsuserthreshold.'" />');
}
////////////////////////////////////////////////////////////////////
$configvars['interface'] = $interface;
$configvars['security'] = $security;
$configvars['operatingsystem'] = $operatingsystem;
$configvars['maintenance'] = $maintenance;
$configvars['mail'] = $mail;
$configvars['user'] = $user;
$configvars['permissions'] = $permissions;
$configvars['requestedcourse'] = $reqcourse;
$configvars['misc'] = $misc;
if (empty($CFG->disablestatsprocessing)) {
$configvars['stats'] = $stats;
}
?>
+24 -3
View File
@@ -62,6 +62,9 @@
@header('Content-Type: text/plain; charset='.current_charset());
}
/// increase memory limit (PHP 5.2 does different calculation, we need more memory now)
@raise_memory_limit('128M');
/// Start output log
$timenow = time();
@@ -84,6 +87,8 @@
mtrace("Error: could not update timestamp for $mod->fullname");
}
}
/// Reset possible changes by modules to time_limit. MDL-11597
@set_time_limit(0);
mtrace("done.");
}
}
@@ -108,19 +113,35 @@
mtrace('Error: could not update timestamp for '.$block->name);
}
}
/// Reset possible changes by blocks to time_limit. MDL-11597
@set_time_limit(0);
mtrace('done.');
}
}
}
}
mtrace("Finished blocks");
mtrace('Finished blocks');
if (!empty($CFG->langcache)) {
mtrace('Updating languages cache');
get_list_of_languages();
}
mtrace('Removing expired enrolments ...', ''); // See MDL-8785
$timenow = time();
if ($oldenrolments = get_records_select('role_assignments', "timeend > 0 AND timeend < '$timenow'")) {
mtrace(count($oldenrolments).' to delete');
foreach ($oldenrolments as $oldenrolment) {
if (role_unassign($oldenrolment->roleid, $oldenrolment->userid, 0, $oldenrolment->contextid)) {
mtrace("Deleted expired role assignment $oldenrolment->roleid for user $oldenrolment->userid from context $oldenrolment->contextid");
}
}
mtrace('Done');
} else {
mtrace('none found');
}
/// Run all core cron jobs, but not every time since they aren't too important.
/// These don't have a timer to reduce load, so we'll use a random number
@@ -235,7 +256,7 @@
//Execute backup's cron
//Perhaps a long time and memory could help in large sites
@set_time_limit(0);
@raise_memory_limit("128M");
@raise_memory_limit("192M");
if (function_exists('apache_child_terminate')) {
// if we are running from Apache, give httpd a hint that
// it can recycle the process after it's done. Apache's
@@ -290,7 +311,7 @@
if (!empty($CFG->enablestats) and empty($CFG->disablestatsprocessing)) {
// check we're not before our runtime
$timetocheck = strtotime("$CFG->statsruntimestarthour:$CFG->statsruntimestartminute today");
$timetocheck = strtotime("today $CFG->statsruntimestarthour:$CFG->statsruntimestartminute");
if (time() > $timetocheck) {
$time = 60*60*20; // set it to 20 here for first run... (overridden by $CFG)
+1 -1
View File
@@ -54,7 +54,7 @@ function delete_subdirectories($rootdir) {
$dir = opendir($rootdir);
while ($file = readdir($dir)) {
while (false !== ($file = readdir($dir))) {
if ($file != '.' and $file != '..') {
$fullfile = $rootdir .'/'. $file;
if (filetype($fullfile) == 'dir') {
+69
View File
@@ -104,4 +104,73 @@
</PHP_EXTENSION>
</PHP_EXTENSIONS>
</MOODLE>
<MOODLE version="1.9">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mysql" version="4.1.16">
<FEEDBACK>
<ON_ERROR message="mysql416required" />
</FEEDBACK>
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
</VENDOR>
<VENDOR name="postgres" version="8.0" />
<VENDOR name="mssql" version="9.0" />
<VENDOR name="odbc_mssql" version="9.0" />
<VENDOR name="mssql_n" version="9.0" />
<VENDOR name="oracle" version="9.0" />
</DATABASE>
<PHP version="4.3.0" level="required">
<RESTRICT function="restrict_php50_version" message="php50restricted" />
</PHP>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="optional">
<FEEDBACK>
<ON_CHECK message="iconvrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
</PHP_EXTENSIONS>
</MOODLE>
<MOODLE version="2.0">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mysql" version="4.1.16">
<FEEDBACK>
<ON_ERROR message="mysql416required" />
</FEEDBACK>
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
</VENDOR>
<VENDOR name="postgres" version="8.0" />
<VENDOR name="mssql" version="9.0" />
<VENDOR name="odbc_mssql" version="9.0" />
<VENDOR name="mssql_n" version="9.0" />
<VENDOR name="oracle" version="9.0" />
</DATABASE>
<PHP version="5.2.4" level="required">
</PHP>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="optional">
<FEEDBACK>
<ON_CHECK message="iconvrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
</PHP_EXTENSIONS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+2 -4
View File
@@ -59,10 +59,10 @@
// run through submitted data
// reject if does not start with filter_
foreach ($config as $name => $value) {
set_config( $name,$value );
set_config($name, stripslashes($value));
}
}
redirect( "$CFG->wwwroot/$CFG->admin/filters.php", get_string('changessaved'), 1);
redirect("$CFG->wwwroot/$CFG->admin/filters.php");
exit;
}
@@ -94,7 +94,5 @@
<?php
print_simple_box_end();
print_simple_box_end();
admin_externalpage_print_footer($adminroot);
?>
+193 -1
View File
@@ -525,11 +525,203 @@ class problem_000011 extends problem_base {
}
return 'Error counter was cleared.';
} else {
return '<p>Session errors can be caused by:<ul><li>unresolved problem in server software (aka random switching of users),</li><li>blocked or modified cookies,</li><li>deleting of active session files.</li></ul></p><p><a href="'.me().'&resetsesserrorcounter=1">Reset counter.</a></p>';
return '<p>Session errors can be caused by:</p><ul>' .
'<li>unresolved problem in server software (aka random switching of users),</li>' .
'<li>blocked or modified cookies,</li>' .
'<li>deleting of active session files.</li>' .
'</ul><p><a href="'.me().'&amp;resetsesserrorcounter=1">Reset counter</a></p>';
}
}
}
class problem_000012 extends problem_base {
function title() {
return 'Random questions data consistency';
}
function exists() {
return record_exists_select('question', "qtype = 'random' AND parent <> id");
}
function severity() {
return SEVERITY_ANNOYANCE;
}
function description() {
return '<p>For random questions, question.parent should equal question.id. ' .
'There are some questions in your database for which this is not true. ' .
'One way that this could have happened is for random questions restored from backup before ' .
'<a href="http://tracker.moodle.org/browse/MDL-5482">MDL-5482</a> was fixed.</p>';
}
function solution() {
global $CFG;
return '<p>Upgrade to Moodle 1.9.1 or later, or manually execute the SQL</p>' .
'<pre>UPDATE ' . $CFG->prefix . 'question SET parent = id WHERE qtype = \'random\' and parent &lt;> id;</pre>';
}
}
class problem_000013 extends problem_base {
function title() {
return 'Multi-answer questions data consistency';
}
function exists() {
global $CFG;
$positionexpr = sql_position(sql_concat("','", "q.id", "','"),
sql_concat("','", "qma.sequence", "','"));
return record_exists_sql("
SELECT * FROM {$CFG->prefix}question q
JOIN {$CFG->prefix}question_multianswer qma ON $positionexpr > 0
WHERE qma.question <> q.parent") ||
record_exists_sql("
SELECT * FROM {$CFG->prefix}question q
JOIN {$CFG->prefix}question parent_q ON parent_q.id = q.parent
WHERE q.category <> parent_q.category");
}
function severity() {
return SEVERITY_ANNOYANCE;
}
function description() {
return '<p>For each sub-question whose id is listed in ' .
'question_multianswer.sequence, its question.parent field should equal ' .
'question_multianswer.question; and each sub-question should be in the same ' .
'category as its parent. There are questions in your database for ' .
'which this is not the case. One way that this could have happened is ' .
'for multi-answer questions restored from backup before ' .
'<a href="http://tracker.moodle.org/browse/MDL-14750">MDL-14750</a> was fixed.</p>';
}
function solution() {
return '<p>Upgrade to Moodle 1.9.1 or later, or manually execute the ' .
'code in question_multianswer_fix_subquestion_parents_and_categories in ' .
'<a href="http://cvs.moodle.org/moodle/question/type/multianswer/db/upgrade.php?revision=1.1.10.2&amp;view=markup">/question/type/multianswer/db/upgrade.php' .
'from the 1.9 stable branch</a>.</p>';
}
}
class problem_000014 extends problem_base {
function title() {
return 'Only multianswer and random questions should be the parent of another question';
}
function exists() {
global $CFG;
return record_exists_sql("
SELECT * FROM {$CFG->prefix}question q
JOIN {$CFG->prefix}question parent_q ON parent_q.id = q.parent
WHERE parent_q.qtype NOT IN ('random', 'multianswer')");
}
function severity() {
return SEVERITY_ANNOYANCE;
}
function description() {
return '<p>You have questions that violate this in your databse. ' .
'You will need to investigate to determine how this happened.</p>';
}
function solution() {
return '<p>It is impossible to give a solution without knowing more about ' .
' how the problem was caused. You may be able to get help from the ' .
'<a href="http://moodle.org/mod/forum/view.php?f=121">Quiz forum</a>.</p>';
}
}
class problem_000017 extends problem_base {
function title() {
return 'Question categories tree structure';
}
function find_problems() {
static $answer = null;
if (is_null($answer)) {
$categories = get_records('question_categories', '', '', 'id');
// Look for missing parents.
$missingparent = array();
foreach ($categories as $category) {
if ($category->parent != 0 && !array_key_exists($category->parent, $categories)) {
$missingparent[$category->id] = $category;
}
}
// Look for loops.
$loops = array();
while (!empty($categories)) {
$current = array_pop($categories);
$thisloop = array($current->id => $current);
while (true) {
if (isset($thisloop[$current->parent])) {
// Loop detected
$loops[$current->id] = $thisloop;
break;
} else if (!isset($categories[$current->parent])) {
// Got to the top level, or a category we already know is OK.
break;
} else {
// Continue following the path.
$current = $categories[$current->parent];
$thisloop[$current->id] = $current;
unset($categories[$current->id]);
}
}
}
$answer = array($missingparent, $loops);
}
return $answer;
}
function exists() {
list($missingparent, $loops) = $this->find_problems();
return !empty($missingparent) || !empty($loops);
}
function severity() {
return SEVERITY_ANNOYANCE;
}
function description() {
list($missingparent, $loops) = $this->find_problems();
$description = '<p>The question categories should be arranged into tree ' .
' structures by the question_categories.parent field. Sometimes ' .
' this tree structure gets messed up.</p>';
if (!empty($missingparent)) {
$description .= '<p>The following categories are missing their parents:</p><ul>';
foreach ($missingparent as $cat) {
$description .= "<li>Category $cat->id: " . s($cat->name) . "</li>\n";
}
$description .= "</ul>\n";
}
if (!empty($loops)) {
$description .= '<p>The following categories form a loop of parents:</p><ul>';
foreach ($loops as $loop) {
$description .= "<li><ul>\n";
foreach ($loop as $cat) {
$description .= "<li>Category $cat->id: " . s($cat->name) . " has parent $cat->parent</li>\n";
}
$description .= "</ul></li>\n";
}
$description .= "</ul>\n";
}
return $description;
}
function solution() {
global $CFG;
list($missingparent, $loops) = $this->find_problems();
$solution = '<p>Consider executing the following SQL queries. These fix ' .
'the problem by moving some categories to the top level.</p>';
if (!empty($missingparent)) {
$solution .= "<pre>UPDATE " . $CFG->prefix . "question_categories\n" .
" SET parent = 0\n" .
" WHERE id IN (" . implode(',', array_keys($missingparent)) . ");</pre>\n";
}
if (!empty($loops)) {
$solution .= "<pre>UPDATE " . $CFG->prefix . "question_categories\n" .
" SET parent = 0\n" .
" WHERE id IN (" . implode(',', array_keys($loops)) . ");</pre>\n";
}
return $solution;
}
}
class problem_00000x extends problem_base {
function title() {
+36 -18
View File
@@ -27,6 +27,7 @@
$id = optional_param('id', '', PARAM_ALPHANUM);
$confirmupgrade = optional_param('confirmupgrade', 0, PARAM_BOOL);
$confirmrelease = optional_param('confirmrelease', 0, PARAM_BOOL);
$agreelicence = optional_param('agreelicence',0, PARAM_BOOL);
$ignoreupgradewarning = optional_param('ignoreupgradewarning', 0, PARAM_BOOL);
@@ -224,13 +225,36 @@
if (empty($confirmupgrade)) {
print_header($strdatabasechecking, $stradministration, $strdatabasechecking,
"", "", false, "&nbsp;", "&nbsp;");
notice_yesno(get_string('upgradesure', 'admin', $a->newversion), 'index.php?confirmupgrade=yes', 'index.php');
exit;
} else if (empty($confirmrelease)) {
$strcurrentrelease = get_string("currentrelease");
print_header($strcurrentrelease, $strcurrentrelease, $strcurrentrelease, "", "", false, "&nbsp;", "&nbsp;");
print_heading("Moodle $release");
print_simple_box(get_string('releasenoteslink', 'admin', 'http://docs.moodle.org/en/Release_Notes'), 'center');
require_once($CFG->libdir.'/environmentlib.php');
print_heading(get_string('environment', 'admin'));
if (!check_moodle_environment($release, $environment_results, true)) {
notice_yesno(get_string('environmenterrorupgrade', 'admin'),
'index.php?confirmupgrade=1&confirmrelease=1', 'index.php');
} else {
notify(get_string('environmentok', 'admin'), 'notifysuccess');
echo '<form action="index.php">';
echo '<input type="hidden" name="confirmupgrade" value="1" />';
echo '<input type="hidden" name="confirmrelease" value="1" />';
echo '<div class="continuebutton"><input type="submit" value="'.get_string('continue').'" /></div>';
echo '</form>';
}
print_footer('none');
exit;
} else {
$strdatabasesuccess = get_string("databasesuccess");
print_header($strdatabasechecking, $stradministration, $strdatabasechecking,
@@ -297,13 +321,9 @@
/// Updated human-readable release version if necessary
if ($release <> $CFG->release) { // Update the release version
$strcurrentrelease = get_string("currentrelease");
print_header($strcurrentrelease, $strcurrentrelease, $strcurrentrelease, "", "", false, "&nbsp;", "&nbsp;");
print_heading("Moodle $release");
if (!set_config("release", $release)) {
notify("ERROR: Could not update release version in database!!");
error("ERROR: Could not update release version in database!!");
}
notice(get_string('releasenoteslink', 'admin', 'http://docs.moodle.org/en/Release_Notes'), 'index.php', 'none');
}
/// Find and check all main modules and load them up or upgrade them if necessary
@@ -399,7 +419,7 @@
/// Define the unique site ID code if it isn't already
if (empty($CFG->siteidentifier)) { // Unique site identification code
set_config('siteidentifier', random_string(32));
set_config('siteidentifier', random_string(32).$_SERVER['HTTP_HOST']);
}
/// Check if the guest user exists. If not, create one.
@@ -468,14 +488,21 @@
print_spacer(10,10);
}
if (ini_get_bool('register_globals') && !ini_get_bool('magic_quotes_gpc')) {
print_simple_box(get_string('globalsquoteswarning', 'admin'), 'center', '60%');
if (ini_get_bool('register_globals')) {
print_simple_box(get_string('globalswarning', 'admin'), 'center', '60%');
}
if (is_dataroot_insecure()) {
print_simple_box(get_string('datarootsecuritywarning', 'admin', $CFG->dataroot), 'center', '60%');
}
if (substr($CFG->wwwroot, -1) == '/') {
print_simple_box(get_string('cfgwwwrootslashwarning', 'admin'), 'center', '60%');
}
if (strpos($ME, $CFG->httpswwwroot.'/') === false) {
print_simple_box(get_string('cfgwwwrootwarning', 'admin'), 'center', '60%');
}
/// If no recently cron run
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
if (time() - $lastcron > 3600 * 24) {
@@ -528,15 +555,6 @@
echo '</div>';
}
if (optional_param('dbmigrate')) { // ??? Is this actually used?
print_simple_box_start('center','60%');
require_once($CFG->dirroot.'/'.$CFG->admin.'/utfdbmigrate.php');
db_migrate2utf8();
print_simple_box_end();
}
admin_externalpage_print_footer($adminroot);
+1 -1
View File
@@ -168,7 +168,7 @@
$settings = "";
}
$count = count_records("$module->name");
$count = count_records_select("$module->name",'course<>0');
if ($module->visible) {
$visible = "<a href=\"modules.php?hide=$module->name&amp;sesskey=$USER->sesskey\" title=\"$strhide\">".
+1 -1
View File
@@ -46,7 +46,7 @@ function online_assignment_cleanup($output=false) {
/// get a list of all courses on this site
$courses = get_courses();
$courses = get_records('course');
/// cycle through each course
foreach ($courses as $course) {
+24 -13
View File
@@ -23,18 +23,33 @@
document.assignform.remove.disabled=false;
document.assignform.addselect.selectedIndex=-1;" />
<?php
foreach ($contextusers as $contextuser) {
$fullname = fullname($contextuser, true);
echo "<option value=\"$contextuser->id\">".$fullname.", ".$contextuser->email."</option>\n";
}
$i = 0;
foreach ($contextusers as $contextuser) {
$fullname = fullname($contextuser, true);
if ($contextuser->hidden) {
$hidden=' ('.get_string('hiddenassign').') ';
} else {
$hidden="";
}
echo "<option value=\"$contextuser->id\">".$fullname.", ".$contextuser->email.$hidden."</option>\n";
$i++;
}
if ($i==0) {
echo '<option/>'; // empty select breaks xhtml strict
}
?>
</select></td>
<td valign="top">
<label title="<?php print_string('hiddenassign') ?>">
<input type="checkbox" name="hidden" value="1" />
<img src="<?php echo $CFG->pixpath; ?>/t/hide.gif" alt="<?php print_string('hiddenassign') ?>" class="hide-show-image" /> <?
helpbutton ('hiddenassign', get_string('hiddenassign'));
?>
</label>
<br />
<input name="add" type="submit" id="add" value="&larr;" />
<br />
<input name="remove" type="submit" id="remove" value="&rarr;" />
<input name="add" id="add" type="submit" value="<?php echo '&nbsp;&nbsp;&nbsp;'.$THEME->larrow.'&nbsp;'.get_string('add'); ?>" title="<?php print_string('add'); ?>" /><br />
<input name="remove" id="remove" type="submit" value="<?php echo '&nbsp;&nbsp;&nbsp;'.get_string('remove'). '&nbsp;'.$THEME->rarrow.'&nbsp;'; ?>" title="<?php print_string('remove'); ?>" />
<br />
</td>
<td valign="top">
@@ -46,13 +61,11 @@
if (!empty($searchtext)) {
echo "<optgroup label=\"$strsearchresults (" . $availableusers->_numOfRows . ")\">\n";
while (! $availableusers->EOF) {
$user = $availableusers->FetchObj();
while ($user = rs_fetch_next_record($availableusers)) {
if (!isset($contextusers[$user->id])) {
$fullname = fullname($user, true);
echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
}
$availableusers->MoveNext();
}
echo "</optgroup>\n";
@@ -61,13 +74,11 @@
echo '<optgroup label="'.get_string('toomanytoshow').'"><option></option></optgroup>'."\n"
.'<optgroup label="'.get_string('trysearching').'"><option></option></optgroup>'."\n";
} else {
while (! $availableusers->EOF) {
$user = $availableusers->FetchObj();
while ($user = rs_fetch_next_record($availableusers)) {
if (!isset($contextusers[$user->id])) {
$fullname = fullname($user, true);
echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
}
$availableusers->MoveNext();
}
}
}
+6 -2
View File
@@ -161,7 +161,7 @@
$topleveladmin = false;
// we only worry about this if the role has doanything capability at site level
if ($adminroles = get_roles_with_capability('moodle/site:doanything', CAP_ALLOW, $sitecontext)) {
if ($context->id == $sitecontext->id && $adminroles = get_roles_with_capability('moodle/site:doanything', CAP_ALLOW, $sitecontext)) {
foreach ($adminroles as $adminrole) {
if ($adminrole->id == $roleid) {
$topleveladmin = true;
@@ -198,12 +198,16 @@
print_heading_with_help(get_string('assignroles', 'role'), 'assignroles');
if ($context->contextlevel==CONTEXT_SYSTEM) {
print_simple_box(get_string('globalroleswarning', 'role'));
}
if ($roleid) { /// prints a form to swap roles
/// Get all existing participants in this context.
// Why is this not done with get_users???
if (!$contextusers = get_role_users($roleid, $context, false, 'u.id, u.firstname, u.lastname, u.email')) {
if (!$contextusers = get_role_users($roleid, $context, false, 'u.id, u.firstname, u.lastname, u.email, r.hidden')) {
$contextusers = array();
}
+1
View File
@@ -16,6 +16,7 @@
$cancel = optional_param('cancel', 0, PARAM_BOOL);
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
require_capability('moodle/role:manage', $sitecontext);
if ($cancel) {
redirect('manage.php');
+4
View File
@@ -123,6 +123,10 @@ $temp = new admin_settingpage('gradebook', get_string('gradebook', 'admin'));
$temp->add(new admin_setting_special_gradebookroles());
$ADMIN->add('appearance', $temp);
// new CFG variable for coursemanager (what roles to display)
$temp = new admin_settingpage('coursemanager', get_string('coursemanager', 'admin'));
$temp->add(new admin_setting_special_coursemanager());
$ADMIN->add('appearance', $temp);
$ADMIN->add('appearance', new admin_externalpage('stickyblocks', get_string('stickyblocks', 'admin'), "$CFG->wwwroot/$CFG->admin/stickyblocks.php"));
-1
View File
@@ -5,7 +5,6 @@ $temp = new admin_settingpage('locationsettings', get_string('locationsettings',
$options = get_list_of_timezones();
$options[99] = get_string('serverlocaltime');
$temp->add(new admin_setting_configselect('timezone', get_string('timezone','admin'), get_string('configtimezone', 'admin'), 99, $options));
$options = get_list_of_timezones();
$options[99] = get_string('timezonenotforced', 'admin');
$temp->add(new admin_setting_configselect('forcetimezone', get_string('forcetimezone', 'admin'), get_string('helpforcetimezone', 'admin'), 99, $options));
$options = get_list_of_countries();
+1 -1
View File
@@ -6,7 +6,7 @@
$temp = new admin_settingpage('sitepolicies', get_string('sitepolicies', 'admin'));
$temp->add(new admin_setting_configcheckbox('protectusernames', get_string('protectusernames', 'admin'), get_string('configprotectusernames', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('forcelogin', get_string('forcelogin', 'admin'), get_string('configforcelogin', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('forceloginforprofiles', get_string('forceloginforprofiles', 'admin'), get_string('configforceloginforprofiles', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('forceloginforprofiles', get_string('forceloginforprofiles', 'admin'), get_string('configforceloginforprofiles', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('opentogoogle', get_string('opentogoogle', 'admin'), get_string('configopentogoogle', 'admin'), 0));
$temp->add(new admin_setting_configtext('maxbytes', get_string('maxbytes', 'admin'), get_string('configmaxbytes', 'admin'), 0, PARAM_INT));
$temp->add(new admin_setting_configcheckbox('messaging', get_string('messaging', 'admin'), get_string('configmessaging','admin'), 1));
+1 -1
View File
@@ -17,7 +17,7 @@ $ADMIN->add('accounts', new admin_externalpage('uploadusers', get_string('upload
$ADMIN->add('users', new admin_category('roles', get_string('permissions', 'role')));
$ADMIN->add('roles', new admin_externalpage('defineroles', get_string('defineroles', 'role'), "$CFG->wwwroot/$CFG->admin/roles/manage.php"));
$sitecontext = get_context_instance(CONTEXT_SYSTEM);
$ADMIN->add('roles', new admin_externalpage('assignroles', get_string('assignroles', 'role'), "$CFG->wwwroot/$CFG->admin/roles/assign.php?contextid=" . $sitecontext->id));
$ADMIN->add('roles', new admin_externalpage('assignroles', get_string('assignglobalroles', 'role'), "$CFG->wwwroot/$CFG->admin/roles/assign.php?contextid=" . $sitecontext->id));
// "userpolicies" settingpage
-2
View File
@@ -270,7 +270,6 @@ if ($um->preprocess_files() && confirm_sesskey()) {
//This can be used to obtain a list of userids for existing users
notify("$olduser->id ".get_string('usernotaddedregistered', 'error', $username));
$userserrors++;
continue;
}
} else { // new user
@@ -424,4 +423,3 @@ function my_file_get_contents($filename, $use_include_path = 0) {
}
?>
+7 -2
View File
@@ -86,6 +86,11 @@
admin_externalpage_setup('editusers', $adminroot);
}
if (empty($CFG->loginhttps)) {
$securewwwroot = $CFG->wwwroot;
} else {
$securewwwroot = str_replace('http:','https:',$CFG->wwwroot);
}
if ($newuser) { // Create a new user
@@ -111,7 +116,7 @@
}
}
redirect("$CFG->wwwroot/user/edit.php?id=$user->id&amp;course=$site->id");
redirect("$securewwwroot/user/edit.php?id=$user->id&amp;course=$site->id");
} else { // List all users for editing
@@ -330,7 +335,7 @@
}
if (has_capability('moodle/user:update', $sitecontext)) {
$editbutton = "<a href=\"../user/edit.php?id=$user->id&amp;course=$site->id\">$stredit</a>";
$editbutton = "<a href=\"$securewwwroot/user/edit.php?id=$user->id&amp;course=$site->id\">$stredit</a>";
if ($user->confirmed == 0) {
$confirmbutton = "<a href=\"user.php?confirmuser=$user->id&amp;sesskey=$USER->sesskey\">" . get_string('confirm') . "</a>";
} else {
+3 -1
View File
@@ -114,6 +114,8 @@ class test extends XMLDBAction {
$table->addIndexInfo('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
$table->addIndexInfo('rsstype', XMLDB_INDEX_UNIQUE, array('rsstype'));
$table->setComment("This is a test'n drop table. You can drop it safely");
/// Get SQL code and execute it
$test = new stdClass;
$test->sql = $table->getCreateTableSQL($CFG->dbtype, $CFG->prefix, true);
@@ -275,7 +277,7 @@ class test extends XMLDBAction {
/// Get SQL code and execute it
$test = new stdClass;
$field = new XMLDBField('grade');
$field->setAttributes(XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, null, 'test');
$field->setAttributes(XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, null, "test'n drop");
$test->sql = $table->getAlterFieldSQL($CFG->dbtype, $CFG->prefix, $field, true);
$test->status = change_field_type($table, $field, false, false);
@@ -133,7 +133,7 @@ class view_reserved_words extends XMLDBAction {
/// The textarea showing all the reserved words
$o.= ' <table id="formelements" align="center" cellpadding="5">';
$o.= ' <tr><td align="center">' . $this->str['listreservedwords'];
$o.= ' <tr><td align="center">' . $this->str['listreservedwords'].'</td></tr>';
$o.= ' <tr><td><textarea cols="80" rows="32">';
$o.= s(implode(', ', $reserved_words));
$o.= '</textarea></td></tr>';
+1
View File
@@ -52,6 +52,7 @@
/// getting "incomplete" objects
require_once('../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/ddllib.php'); // Install/upgrade related db functions
$adminroot = admin_get_root();
admin_externalpage_setup('xmldbeditor', $adminroot);
-4
View File
@@ -112,7 +112,3 @@
<?php
include($CFG->dirroot.'/auth/ldap/config.html');
?>
-1
View File
@@ -15,4 +15,3 @@
print_footer();
exit;
?>
+7 -4
View File
@@ -106,12 +106,14 @@ function auth_get_userinfo($username){
if ($rs = $authdb->Execute("SELECT ".$pcfg["field_map_$field"]." as myfield FROM $CFG->auth_dbtable
WHERE $CFG->auth_dbfielduser = '$username'")) {
if ( $rs->RecordCount() == 1 ) {
$fields_obj = rs_fetch_record($rs);
if (!empty($CFG->unicodedb)) {
$result["$field"] = addslashes(stripslashes($rs->fields['myfield']));
$result["$field"] = addslashes(stripslashes($fields_obj->myfield));
} else {
$result["$field"] = addslashes(stripslashes(utf8_decode($rs->fields['myfield'])));
$result["$field"] = addslashes(stripslashes(utf8_decode($fields_obj->myfield)));
}
}
rs_close($rs);
}
}
}
@@ -351,9 +353,10 @@ function auth_get_userlist() {
if ( $rs->RecordCount() ) {
$userlist = array();
while ($rec = $rs->FetchRow()) {
array_push($userlist, $rec['username']);
while ($rec = rs_fetch_next_record($rs)) {
array_push($userlist, $rec->username);
}
rs_close($rs);
return $userlist;
} else {
return array();
+60 -11
View File
@@ -817,13 +817,27 @@ function auth_user_update($olduser, $newuser) {
global $USER , $CFG;
$pcfg = get_config('auth/ldap');
$attrmap = auth_ldap_attributes();
// Before doing anything else, make sure we really need to update anything
// in the external LDAP server.
$update_external = false;
foreach ($attrmap as $key => $ldapkeys) {
if (!empty($pcfg->{'field_updateremote_'.$key})) {
$update_external = true;
break;
}
}
if (!$update_external) {
return true;
}
$ldapconnection = auth_ldap_connect();
$result = array();
$search_attribs = array();
$attrmap = auth_ldap_attributes();
foreach ($attrmap as $key=>$values) {
if (!is_array($values)) {
$values = array($values);
@@ -842,8 +856,18 @@ function auth_user_update($olduser, $newuser) {
if ($user_info_result){
$user_entry = auth_ldap_get_entries($ldapconnection, $user_info_result);
if (count($user_entry) > 1) {
trigger_error("ldap: Strange! More than one user record found in ldap. Only using the first one.");
if (empty($user_entry)) {
$error = 'ldap: Could not find user while updating externally. '.
'Details follow: search base: \''.$user_dn.'\'; search filter: \''.
$CFG->ldap_objectclass.'\'; search attributes: ';
foreach ($search_attribs as $attrib) {
$error .= $attrib.' ';
}
error_log($error);
return false; // old user not found!
} else if (count($user_entry) > 1) {
error_log('ldap: Strange! More than one user record found in ldap. Only using the first one.');
return false;
}
$user_entry = $user_entry[0];
@@ -1002,15 +1026,33 @@ function auth_user_update_password($username, $newpassword) {
. ldap_err2str(ldap_errno($ldapconnection)));
}
break;
case 'ad':
// Passwords in Active Directory must be encoded as Unicode
// strings (UCS-2 Little Endian format) and surrounded with
// double quotes. See http://support.microsoft.com/?kbid=269190
if (!function_exists('mb_convert_encoding')) {
error_log ('You need the mbstring extension to change passwords in Active Directory');
return false;
}
$newpassword = mb_convert_encoding('"'.$newpassword.'"', "UCS-2LE", "auto");
$result = ldap_modify($ldapconnection, $user_dn, array('unicodePwd' => $newpassword));
if(!$result){
error_log('LDAP Error in auth_user_update_password(). Error code: '
. ldap_errno($ldapconnection) . '; Error string : '
. ldap_err2str(ldap_errno($ldapconnection)));
}
break;
default:
$usedconnection = &$ldapconnection;
// send ldap the password in cleartext, it will md5 it itself
$result = ldap_modify($ldapconnection, $user_dn, array('userPassword' => $newpassword));
if(!$result){
error_log('LDAP Error in auth_user_update_password(). Error code: '
. ldap_errno($ldapconnection) . '; Error string : '
. ldap_err2str(ldap_errno($ldapconnection)));
}
if(!$result){
error_log('LDAP Error in auth_user_update_password(). Error code: '
. ldap_errno($ldapconnection) . '; Error string : '
. ldap_err2str(ldap_errno($ldapconnection)));
}
}
@@ -1162,8 +1204,10 @@ function auth_ldap_init () {
}
}
//hack prefix to objectclass
if ('objectClass=' != substr($CFG->ldap_objectclass, 0, 12)) {
$CFG->ldap_objectclass = 'objectClass='.$CFG->ldap_objectclass;
if (empty($CFG->ldap_objectclass)) { // Can't send empty filter
$CFG->ldap_objectclass = 'objectClass=*';
} else if (stripos($CFG->ldap_objectclass, 'objectClass=') !== 0) {
$CFG->ldap_objectclass = 'objectClass='.$CFG->ldap_objectclass;
}
//all chages go in $CFG , no need to return value
@@ -1318,6 +1362,11 @@ function auth_ldap_connect($binddn='',$bindpwd=''){
ldap_set_option($connresult, LDAP_OPT_PROTOCOL_VERSION, $CFG->ldap_version);
}
// Fix MDL-10921
if ($CFG->ldap_user_type == 'ad') {
ldap_set_option($connresult, LDAP_OPT_REFERRALS, 0);
}
if (!empty($binddn)){
//bind with search-user
//$debuginfo .= 'Using bind user'.$binddn.'and password:'.$bindpwd;
-1
View File
@@ -47,4 +47,3 @@ function auth_user_login ($username, $password) {
$rauth->close();
}
?>
+17 -1
View File
@@ -1736,6 +1736,16 @@
global $CFG,$preferences;
//Use one static variable to cache all the require_once calls that,
//under PHP5 seems to increase load too much, and we are requiring
//them here thousands of times (one per content). MDL-8700.
//Once fixed by PHP, we'll delete this hack
static $includedfiles;
if (!isset($includedfiles)) {
$includedfiles = array();
}
//Check if preferences is ok. If it isn't set, we are
//in a scheduled_backup to we are able to get a copy
//from CFG->backup_preferences
@@ -1755,8 +1765,14 @@
$result = str_replace($search,$replace,$content);
foreach ($mypreferences->mods as $name => $info) {
/// We only include the corresponding backuplib.php if it hasn't been included before
/// This will save some load under PHP5. MDL-8700.
/// Once fixed by PHP, we'll delete this hack
if (!in_array($name, $includedfiles)) {
include_once("$CFG->dirroot/mod/$name/backuplib.php");
$includedfiles[] = $name;
}
//Check if the xxxx_encode_content_links exists
include_once("$CFG->dirroot/mod/$name/backuplib.php");
$function_name = $name."_encode_content_links";
if (function_exists($function_name)) {
$result = $function_name($result,$mypreferences);
+1 -1
View File
@@ -9,7 +9,7 @@ require_once($CFG->dirroot.'/backup/bb/xsl_emulate_xslt.inc');
function get_subdirs($directory){
$opendirectory = opendir( $directory );
while($filename = readdir($opendirectory)) {
while(false !== ($filename = readdir($opendirectory))) {
if (is_dir($directory.$filename) and $filename != ".." and $filename != "."){
$subdirs[] = $filename;
}
+7 -6
View File
@@ -7,10 +7,11 @@
//Sets a name/value pair in backup_config table
function backup_set_config($name, $value) {
if (get_field("backup_config", "name", "name", $name)) {
return set_field("backup_config", "value", $value, "name", $name);
return set_field("backup_config", "value", addslashes($value), "name", $name);
} else {
$config = new object();
$config->name = $name;
$config->value = $value;
$config->value = addslashes($value);
return insert_record("backup_config", $config);
}
}
@@ -118,7 +119,7 @@
}
// Loop through all directory entries, and construct two temporary arrays containing files and sub directories
while($entry = readdir($handle)) {
while(false !== ($entry = readdir($handle))) {
if (is_dir($dir. $slash .$entry) && $entry != ".." && $entry != "." && $entry != $excludeddir) {
$dir_subdirs[] = $dir. $slash .$entry;
}
@@ -195,7 +196,7 @@
$results = null;
$dir = opendir($rootdir);
while ($file=readdir($dir)) {
while (false !== ($file=readdir($dir))) {
if ($file=="." || $file=="..") {
continue;
}
@@ -214,7 +215,7 @@
$results = "";
$dir = opendir($rootdir);
while ($file=readdir($dir)) {
while (false !== ($file=readdir($dir))) {
if ($file=="." || $file=="..") {
continue;
}
@@ -301,7 +302,7 @@
$status = mkdir($to_file,$CFG->directorypermissions);
}
$dir = opendir($from_file);
while ($file=readdir($dir)) {
while (false !== ($file=readdir($dir))) {
if ($file=="." || $file=="..") {
continue;
}
+18 -7
View File
@@ -19,13 +19,24 @@
if ($form1 = data_submitted()) {
$currentcourseshortname = $course_header->course_shortname; //"store_ShortName";
$course_header->course_shortname = $form1->shortname; //"update_ShortName";
$course_header->course_fullname = $form1->fullname; //"update_FullName";
$form1->startdate = make_timestamp($form1->startyear, $form1->startmonth, $form1->startday);
$currentcoursestartdate = $course_header->course_startdate;
$coursestartdatedateoffset = $form1->startdate - $currentcoursestartdate;
$restore->course_startdateoffset = $coursestartdatedateoffset; //change to restore
}
$course_header->course_shortname = $form1->shortname; //"update_ShortName";
$course_header->course_fullname = $form1->fullname; //"update_FullName";
/// Roll dates only if the backup course has a start date
/// (some formats like main page, social..., haven't it and rolling dates
/// from 0 produces crazy dates. MDL-10125
if ($course_header->course_startdate) {
$form1->startdate = make_timestamp($form1->startyear, $form1->startmonth, $form1->startday);
$currentcoursestartdate = $course_header->course_startdate;
$coursestartdatedateoffset = $form1->startdate - $currentcoursestartdate;
$restore->course_startdateoffset = $coursestartdatedateoffset; //change to restore
} else { // don't roll if the course hasn't start date
$coursestartdatedateoffset = 0;
$restore->course_startdateoffset = 0;
}
}
///Enforce SESSION->course_header rewrite (PHP 4.x needed because assigns are by value) MDL-8298
$SESSION->course_header = $course_header;
//If restore session info exists, but we are coming from the form
//it has prioriry
+9
View File
@@ -54,6 +54,15 @@
print_simple_box(get_string("restorefinished"),"center");
} else {
print_simple_box(get_string("importdatafinished"),"center");
$file = $CFG->dataroot . '/'
. $SESSION->import_preferences->backup_course
. '/backupdata/' . $SESSION->import_preferences->backup_name;
if (is_readable($file)) {
unlink($file);
}
else {
error_log("import course data: couldn't unlink $file");
}
unset($SESSION->restore);
}
print_continue("$CFG->wwwroot/course/view.php?id=".$restore->course_id);
+11 -1
View File
@@ -201,7 +201,17 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo "<td align=\"right\"> ";
print_string("startdate");
echo ":</td><td>";
print_date_selector("startday", "startmonth", "startyear", $form1->startdate);
/// Show the roll dates option only if the backup course has a start date
/// (some formats like main page, social..., haven't it and rolling dates
/// from 0 produces crazy dates. MDL-10125
if ($form1->startdate) {
print_date_selector("startday", "startmonth", "startyear", $form1->startdate);
} else {
print_string('notavailable');
echo '<input type="hidden" name="startyear" value="0" />';
echo '<input type="hidden" name="startmonth" value="0" />';
echo '<input type="hidden" name="startday" value="0" />';
}
helpbutton("coursestartdate", get_string("startdate"));
echo "</td></tr>";
}
+156 -58
View File
@@ -70,6 +70,44 @@
if (!defined('RESTORE_SILENTLY')) {
echo "<ul>";
}
// Recode links in the course summary.
if (!defined('RESTORE_SILENTLY')) {
echo '<li>' . get_string('from') . ' ' . get_string('course');
}
$course = get_record('course', 'id', $restore->course_id, '', '', '', '', 'id,summary');
$coursesummary = restore_decode_content_links_worker($course->summary, $restore);
if ($coursesummary != $course->summary) {
$course->summary = addslashes($coursesummary);
if (!update_record('course', $course)) {
$status = false;
}
}
if (!defined('RESTORE_SILENTLY')) {
echo '</li>';
}
// Recode links in section summaries.
$sections = get_records('course_sections', 'course', $restore->course_id, 'id', 'id,summary');
if ($sections) {
if (!defined('RESTORE_SILENTLY')) {
echo '<li>' . get_string('from') . ' ' . get_string('sections');
}
foreach ($sections as $section) {
$sectionsummary = restore_decode_content_links_worker($section->summary, $restore);
if ($sectionsummary != $section->summary) {
$section->summary = addslashes($sectionsummary);
if (!update_record('course_sections', $section)) {
$status = false;
}
}
}
if (!defined('RESTORE_SILENTLY')) {
echo '</li>';
}
}
// Restore links in modules.
foreach ($restore->mods as $name => $info) {
//If the module is being restored
if (isset($info->restore) && $info->restore == 1) {
@@ -85,12 +123,23 @@
}
}
}
// TODO: process all html text also in blocks too
// Restore links in questions.
require_once("$CFG->dirroot/question/restorelib.php");
if (!defined('RESTORE_SILENTLY')) {
echo '<li>' . get_string('from') . ' ' . get_string('questions', 'quiz');
}
$status = question_decode_content_links_caller($restore);
if (!defined('RESTORE_SILENTLY')) {
echo '</li>';
}
if (!defined('RESTORE_SILENTLY')) {
echo "</ul>";
}
// TODO: process all html text also in blocks too
return $status;
}
@@ -901,14 +950,18 @@
// Yu: This part is called repeatedly for every instance,
// so it is necessary to set the granular flag and check isset()
// when the first instance of this type of mod is processed.
if (!isset($restore->mods[$mod->type]->granular) && isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
// This defines whether we want to restore specific
// instances of the modules (granular restore), or
// whether we don't care and just want to restore
// all module instances (non-granular).
$restore->mods[$mod->type]->granular = true;
} else {
$restore->mods[$mod->type]->granular = false;
//if (!isset($restore->mods[$mod->type]->granular) && isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
if (!isset($restore->mods[$mod->type]->granular)) {
if (isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
// This defines whether we want to restore specific
// instances of the modules (granular restore), or
// whether we don't care and just want to restore
// all module instances (non-granular).
$restore->mods[$mod->type]->granular = true;
} else {
$restore->mods[$mod->type]->granular = false;
}
}
//Check if we've to restore this module (and instance)
@@ -1111,7 +1164,7 @@
if (!$preferencescount) {
$continue = false;
if (!defined('RESTORE_SILENTLY')) {
echo '<li>'.get_string('backupwithoutgradebook','grade').'</li>';
echo '<li>'.get_string('backupwithoutgradebook','grades').'</li>';
}
}
@@ -1122,7 +1175,7 @@
if ($pref_rec->value == 0) {
$continue = false;
if (!defined('RESTORE_SILENTLY')) {
echo '<li>'.get_string('respectingcurrentdata','grade').'</li>';
echo '<li>'.get_string('respectingcurrentdata','grades').'</li>';
}
}
}
@@ -1138,7 +1191,7 @@
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'grade_preferences' AND backup_code = '$restore->backup_unique_code'",
"old_id",
"old_id, old_id",
"old_id",
$counter,
$recordset_size);
if ($recs) {
@@ -1192,7 +1245,7 @@
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'grade_letter' AND backup_code = '$restore->backup_unique_code'",
"old_id",
"old_id, old_id",
"old_id",
$counter,
$recordset_size);
if ($recs) {
@@ -1242,7 +1295,7 @@
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'grade_category' AND backup_code = '$restore->backup_unique_code'",
"old_id",
"old_id, old_id",
"old_id",
$countercat,
$recordset_size);
if ($recs) {
@@ -1401,21 +1454,42 @@
//in backup_ids->info will be the real info (serialized)
$info = restore_read_xml_users($restore,$xml_file);
}
//Now, get evey user_id from $info and user data from $backup_ids
//and create the necessary records (users, user_students, user_teachers
//user_course_creators and user_admins
if (!empty($info->users)) {
//For each user, take its info from backup_ids
foreach ($info->users as $userid) {
$rec = backup_getid($restore->backup_unique_code,"user",$userid);
$rec = backup_getid($restore->backup_unique_code,"user",$userid);
$user = $rec->info;
foreach (array_keys(get_object_vars($user)) as $field) {
if (!is_array($user->$field)) {
$user->$field = backup_todb($user->$field);
if (is_null($user->$field)) {
$user->$field = '';
}
}
}
//Now, recode some languages (Moodle 1.5)
if ($user->lang == 'ma_nt') {
$user->lang = 'mi_nt';
}
//Country list updates - MDL-13060
//Any user whose country code has been deleted or modified needs to be assigned a valid one.
$country_update_map = array(
'ZR' => 'CD',
'TP' => 'TL',
'FX' => 'FR',
'KO' => 'RS',
'CS' => 'RS',
'WA' => 'GB');
if (array_key_exists($user->country, $country_update_map)) {
$user->country = $country_update_map[$user->country];
}
//Check if it's admin and coursecreator
$is_admin = !empty($user->roles['admin']);
$is_coursecreator = !empty($user->roles['coursecreator']);
@@ -1693,7 +1767,7 @@
$counter = 0;
while ($counter < $unreadcount) {
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'message' AND backup_code = '$restore->backup_unique_code'","old_id","old_id, old_id",$counter,$recordset_size);
$recs = get_records_select("backup_ids","table_name = 'message' AND backup_code = '$restore->backup_unique_code'","old_id","old_id",$counter,$recordset_size);
if ($recs) {
foreach ($recs as $rec) {
//Get the full record from backup_ids
@@ -1758,7 +1832,7 @@
$counter = 0;
while ($counter < $readcount) {
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'message_read' AND backup_code = '$restore->backup_unique_code'","old_id","old_id, old_id",$counter,$recordset_size);
$recs = get_records_select("backup_ids","table_name = 'message_read' AND backup_code = '$restore->backup_unique_code'","old_id","old_id",$counter,$recordset_size);
if ($recs) {
foreach ($recs as $rec) {
//Get the full record from backup_ids
@@ -1825,7 +1899,7 @@
$counter = 0;
while ($counter < $contactcount) {
//Fetch recordset_size records in each iteration
$recs = get_records_select("backup_ids","table_name = 'message_contacts' AND backup_code = '$restore->backup_unique_code'","old_id","old_id, old_id",$counter,$recordset_size);
$recs = get_records_select("backup_ids","table_name = 'message_contacts' AND backup_code = '$restore->backup_unique_code'","old_id","old_id",$counter,$recordset_size);
if ($recs) {
foreach ($recs as $rec) {
//Get the full record from backup_ids
@@ -1913,14 +1987,7 @@
foreach ($info as $category) {
//Skip empty categories (some backups can contain them)
if (!empty($category->id)) {
$catrestore = "restore_question_categories";
if (function_exists($catrestore)) {
//print_object ($category); //Debug
$status = $catrestore($category,$restore);
} else {
//Something was wrong. Function should exist.
$status = false;
}
$status = restore_question_categories($category,$restore);
}
}
@@ -2090,7 +2157,18 @@
//Now search if that group exists (by name and description field) in
//restore->course_id course
$gro_db = get_record("groups","courseid",$restore->course_id,"name",$gro->name,"description",$gro->description);
//Going to compare LOB columns so, use the cross-db sql_compare_text() in both sides.
$description_clause = '';
if (!empty($gro->description)) { /// Only for groups having a description
$literal_description = "'" . $gro->description . "'";
$description_clause = " AND " .
sql_compare_text('description') . " = " .
sql_compare_text($literal_description);
}
$gro_db = get_record_sql("SELECT *
FROM {$CFG->prefix}groups
WHERE courseid = $restore->course_id AND
name = '{$gro->name}'" . $description_clause);
//If it doesn't exist, create
if (!$gro_db) {
$create_group = true;
@@ -2262,19 +2340,6 @@
//Assign it to admin
$eve->userid = $adminid;
}
//We must recode the repeatid if the event has it
if (!empty($eve->repeatid)) {
$repeat_rec = backup_getid($restore->backup_unique_code,"event_repeatid",$eve->repeatid);
if ($repeat_rec) { //Exists, so use it...
$eve->repeatid = $repeat_rec->new_id;
} else { //Doesn't exists, calculate the next and save it
$oldrepeatid = $eve->repeatid;
$max_rec = get_record_sql('SELECT 1, MAX(repeatid) AS repeatid FROM '.$CFG->prefix.'event');
$eve->repeatid = empty($max_rec) ? 1 : $max_rec->repeatid + 1;
backup_putid($restore->backup_unique_code,"event_repeatid", $oldrepeatid, $eve->repeatid);
}
}
//We have to recode the groupid field
$group = backup_getid($restore->backup_unique_code,"groups",$eve->groupid);
@@ -2287,6 +2352,22 @@
//The structure is equal to the db, so insert the event
$newid = insert_record ("event",$eve);
//We must recode the repeatid if the event has it
//The repeatid now refers to the id of the original event. (see Bug#5956)
if ($newid && !empty($eve->repeatid)) {
$repeat_rec = backup_getid($restore->backup_unique_code,"event_repeatid",$eve->repeatid);
if ($repeat_rec) { //Exists, so use it...
$eve->repeatid = $repeat_rec->new_id;
} else { //Doesn't exists, calculate the next and save it
$oldrepeatid = $eve->repeatid;
$eve->repeatid = $newid;
backup_putid($restore->backup_unique_code,"event_repeatid", $oldrepeatid, $eve->repeatid);
}
$eve->id = $newid;
// update the record to contain the correct repeatid
update_record('event',$eve);
}
} else {
//get current event id
$newid = $eve_db->id;
@@ -2599,7 +2680,7 @@
while ($counter < $count_logs) {
//Get a chunk of records
//Take old_id twice to avoid adodb limitation
$logs = get_records_select("backup_ids","table_name = 'log' AND backup_code = '$restore->backup_unique_code'","old_id","old_id,old_id",$counter,$recordset_size);
$logs = get_records_select("backup_ids","table_name = 'log' AND backup_code = '$restore->backup_unique_code'","old_id","old_id",$counter,$recordset_size);
//We have logs
if ($logs) {
//Iterate
@@ -4411,7 +4492,7 @@
break;
}
}
if ($this->level == 6 && $this->tree[5]!="ROLE_ASSIGNMENTS" && $this->tree[5]!="ROLE_OVERRIDES") {
if ($this->level == 6 && $this->tree[5]!="ROLES_ASSIGNMENTS" && $this->tree[5]!="ROLES_OVERRIDES") {
switch ($tagName) {
case "ROLE":
//We've finalized a role, get it
@@ -4426,7 +4507,7 @@
}
}
if ($this->level == 7 && $this->tree[5]!="ROLE_ASSIGNMENTS" && $this->tree[5]!="ROLE_OVERRIDES") {
if ($this->level == 7) {
switch ($tagName) {
case "TYPE":
$this->info->temprole->type = $this->getContents();
@@ -5825,9 +5906,9 @@
}
if (!$status = restore_decode_content_links($restore)) {
if (!defined('RESTORE_SILENTLY')) {
notify("Could not refresh events for activities!");
notify("Could not decode content links!");
} else {
$errorstr = "Could not refresh events for activities!";
$errorstr = "Could not decode content links!";
return false;
}
}
@@ -6017,10 +6098,19 @@
if (!empty($restore->rolesmapping)) {
$rolemappings = $restore->rolesmapping;
}
// $info->roles will be empty for backups pre 1.7
if (isset($info->roles) && $info->roles) {
foreach ($info->roles as $oldroleid=>$roledata) {
/// first we check if the roles are in the mappings
foreach ($info->roles as $oldroleid=>$roledata) {
if (empty($restore->rolesmapping)) {
// if this is empty altogether, we came from import or there's no roles used in course at all
// in this case, write the same oldid as this is the same site
// no need to do mapping
$status = backup_putid($restore->backup_unique_code,"role",$oldroleid,
$oldroleid); // adding a new id
continue; // do not create additonal roles;
}
// first we check if the roles are in the mappings
// if so, we just do a mapping i.e. update oldids table
if (isset($rolemappings[$oldroleid]) && $rolemappings[$oldroleid]) {
$status = backup_putid($restore->backup_unique_code,"role",$oldroleid,
@@ -6091,7 +6181,13 @@
}
$course = restore_read_xml_course_header($xmlfile);
if (!empty($course->roleassignments)) {
if (!isset($restore->rolesmapping)) {
$isimport = true; // course import from another course, or course with no role assignments
} else {
$isimport = false; // course restore with role assignments
}
if (!empty($course->roleassignments) && !$isimport) {
$courseassignments = $course->roleassignments;
foreach ($courseassignments as $oldroleid => $courseassignment) {
@@ -6102,7 +6198,7 @@
* Restoring from course level overrides *
*****************************************************/
if (!empty($course->roleoverrides)) {
if (!empty($course->roleoverrides) && !$isimport) {
$courseoverrides = $course->roleoverrides;
foreach ($courseoverrides as $oldroleid => $courseoverride) {
// if not importing into exiting course, or creating new role, we are ok
@@ -6127,11 +6223,12 @@
foreach ($secs as $section) {
if (isset($section->mods)) {
foreach ($section->mods as $modid=>$mod) {
if (isset($mod->roleassignments)) {
if (isset($mod->roleassignments) && !$isimport) {
foreach ($mod->roleassignments as $oldroleid=>$modassignment) {
restore_write_roleassignments($restore, $modassignment->assignments, "course_modules", CONTEXT_MODULE, $modid, $oldroleid);
}
}
// role overrides always applies, in import or backup/restore
if (isset($mod->roleoverrides)) {
foreach ($mod->roleoverrides as $oldroleid=>$modoverride) {
restore_write_roleoverrides($restore, $modoverride->overrides, "course_modules", CONTEXT_MODULE, $modid, $oldroleid);
@@ -6153,13 +6250,14 @@
$blocks = restore_read_xml_blocks($xmlfile);
if (isset($blocks->instances)) {
foreach ($blocks->instances as $instance) {
if (isset($instance->roleassignments)) {
if (isset($instance->roleassignments) && !$isimport) {
foreach ($instance->roleassignments as $oldroleid=>$blockassignment) {
restore_write_roleassignments($restore, $blockassignment->assignments, "block_instance", CONTEXT_BLOCK, $instance->id, $oldroleid);
}
}
if (isset($instance->roleoverrides)) {
// likewise block overrides should always be restored like mods
if (isset($instance->roleoverrides)) {
foreach ($instance->roleoverrides as $oldroleid=>$blockoverride) {
restore_write_roleoverrides($restore, $blockoverride->overrides, "block_instance", CONTEXT_BLOCK, $instance->id, $oldroleid);
}
@@ -6175,7 +6273,7 @@
echo "<li>".get_string("creatinguserroles").'</li>';
}
$info = restore_read_xml_users($restore, $xmlfile);
if (!empty($info->users)) {
if (!empty($info->users) && !$isimport) { // no need to restore user assignments for imports (same course)
//For each user, take its info from backup_ids
foreach ($info->users as $userid) {
$rec = backup_getid($restore->backup_unique_code,"user",$userid);
@@ -6221,7 +6319,7 @@
$newcontext = get_context_instance($contextlevel, $oldinstance->new_id);
$assignment->contextid = $newcontext->id; // new context id
// might already have same assignment
role_assign($assignment->roleid, $assignment->userid, 0, $assignment->contextid, $assignment->timestart, $assignment->timeend, $assignment->hidden, $assignment->enrol);
role_assign($assignment->roleid, $assignment->userid, 0, $assignment->contextid, $assignment->timestart, $assignment->timeend, $assignment->hidden, $assignment->enrol, $assignment->timemodified);
}
}
@@ -6316,4 +6414,4 @@
fclose($restorelog);
}
}
?>
?>
-1232
View File
File diff suppressed because it is too large Load Diff
+3 -24
View File
@@ -172,30 +172,9 @@ class block_admin extends block_list {
}
}
/// Should the following two be in this block?
/// View own activity report
// if ($course->showreports) {
// $this->content->items[]='<a href="user.php?id='.$this->instance->pageid.'&amp;user='.$USER->id.'">'.get_string('activityreport').'</a>';
// $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/report.gif" alt="" />';
// }
/// Edit your own profile
// $fullname = fullname($USER, has_capability('moodle/site:viewfullnames', $context));
// $editmyprofile = '<a title="'.$fullname.'" href="'.$CFG->wwwroot.'/user/edit.php?id='.$USER->id.'&amp;course='.$this->instance->pageid.'">'.get_string('editmyprofile').'</a>';
// if (empty($USER->description)) {
// //Accessibility: replace non-standard <blink> with CSS (<a> makes title visible in IE).
// $text = get_string('profile').' '.get_string('missingdescription');
// $this->content->items[]= $editmyprofile.' <a title="'.$text.'" class="useredit blink">*<span class="accesshide">'.$text.'</span></a>';
// } else {
// $this->content->items[]= $editmyprofile;
// }
// $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" alt="" />';
/// Link to the user own profile
$this->content->items[]='<a href="'.$CFG->wwwroot.'/user/view.php?id='.$USER->id.'&amp;course='.$course->id.'">'.get_string('profile').'</a>';
$this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" alt="" />';
return $this->content;
}
@@ -57,7 +57,10 @@ class block_admin_bookmarks extends block_base {
$bookmarks = array();
}
if (($section = (isset($PAGE->section) ? $PAGE->section : '')) && (in_array($section, $bookmarks))) {
if(isset($PAGE->section) and $PAGE->section == 'search'){
// the search page can't be properly bookmarked at present
$this->content->footer = '';
}elseif (($section = (isset($PAGE->section) ? $PAGE->section : '')) && (in_array($section, $bookmarks))) {
$this->content->footer = '<a href="' . $CFG->wwwroot . '/blocks/admin_bookmarks/delete.php?section=' . $section . '&amp;sesskey='.sesskey().'">' . get_string('unbookmarkthispage','admin') . '</a>';
} elseif ($section = (isset($PAGE->section) ? $PAGE->section : '')) {
$this->content->footer = '<a href="' . $CFG->wwwroot . '/blocks/admin_bookmarks/create.php?section=' . $section . '&amp;sesskey='.sesskey().'">' . get_string('bookmarkthispage','admin') . '</a>';
+24 -18
View File
@@ -15,8 +15,13 @@ function migrate2utf8_block_instance_configdata($recordid){
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
if ($blockinstance->pagetype == 'course-view') {
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
} else {
$courselang = false;
$userlang = false;
}
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
}
@@ -42,8 +47,13 @@ function migrate2utf8_block_instance_configdata($recordid){
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
if ($blockinstance->pagetype == 'course-view') {
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
} else {
$courselang = false;
$userlang = false;
}
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
}
@@ -68,8 +78,13 @@ function migrate2utf8_block_instance_configdata($recordid){
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
if ($blockinstance->pagetype == 'course-view') {
$courselang = get_course_lang($blockinstance->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
} else {
$courselang = false;
$userlang = false;
}
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
}
@@ -110,10 +125,7 @@ global $CFG, $globallang;
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockpinned->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
$fromenc = get_original_encoding($sitelang, false, false);
}
$blah = unserialize(base64_decode($blockpinned->configdata));
@@ -137,10 +149,7 @@ global $CFG, $globallang;
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockpinned->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
$fromenc = get_original_encoding($sitelang, false, false);
}
$blah = unserialize(base64_decode($blockpinned->configdata));
@@ -163,10 +172,7 @@ global $CFG, $globallang;
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = get_course_lang($blockpinned->pageid); //Non existing!
$userlang = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
$fromenc = get_original_encoding($sitelang, false, false);
}
$blah = unserialize(base64_decode($blockpinned->configdata));
+1 -1
View File
@@ -52,7 +52,7 @@ class block_login extends block_base {
$this->content->text .= '<table align="center" cellpadding="2" cellspacing="0" class="logintable">';
$this->content->text .= '<tr><td class="c0 r0" align="right">'.get_string('username').':</td>';
$this->content->text .= '<td class="c1 r0"><input type="text" name="username" size="10" value="'.$username.'" /></td></tr>';
$this->content->text .= '<td class="c1 r0"><input type="text" name="username" size="10" value="'.s($username).'" /></td></tr>';
$this->content->text .= '<tr><td class="c0 r1" align="right">'.get_string('password').':</td>';
$this->content->text .= '<td class="c1 r1"><input type="password" name="password" size="10" value="" /></td></tr>';
+2 -8
View File
@@ -303,13 +303,7 @@ class block_base {
switch ($this->instance->pagetype) {
case 'course-view':
if ($this->instance->pageid == SITEID) {
$context = get_context_instance(CONTEXT_SYSTEM, $this->instance->pageid);
} else {
$context = get_context_instance(CONTEXT_COURSE, $this->instance->pageid);
}
if (!has_capability('moodle/site:manageblocks', $context)) {
if (!has_capability('moodle/site:manageblocks', $blockcontext)) {
return null;
}
break;
@@ -706,4 +700,4 @@ class block_list extends block_base {
}
?>
?>
-204
View File
@@ -1,204 +0,0 @@
<?php // $Id$
die; //must be fixed before enabling again, see SC#971
// All of this is standard Moodle fixtures
require_once('../config.php');
require_once($CFG->dirroot .'/course/lib.php');
require_once($CFG->dirroot .'/lib/blocklib.php');
require_once($CFG->dirroot .'/mod/resource/lib.php');
require_once($CFG->dirroot .'/mod/forum/lib.php');
optional_param('blockaction');
optional_param('instanceid', 0, PARAM_INT);
optional_param('blockid', 0, PARAM_INT);
require_login();
// Begin snippet -----------------------------------------------------------------
// This snippet should normally be defined in another file, but I 've put it all
// in here to keep it simple.
// First of all define the string identifier for this "type" of page.
define('MOODLE_PAGE_TEST', 'testpage');
// Also, define identifiers for any non-standard block positions we want to support.
define('BLOCK_POS_CENTERUP', 'cu');
define('BLOCK_POS_CENTERDOWN', 'cd');
// The actual Page derived class
class page_test extends page_base {
// Mandatory; should return our identifier.
function get_type() {
return MOODLE_PAGE_TEST;
}
// For this test page, only admins are going to be allowed editing (for simplicity).
function user_allowed_editing() {
return isadmin();
}
// Also, admins are considered to have "always on" editing (I wanted to avoid duplicating
// the code that turns editing on/off here; you can roll your own or copy course/view.php).
function user_is_editing() {
return isadmin();
}
// Simple method that accepts one parameter and prints the header. Here we just ignore
// the parameter entirely.
function print_header($title) {
print_header("Page testing page", 'SAMPLE CUSTOM PAGE', 'home');
}
// This should point to the script that displays us; it's straightforward in this case.
function url_get_path() {
global $CFG;
return $CFG->wwwroot .'/blocks/pagedemo.php';
}
// We do not need any special request variables such as ID in this case, so we 're not
// going to have to override url_get_parameters() here; the default suits us nicely.
// Having defined all identifiers we need, here we declare which block positions we are
// going to support.
function blocks_get_positions() {
return array(BLOCK_POS_LEFT, BLOCK_POS_RIGHT, BLOCK_POS_CENTERUP, BLOCK_POS_CENTERDOWN);
}
// And here we declare where new blocks will appear (arbitrary choice).
function blocks_default_position() {
return BLOCK_POS_CENTERUP;
}
// Since we 're not going to be creating multiple instances of this "page" (as we do with
// courses), we don't need to provide default blocks. Otherwise we 'd need to override
// the blocks_get_default() method.
// And finally, a little block move logic. Given a block's previous position and where
// we want to move it to, return its new position. Pretty self-documenting.
function blocks_move_position(&$instance, $move) {
if($instance->position == BLOCK_POS_LEFT && $move == BLOCK_MOVE_RIGHT) {
return BLOCK_POS_CENTERUP;
} else if ($instance->position == BLOCK_POS_RIGHT && $move == BLOCK_MOVE_LEFT) {
return BLOCK_POS_CENTERUP;
} else if (($instance->position == BLOCK_POS_CENTERUP || $instance->position == BLOCK_POS_CENTERDOWN) && $move == BLOCK_MOVE_LEFT) {
return BLOCK_POS_LEFT;
} else if (($instance->position == BLOCK_POS_CENTERUP || $instance->position == BLOCK_POS_CENTERDOWN) && $move == BLOCK_MOVE_RIGHT) {
return BLOCK_POS_RIGHT;
} else if ($instance->position == BLOCK_POS_CENTERUP && $move == BLOCK_MOVE_DOWN) {
return BLOCK_POS_CENTERDOWN;
} else if ($instance->position == BLOCK_POS_CENTERDOWN && $move == BLOCK_MOVE_UP) {
return BLOCK_POS_CENTERUP;
}
return $instance->position;
}
}
// End snippet -------------------------------------------------------------------
/// Bounds for block widths on this page
define('BLOCK_L_MIN_WIDTH', 160);
define('BLOCK_L_MAX_WIDTH', 210);
define('BLOCK_R_MIN_WIDTH', 160);
define('BLOCK_R_MAX_WIDTH', 210);
define('BLOCK_C_MIN_WIDTH', 250);
define('BLOCK_C_MAX_WIDTH', 350);
// Before creating our page object, we need to map our page identifier to the actual name
// of the class which will be handling its operations. Pretty simple, but essential.
page_map_class(MOODLE_PAGE_TEST, 'page_test');
// Now, create our page object. The identifier "1" is passed arbitrarily because we don't
// have multiple "testpages"; if we did, that would be the "testpageid" from the database.
$PAGE = page_create_object(MOODLE_PAGE_TEST, 1);
$PAGE->print_header(NULL);
$editing = $PAGE->user_is_editing();
// That's it! From now on, everything is simply copy-pasted from course/view.php with a few
// minor tweaks to display the page layout!
// Calculate the preferred width for left, right and center (both center positions will use the same)
if (empty($preferred_width_left)) {
$preferred_width_left = blocks_preferred_width($pageblocks[BLOCK_POS_LEFT]);
}
if (empty($preferred_width_right)) {
$preferred_width_right = blocks_preferred_width($pageblocks[BLOCK_POS_RIGHT]);
}
if (empty($preferred_width_centerup)) {
$preferred_width_centerup = blocks_preferred_width($pageblocks[BLOCK_POS_CENTERUP]);
}
if (empty($preferred_width_centerdown)) {
$preferred_width_centerdown = blocks_preferred_width($pageblocks[BLOCK_POS_CENTERDOWN]);
}
$preferred_width_left = min($preferred_width_left, BLOCK_L_MAX_WIDTH);
$preferred_width_left = max($preferred_width_left, BLOCK_L_MIN_WIDTH);
$preferred_width_right = min($preferred_width_right, BLOCK_R_MAX_WIDTH);
$preferred_width_right = max($preferred_width_right, BLOCK_R_MIN_WIDTH);
$preferred_width_center = max($preferred_width_centerup, $preferred_width_centerdown);
$preferred_width_center = min($preferred_width_center, BLOCK_C_MAX_WIDTH);
$preferred_width_center = max($preferred_width_center, BLOCK_C_MIN_WIDTH);
// Display the blocks and allow blocklib to handle any block action requested
$pageblocks = blocks_get_by_page($PAGE);
if($editing) {
if (!empty($blockaction) && confirm_sesskey()) {
if (!empty($blockid)) {
blocks_execute_action($PAGE, $pageblocks, strtolower($blockaction), intval($blockid));
}
else if (!empty($instanceid)) {
$instance = blocks_find_instance($instanceid, $pageblocks);
blocks_execute_action($PAGE, $pageblocks, strtolower($blockaction), $instance);
}
// This re-query could be eliminated by judicious programming in blocks_execute_action(),
// but I'm not sure if it's worth the complexity increase...
$pageblocks = blocks_get_by_page($PAGE);
}
}
// The actual display logic is here
echo '<table style="width: 100%;"><tr>';
if(blocks_have_content($pageblocks,BLOCK_POS_LEFT) || $editing) {
echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
blocks_print_group($PAGE, $pageblocks,BLOCK_POS_LEFT);
echo '</td>';
}
echo '<td style="border: 1px black solid; width: '.$preferred_width_center.'px;"><p style="text-align: center; padding: 10px; background: black; color: white;">Center-up position:</p>';
if(blocks_have_content($pageblocks,BLOCK_POS_CENTERUP) || $editing) {
blocks_print_group($PAGE, $pageblocks,BLOCK_POS_CENTERUP);
}
echo '<div style="padding: 10px; background: gold; text-align: center;">Content Here';
print_object(make_timestamp(2005, 6, 1, 0, 0, 0));
echo '</div>';
echo '<p style="text-align: center; padding: 10px; background: black; color: white;">Center-down position:</p>';
if(blocks_have_content($pageblocks,BLOCK_POS_CENTERDOWN) || $editing) {
blocks_print_group($PAGE, $pageblocks,BLOCK_POS_CENTERDOWN);
}
echo '</td>';
if(blocks_have_content($pageblocks,BLOCK_POS_RIGHT) || $editing) {
echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
blocks_print_group($PAGE, $pageblocks,BLOCK_POS_RIGHT);
if ($editing) {
blocks_print_adminblock($PAGE, $pageblocks);
}
echo '</td>';
}
// Finished! :-)
echo '</tr></table>';
print_footer();
?>
+4 -4
View File
@@ -8,7 +8,7 @@ class block_participants extends block_list {
function get_content() {
global $USER, $CFG;
global $USER, $CFG, $COURSE;
// the following 3 lines is need to pass _self_test();
if (empty($this->instance->pageid)) {
@@ -21,7 +21,8 @@ class block_participants extends block_list {
$currentcontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
$canviewparticipants = has_capability('moodle/site:viewparticipants', $currentcontext);
} else { // course context
$currentcontext = get_context_instance(CONTEXT_COURSE, $this->instance->pageid);
/// MDL-13252 Always get the course context or else the context may be incorrect in the user/index.php
$currentcontext = get_context_instance(CONTEXT_COURSE, $COURSE->id);
$canviewparticipants = has_capability('moodle/course:viewparticipants', $currentcontext);
}
@@ -48,8 +49,7 @@ class block_participants extends block_list {
$this->instance->pageid = SITEID;
}
if ($this->instance->pageid != SITEID
|| $canviewparticipants) {
if ($COURSE->id != SITEID || $canviewparticipants) {
$this->content->items[] = '<a title="'.get_string('listofallpeople').'" href="'.
$CFG->wwwroot.'/user/index.php?contextid='.$currentcontext->id.'">'.get_string('participants').'</a>';
@@ -273,8 +273,12 @@ if ($act == 'updfeed') {
if (file_exists($CFG->dirroot .'/blog/lib.php')) {
//Blog module is installed - provide "blog this" link
print '<td align="right">'."\n";
print '<img src="'. $CFG->pixpath .'/blog/blog.gif" alt="'. get_string('blogthis', 'blog').'" title="'. get_string('blogthis', 'blog') .'" border="0" align="middle" />'."\n";
print '<a href="'. $CFG->wwwroot .'/blog/blogthis.php?userid='. $userid .'&act=use&item='. $y .'&rssid='. $rssid .'"><small><strong>'. get_string('blogthis', 'blog') .'</strong></small></a>'."\n";
/// MDL-9291, blog this feature needs further discussion/implementation
/// temporarily disabling for now.
// print '<img src="'. $CFG->pixpath .'/blog/blog.gif" alt="'. get_string('blogthis', 'blog').'" title="'. get_string('blogthis', 'blog') .'" border="0" align="middle" />'."\n";
//print '<a href="'. $CFG->wwwroot .'/blog/blogthis.php?userid='. $USER->id .'&act=use&item='. $y .'&rssid='. $rssid .'"><small><strong>'. get_string('blogthis', 'blog') .'</strong></small></a>'."\n";
} else {
print '<td>&nbsp;';
}
-3
View File
@@ -40,7 +40,6 @@ $block_rss_client_capabilities = array(
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
@@ -51,7 +50,6 @@ $block_rss_client_capabilities = array(
'contextlevel' => CONTEXT_SYSTEM,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
@@ -63,7 +61,6 @@ $block_rss_client_capabilities = array(
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
+4 -3
View File
@@ -75,7 +75,7 @@ switch ($filtertype) {
$courseid = $course->id;
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
require_login($course->id);
if (!has_capability('moodle/blog:view', $sitecontext)) {
if (!has_capability('moodle/blog:view', $coursecontext)) {
error('You do not have the required permissions to view blogs in this course');
}
break;
@@ -84,7 +84,8 @@ switch ($filtertype) {
if ($CFG->bloglevel < BLOG_GROUP_LEVEL) {
error('Group blogs is not enabled');
}
if (!$group = get_record('groups','id',$groupid)) {
// fix for MDL-9268
if (!$group = get_record('groups','id',$filterselect)) {
error('Incorrect group id specified');
}
if (!$course = get_record('course', 'id', $group->courseid)) {
@@ -115,7 +116,7 @@ switch ($filtertype) {
if ($USER->id == $filterselect) {
if (!has_capability('moodle/blog:create', $sitecontext)
and !has_capability('moodle/blog:view', $sitecontext)) {
error('You do not have your own a blog, sorry.');
error('You do not have your own blog, sorry.');
}
} else {
$personalcontext = get_context_instance(CONTEXT_USER, $filterselect);
+36 -17
View File
@@ -154,9 +154,9 @@
global $USER, $CFG, $COURSE, $ME;
$template['body'] = format_text($blogEntry->summary, $blogEntry->format);
$template['title'] = '<a name="'. $blogEntry->subject .'"></a>';
$template['title'] = '<a name="'. s($blogEntry->subject) .'"></a>';
//enclose the title in nolink tags so that moodle formatting doesn't autolink the text
$template['title'] .= '<span class="nolink">'.$blogEntry->subject.'</span>';
$template['title'] .= '<span class="nolink">'. format_string($blogEntry->subject) .'</span>';
$template['userid'] = $blogEntry->userid;
$template['author'] = fullname(get_record('user','id',$blogEntry->userid));
$template['lastmod'] = userdate($blogEntry->lastmodified);
@@ -327,10 +327,16 @@
if (has_capability('moodle/blog:manageentries', $sitecontext)) {
return true; // can manage all posts
}
// coming for 1 post, make sure it's not a draft
if ($blogEntry and $blogEntry->publishstate == 'draft') {
return false; // can not view draft of others
}
// coming for 1 post, make sure user is logged in, if not a public blog
if ($blogEntry && $blogEntry->publishstate != 'public' && !isloggedin()) {
return false;
}
switch ($CFG->bloglevel) {
case BLOG_GLOBAL_LEVEL:
@@ -345,7 +351,7 @@
break;
case BLOG_COURSE_LEVEL:
$mycourses = array_keys(get_my_courses($targetuserid));
$mycourses = array_keys(get_my_courses($USER->id));
$usercourses = array_keys(get_my_courses($targetuserid));
$shared = array_intersect($mycourses, $usercourses);
if (!empty($shared)) {
@@ -355,7 +361,7 @@
break;
case BLOG_GROUP_LEVEL:
$mycourses = array_keys(get_my_courses($targetuserid));
$mycourses = array_keys(get_my_courses($USER->id));
$usercourses = array_keys(get_my_courses($targetuserid));
$shared = array_intersect($mycourses, $usercourses);
foreach ($shared as $courseid) {
@@ -393,6 +399,8 @@
global $CFG, $USER;
$typesql = " AND p.module = 'blog' ";
/// set the tag id for searching
if ($tagid) {
$tag = $tagid;
@@ -411,7 +419,7 @@
if ($post = get_record('post', 'id', $postid)) {
if (blog_user_can_view_user_post($post->userid)) {
if (blog_user_can_view_user_post($post->userid, $post)) {
if ($user = get_record('user', 'id', $post->userid)) {
$post->email = $user->email;
@@ -437,13 +445,19 @@
$tagquerysql = '';
}
if (isloggedin()) {
$permissionsql = '(p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.')';
if (isloggedin() && !has_capability('moodle/legacy:guest', get_context_instance(CONTEXT_SYSTEM, SITEID), $USER->id, false)) {
$permissionsql = 'AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.')';
} else {
$permissionsql = 'p.publishstate = \'public\'';
$permissionsql = 'AND p.publishstate = \'public\'';
}
// fix for MDL-9165, use with readuserblogs capability in a user context can read that user's private blogs
// admins can see all blogs regardless of publish states, as described on the help page
if (has_capability('moodle/user:readuserblogs', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
$permissionsql = '';
} else if ($filtertype=='user' && has_capability('moodle/user:readuserblogs', get_context_instance(CONTEXT_USER, $filterselect))) {
$permissionsql = '';
}
/****************************************
* depending on the type, there are 4 *
* different possible sqls *
@@ -463,7 +477,7 @@
.$CFG->prefix.'user u
WHERE p.userid = u.id '.$tagquerysql.'
AND u.deleted = 0
AND '.$permissionsql;
'.$permissionsql.$typesql;
break;
@@ -477,20 +491,25 @@
AND ra.contextid '.get_related_contexts_string($context).'
AND u.id = p.userid
AND u.deleted = 0
AND '.$permissionsql;
'.$permissionsql.$typesql;
break;
case 'group':
$SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
.$CFG->prefix.'groups_members m, '.$CFG->prefix.'user u
WHERE p.userid = m.userid '.$tagquerysql.'
AND u.id = p.userid
AND m.groupid = '.$filterselect.'
AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.')';
/*$SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
.groups_members_from_sql().', '.$CFG->prefix.'user u
WHERE '.groups_members_where_sql($filterselect, 'p.userid').'
AND u.id = p.userid
AND u.deleted = 0
AND '.$permissionsql;
'.$permissionsql.$typesql;
*/
break;
case 'user':
@@ -500,7 +519,7 @@
WHERE p.userid = u.id '.$tagquerysql.'
AND u.id = '.$filterselect.'
AND u.deleted = 0
AND '.$permissionsql;
'.$permissionsql.$typesql;
break;
}
+10 -9
View File
@@ -9,14 +9,14 @@
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
// //
// Designed by: //
// Avgoustos Tsinakos (tsinakos@uom.gr) //
// Jon Papaioannou (pj@uom.gr) //
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// Programming and development: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// For bugs, suggestions, etc contact: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// The current module was developed at the University of Macedonia //
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
@@ -205,13 +205,14 @@
if (count($err) == 0) {
$form->timemodified = time();
if ($form->repeat) {
$fetch = get_record_sql('SELECT 1, MAX(repeatid) AS repeatid FROM '.$CFG->prefix.'event');
$form->repeatid = empty($fetch) ? 1 : $fetch->repeatid + 1;
}
/// Get the event id for the log record.
$eventid = insert_record('event', $form, true);
/// Use the event id as the repeatid to link repeat entries together
if ($form->repeat) {
$form->repeatid = $form->id = $eventid;
update_record('event', $form); // update the row, to set its repeatid
}
/// Log the event entry.
add_to_log($form->courseid, 'calendar', 'add', 'event.php?action=edit&amp;id='.$eventid, stripslashes($form->name));
+2 -2
View File
@@ -3,13 +3,13 @@
<form method="get" action="export_execute.php">
<?php print_string('iwanttoexport', 'calendar'); ?>:
<div class="indent">
<input type="radio" name="preset_what" id="pw_all" value="all" /><label for="pw_all"><?php print_string('eventsall', 'calendar'); ?></label><br />
<input type="radio" name="preset_what" id="pw_all" value="all" checked="checked"/><label for="pw_all"><?php print_string('eventsall', 'calendar'); ?></label><br />
<input type="radio" name="preset_what" id="pw_course" value="courses" /><label for="pw_course"><?php print_string('eventsrelatedtocourses', 'calendar'); ?></label><br />
</div>
<?php print_string('for', 'calendar'); ?>:
<div class="indent">
<?php if($allowthisweek) { ?>
<input type="radio" name="preset_time" id="pt_wknow" value="weeknow" /><label for="pt_wknow"><?php print_string('weekthis', 'calendar'); ?></label><br />
<input type="radio" name="preset_time" id="pt_wknow" value="weeknow" checked="checked"/><label for="pt_wknow"><?php print_string('weekthis', 'calendar'); ?></label><br />
<?php } ?>
<?php if($allownextweek) { ?>
<input type="radio" name="preset_time" id="pt_wknext" value="weeknext" /><label for="pt_wknext"><?php print_string('weeknext', 'calendar'); ?></label><br />
+2 -2
View File
@@ -16,8 +16,8 @@ $day = optional_param('cal_d', 0, PARAM_INT);
$mon = optional_param('cal_m', 0, PARAM_INT);
$yr = optional_param('cal_y', 0, PARAM_INT);
$what = optional_param('preset_what', '', PARAM_ALPHA);
$time = optional_param('preset_time', '', PARAM_ALPHA);
$what = optional_param('preset_what', 'all', PARAM_ALPHA);
$time = optional_param('preset_time', 'weeknow', PARAM_ALPHA);
$now = usergetdate(time());
// Let's see if we have sufficient and correct data
+39 -30
View File
@@ -9,14 +9,14 @@
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
// //
// Designed by: //
// Avgoustos Tsinakos (tsinakos@uom.gr) //
// Jon Papaioannou (pj@uom.gr) //
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// Programming and development: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// For bugs, suggestions, etc contact: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// The current module was developed at the University of Macedonia //
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
@@ -242,7 +242,7 @@ function calendar_get_mini($courses, $groups, $users, $cal_month = false, $cal_y
$popupicon = $CFG->pixpath.'/c/user.gif';
$popupalt = '';
}
$popupcontent .= '<div><img height="16" width="16" src="'.$popupicon.'" style="vertical-align: middle; margin-right: 4px;" alt="'.$popupalt.'" /><a href="'.$dayhref.'">'.format_string($event->name,true).'</a></div>';
$popupcontent .= '<div><img height="16" width="16" src="'.$popupicon.'" style="vertical-align: middle; margin-right: 4px;" alt="'.$popupalt.'" /><a href="'.$dayhref.'#event_'.$event->id.'">'.format_string($event->name,true).'</a></div>';
}
//Accessibility: functionality moved to calendar_get_popup.
@@ -456,7 +456,7 @@ function calendar_print_event($event) {
static $strftimetime;
$event = calendar_add_event_metadata($event);
echo '<table class="event" cellspacing="0">';
echo '<a name="event_'.$event->id.'"></a><table class="event" cellspacing="0">';
echo '<tr><td class="picture">';
if (!empty($event->icon)) {
echo $event->icon;
@@ -870,7 +870,7 @@ function calendar_get_sideblock_upcoming($events, $linkhref = NULL) {
if(!empty($linkhref)) {
$ed = usergetdate($events[$i]->timestart);
$href = calendar_get_link_href(CALENDAR_URL.$linkhref, $ed['mday'], $ed['mon'], $ed['year']);
$content .= '<a href="'.$href.'">'.$events[$i]->name.'</a>';
$content .= '<a href="'.$href.'#event_'.$events[$i]->id.'">'.$events[$i]->name.'</a>';
}
else {
$content .= $events[$i]->name;
@@ -1095,10 +1095,11 @@ function calendar_set_filters(&$courses, &$group, &$user, $courseeventsfrom = NU
else {
$courses = false;
}
//BUG 6130 clean $courses array as SESSION has bad entries.
foreach ($courses as $index => $value) {
if (empty($value)) unset($courses[$index]);
}
//BUG 6130 clean $courses array as SESSION has bad entries.
// [pj] TODO: See if this has to do with my new change in get_default_courses and can be taken out
foreach ($courses as $index => $value) {
if (empty($value)) unset($courses[$index]);
}
if($SESSION->cal_show_user || $ignorefilters) {
// This doesn't work for arrays yet (maybe someday it will)
@@ -1177,15 +1178,11 @@ function calendar_edit_event_allowed($event) {
if (has_capability('moodle/calendar:manageentries', $sitecontext)) {
return true;
}
// editting userid account
if ($event->userid) {
if ($event->userid == $USER->id) {
return (has_capability('moodle/calendar:manageownentries', $sitecontext));
}
} else if ($event->groupid) {
$group = get_record('groups', 'id', $event->groupid);
if($group === false) {
// if groupid is set, it's definitely a group event
if ($event->groupid) {
//TODO:check.
if (! groups_group_exists($event->groupid)) {
return false;
}
@@ -1193,10 +1190,15 @@ function calendar_edit_event_allowed($event) {
// to edit group calendar too
// there is no need to check membership, because if you have this capability
// you will have a role in this group context
return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_GROUP, $group->id));
return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_GROUP, $event->groupid));
} else if ($event->courseid) {
return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_COURSE, $event->courseid));
}
// if groupid is not set, but course is set,
// it's definiely a course event
return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_COURSE, $event->courseid));
} else if ($event->userid && $event->userid == $USER->id) {
// if course is not set, but userid id set, it's a user event
return (has_capability('moodle/calendar:manageownentries', $sitecontext));
}
return false;
}
@@ -1222,15 +1224,22 @@ function calendar_get_default_courses($ignoreref = false) {
// find all course this student can view
if ($allcourses = get_my_courses($USER->id,'visible DESC,sortorder ASC', '*', true)) {
foreach ($allcourses as $courseid=>$acourse) {
$auth = '';
$context = get_context_instance(CONTEXT_COURSE, $courseid);
// let's try to see if there is any direct assignments on tihs context
if ($roleassign = get_record('role_assignments', 'contextid', $context->id, 'userid', $USER->id)) {
$auth = $roleassign->enrol;
if ($roleassign = get_records_sql("SELECT * FROM {$CFG->prefix}role_assignments
WHERE contextid = $context->id
AND userid = $USER->id")) {
foreach ($roleassign as $rid => $rs) {
if (!empty($rs->enrol)) {
$auth = $rs->enrol;
break;
}
}
} else {
$auth = '';
}
$courses[$courseid] = $auth;
}
}
$courses[$courseid] = $auth;
}
}
return $courses;
@@ -1356,4 +1365,4 @@ function calendar_set_filters_status($packed_bitfield) {
return true;
}
?>
?>
+4 -4
View File
@@ -9,14 +9,14 @@
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
// //
// Designed by: //
// Avgoustos Tsinakos (tsinakos@uom.gr) //
// Jon Papaioannou (pj@uom.gr) //
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// Programming and development: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// For bugs, suggestions, etc contact: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// The current module was developed at the University of Macedonia //
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
+23 -13
View File
@@ -9,14 +9,14 @@
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
// //
// Designed by: //
// Avgoustos Tsinakos (tsinakos@uom.gr) //
// Jon Papaioannou (pj@uom.gr) //
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// Programming and development: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// For bugs, suggestions, etc contact: //
// Jon Papaioannou (pj@uom.gr) //
// Jon Papaioannou (pj@moodle.org) //
// //
// The current module was developed at the University of Macedonia //
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
@@ -44,8 +44,8 @@
require_once($CFG->dirroot.'/course/lib.php');
require_once($CFG->dirroot.'/calendar/lib.php');
$course = optional_param('course', 0);
$view = optional_param('view', 'upcoming');
$courseid = optional_param('course', 0, PARAM_INT);
$view = optional_param('view', 'upcoming', PARAM_ALPHA);
$day = optional_param('cal_d', 0, PARAM_INT);
$mon = optional_param('cal_m', 0, PARAM_INT);
$yr = optional_param('cal_y', 0, PARAM_INT);
@@ -54,7 +54,9 @@
redirect($CFG->wwwroot.'/'.$CFG->admin.'/index.php');
}
if ($CFG->forcelogin) {
if ($courseid) {
require_login($courseid);
} else if ($CFG->forcelogin) {
require_login();
}
@@ -87,8 +89,8 @@
}
// If a course has been supplied in the URL, change the filters to show that one
if (!empty($course)) {
if ($course = get_record('course', 'id', $course)) {
if (!empty($courseid)) {
if ($course = get_record('course', 'id', $courseid)) {
if ($course->id == SITEID) {
// If coming from the home page, show all courses
$SESSION->cal_courses_shown = calendar_get_default_courses(true);
@@ -100,6 +102,8 @@
calendar_set_referring_course($SESSION->cal_courses_shown);
}
}
} else {
$course = null;
}
if (empty($USER->id) or isguest()) {
@@ -302,9 +306,15 @@ function calendar_show_month_detailed($m, $y, $courses, $groups, $users) {
list($d, $m, $y) = array($date['mday'], $date['mon'], $date['year']); // This is what we want to display
$display->maxdays = calendar_days_in_month($m, $y);
// We 'll keep these values as GMT here, and offset them when the time comes to query the db
$display->tstart = gmmktime(0, 0, 0, $m, 1, $y); // This is GMT
$display->tend = gmmktime(23, 59, 59, $m, $display->maxdays, $y); // GMT
if (get_user_timezone_offset() < 99) {
// We 'll keep these values as GMT here, and offset them when the time comes to query the db
$display->tstart = gmmktime(0, 0, 0, $m, 1, $y); // This is GMT
$display->tend = gmmktime(23, 59, 59, $m, $display->maxdays, $y); // GMT
} else {
// no timezone info specified
$display->tstart = mktime(0, 0, 0, $m, 1, $y);
$display->tend = mktime(23, 59, 59, $m, $display->maxdays, $y);
}
$startwday = gmdate('w', $display->tstart); // $display->tstart is already GMT, so don't use date(): messes with server's TZ
@@ -440,7 +450,7 @@ function calendar_show_month_detailed($m, $y, $courses, $groups, $users) {
if(isset($eventsbyday[$day])) {
echo '<ul class="events-new">';
foreach($eventsbyday[$day] as $eventindex) {
echo '<li><a href="'.$dayhref.'">'.format_string($events[$eventindex]->name,true).'</a></li>';
echo '<li><a href="'.$dayhref.'#event_'.$events[$eventindex]->id.'">'.format_string($events[$eventindex]->name, true).'</a></li>';
}
echo '</ul>';
}
+2 -2
View File
@@ -325,12 +325,12 @@
echo'<a title="'.get_string('assignroles', 'role').'" href="'.$CFG->wwwroot.'/'.$CFG->admin.'/roles/assign.php?contextid='.$coursecontext->id.'"><img src="'.$CFG->pixpath.'/i/roles.gif" height="11" width="11" alt="'.get_string('assignroles', 'role').'" /></a>';
}
if (has_capability('moodle/course:delete', $coursecontext)) {
if (can_delete_course($acourse->id)) {
echo '<a title="'.$strdelete.'" href="delete.php?id='.$acourse->id.'">'.
'<img src="'.$CFG->pixpath.'/t/delete.gif" height="11" width="11" border="0" alt="'.$strdelete.'" /></a> ';
}
if (has_capability('moodle/course:visibility', $coursecontext)) {
if (has_capability('moodle/course:visibility', $coursecontext) && has_capability('moodle/course:viewhiddencourses', $coursecontext)) {
if (!empty($acourse->visible)) {
echo '<a title="'.$strhide.'" href="category.php?id='.$category->id.'&amp;page='.$page.
'&amp;perpage='.$perpage.'&amp;hide='.$acourse->id.'&amp;sesskey='.$USER->sesskey.'">'.
+3 -1
View File
@@ -8,7 +8,9 @@
require_login();
require_capability('moodle/course:delete', get_context_instance(CONTEXT_SYSTEM, SITEID));
if (!can_delete_course($id)) {
error('You do not have the permission to delete this course.');
}
if (!$site = get_site()) {
error("Site not found!");
+5
View File
@@ -156,6 +156,11 @@
}
$choices = $choices + $roles;
// fix for MDL-9197
foreach ($choices as $choiceid => $choice) {
$choices[$choiceid] = format_string($choice);
}
choose_from_menu ($choices, 'defaultrole', $form->defaultrole, '');
helpbutton("coursedefaultrole", get_string("defaultrole"));
+1 -1
View File
@@ -40,7 +40,7 @@
$disable_meta = get_string('metaalreadyhasenrolments');
}
}
} else { // Admin is creating a new course
} else { // Creating a new course
$context = get_context_instance(CONTEXT_COURSECAT, $category);
// first check to see if user has site level course creation.
+103 -159
View File
@@ -1,177 +1,122 @@
<?php // $Id$
// Edit course settings
require_once("../config.php");
require_once("lib.php");
require_once("$CFG->libdir/blocklib.php");
require_once("$CFG->dirroot/enrol/enrol.class.php");
require_once('../config.php');
require_once($CFG->dirroot.'/enrol/enrol.class.php');
require_once($CFG->libdir.'/blocklib.php');
require_once('lib.php');
require_once('edit_form.php');
include_once $CFG->libdir.'/formslib.php';
$id = optional_param('id', 0, PARAM_INT); // course id
$categoryid = optional_param('category', 0, PARAM_INT); // course category - can be changed in edit form
require_login();
$mform =& new moodleform('edit_course', 'post', 'edit2.php');
$mform->acceptGet('id', 'category');
$id = $mform->optional_param('id', 0, PARAM_INT); // course id
$category = $mform->optional_param('category', 0, PARAM_INT); // possible default category
$disable_meta = false;
$focus = "";
if ($id) {
if (! $course = get_record("course", "id", $id)) {
error("Course ID was incorrect");
/// basic access control checks
if ($id) { // editing course
if (!$course = get_record('course', 'id', $id)) {
error('Course ID was incorrect');
}
$category = get_record('course_categories', 'id', $course->category);
require_capability('moodle/course:update', get_context_instance(CONTEXT_COURSE, $course->id));
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if (!has_capability('moodle/course:update', $context)) {
error("You do not currently have editing privileges!");
} else if ($categoryid) { // creating new course in this category
$course = null;
if (!$category = get_record('course_categories', 'id', $categoryid)) {
error('Category ID was incorrect');
}
if (course_in_meta($course)) {
$disable_meta = get_string('metaalreadyinmeta');
} else if ($course->metacourse) {
if (count_records("course_meta","parent_course",$course->id) > 0) {
$disable_meta = get_string('metaalreadyhascourses');
}
} else {
$managers = count(get_users_by_capability($context, 'moodle/course:managemetacourse'));
$participants = count(get_users_by_capability($context, 'moodle/course:view'));
if ($participants > $managers) {
$disable_meta = get_string('metaalreadyhasenrolments');
}
}
} else { // Admin is creating a new course
$context = get_context_instance(CONTEXT_SYSTEM, SITEID);
if (!has_capability('moodle/course:create',$context)) {
error("You do not currently have course creation privileges!");
}
$course = NULL;
require_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $category->id));
} else {
error('Either course id or category must be specified');
}
if (! $site = get_site()) {
redirect("$CFG->wwwroot/$CFG->admin/index.php");
}
include("edit_form.php");
/// If data submitted, then process and store.
// data_submitted tries to validate form data and returns false if
// the user inputted data is invalid and the form should be redisplayed with
// feedback.
if ($fromform=$mform->data_submitted()) {
if (!empty($fromform->enrolstartdisabled)){
$fromform->enrolstartdate = 0;
}
if (!empty($fromform->enrolenddisabled)) {
$fromform->enrolenddate = 0;
}
/// prepare course
if (!empty($course)) {
$allowedmods = array();
if (!empty($fromform->allowedmods)) {
$allowedmods = $fromform->allowedmods;
unset($fromform->allowedmods);
}
$fromform->timemodified = time();
if ($fromform->defaultrole == -1) { // Just leave it however it is
unset($fromform->defaultrole);
}
if (!empty($course)) {
// Test for and remove blocks which aren't appropriate anymore
$page = page_create_object(PAGE_COURSE_VIEW, $course->id);
blocks_remove_inappropriate($page);
// Update with the new data
if (update_record('course', $fromform)) {
add_to_log($course->id, "course", "update", "edit.php?id=$id", "");
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
$course->restrictmodules = $fromform->restrictmodules;
update_restricted_mods($course,$allowedmods);
if ($am = get_records('course_allowed_modules','course',$course->id)) {
foreach ($am as $m) {
$allowedmods[] = $m->module;
}
fix_course_sortorder();
// everything ok, no need to display any message in redirect
redirect("view.php?id=$course->id");
} else {
error("Serious Error! Could not update the course record! (id = $fromform->id)");
if (empty($course->restrictmodules)) {
$allowedmods = explode(',',$CFG->defaultallowedmodules);
} // it'll be greyed out but we want these by default anyway.
}
} else {
$fromform->timecreated = time();
// place at beginning of category
fix_course_sortorder();
$fromform->sortorder = get_field_sql("SELECT min(sortorder)-1 FROM {$CFG->prefix}course WHERE category=$fromform->category");
if (empty($fromform->sortorder)) {
$fromform->sortorder = 100;
$course->allowedmods = $allowedmods;
if ($course->enrolstartdate){
$course->enrolstartdisabled = 0;
}
// fill in default teacher and student names to keep backwards compatibility
$fromform->teacher = addslashes(get_string('defaultcourseteacher'));
$fromform->teachers = addslashes(get_string('defaultcourseteachers'));
$fromform->student = addslashes(get_string('defaultcoursestudent'));
$fromform->students = addslashes(get_string('defaultcoursestudents'));
if ($newcourseid = insert_record('course', $fromform)) { // Set up new course
// Setup the blocks
$page = page_create_object(PAGE_COURSE_VIEW, $newcourseid);
blocks_repopulate_page($page); // Return value not checked because you can always edit later
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
$course = get_record("course","id",$newcourseid);
update_restricted_mods($course,$allowedmods);
}
$section = NULL;
$section->course = $newcourseid; // Create a default section.
$section->section = 0;
$section->id = insert_record("course_sections", $section);
fix_course_sortorder();
add_to_log(SITEID, "course", "new", "view.php?id=$newcourseid", "$fromform->fullname (ID $newcourseid)") ;
$context = get_context_instance(CONTEXT_COURSE, $newcourseid);
if ($fromform->metacourse and has_capability('moodle/course:managemetacourse', $context)) { // Redirect users with metacourse capability to student import
redirect($CFG->wwwroot."/course/importstudents.php?id=$newcourseid");
} else if (has_capability('moodle/role:assign', $context)) { // Redirect users with assign capability to assign users to different roles
redirect($CFG->wwwroot."/$CFG->admin/roles/assign.php?contextid=$context->id");
} else { // Add current teacher and send to course
// find a role with legacy:edittingteacher
if ($teacherroles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, $context)) {
// assign the role to this user
$teachereditrole = array_shift($teacherroles);
role_assign($teachereditrole->id, $USER->id, 0, $context->id);
}
redirect("view.php?id=$newcourseid");
}
} else {
error("Serious Error! Could not create the new course!");
if ($course->enrolenddate) {
$course->enrolenddisabled = 0;
}
}
die;
}
//print the form
/// first create the form
$editform = new course_edit_form('edit.php', compact('course', 'category'));
// now override defaults if course already exists
if (!empty($course)) {
$editform->set_data($course);
}
if ($editform->is_cancelled()){
if (empty($course)) {
redirect($CFG->wwwroot);
} else {
redirect($CFG->wwwroot.'/course/view.php?id='.$course->id);
}
} else if ($data = $editform->get_data()) {
/// process data if submitted
//preprocess data
if ($data->enrolstartdisabled){
$data->enrolstartdate = 0;
}
if ($data->enrolenddisabled) {
$data->enrolenddate = 0;
}
$data->timemodified = time();
if (empty($course)) {
if (!$course = create_course($data)) {
print_error('coursenotcreated');
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
// assign default role to creator if not already having permission to manage course assignments
if (!has_capability('moodle/course:view', $context) or !has_capability('moodle/role:assign', $context)) {
role_assign($CFG->creatornewroleid, $USER->id, 0, $context->id);
}
if ($data->metacourse and has_capability('moodle/course:managemetacourse', $context)) {
// Redirect users with metacourse capability to student import
redirect($CFG->wwwroot."/course/importstudents.php?id=$course->id");
} else {
// Redirect to roles assignment
redirect($CFG->wwwroot."/$CFG->admin/roles/assign.php?contextid=$context->id");
}
} else {
if (!update_course($data)) {
print_error('coursenotupdated');
}
redirect($CFG->wwwroot."/course/view.php?id=$course->id");
}
}
/// Print the form
$site = get_site();
$streditcoursesettings = get_string("editcoursesettings");
$straddnewcourse = get_string("addnewcourse");
@@ -179,20 +124,19 @@
$strcategories = get_string("categories");
if (!empty($course)) {
print_header($streditcoursesettings, "$course->fullname",
print_header($streditcoursesettings, $course->fullname,
"<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a>
-> $streditcoursesettings", $focus);
-> $streditcoursesettings", $editform->focus());
} else {
print_header("$site->shortname: $straddnewcourse", "$site->fullname",
"<a href=\"../$CFG->admin/index.php\">$stradministration</a> -> ".
"<a href=\"index.php\">$strcategories</a> -> $straddnewcourse", $focus);
print_header("$site->shortname: $straddnewcourse", $site->fullname,
"<a href=\"$CFG->wwwroot/$CFG->admin/index.php\">$stradministration</a> -> ".
"<a href=\"index.php\">$strcategories</a> -> $straddnewcourse", $editform->focus());
}
print_heading($streditcoursesettings);
$mform->display();
$editform->display();
print_footer($course);
?>
+341 -351
View File
@@ -1,392 +1,382 @@
<?php
/// For moodleform we reconstruct all the data about the form after submission before we
/// extract data submitted. So we can then tell for select, checkbox and radio fields what
/// options could have been submitted by the form eg submitted value for a single selection
/// select field must be one of the options of the select field.
<?php //$Id$
// $toform will be used for the default value of a field if no data has been submitted.
require_once($CFG->libdir.'/formslib.php');
if (!empty($course)) {
//this is what we do if we are editing a record from the db
$toform = $course;
$toform->allowedmods = array();
if ($am = get_records("course_allowed_modules","course",$course->id)) {
foreach ($am as $m) {
$toform->allowedmods[] = $m->module;
class course_edit_form extends moodleform {
function definition() {
global $USER, $CFG;
$mform =& $this->_form;
$course = $this->_customdata['course'];
$category = $this->_customdata['category'];
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
$categorycontext = get_context_instance(CONTEXT_COURSECAT, $category->id);
$disable_meta = false; // basic meta course state protection; server-side security checks not needed
if (!empty($course)) {
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$context = $coursecontext;
if (course_in_meta($course)) {
$disable_meta = get_string('metaalreadyinmeta');
} else if ($course->metacourse) {
if (count_records('course_meta', 'parent_course', $course->id) > 0) {
$disable_meta = get_string('metaalreadyhascourses');
}
} else {
$managers = count(get_users_by_capability($coursecontext, 'moodle/course:managemetacourse'));
$participants = count(get_users_by_capability($coursecontext, 'moodle/course:view'));
if ($participants > $managers) {
$disable_meta = get_string('metaalreadyhasenrolments');
}
}
} else {
if (empty($course->restrictmodules)) {
$toform->allowedmods = explode(',',$CFG->defaultallowedmodules);
} // it'll be greyed out but we want these by default anyway.
}
} else {
//this is a brand new course!
$toform->startdate = time() + 3600 * 24;
$toform->fullname = get_string("defaultcoursefullname");
$toform->shortname = get_string("defaultcourseshortname");
$toform->summary = get_string("defaultcoursesummary");
$toform->format = "weeks";
$toform->password = "";
$toform->guest = 0;
$toform->numsections = 10;
$toform->idnumber = '';
$toform->cost = '';
$toform->currency = empty($CFG->enrol_currency) ? 'USD' : $CFG->enrol_currency;
$toform->newsitems = 5;
$toform->showgrades = 1;
$toform->groupmode = 0;
$toform->groupmodeforce = 0;
$toform->category = $category;
$toform->id = "";
$toform->visible = 1;
$toform->allowedmods = array();
if ($CFG->restrictmodulesfor == 'all') {
$toform->allowedmods = explode(',',$CFG->defaultallowedmodules);
if (!empty($CFG->restrictbydefault)) {
$toform->restrictmodules = 1;
}
$coursecontext = null;
$context = $categorycontext;
}
/// form definition with new course defaults
//--------------------------------------------------------------------------------
$mform->addElement('header','general', get_string('general', 'form'));
}
//must have create course capability in both categories in order to move course
if (has_capability('moodle/course:create', $categorycontext)) {
$displaylist = array();
$parentlist = array();
make_categories_list($displaylist, $parentlist);
foreach ($displaylist as $key=>$val) {
if (!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $key))) {
unset($displaylist[$key]);
}
}
$mform->addElement('select', 'category', get_string('category'), $displaylist);
} else {
$mform->addElement('hidden', 'category', null);
}
$mform->setHelpButton('category', array('coursecategory', get_string('category')));
$mform->setDefault('category', $category->id);
$mform->setType('category', PARAM_INT);
$mform->addElement('header','general', get_string("general"));
if (has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $toform->category))) {
$displaylist = array();
$parentlist = array();
make_categories_list($displaylist, $parentlist);
$mform->addElement('select', "category", get_string("category"), $displaylist );
}
$mform->setDefault('fullname', $toform->fullname);
$mform->addElement('text','fullname', get_string("fullname"),'maxlength="254" size="50"');
$mform->setDefault('shortname', $toform->shortname);
$mform->addElement('text','shortname', get_string("shortname"),'maxlength="15" size="10"');
$mform->setDefault('idnumber', $toform->idnumber);
$mform->addElement('text','idnumber', get_string("idnumbercourse"),'maxlength="100" size="10"');
$mform->setDefault('summary', $toform->summary);
$mform->addElement('htmleditor','summary', get_string("summary"), array('rows'=>'10', 'cols'=>'65'));
$mform->addElement('text','fullname', get_string('fullname'),'maxlength="254" size="50"');
$mform->setHelpButton('fullname', array('coursefullname', get_string('fullname')), true);
$mform->setDefault('fullname', get_string('defaultcoursefullname'));
$mform->addRule('fullname', get_string('missingfullname'), 'required', null, 'client');
$mform->setType('fullname', PARAM_MULTILANG);
$mform->setDefault('format', $toform->format);
$courseformats = get_list_of_plugins("course/format");
$formcourseformats = array();
$mform->addElement('text','shortname', get_string('shortname'),'maxlength="15" size="10"');
$mform->setHelpButton('shortname', array('courseshortname', get_string('shortname')), true);
$mform->setDefault('shortname', get_string('defaultcourseshortname'));
$mform->addRule('shortname', get_string('missingshortname'), 'required', null, 'client');
$mform->setType('shortname', PARAM_MULTILANG);
foreach ($courseformats as $courseformat) {
$formcourseformats["$courseformat"] = get_string("format$courseformat");
}
$mform->addElement('text','idnumber', get_string('idnumbercourse'),'maxlength="100" size="10"');
$mform->setHelpButton('idnumber', array('courseidnumber', get_string('idnumbercourse')), true);
$mform->setType('idnumber', PARAM_RAW);
$mform->addElement('select', 'format', get_string("format"), $formcourseformats );
$mform->addElement('htmleditor','summary', get_string('summary'), array('rows'=> '10', 'cols'=>'65'));
$mform->setHelpButton('summary', array('text', get_string('helptext')), true);
$mform->setDefault('summary', get_string('defaultcoursesummary'));
$mform->addRule('summary', get_string('missingsummary'), 'required', null, 'client');
$mform->setType('summary', PARAM_RAW);
$mform->setDefault('numsections', $toform->numsections);
for ($i=1; $i<=52; $i++) {
$sectionmenu[$i] = "$i";
}
$mform->addElement('select', 'numsections', get_string("numberweeks"), $sectionmenu);
$mform->setDefault('startdate', $toform->startdate);
$mform->addElement('date_selector', 'startdate', get_string('startdate'));
$courseformats = get_list_of_plugins('course/format');
$formcourseformats = array();
foreach ($courseformats as $courseformat) {
$formcourseformats["$courseformat"] = get_string("format$courseformat","format_$courseformat");
if($formcourseformats["$courseformat"]=="[[format$courseformat]]") {
$formcourseformats["$courseformat"] = get_string("format$courseformat");
}
}
$mform->addElement('select', 'format', get_string('format'), $formcourseformats);
$mform->setHelpButton('format', array('courseformats', get_string('courseformats')), true);
$mform->setDefault('format', 'weeks');
$mform->setDefault('hiddensections',(isset($toform->hiddensections))?$toform->hiddensections:0);
unset($choices);
$choices["0"] = get_string("hiddensectionscollapsed");
$choices["1"] = get_string("hiddensectionsinvisible");
$mform->addElement('select', 'hiddensections', get_string("hiddensections"), $choices);
for ($i=1; $i<=52; $i++) {
$sectionmenu[$i] = "$i";
}
$mform->addElement('select', 'numsections', get_string('numberweeks'), $sectionmenu);
$mform->setDefault('numsections', 10);
$mform->setDefault('newsitems', $toform->newsitems);
$newsitem = get_string("newsitem");
$newsitems = get_string("newsitems");
$options = array("0" => "0 $newsitems",
"1" => "1 $newsitem",
"2" => "2 $newsitems",
"3" => "3 $newsitems",
"4" => "4 $newsitems",
"5" => "5 $newsitems",
"6" => "6 $newsitems",
"7" => "7 $newsitems",
"8" => "8 $newsitems",
"9" => "9 $newsitems",
"10" => "10 $newsitems");
$mform->addElement('select', 'newsitems', get_string("newsitemsnumber"), $options);
$mform->addElement('date_selector', 'startdate', get_string('startdate'));
$mform->setHelpButton('startdate', array('coursestartdate', get_string('startdate')), true);
$mform->setDefault('startdate', time() + 3600 * 24);
$mform->setDefault('showgrades', $toform->showgrades);
unset($choices);
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
$mform->addElement('select', 'showgrades', get_string("showgrades"), $choices);
unset($choices);
$mform->setDefault('showreports',(isset($toform->showreports))?$toform->showreports:0);
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
$mform->addElement('select', 'showreports', get_string("showreports"), $choices);
$mform->setDefault('maxbytes',(isset($toform->maxbytes))?$toform->maxbytes:0);
$choices = get_max_upload_sizes($CFG->maxbytes);
$mform->addElement('select', 'maxbytes', get_string("maximumupload"), $choices);
if (!empty($CFG->allowcoursethemes)) {
$mform->setDefault('theme',(isset($toform->theme))?$toform->theme:'');
$themes=array();
$themes[''] = get_string("forceno");
$themes += get_list_of_themes();
$mform->addElement('select', 'theme', get_string("forcetheme"), $themes);
}
unset($choices);
$mform->setDefault('metacourse',(isset($toform->metacourse))?$toform->metacourse:0);
$choices = array();
$choices['0'] = get_string('hiddensectionscollapsed');
$choices['1'] = get_string('hiddensectionsinvisible');
$mform->addElement('select', 'hiddensections', get_string('hiddensections'), $choices);
$mform->setHelpButton('hiddensections', array('coursehiddensections', get_string('hiddensections')), true);
$mform->setDefault('hiddensections', 0);
$options = range(0, 10);
$mform->addElement('select', 'newsitems', get_string('newsitemsnumber'), $options);
$mform->setHelpButton('newsitems', array('coursenewsitems', get_string('newsitemsnumber')), true);
$mform->setDefault('newsitems', 5);
$mform->addElement('selectyesno', 'showgrades', get_string('showgrades'));
$mform->setHelpButton('showgrades', array('coursegrades', get_string('grades')), true);
$mform->setDefault('showgrades', 1);
$mform->addElement('selectyesno', 'showreports', get_string('showreports'));
$mform->setHelpButton('showreports', array('coursereports', get_string('activityreport')), true);
$mform->setDefault('showreports', 0);
$choices = get_max_upload_sizes($CFG->maxbytes);
$mform->addElement('select', 'maxbytes', get_string('maximumupload'), $choices);
$mform->setHelpButton('maxbytes', array('courseuploadsize', get_string('maximumupload')), true);
if (!empty($CFG->allowcoursethemes)) {
$themes=array();
$themes[''] = get_string('forceno');
$themes += get_list_of_themes();
$mform->addElement('select', 'theme', get_string('forcetheme'), $themes);
}
if (empty($disable_meta)) {
$meta=array();
$meta[0] = get_string('no');
$meta[1] = get_string('yes');
$mform->addElement('select', 'metacourse', get_string("managemeta"), $meta);
}else{
$mform->addElement('static', 'metacourse', get_string("managemeta"),
((empty($toform->metacourse)) ? get_string("no") : get_string("yes"))
. " - $disable_meta ");
}
$mform->setDefault('defaultrole',(isset($toform->defaultrole))?$toform->defaultrole:0);
$roles = get_assignable_roles($context);
asort($roles);
$choices = array();
if ($sitedefaultrole = get_record('role', 'id', $CFG->defaultcourseroleid)) {
$choices[0] = get_string('sitedefault').' ('.$sitedefaultrole->name.')';
} else {
$choices[0] = get_string('sitedefault');
}
$choices = $choices + $roles;
$defaultroleelement=$mform->addElement('select', 'defaultrole', get_string('defaultrole', 'role'), $choices );
if ($mform->exportValue('defaultrole') && !isset($roles[$mform->exportValue('defaultrole')])) { // Existing setting is one we can't choose
if ($coursedefaultrole = get_record('role', 'id', $mform->exportValue('defaultrole'))) {
$defaultroleelement->addOption(get_string('currentrole', 'role').' ('.$coursedefaultrole->name.')',-1);
if ($disable_meta === false) {
$mform->addElement('select', 'metacourse', get_string('managemeta'), $meta);
$mform->setHelpButton('metacourse', array('metacourse', get_string('metacourse')), true);
$mform->setDefault('metacourse', 0);
} else {
$defaultroleelement->addOption(get_string('currentrole', 'role'),-1);
// no metacourse element - we do not want to change it anyway!
$mform->addElement('static', 'nometacourse', get_string('managemeta'),
((empty($course->metacourse)) ? $meta[0] : $meta[1]) . " - $disable_meta ");
$mform->setHelpButton('nometacourse', array('metacourse', get_string('metacourse')), true);
}
}
$mform->addElement('header','enrolhdr', get_string("enrolment"));
$mform->setDefault('enrol',(isset($toform->enrol))?$toform->enrol:'');
$modules = explode(',', $CFG->enrol_plugins_enabled);
foreach ($modules as $module) {
$name = get_string("enrolname", "enrol_$module");
$plugin = enrolment_factory::factory($module);
if (method_exists($plugin, 'print_entry')) {
$choices[$name] = $module;
$roles = get_assignable_roles($context);
if (!empty($course)) {
// add current default role, so that it is selectable even when user can not assign it
if ($current_role = get_record('role', 'id', $course->defaultrole)) {
$roles[$current_role->id] = strip_tags(format_string($current_role->name, true));
}
}
}
asort($choices);
$choices = array_flip($choices);
$choices = array_merge(array('' => get_string('sitedefault').' ('.get_string("enrolname", "enrol_$CFG->enrol").')'), $choices);
$mform->addElement('select', 'enrol', get_string("enrolmentplugins"), $choices );
$mform->setDefault('enrollable',(isset($toform->enrollable))?$toform->enrollable:1);
$radio = array();
$radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("no"), 0);
$radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("yes"), 1);
$radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("enroldate"), 2);
$mform->addGroup($radio, 'enrollable', get_string("enrollable"), ' ', false);
$mform->setDefault('enrolstartdate',(isset($toform->enrolstartdate))?$toform->enrolstartdate:0);
$mform->setDefault('enrolstartdisabled',
(!isset($toform->enrolstartdate)||
(isset($toform->enrolstartdate)&&!$toform->enrolstartdate)
?1:0));
$enroldatestartgrp = array();
$enroldatestartgrp[] = &moodleform::createElement('date_selector', 'enrolstartdate');
$enroldatestartgrp[] = &moodleform::createElement('checkbox', 'enrolstartdisabled', null, get_string('disable'));
$mform->addGroup($enroldatestartgrp, '', get_string('enrolstartdate'), ' ', false);
$mform->setDefault('enrolenddate',(isset($toform->enrolenddate))?$toform->enrolenddate:0);
$mform->setDefault('enrolenddisabled',
(!isset($toform->enrolenddate)||
(isset($toform->enrolenddate)&&!$toform->enrolenddate)
?1:0));
$enroldateendgrp = array();
$enroldateendgrp[] = &moodleform::createElement('date_selector', 'enrolenddate');
$enroldateendgrp[] = &moodleform::createElement('checkbox', 'enrolenddisabled', null, get_string('disable'));
$mform->addGroup($enroldateendgrp, 'enroldateendgrp', get_string('enrolenddate'), ' ', false);
$mform->setDefault('enrolperiod',(isset($toform->enrolperiod))?$toform->enrolperiod:0);
$periodmenu=array();
$periodmenu[0] = get_string('unlimited');
for ($i=1; $i<=365; $i++) {
$seconds = $i * 86400;
$periodmenu[$seconds] = get_string('numdays', '', $i);
}
$mform->addElement('select', 'enrolperiod', get_string("enrolperiod"), $periodmenu);
$mform->addElement('header','expirynotifyhdr', get_string("expirynotify"));
$mform->setDefault('expirynotify',(isset($toform->expirynotify))?$toform->expirynotify:0);
unset($choices);
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
$mform->addElement('select', 'expirynotify', get_string("expirynotify"), $choices);
$mform->setDefault('notifystudents',(isset($toform->notifystudents))?$toform->notifystudents:0);
$mform->addElement('select', 'notifystudents', get_string("expirynotifystudents"), $choices);
$mform->setDefault('expirythreshold',(isset($toform->expirythreshold))?$toform->expirythreshold:10 * 86400);
$thresholdmenu=array();
for ($i=1; $i<=30; $i++) {
$seconds = $i * 86400;
$thresholdmenu[$seconds] = get_string('numdays', '', $i);
}
$mform->addElement('select', 'expirythreshold', get_string("expirythreshold"), $thresholdmenu);
$mform->addElement('header','', get_string("groupmode"));
$choices = array();
if ($sitedefaultrole = get_record('role', 'id', $CFG->defaultcourseroleid)) {
$choices[0] = get_string('sitedefault').' ('.$sitedefaultrole->name.')';
} else {
$choices[0] = get_string('sitedefault');
}
$choices = $choices + $roles;
$mform->addElement('select', 'defaultrole', get_string('defaultrole', 'role'), $choices);
$mform->setDefault('defaultrole', 0);
$mform->setDefault('groupmode', $toform->groupmode);
unset($choices);
$choices[NOGROUPS] = get_string("groupsnone");
$choices[SEPARATEGROUPS] = get_string("groupsseparate");
$choices[VISIBLEGROUPS] = get_string("groupsvisible");
$mform->addElement('select', 'groupmode', get_string("groupmode"), $choices);
$mform->setDefault('groupmodeforce', $toform->groupmodeforce);
unset($choices);
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
$mform->addElement('select', 'groupmodeforce', get_string("force"), $choices);
//--------------------------------------------------------------------------------
$mform->addElement('header','enrolhdr', get_string('enrolments'));
$mform->addElement('header','', get_string("availability"));
$choices = array();
$modules = explode(',', $CFG->enrol_plugins_enabled);
foreach ($modules as $module) {
$name = get_string('enrolname', "enrol_$module");
$plugin = enrolment_factory::factory($module);
if (method_exists($plugin, 'print_entry')) {
$choices[$name] = $module;
}
}
asort($choices);
$choices = array_flip($choices);
$choices = array_merge(array('' => get_string('sitedefault').' ('.get_string('enrolname', "enrol_$CFG->enrol").')'), $choices);
$mform->addElement('select', 'enrol', get_string('enrolmentplugins'), $choices);
$mform->setHelpButton('enrol', array('courseenrolmentplugins', get_string('enrolmentplugins')), true);
$mform->setDefault('visible', $toform->visible);
unset($choices);
$choices["0"] = get_string("courseavailablenot");
$choices["1"] = get_string("courseavailable");
$mform->addElement('select', 'visible', get_string("availability"), $choices);
$mform->setDefault('password', $toform->password);
$mform->addElement('text', 'password', get_string("enrolmentkey"), 'size="25"');
$mform->setDefault('guest', $toform->guest);
unset($choices);
$choices["0"] = get_string("guestsno");
$choices["1"] = get_string("guestsyes");
$choices["2"] = get_string("guestskey");
$mform->addElement('select', 'guest', get_string("opentoguests"), $choices);
if (isset($course) && method_exists(enrolment_factory::factory($course->enrol), 'print_entry') && $course->enrol != 'manual') {
$mform->setDefault('cost', $toform->cost);
$mform->setDefault('currency', $toform->currency);
$costgroup=array();
$currencies = get_list_of_currencies();
$costgroup[]= &moodleform::createElement('text','cost', '', 'maxlength="6" size="6"');
$costgroup[]= &moodleform::createElement('select', 'currency', '', $currencies);
$mform->addGroup($costgroup, 'costgrp', get_string("cost"), '&nbsp;', false);
$radio = array();
$radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('no'), 0);
$radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('yes'), 1);
$radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('enroldate'), 2);
$mform->addGroup($radio, 'enrollable', get_string('enrollable'), ' ', false);
$mform->setHelpButton('enrollable', array('courseenrollable', get_string('enrollable')), true);
$mform->setDefault('enrollable', 1);
$enroldatestartgrp = array();
$enroldatestartgrp[] = &MoodleQuickForm::createElement('date_selector', 'enrolstartdate');
$enroldatestartgrp[] = &MoodleQuickForm::createElement('checkbox', 'enrolstartdisabled', null, get_string('disable'));
$mform->addGroup($enroldatestartgrp, 'enrolstartdategrp', get_string('enrolstartdate'), ' ', false);
$mform->setDefault('enrolstartdate', 0);
$mform->setDefault('enrolstartdisabled', 1);
$mform->disabledIf('enrolstartdategrp', 'enrolstartdisabled', 'checked');
$enroldateendgrp = array();
$enroldateendgrp[] = &MoodleQuickForm::createElement('date_selector', 'enrolenddate');
$enroldateendgrp[] = &MoodleQuickForm::createElement('checkbox', 'enrolenddisabled', null, get_string('disable'));
$mform->addGroup($enroldateendgrp, 'enroldateendgrp', get_string('enrolenddate'), ' ', false);
$mform->setDefault('enrolenddate', 0);
$mform->setDefault('enrolenddisabled', 1);
$mform->disabledIf('enroldateendgrp', 'enrolenddisabled', 'checked');
$periodmenu=array();
$periodmenu[0] = get_string('unlimited');
for ($i=1; $i<=365; $i++) {
$seconds = $i * 86400;
$periodmenu[$seconds] = get_string('numdays', '', $i);
}
$mform->addElement('select', 'enrolperiod', get_string('enrolperiod'), $periodmenu);
$mform->setDefault('enrolperiod', 0);
//--------------------------------------------------------------------------------
$mform->addElement('header','expirynotifyhdr', get_string('expirynotify'));
$choices = array();
$choices['0'] = get_string('no');
$choices['1'] = get_string('yes');
$mform->addElement('select', 'expirynotify', get_string('notify'), $choices);
$mform->setHelpButton('expirynotify', array('expirynotify', get_string('expirynotify')), true);
$mform->setDefault('expirynotify', 0);
$mform->addElement('select', 'notifystudents', get_string('expirynotifystudents'), $choices);
$mform->setHelpButton('notifystudents', array('expirynotifystudents', get_string('expirynotifystudents')), true);
$mform->setDefault('notifystudents', 0);
$thresholdmenu=array();
for ($i=1; $i<=30; $i++) {
$seconds = $i * 86400;
$thresholdmenu[$seconds] = get_string('numdays', '', $i);
}
$mform->addElement('select', 'expirythreshold', get_string('expirythreshold'), $thresholdmenu);
$mform->setHelpButton('expirythreshold', array('expirythreshold', get_string('expirythreshold')), true);
$mform->setDefault('expirythreshold', 10 * 86400);
//--------------------------------------------------------------------------------
$mform->addElement('header','', get_string('groups', 'group'));
$choices = array();
$choices[NOGROUPS] = get_string('no');
$choices[SEPARATEGROUPS] = get_string('separate');
$choices[VISIBLEGROUPS] = get_string('visible');
$mform->addElement('select', 'groupmode', get_string('groupmode'), $choices);
$mform->setHelpButton('groupmode', array('groupmode', get_string('groupmode')), true);
$mform->setDefault('groupmode', 0);
$choices = array();
$choices['0'] = get_string('no');
$choices['1'] = get_string('yes');
$mform->addElement('select', 'groupmodeforce', get_string('force'), $choices);
$mform->setHelpButton('groupmodeforce', array('groupmodeforce', get_string('groupmodeforce')), true);
$mform->setDefault('groupmodeforce', 0);
//--------------------------------------------------------------------------------
$mform->addElement('header','', get_string('availability'));
$choices = array();
$choices['0'] = get_string('courseavailablenot');
$choices['1'] = get_string('courseavailable');
$mform->addElement('select', 'visible', get_string('availability'), $choices);
$mform->setHelpButton('visible', array('courseavailability', get_string('availability')), true);
$mform->setDefault('visible', 1);
$mform->addElement('text', 'password', get_string('enrolmentkey'), 'size="25"');
$mform->setHelpButton('password', array('enrolmentkey', get_string('enrolmentkey')), true);
$mform->setDefault('password', '');
$mform->setType('password', PARAM_RAW);
$choices = array();
$choices['0'] = get_string('guestsno');
$choices['1'] = get_string('guestsyes');
$choices['2'] = get_string('guestskey');
$mform->addElement('select', 'guest', get_string('opentoguests'), $choices);
$mform->setHelpButton('guest', array('guestaccess', get_string('opentoguests')), true);
$mform->setDefault('guest', 0);
if (!empty($course) && method_exists(enrolment_factory::factory($course->enrol), 'print_entry') && $course->enrol != 'manual') {
$costgroup=array();
$currencies = get_list_of_currencies();
$costgroup[]= &MoodleQuickForm::createElement('text','cost', '', 'maxlength="6" size="6"');
$costgroup[]= &MoodleQuickForm::createElement('select', 'currency', '', $currencies);
$mform->addGroup($costgroup, 'costgrp', get_string('cost'), '&nbsp;', false);
//defining a rule for a form element within a group :
$costgrprules=array();
//set the message to null to tell Moodle to use a default message
//available for most rules, fetched from language pack (err_{rulename}).
$costgrprules['cost'][]=array(null, 'numeric', null, 'client');
$mform->addGroupRule('costgrp',$costgrprules);
$mform->setHelpButton('costgrp', array('cost', get_string('cost')), true);
$mform->setDefault('cost', '');
$mform->setDefault('currency', empty($CFG->enrol_currency) ? 'USD' : $CFG->enrol_currency);
}
//--------------------------------------------------------------------------------
$mform->addElement('header','', get_string('language'));
$languages=array();
$languages[''] = get_string('forceno');
$languages += get_list_of_languages();
$mform->addElement('select', 'lang', get_string('forcelanguage'), $languages);
//--------------------------------------------------------------------------------
if (has_capability('moodle/site:config', $systemcontext) && ((!empty($course->requested) && $CFG->restrictmodulesfor == 'requested') || $CFG->restrictmodulesfor == 'all')) {
$mform->addElement('header', '', get_string('restrictmodules'));
$options = array();
$options['0'] = get_string('no');
$options['1'] = get_string('yes');
$mform->addElement('select', 'restrictmodules', get_string('restrictmodules'), $options);
$mods = array(0=>get_string('allownone'));
$mods += get_records_menu('modules', '','','','id, name');
$mform->addElement('select', 'allowedmods', get_string('to'), $mods,
array('multiple'=>'multiple', 'size'=>'10'));
$mform->disabledIf('allowedmods', 'restrictmodules', 'eq', 0);
} else {
$mform->addElement('hidden', 'restrictmodules', null);
}
if ($CFG->restrictmodulesfor == 'all') {
$mform->setDefault('allowedmods', explode(',',$CFG->defaultallowedmodules));
if (!empty($CFG->restrictbydefault)) {
$mform->setDefault('restrictmodules', 1);
}
}
$mform->setType('restrictmodules', PARAM_INT);
//--------------------------------------------------------------------------------
$this->add_action_buttons();
//--------------------------------------------------------------------------------
$mform->addElement('hidden', 'id', null);
$mform->setType('id', PARAM_INT);
// fill in default teacher and student names to keep backwards compatibility for a while
$mform->addElement('hidden', 'teacher', get_string('defaultcourseteacher'));
$mform->addElement('hidden', 'teachers', get_string('defaultcourseteachers'));
$mform->addElement('hidden', 'student', get_string('defaultcoursestudent'));
$mform->addElement('hidden', 'students', get_string('defaultcoursestudents'));
}
$mform->addElement('header','', get_string("language"));
$mform->setDefault('lang',(isset($toform->lang))?$toform->lang:'');
$languages=array();
$languages[''] = get_string("forceno");
$languages += get_list_of_languages();
$mform->addElement('select', 'lang', get_string("forcelanguage"), $languages);
if(!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $toform->category))) {
$mform->addElement('hidden', 'category', null);
}
$mform->addElement('hidden', 'id', null);
$mform->setDefault('restrictmodules',(isset($toform->restrictmodules))?$toform->restrictmodules:0);
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID)) && ((!empty($course->requested) && $CFG->restrictmodulesfor == 'requested') || $CFG->restrictmodulesfor == 'all')) {
unset($options);
$options[0] = get_string("no");
$options[1] = get_string("yes");
$mform->addElement('header', '', get_string("restrictmodules"));
$mform->addElement('select', 'restrictmodules', get_string("restrictmodules"), $options,
array('onChange'=>"document.getElementById('id_allowedmods').disabled=".
"((this.selectedIndex==0)?true:false);"));
$mods = array(0=>get_string('allownone'));
$mods += get_records_menu("modules", '','','','id, name');
$disabled=($mform->exportValue('restrictmodules')==1) ? array() :array('disabled' => 'disabled') ;
$mform->setDefault('allowedmods', $toform->allowedmods);
$mform->addElement('select', 'allowedmods', get_string("to"),$mods,
array('multiple'=>"multiple", 'size'=>"10", 'id'=>"allowedmods")
+$disabled);
}else {
$mform->addElement('hidden', 'restrictmodules', $toform->restrictmodules);
}
$mform->setHelpButtons(array('category'=>array("coursecategory", get_string("category")),
'fullname'=>array("coursefullname", get_string("fullname")),
'shortname'=>array("courseshortname", get_string("shortname")),
'idnumber'=>array("courseidnumber", get_string("idnumbercourse")),
'summary'=>array("text", get_string("helptext")),
'format'=>array("courseformats", get_string("courseformats")),
'summary'=>array("coursestartdate", get_string("startdate")),
'enrol'=>array("courseenrolmentplugins", get_string("enrolmentplugins")),
'enrollable'=>array("courseenrollable", get_string("enrollable")),
'expirynotify'=>array("expirynotify", get_string("expirynotify")),
'notifystudents'=>array("expirynotifystudents", get_string("expirynotifystudents")),
'expirythreshold'=>array("expirythreshold", get_string("expirythreshold")),
'groupmode'=>array("groupmode", get_string("groupmode")),
'groupmodeforce'=>array("groupmodeforce", get_string("groupmodeforce")),
'visible'=>array("courseavailability", get_string("availability")),
'password'=>array("enrolmentkey", get_string("enrolmentkey")),
'guest'=>array("guestaccess", get_string("opentoguests")),
'costgrp'=>array("cost", get_string("cost")),
'hiddensections'=>array("coursehiddensections", get_string("hiddensections")),
'newsitems'=>array("coursenewsitems", get_string("newsitemsnumber")),
'showgrades'=>array("coursegrades", get_string("grades")),
'showreports'=>array("coursereports", get_string("activityreport")),
'maxbytes'=>array("courseuploadsize", get_string("maximumupload")),
'metacourse'=>array("metacourse", get_string("metacourse")),
'defaultrole'=>array("coursedefaultrole", get_string("defaultrole", 'role'))),
true);
$mform->addElement('submit', 'submit', get_string("savechanges"));
$mform->addRule('fullname', get_string("missingfullname"), 'required', null, 'client');
$mform->addRule('shortname', get_string("missingshortname"), 'required', null, 'client');
$mform->addRule('summary', get_string("missingsummary"), 'required', null, 'client');
$mform->addRule('category', get_string("missingcategory"), 'required', null, 'client');
/**
* a Form rule check - if we need to create rules which involve the contents of more than one
* field this is the way to do it. We can do it all at once in one function or create several
* form rules.
*
* @param array $fields values from form without slashes
* @return mixed array of errors or true if passed check
*/
function form_check($fields){
global $course;
/// perform some extra moodle validation
function validation($data){
$errors= array();
if ($foundcourses = get_records("course", "shortname", addslashes($fields['shortname']))) {
if (!empty($course->id)) {
unset($foundcourses[$course->id]);
if ($foundcourses = get_records('course', 'shortname', $data['shortname'])) {
if (!empty($data['id'])) {
unset($foundcourses[$data['id']]);
}
if (!empty($foundcourses)) {
foreach ($foundcourses as $foundcourse) {
$foundcoursenames[] = $foundcourse->fullname;
}
$foundcoursenamestring = addslashes(implode(',', $foundcoursenames));
$errors['shortname']= get_string("shortnametaken", "", $foundcoursenamestring);
}
}
if (empty($fields['enrolenddisabled'])){
$enrolenddate=make_timestamp($fields['enrolenddate']['year'],
$fields['enrolenddate']['month'],
$fields['enrolenddate']['day']);
$enrolstartdate=make_timestamp($fields['enrolstartdate']['year'],
$fields['enrolstartdate']['month'],
$fields['enrolstartdate']['day']);
if ($enrolenddate <= $enrolstartdate){
$errors['enroldateendgrp']=get_string("enrolenddaterror");
$foundcoursenamestring = implode(',', $foundcoursenames);
$errors['shortname']= get_string('shortnametaken', '', $foundcoursenamestring);
}
}
if (0==count($errors)){
if (empty($data['enrolenddisabled'])){
if ($data['enrolenddate'] <= $data['enrolstartdate']){
$errors['enroldateendgrp'] = get_string('enrolenddaterror');
}
}
if (0 == count($errors)){
return true;
}else {
} else {
return $errors;
}
}
$mform->addFormRule('form_check');
$renderer =& $mform->defaultRenderer();
$renderer->addStopFieldsetElements('submit');
?>
}
?>
+3 -1
View File
@@ -238,17 +238,19 @@ while ($section <= $course->numsections) {
$currenttopic = ($course->marker == $section);
$currenttext = '';
if (!$thissection->visible) {
$sectionstyle = ' hidden';
} else if ($currenttopic) {
$sectionstyle = ' current';
$currenttext = get_accesshide(get_string('currenttopic','access'));
} else {
$sectionstyle = '';
}
echo '<tr id="section-'.$section.'" class="section main'.$sectionstyle.'">';
echo '<td class="left side">&nbsp;</td>';
echo '<td class="left side">&nbsp;'.$currenttext.'</td>';
echo '<td class="content">';
if (!has_capability('moodle/course:viewhiddensections', $context) and !$thissection->visible) { // Hidden for students
+3 -1
View File
@@ -171,16 +171,18 @@
$currenttopic = ($course->marker == $section);
$currenttext = '';
if (!$thissection->visible) {
$sectionstyle = ' hidden';
} else if ($currenttopic) {
$sectionstyle = ' current';
$currenttext = get_accesshide(get_string('currenttopic','access'));
} else {
$sectionstyle = '';
}
echo '<tr id="section-'.$section.'" class="section main'.$sectionstyle.'">';
echo '<td class="left side">'.$section.'</td>';
echo '<td class="left side">'.$currenttext.$section.'</td>';
echo '<td class="content">';
if (!has_capability('moodle/course:viewhiddensections', $context) and !$thissection->visible) { // Hidden for students
+9 -17
View File
@@ -13,9 +13,9 @@
define('BLOCK_R_MIN_WIDTH', 100);
define('BLOCK_R_MAX_WIDTH', 210);
$preferred_width_left = bounded_number(BLOCK_L_MIN_WIDTH, blocks_preferred_width($pageblocks[BLOCK_POS_LEFT]),
$preferred_width_left = bounded_number(BLOCK_L_MIN_WIDTH, blocks_preferred_width($pageblocks[BLOCK_POS_LEFT]),
BLOCK_L_MAX_WIDTH);
$preferred_width_right = bounded_number(BLOCK_R_MIN_WIDTH, blocks_preferred_width($pageblocks[BLOCK_POS_RIGHT]),
$preferred_width_right = bounded_number(BLOCK_R_MIN_WIDTH, blocks_preferred_width($pageblocks[BLOCK_POS_RIGHT]),
BLOCK_R_MAX_WIDTH);
if ($week != -1) {
@@ -88,7 +88,7 @@
echo '<tr id="section-0" class="section main">';
echo '<td class="left side">&nbsp;</td>';
echo '<td class="content">';
echo '<div class="summary">';
$summaryformatoptions->noclean = true;
echo format_text($thissection->summary, FORMAT_HTML, $summaryformatoptions);
@@ -99,7 +99,7 @@
'class="icon edit" alt="'.$streditsummary.'" /></a><br /><br />';
}
echo '</div>';
print_section($course, $thissection, $mods, $modnamesused);
if (isediting($course->id)) {
@@ -162,28 +162,20 @@
$currentweek = (($weekdate <= $timenow) && ($timenow < $nextweekdate));
$currenttext = '';
if (!$thissection->visible) {
$sectionstyle = ' hidden';
} else if ($currentweek) {
$sectionstyle = ' current';
$currenttext = get_accesshide(get_string('currentweek','access'));
} else {
$sectionstyle = '';
}
echo '<tr id="section-'.$section.'" class="section main'.$sectionstyle.'">';
echo '<td class="left side">&nbsp;</td>';
if (ajaxenabled() && $editing) {
// Temporarily hide the dates for the weeks. We do it this way
// for now. Eventually, we'll have to modify the javascript code
// to handle re-calculation of dates when sections are moved
// around. For now, just hide all the dates to avoid confusion.
$weekperiod = '';
} else {
$weekperiod = $weekday.' '.$endweekday;
}
echo '<td class="left side">&nbsp;'.$currenttext.'</td>';
$weekperiod = $weekday.' - '.$endweekday;
echo '<td class="content">';
if (!has_capability('moodle/course:viewhiddensections', $context) and !$thissection->visible) { // Hidden for students
@@ -267,4 +259,4 @@
echo '</tr></table>';
?>
?>
+3 -1
View File
@@ -190,10 +190,12 @@
$currentweek = (($weekdate <= $timenow) && ($timenow < $nextweekdate));
$currenttext = '';
if (!$thissection->visible) {
$sectionstyle = ' hidden';
} else if ($currentweek) {
$sectionstyle = ' current';
$currenttext = get_accesshide(get_string('currentweek','access'));
} else {
$sectionstyle = '';
}
@@ -201,7 +203,7 @@
echo '<li id="section-'.$section.'" class="section main'.$sectionstyle.'" >'; //'<div class="left side">&nbsp;</div>';
// Note, 'right side' is BEFORE content.
echo '<div class="right side">';
echo '<div class="right side">'.$currenttext;
if ($displaysection == $section) {
echo '<a href="view.php?id='.$course->id.'&amp;week=0#section-'.$section.'" title="'.$strshowallweeks.'">'.
+1 -2
View File
@@ -164,7 +164,7 @@
$newgrpcoursecontext = get_context_instance(CONTEXT_COURSE, $newgroup->courseid);
///Users cannot upload groups in courses they cannot update.
if (has_capability('moodle/course:update', $newgrpcoursecontext)){
if (!has_capability('moodle/course:managegroups', $newgrpcoursecontext)){
notify("$newgroup->name ".get_string('notaddedto').$newgroup->coursename.get_string('notinyourcapacity'));
}
@@ -212,4 +212,3 @@ function my_file_get_contents($filename, $use_include_path = 0) {
}
?>
+4 -2
View File
@@ -60,11 +60,13 @@
echo "<center>";
/// I am not sure this context in the next has_capability call is correct.
if (isloggedin() and !isguest() and !has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM, SITEID))) { // Print link to request a new course
if (isloggedin() and !isguest() and !has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM, SITEID)) and $CFG->enablecourserequests) { // Print link to request a new course
print_single_button("request.php", NULL, get_string("courserequest"), "get");
}
if (has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM, SITEID))) { // Print link to create a new course
print_single_button("edit.php", NULL, get_string("addnewcourse"), "get");
/// Get the 1st available category
$options = array('category' => get_field('course_categories', 'id', 'parent', '0'));
print_single_button('edit.php', $options, get_string('addnewcourse'), 'get');
}
if (has_capability('moodle/site:approvecourse', get_context_instance(CONTEXT_SYSTEM, SITEID)) and !empty($CFG->enablecourserequests)) {
print_single_button('pending.php',NULL, get_string('coursespending'),"get");
+24 -16
View File
@@ -43,28 +43,37 @@
}
if ($teachers = get_course_teachers($course->id)) {
echo "<table align=\"center\"><tr><td nowrap=\"nowrap\">";
echo "<p><font size=\"1\">\n";
foreach ($teachers as $teacher) {
if ($teacher->authority > 0) {
if (!$teacher->role) {
$teacher->role = $course->teacher;
/// first find all roles that are supposed to be displayed
if (!empty($CFG->coursemanager)) {
$coursemanagerroles = split(',', $CFG->coursemanager);
$context = get_context_instance(CONTEXT_COURSE, $course->id);
foreach ($coursemanagerroles as $roleid) {
$role = get_record('role','id',$roleid);
if ($users = get_role_users($roleid, $context, true, '', 'u.lastname ASC', true)) {
foreach ($users as $teacher) {
$fullname = fullname($teacher, has_capability('moodle/site:viewfullnames', $context));
$namesarray[] = format_string($role->name).': <a href="'.$CFG->wwwroot.'/user/view.php?id='.
$teacher->id.'&amp;course='.SITEID.'">'.$fullname.'</a>';
}
echo "$teacher->role: ";
link_to_popup_window ("/user/view.php?id=$teacher->id&amp;course=$site->id", "opener",
fullname($teacher), 400, 500, "$teacher->role",
"");
echo "<br />";
}
}
}
if (!empty($namesarray)) {
echo "<div align=\"center\">";
echo implode('<br />', $namesarray);
echo "</div>";
}
echo "</font></p>";
echo "</td</tr></table>";
}
echo "<br />";
print_simple_box_start("center", "100%");
echo filter_text(text_to_html($course->summary),$course->id);
require_once("$CFG->dirroot/enrol/enrol.class.php");
$enrol = enrolment_factory::factory($course->enrol);
echo $enrol->get_access_icons($course);
print_simple_box_end();
echo "<br />";
@@ -72,4 +81,3 @@
close_window_button();
?>
+50 -18
View File
@@ -417,7 +417,7 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
$log->url = strip_tags(urldecode($log->url)); // Some XSS protection
$log->info = strip_tags(urldecode($log->info)); // Some XSS protection
$log->url = str_replace('&', '&amp;', $log->url); /// XHTML compatibility
$log->url = s($log->url); /// XSS protection and XHTML compatibility - should be in link_to_popup_window() instead!!
echo '<tr class="r'.$row.'">';
if ($course->id == SITEID) {
@@ -509,7 +509,7 @@ function print_log_csv($course, $user, $date, $order='l.time DESC', $modname,
$log->url = strip_tags(urldecode($log->url)); // Some XSS protection
$log->info = strip_tags(urldecode($log->info)); // Some XSS protection
$log->url = str_replace('&', '&amp;', $log->url); // XHTML compatibility
$log->url = str_replace('&', '&amp;', $log->url); /// XHTML compatibility
$firstField = $courses[$log->course];
$fullname = fullname($log, has_capability('moodle/site:viewfullnames', get_context_instance(CONTEXT_COURSE, $course->id)));
@@ -1550,21 +1550,21 @@ function print_course($course, $width="100%") {
$linkcss.' href="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'">'.
$course->fullname.'</a></b><br />';
if ($teachers = get_users_by_capability($context, 'moodle/course:update',
'u.*, ul.timeaccess as lastaccess, ra.hidden',
'r.sortorder ASC', '','','','', false)) {
$canseehidden = has_capability('moodle/role:viewhiddenassigns', $context);
$namesarray = array();
foreach ($teachers as $teacher) {
if (!$teacher->hidden || $canseehidden) {
$roles = get_user_roles($context, $teacher->id, true, 'r.sortorder ASC');
$role = array_shift($roles); // First one
$fullname = fullname($teacher, has_capability('moodle/site:viewfullnames', $context));
$namesarray[] = format_string($role->name).': <a href="'.$CFG->wwwroot.'/user/view.php?id='.
$teacher->id.'&amp;course='.SITEID.'">'.$fullname.'</a>';
}
/// first find all roles that are supposed to be displayed
if (!empty($CFG->coursemanager)) {
$coursemanagerroles = split(',', $CFG->coursemanager);
foreach ($coursemanagerroles as $roleid) {
$role = get_record('role','id',$roleid);
if ($users = get_role_users($roleid, $context, true, '', 'u.lastname ASC', true)) {
foreach ($users as $teacher) {
$fullname = fullname($teacher, has_capability('moodle/site:viewfullnames', $context));
$namesarray[] = format_string($role->name).': <a href="'.$CFG->wwwroot.'/user/view.php?id='.
$teacher->id.'&amp;course='.SITEID.'">'.$fullname.'</a>';
}
}
}
if ($namesarray) {
if (!empty($namesarray)) {
echo "<ul class=\"teachers\">\n<li>";
echo implode('</li><li>', $namesarray);
echo "</li></ul>";
@@ -1764,7 +1764,7 @@ function delete_course_module($id) {
$modulename = get_field('modules', 'name', 'id', $cm->module);
if ($events = get_records_select('event', "instance = '$cm->instance' AND modulename = '$modulename'")) {
foreach($events as $event) {
delete_event($event);
delete_event($event->id);
}
}
return delete_records('course_modules', 'id', $cm->id);
@@ -2163,7 +2163,7 @@ function move_courses ($courseids, $categoryid) {
// figure out a sortorder that we can use in the destination category
$sortorder = get_field_sql('SELECT MIN(sortorder)-1 AS min
FROM ' . $CFG->prefix . 'course WHERE category=' . $categoryid);
if ($sortorder === false) {
if (is_null($sortorder) || $sortorder === false) {
// the category is empty
// rather than let the db default to 0
// set it to > 100 and avoid extra work in fix_coursesortorder()
@@ -2193,4 +2193,36 @@ function move_courses ($courseids, $categoryid) {
return true;
}
/**
* Can the current user delete this course?
* @param int $courseid
* @return boolean
*
* Exception here to fix MDL-7796.
*
* FIXME
* Course creators who can manage activities in the course
* shoule be allowed to delete the course. We do it this
* way because we need a quick fix to bring the functionality
* in line with what we had pre-roles. We can't give the
* default course creator role moodle/course:delete at
* CONTEXT_SYSTEM level because this will allow them to
* delete any course in the site. So we hard code this here
* for now.
*
* @author vyshane AT gmail.com
*/
function can_delete_course($courseid) {
$context = get_context_instance(CONTEXT_COURSE, $courseid);
return ( has_capability('moodle/course:delete', $context)
|| (has_capability('moodle/legacy:coursecreator', $context)
&& has_capability('moodle/course:manageactivities', $context)) );
}
?>
+3
View File
@@ -53,6 +53,9 @@
if (!has_capability('moodle/course:view', $context, $userid, false)) {
error('This user is not in this course!');
}
if (has_capability('moodle/site:doanything', $context, $userid, false)) {
print_error('nologinas');
}
}
/// User must have permissions
+1 -1
View File
@@ -3,7 +3,7 @@
// Moves, adds, updates, duplicates or deletes modules in a course
require("../config.php");
require("lib.php");
require_once("lib.php");
require_login();
-1
View File
@@ -126,4 +126,3 @@ function print_outline_row($mod, $instance, $result) {
}
?>
+14 -4
View File
@@ -73,17 +73,17 @@
$graph->y_data['line3'][] = $stat->line3;
}
}
$graph->y_order = array('line1','line2');
if (!empty($param->line3)) {
$graph->y_order[] = 'line3';
}
$graph->y_order = array('line1');
$graph->y_format['line1'] = array('colour' => $c[1],'line' => 'line','legend' => $param->line1);
if (!empty($param->line2)) {
$graph->y_order[] = 'line2';
$graph->y_format['line2'] = array('colour' => $c[2],'line' => 'line','legend' => $param->line2);
}
if (!empty($param->line3)) {
$graph->y_order[] = 'line3';
$graph->y_format['line3'] = array('colour' => $c[3],'line' => 'line','legend' => $param->line3);
}
$graph->y_tick_labels = false;
} else {
$data = array();
$times = array();
@@ -103,6 +103,16 @@
$times[$stat->timeend] = userdate($stat->timeend,get_string('strftimedate'),$CFG->timezone);
}
}
foreach (array_keys($times) as $t) {
foreach ($data as $roleid => $stuff) {
if (!array_key_exists($t, $stuff)) {
$data[$roleid][$t] = 0;
}
}
}
foreach ($data as $role => $stuff) {
ksort($data[$role]);
}
$nonzeroroleid = 0;
foreach (array_keys($data) as $roleid) {
if ($roleid == 0) {
+7
View File
@@ -167,6 +167,13 @@
$rolesdata[$roleid] = 0;
}
}
else {
foreach (array_keys($roles) as $r) {
if (!array_key_exists($r, $rolesdata)) {
$rolesdata[$r] = 0;
}
}
}
krsort($rolesdata);
$row = array_merge(array($times[$time]),$rolesdata);
if (empty($CFG->loglifetime) || ($stat->timeend-(60*60*24)) >= (time()-60*60*24*$CFG->loglifetime)) {
+1 -2
View File
@@ -247,7 +247,7 @@
if ($perpage != 99999 && $totalcount > $perpage) {
echo "<center><p>";
echo "<a href=\"search.php?search=$encoededsearch&perpage=99999\">".get_string("showall", "", $totalcount)."</a>";
echo "<a href=\"search.php?search=$encodedsearch&perpage=99999\">".get_string("showall", "", $totalcount)."</a>";
echo "</p></center>";
}
@@ -263,4 +263,3 @@
?>
-1
View File
@@ -285,4 +285,3 @@ function print_outline_row($mod, $instance, $result) {
}
?>
-20
View File
@@ -1,20 +0,0 @@
Moodle - Modular Object-Oriented Dynamic Learning Environment
http://moodle.org
Copyright (C) 1999-2004 Martin Dougiamas martin@dougiamas.com
http://dougiamas.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-38
View File
@@ -1,38 +0,0 @@
<?PHP // $Id$
require("../config.php");
if (! $info = document_file("files.php", false)) {
error("404 - File Not Found");
}
$string = array();
if ($CFG->forcelogin) {
require_login();
}
include($info->filepath);
print_header();
$ulopen = false;
foreach ($string as $file => $filename) {
if (substr($file,0,1) == "-") {
if($ulopen) {
echo '</ul>';
}
echo '<h1>'.$filename.'</h1><ul>';
$ulopen = true;
} else {
echo '<li><a target="main" href="'.$CFG->wwwroot.'/doc/?file='.$file.'">'.$filename.'</a></li>';
}
}
if($ulopen) {
echo '</ul>';
}
// Sloppy way to produce valid markup... there should be a print_footer_minimal().
echo '</div></div></body></html>';
?>
-131
View File
@@ -1,131 +0,0 @@
body, td, th, li {
font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
th {
font-weight: bold;
}
a:link {
text-decoration: none;
color: blue;
}
a:visited {
text-decoration: none;
color: blue;
}
a:hover {
text-decoration: underline;
color: red;
}
form {
margin-bottom: 0;
}
li {
margin-bottom: 10px;
}
.question {
font-size: medium;
font-weight: bold;
font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
border: 1px dotted;
padding: 10px;
background-color: #EEEEEE;
}
.answer {
font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
font-size: medium;
border: none;
padding-left: 40px;
}
.normaltext {
font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
font-size: medium;
border: none;
margin-left: 30px;
}
.answercode {
font-family: "Courier New", Courier, mono;
font-size: small;
border: none;
padding-left: 60px;
}
.questionlink {
font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
font-size: medium;
border: none;
padding-left: 40px;
}
.examplecode {
font-family: "Courier New", Courier, mono;
font-size: small;
border: thin dashed #999999;
background-color: #FBFBFB;
margin: auto;
padding: 30px;
height: auto;
width: auto;
}
h1 {
font-weight: bold;
color: #000000;
background-color: #CCCCCC;
padding: 5px;
font-size: large;
border-width: 1px;
border-color: #CCCCCC;
-moz-border-radius: 10px;
}
h2 {
font-weight: bold;
color: #FFFFFF;
background-color: #666666;
padding: 5px;
font-size: medium;
border-width: 1px;
border-color: #666666;
-moz-border-radius: 10px;
}
h3 {
font-weight: normal;
color: #FFFFFF;
background-color: #666666;
padding: 5px;
font-size: medium;
-moz-border-radius: 10px;
}
.spaced {
margin-bottom: 30px;
}
ul {
margin-top: 10px;
}
.commandline {
font-family: "Courier New", Courier, mono;
font-size: x-small;
background-color: #FBFBFB;
margin: auto auto 20px 30px;
padding: 5px;
width: compact;
font-weight: bold;
border: 1px solid #999999;
white-space: nowrap;
clear: both;
float: none;
}
-54
View File
@@ -1,54 +0,0 @@
<?PHP // $Id$
require("../config.php");
$file = optional_param('file', "", PARAM_FILE); // docs file to view straight
$frame = optional_param('frame', "", PARAM_FILE); // docs file to view in frame
$sub = optional_param('sub', "", PARAM_CLEAN); // sub-section (named anchor)
if ($CFG->forcelogin) {
require_login();
}
if (!empty($sub)) {
$sub = '#'.s($sub);
} else {
$sub = "";
}
if (empty($file)) {
$include = false;
if (empty($frame)) {
$file = "intro.html";
} else {
$file = $frame;
}
} else {
$include = true;
}
if (! document_file($file, $include)) {
error("Error 404 - File Not Found");
}
if ($include) {
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php print_string("documentation")?></title>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo current_charset(); ?>" />
</head>
<frameset rows="70,*">
<frame name="top" src="top.php" />
<frameset cols="200,*">
<frame name="contents" src="contents.php" />
<frame name="main" src="index.php?file=<?php echo "$file$sub"; ?>" />
</frameset>
</frameset>
</html>
-421
View File
@@ -1,421 +0,0 @@
<head>
<title>Moodle Docs: Installation</title>
<link rel="stylesheet" href="docstyles.css" type="TEXT/CSS">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<h1>Installing Moodle</h1>
<blockquote>
<p>This guide explains how to install Moodle for the first time. It goes into some detail
about some of the steps, in order to cover the wide variety of small differences between
web server setups, so this document may look long and complicated. Don't be put off by this
- I usually set Moodle up in a few minutes!</p>
<p>Take your time and work through this document carefully - it will save you time later on.</p>
<p>Sections in this document:</p>
<ol>
<li><a href="#requirements">Requirements</a></li>
<li><a href="#downloading">Download</a></li>
<li><a href="#site">Site structure</a></li>
<li><a href="#data">Create a data directory</a></li>
<li><a href="#database">Create a database</a></li>
<li><a href="#webserver">Check web server settings</a></li>
<li><a href="#config">Edit config.php</a></li>
<li><a href="#admin">Go to the admin page</a></li>
<li><a href="#cron">Set up cron</a></li>
<li><a href="#course">Create a new course</a></li>
</ol>
<p>&nbsp;</p>
</blockquote>
<h3 class="sectionheading"><a name="requirements"></a>1. Requirements</h3>
<blockquote>
<p>Moodle is primarily developed in Linux using Apache, MySQL and PHP (also
sometimes known as the LAMP platform), but is also regularly tested with PostgreSQL
and on Windows XP, Mac OS X and Netware 6 operating systems</p>
<p>The requirements for Moodle are as follows:</p>
<ol>
<li>Web server software. Most people use <a href="http://www.apache.org/" target="_blank">Apache</a>,
but Moodle should work fine under any web server that supports PHP, such
as IIS on Windows platforms.</li>
<li><a href="http://www.php.net/" target="_blank">PHP</a> scripting language (version 4.1.0
or later), with the following settings:
<ul>
<li><a href="http://www.boutell.com/gd/" target="_blank">GD library</a>
turned ON, with support for JPG and PNG formats</li>
<li>zlib library turned ON (if you want to use backup/restore on Windows)</li>
<li>Sessions support turned ON</li>
<li>File uploading turned ON</li>
<li>Safe Mode must be turned OFF (see the forums on moodle.org for problems
caused by Safe Mode)</li>
</ul>
</li>
<li>a working database server: <a href="http://www.mysql.com/" target="_blank">MySQL</a>
or <a href="http://www.postgresql.org/" target="_blank">PostgreSQL</a> are
completely supported and recommended for use with Moodle 1.1. All other
databases will be supported fully in the next release.</li>
</ol>
<p>Most web hosts support all of this by default. If you are signed up with
one of the few webhosts that does not support these features ask them why,
and consider taking your business elsewhere.</p>
<p>If you want to run Moodle on your own computer and all this looks a bit daunting,
then please see our guide: <a href="http://moodle.org/doc/?file=installamp.html">Installing
Apache, MySQL and PHP</a>. It provides some step-by-step instructions to install
all this on most popular platforms.</p>
<p>&nbsp;</p>
</blockquote>
<h3 class="sectionheading"><a name="downloading"></a>2. Download</h3>
<blockquote>
<p>There are two ways to get Moodle, as a compressed package and via CVS. These
are explained in detail on the download page: <a href="http://moodle.org/download/" target="_blank">http://moodle.org/download/</a></p>
<p>After downloading and unpacking the archive, or checking out the files via
CVS, you will be left with a directory called &quot;moodle&quot;, containing
a number of files and folders. </p>
<p>You can either place the whole folder in your web server documents directory,
in which case the site will be located at <b>http://yourwebserver.com/moodle</b>,
or you can copy all the contents straight into the main web server documents
directory, in which case the site will be simply <b>http://yourwebserver.com</b>.</p>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="site"></a>3. Site structure</h3>
<blockquote>
<p>Here is a quick summary of the contents of the Moodle folder, to help get
you oriented:</p>
<blockquote>
<p>config.php - the ONLY file you need to edit to get started<br />
version.php - defines the current version of Moodle code<br />
index.php - the front page of the site</p>
<ul>
<li>admin/ - code to administrate the whole server </li>
<li>auth/ - plugin modules to authenticate users </li>
<li>course/ - code to display and manage courses </li>
<li>doc/ - help documentation for Moodle (eg this page)</li>
<li>files/ - code to display and manage uploaded files</li>
<li>lang/ - texts in different languages, one directory per language </li>
<li>lib/ - libraries of core Moodle code </li>
<li>login/ - code to handle login and account creation </li>
<li>mod/ - all Moodle course modules</li>
<li>pix/ - generic site graphics</li>
<li>theme/ - theme packs/skins to change the look of the site.</li>
<li>user/ - code to display and manage users</li>
</ul>
<p>&nbsp;</p>
</blockquote>
</blockquote>
<h3 class="sectionheading"><a name="data"></a>4. Create a data directory</h3>
<blockquote>
<p>Moodle will also need some space on your hard disk to store uploaded files,
such as course documents and user pictures.</p>
<p>Create a directory for this purpose somewhere. For security, it's best that
this directory is NOT accessible directly via the web. The easiest way to do this
is to simply locate it OUTSIDE the web directory, otherwise protect it
by creating a file in the data directory called .htaccess, containing this line:
<blockquote>
<pre>deny from all<br />AllowOverride None</pre>
</blockquote>
<p>To make sure that Moodle can save uploaded files in this directory, check that
the web server software (eg Apache) has permission to write
to this directory. On Unix machines, this means setting the owner of the directory
to be something like &quot;nobody&quot; or &quot;apache&quot;.</p>
<p>On many shared hosting servers, you will probably need to restrict all file access
to your "group" (to prevent other webhost customers from looking at or changing your files),
but provide full read/write access to everyone else (which will allow the web server
to access your files). Speak to your server administrator if you are having
trouble setting this up securely.</p>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="database"></a>5. Create a database</h3>
<blockquote>
<p>You need to create an empty database (eg "moodle") in your database system
along with a special user (eg "moodleuser") that has access to that database
(and that database only). You could use the "root" user if you wanted to, but
this is not recommended for a production system: if hackers manage to discover
the password then your whole database system would be at risk, rather than
just one database.
</p>
<p>Example command lines for MySQL: </p>
<pre>
# mysql -u root -p
> CREATE DATABASE moodle;
> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON moodle.*
TO moodleuser@localhost IDENTIFIED BY 'yourpassword';
> quit
# mysqladmin -p reload
</pre>
<p>Example command lines for PostgreSQL: </p>
<pre>
# su - postgres
> psql -c "create user moodleuser createdb;" template1
> psql -c "create database moodle;" -U moodleuser template1
> psql -c "alter user moodleuser nocreatedb;" template1
</pre>
<p>(For MySQL I highly recommend the use of <a href="http://phpmyadmin.sourceforge.net/">phpMyAdmin</a>
to manage your databases - you can do all this via a web interface).</p>
<p>As of version 1.0.8, Moodle now supports table prefixes, and so can safely share
a database with tables from other applications.</p>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="webserver" id="webserver"></a>6. Check your web server settings</h3>
<blockquote>
<p>Firstly, make sure that your web server is set up to use index.php as a default
page (perhaps in addition to index.html, default.htm and so on).</p>
<p>In Apache, this is done using a DirectoryIndex parameter in your httpd.conf
file. Mine usually looks like this:</p>
<blockquote>
<pre><strong>DirectoryIndex</strong> index.php index.html index.htm </pre>
</blockquote>
<p>Just make sure index.php is in the list (and preferably towards the start
of the list, for efficiency).</p>
<p>Secondly, <b>if you are using Apache 2</b>, then you should turn on the <i>AcceptPathInfo</i>
variable, which allows scripts to be passed arguments like http://server/file.php/arg1/arg2.
This is essential to allow relative links between your resources, and also
provides a performance boost for people using your Moodle web site. You can
turn this on by adding these lines to your httpd.conf file.</p>
<blockquote>
<pre><strong>AcceptPathInfo</strong> on </pre>
</blockquote>
<p>Thirdly, Moodle requires a number of PHP settings to be active for it to
work. <b>On most servers these will already be the default settings.</b>
However, some PHP servers (and some of the more recent PHP versions) may
have things set differently. These are defined in PHP's configuration
file (usually called php.ini):</p>
<blockquote>
<pre>magic_quotes_gpc = 1 (preferred but not necessary)
magic_quotes_runtime = 0 (necessary)
file_uploads = 1
session.auto_start = 0
session.bug_compat_warn = 0
</pre>
</blockquote>
<p>If you don't have access to httpd.conf or php.ini on your server, or you
have Moodle on a server with other applications that require different settings,
then don't worry, you can still OVERRIDE all of the default settings.
<p>To do this, you need to create a file called <b>.htaccess</b> in Moodle's
main directory that contains definitions for these settings.
This only works on Apache servers and only when Overrides have been allowed.
<blockquote>
<pre>
DirectoryIndex index.php index.html index.htm
&lt;IfDefine APACHE2>
<b>AcceptPathInfo</b> on
&lt;/IfDefine>
php_flag magic_quotes_gpc 1
php_flag magic_quotes_runtime 0
php_flag file_uploads 1
php_flag session.auto_start 0
php_flag session.bug_compat_warn 0</pre>
</blockquote>
<p>You can also do things like define the maximum size for uploaded files:
<blockquote>
<pre>
LimitRequestBody 0
php_value upload_max_filesize 2M
php_value post_max_size 2M
</pre>
</blockquote>
<p>The easiest thing to do is just copy the sample file from lib/htaccess
and edit it to suit your needs. It contains further instructions. For
example, in a Unix shell:
<blockquote>
<pre>cp lib/htaccess .htaccess</pre>
</blockquote>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="config"></a>7. Edit config.php</h3>
<blockquote>
<p>Now you can edit the configuration file, <strong>config.php</strong>, using a
text editor. This file is used by all other files in Moodle.</p>
<p>To start with, make a copy of <strong>config-dist.php</strong> and name it
config.php. We do this so that your config.php won't be overwritten in case
you upgrade Moodle later on. </p>
<p>Edit <strong>config.php</strong> to specify the database details that you
just defined (including a table prefix - notice that this is REQUIRED for
PostgreSQL), as well as the site address, file system directory and data directory.
The config file itself has detailed directions and examples.</p>
<p>Once you have done this the rest of the installation is via a web interface.
For the rest of this installation document we will assume your site is at:
<u>http://example.com/moodle</u></p>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="admin"></a>8. Go to the admin page</h3>
<blockquote>
<p>The admin page should now be working at: <u>http://example.com/moodle/admin</u>.
If you try and access the front page of your site you'll be taken there automatically
anyway. The first time you access this admin page, you will be presented with
a GPL &quot;shrinkwrap&quot; agreement with which you must agree before you
can continue with the setup.</p>
<p>(Moodle will also try to set some cookies in your browser. If you have your
browser set up to let you choose to accept cookies, then you <b>must</b> accept
the Moodle cookies, or Moodle won't work properly.)
<p>Now Moodle will start setting up your database and creating tables to store
data. Firstly, the main database tables are created. You should see a number
of SQL statements followed by status messages (in green or red) that look
like this:</p>
<blockquote>
<p>CREATE TABLE course ( id int(10) unsigned NOT NULL auto_increment, category
int(10) unsigned NOT NULL default '0', password varchar(50) NOT NULL default
'', fullname varchar(254) NOT NULL default '', shortname varchar(15) NOT
NULL default '', summary text NOT NULL, format tinyint(4) NOT NULL default
'1', teacher varchar(100) NOT NULL default 'Teacher', startdate int(10)
unsigned NOT NULL default '0', enddate int(10) unsigned NOT NULL default
'0', timemodified int(10) unsigned NOT NULL default '0', PRIMARY KEY (id))
TYPE=MyISAM</p>
<p><font color="#006600">SUCCESS</font></p>
<p>...and so on, followed by: <font color="#006600">Main databases set up
successfully.</font> </p>
</blockquote>
<p>If you don't see these, then there must have been some problem with the database
or the configuration settings you defined in config.php. Check that PHP isn't
in a restricted "Safe Mode" (commercial web hosts sometimes have safe mode
turned on). You can check PHP variables by creating a little file containing
&lt? phpinfo() ?&gt and looking at it through a browser. Check all these and
try this page again.</p>
<p>Scroll down the very bottom of the page and press the &quot;Continue&quot;
link.</p>
<p>Next you will see a similar page that sets up all the tables required by
each Moodle module. As before, they should all be <font color="#006600">green</font>.</p>
<p>Scroll down the very bottom of the page and press the &quot;Continue&quot;
link.</p>
<p>You should now see a form where you can define more configuration variables
for your installation, such as the default language, SMTP hosts and so on.
Don't worry too much about getting everything right just now - you can always
come back and edit these later on using the admin interface. Scroll down to
the bottom and click &quot;Save changes&quot;.</p>
<p>If (and only if) you find yourself getting stuck on this page, unable to
continue, then your server probably has what I call the "buggy referrer" problem.
This is easy to fix: just turn off the &quot;secureforms&quot; setting, then
try to continue again.</p>
<p>The next page is a form where you can define parameters for your Moodle site
and the front page, such as the name, format, description and so on. Fill
this out (you can always come back and change these later) and then press
&quot;Save changes&quot;.</p>
<p>Finally, you will then be asked to create a top-level administration user
for future access to the admin pages. Fill out the details with your own name,
email etc and then click &quot;Save changes&quot;. Not all the fields are
required, but if you miss any important fields you'll be re-prompted for them.
</p>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<p><strong>Make sure you remember the username and password you chose
for the administration user account, as they will be necessary to
access the administration page in future.</strong></p>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
<p>(If for any reason your install is interrupted, or there is a system error
of some kind that prevents you from logging in using the admin account, you
can usually log in using the default username of &quot;<strong>admin</strong>&quot;,
with password &quot;<strong>admin</strong>&quot;.)</p>
<p>Once successful, you will be returned to home page of your site. Note the
administration links that appear down the left hand side of the page (these
items also appear on a separate Admin page) - these items are only visible
to you because you are logged in as the admin user. All your further administration
of Moodle can now be done using this menu, such as:</p>
<ul>
<li>creating and deleting courses</li>
<li>creating and editing user accounts</li>
<li>administering teacher accounts</li>
<li>changing site-wide settings like themes etc</li>
</ul>
</blockquote>
<p>&nbsp;</p>
<h3 class="sectionheading"><a name="cron"></a>9. Set up cron</h3>
<blockquote>
<p>Some of Moodle's modules require continual checks to perform tasks. For example,
Moodle needs to check the discussion forums so it can mail out copies of posts
to people who have subscribed.</p>
<p>The script that does all this is located in the admin directory, and is called
cron.php. However, it can not run itself, so you need to set up a mechanism
where this script is run regularly (eg every five or ten minutes). This provides
a &quot;heartbeat&quot; so that the script can perform functions at periods
defined by each module.</p>
<p>Note that the machine performing the cron <b>does not need to be the same
machine that is running Moodle</b>. For example, if you have a limited web
hosting service that does not have cron, then you can might choose to run
cron on another server or on your home computer. All that matters is that
the cron.php file is called regularly. </p>
<p>The load of this script is not very high, so 5 minutes is usually reasonable,
but if you're worried about it you can reduce the time period to something
like 15 minutes or even 30 minutes. It's best not to make the time period
too long, as delaying mail-outs can slow down activity within the course.</p>
<p>First, test that the script works by running it directly from your browser:</p>
<blockquote>
<pre>http://example.com/moodle/admin/cron.php</pre>
</blockquote>
<p>Now, you need to set up some of way of running the script automatically and
regularly. </p>
<h4> Running the script from a command line</h4>
<p>You can call the page from the command line just as you did in the example
above. For example, you can use a Unix utility like 'wget':</p>
<blockquote>
<pre>wget -q -O /dev/null http://example.com/moodle/admin/cron.php</pre>
</blockquote>
<p>Note in this example that the output is thrown away (to /dev/null).</p>
<p>The same thing using lynx:</p>
<blockquote>
<pre>lynx -dump http://example.com/moodle/admin/cron.php &gt; /dev/null</pre>
</blockquote>
<p>Alternatively you could use a standalone version of PHP, compiled to be run
on the command line. The advantage with doing this is that your web server
logs aren't filled with constant requests to cron.php. The disadvantage is
that you need to have access to a command-line version of php.</p>
<blockquote>
<pre>/opt/bin/php /web/moodle/admin/cron.php
(Windows) C:\apache\php\php.exe C:\apache\htdocs\moodle\admin\cron.php
</pre>
</blockquote>
<h4>Automatically running the script every 5 minutes</h4>
<p><b>On Unix systems</b>: Use <b>cron</b>. Edit your cron settings from the commandline
using &quot;crontab -e&quot; and add a line like:</p>
<blockquote>
<pre>*/5 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php</pre>
</blockquote>
<p>Usually, the "crontab" command will put you into the 'vi' editor. You enter
"insert mode" by pressing "i", then type in the line as above, then exit insert mode by
pressing ESC. You save and exit by typing ":wq", or quit without saving using ":q!" (without the quotes).</p>
<p><b>On Windows systems</b>: The simplest way is to use this little package <a href="http://moodle.org/download/moodle-cron-for-windows.zip" title="Click to download this package (150k)" target="_blank">moodle-cron-for-windows.zip</a>
which makes this whole thing very easy. You can also explore using the built-in
Windows feature for "Scheduled Tasks".</p>
<p>On web hosts: Your web-based control panel may have a web page that allows
you to set up this cron process. Ask your administrator for details on how
it works.</p>
<p></p>
</blockquote>
<h3 class="sectionheading"><a name="course"></a>10. Create a new course</h3>
<blockquote>
<p>Now that Moodle is running properly, you can create a course. </p>
<p>Select &quot;Create a new course&quot; from the Admin page (or the admin
links on the home page).</p>
<p>Fill out the form, paying special attention to the course format. You don't
have to worry about the details too much at this stage, as everything can
be changed later by the teacher.</p>
<p>Press &quot;Save changes&quot;, and you will be taken to a new form where
you can assign teachers to the course. You can only add existing user accounts
from this form - if you want to create a new teacher account then either ask
the teacher to create one for themselves (see the login page), or create one
for them using the &quot;Add a new user&quot; on the Admin page.</p>
<p>Once done, the course is ready to customise, and is accessible via the &quot;Courses&quot;
link on the home page.</p>
<p>See the &quot;<a href="./?file=teacher.html">Teacher Manual</a>&quot; for more details
on course-building.</p>
</blockquote>
<p>&nbsp;</p>
<p align="CENTER"><font size="1"><a href="." target="_top">Moodle Documentation</a></font></p>
<p align="CENTER"><font size="1">Version: $Id$</font></p>
</body>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

-24
View File
@@ -1,24 +0,0 @@
<?PHP // $Id$
require("../config.php");
if ($CFG->forcelogin) {
require_login();
}
if (empty($CFG->langmenu)) {
$langmenu = "";
} else {
$currlang = current_language();
$langs = get_list_of_languages();
$langmenu = popup_form ("$CFG->wwwroot/doc/?lang=", $langs, "chooselang", $currlang, "", "", "", true, "parent");
}
if (! $site = get_site()) {
error("Site is misconfigured");
}
$strdocumentation = get_string("documentation");
print_header("$site->shortname: $strdocumentation", "$site->fullname", "$strdocumentation", "", "", true, $langmenu, navmenu($site, NULL, "parent"));
?>
-40
View File
@@ -1,40 +0,0 @@
<?PHP // $Id$
require("../config.php");
$id = optional_param('id',0,PARAM_INT); // course context
$file = required_param('file',PARAM_FILE); // file in this directory to view
$file = clean_filename($file);
if ($CFG->forcelogin) {
require_login();
}
if ($id) {
if (! $course = get_record("course", "id", $id)) {
error("Course is misconfigured");
}
$strhelp = get_string("help");
print_header("$course->shortname: $strhelp", "$course->fullname",
"<a href=\"../course/view.php?id=$course->id\">$course->shortname</a> -> $strhelp");
} else {
if (! $site = get_site()) {
error("Site is misconfigured");
}
$strdocumentation = get_string("documentation");
print_header("$site->shortname: $strhelp", "$site->fullname",
"<a href=\"view.php?file=contents.html\">$strdocumentation</a>");
}
echo "<blockquote>";
if (! document_file($file, true)) {
notify("404 - File Not Found");
}
echo "</blockquote>";
?>
+5 -17
View File
@@ -140,11 +140,6 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
}
}
if ($action <= AN_ACTION_NONE or $action > AN_ACTION_VOID) {
$message = "Invalid action!";
return AN_RETURNZERO;
}
$poststring = $conststring;
$poststring .= '&x_method=' . $method;
@@ -203,21 +198,17 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
$message = "Order must be settled. Try VOID, check Cut-Off time if it fails!";
return AN_RETURNZERO;
}
if (empty($extra->amount)) {
$message = "No valid amount!";
return AN_RETURNZERO;
}
$timenowsettle = authorize_getsettletime(time());
$timediff = $timenowsettle - (120 * 3600 * 24);
if ($order->settletime < $timediff) {
$message = "Order must be credited within 120 days!";
return AN_RETURNZERO;
}
if (empty($extra)) {
$message = "Need extra fields to REFUND!";
return AN_RETURNZERO;
}
$total = floatval($extra->sum) + floatval($extra->amount);
if (($extra->amount == 0) || ($total > $order->amount)) {
$message = "Can be credited up to original amount.";
return AN_RETURNZERO;
}
$poststring .= '&x_type=CREDIT&x_trans_id=' . urlencode($order->transid);
$poststring .= '&x_currency_code=' . urlencode($order->currency);
$poststring .= '&x_invoice_num=' . urlencode($extra->orderid);
@@ -341,7 +332,6 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
$extra->status = AN_STATUS_CREDIT;
$extra->transid = $transid;
$extra->settletime = authorize_getsettletime(time());
unset($extra->sum); // this is not used in refunds table.
if (! $extra->id = insert_record('enrol_authorize_refunds', $extra)) {
unset($extra->id);
email_to_admin("Error while trying to insert data " .
@@ -363,8 +353,6 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
}
break;
}
default:
return AN_RETURNZERO;
}
}
else
+3 -3
View File
@@ -2,7 +2,7 @@
// THIS FILE IS DEPRECATED! PLEASE DO NOT MAKE CHANGES TO IT!
//
// IT IS USED ONLY FOR UPGRADES FROM BEFORE MOODLE 1.7, ALL
// IT IS USED ONLY FOR UPGRADES FROM BEFORE MOODLE 1.7, ALL
// LATER CHANGES SHOULD USE upgrade.php IN THIS DIRECTORY.
// MySQL commands for upgrading this enrolment module
@@ -56,7 +56,7 @@ function enrol_authorize_upgrade($oldversion=0) {
PRIMARY KEY (`id`),
KEY `orderid` (`orderid`));");
// defaults.
if ($courses = get_records_select('course', '', '', 'id, cost, currency')) {
if (($courses = get_records_select('course', '', '', 'id, cost, currency'))) {
foreach ($courses as $course) {
execute_sql("UPDATE {$CFG->prefix}enrol_authorize
SET amount = '$course->cost', currency = '$course->currency'
@@ -70,7 +70,7 @@ function enrol_authorize_upgrade($oldversion=0) {
table_column('enrol_authorize_refunds', '', 'settletime', 'integer', '10', 'unsigned', '0', 'not null', 'transid');
table_column('enrol_authorize', 'timeupdated', 'settletime', 'integer', '10', 'unsigned', '0', 'not null');
$status = AN_STATUS_AUTH | AN_STATUS_CAPTURE;
if ($settlements = get_records_select('enrol_authorize', "status='$status'", '', 'id, settletime')) {
if (($settlements = get_records_select('enrol_authorize', "status='$status'", '', 'id, settletime'))) {
include_once("$CFG->dirroot/enrol/authorize/authorizenetlib.php");
foreach ($settlements as $settlement) {
execute_sql("UPDATE {$CFG->prefix}enrol_authorize SET settletime = '" .
+3 -3
View File
@@ -2,7 +2,7 @@
// THIS FILE IS DEPRECATED! PLEASE DO NOT MAKE CHANGES TO IT!
//
// IT IS USED ONLY FOR UPGRADES FROM BEFORE MOODLE 1.7, ALL
// IT IS USED ONLY FOR UPGRADES FROM BEFORE MOODLE 1.7, ALL
// LATER CHANGES SHOULD USE upgrade.php IN THIS DIRECTORY.
// PostgreSQL commands for upgrading this enrolment module
@@ -67,7 +67,7 @@ function enrol_authorize_upgrade($oldversion=0) {
);");
modify_database("","CREATE INDEX prefix_enrol_authorize_refunds_orderid_idx ON prefix_enrol_authorize_refunds (orderid);");
// defaults.
if ($courses = get_records_select('course', '', '', 'id, cost, currency')) {
if (($courses = get_records_select('course', '', '', 'id, cost, currency'))) {
foreach ($courses as $course) {
execute_sql("UPDATE {$CFG->prefix}enrol_authorize
SET amount = '$course->cost', currency = '$course->currency'
@@ -81,7 +81,7 @@ function enrol_authorize_upgrade($oldversion=0) {
table_column('enrol_authorize_refunds', '', 'settletime', 'integer', '10', 'unsigned', '0', 'not null', 'transid');
table_column('enrol_authorize', 'timeupdated', 'settletime', 'integer', '10', 'unsigned', '0', 'not null');
$status = AN_STATUS_AUTH | AN_STATUS_CAPTURE;
if ($settlements = get_records_select('enrol_authorize', "status='$status'", '', 'id, settletime')) {
if (($settlements = get_records_select('enrol_authorize', "status='$status'", '', 'id, settletime'))) {
include_once("$CFG->dirroot/enrol/authorize/authorizenetlib.php");
foreach ($settlements as $settlement) {
execute_sql("UPDATE {$CFG->prefix}enrol_authorize SET settletime = '" .
+13 -11
View File
@@ -47,7 +47,7 @@ class enrolment_plugin_authorize
httpsrequired();
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off') {
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 443) { // MDL-9836
if (empty($CFG->loginhttps)) {
error(get_string('httpsrequired', 'enrol_authorize'));
} else {
@@ -199,7 +199,7 @@ class enrolment_plugin_authorize
redirect($CFG->wwwroot, get_string("reviewnotify", "enrol_authorize"), '30');
}
else {
enrol_into_course($course, $USER, 'manual');
enrol_into_course($course, $USER, 'authorize');
redirect("$CFG->wwwroot/course/view.php?id=$course->id");
}
return;
@@ -222,7 +222,7 @@ class enrolment_plugin_authorize
$a->orderid = $order->id;
$emailsubject = get_string('adminnewordersubject', 'enrol_authorize', $a);
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if ($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments')) {
if (($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments'))) {
foreach ($paymentmanagers as $paymentmanager) {
email_to_user($paymentmanager, $USER, $emailsubject, $emailmessage);
}
@@ -232,7 +232,7 @@ class enrolment_plugin_authorize
}
// Credit card captured, ENROL student now...
if (enrol_into_course($course, $USER, 'manual')) {
if (enrol_into_course($course, $USER, 'authorize')) {
if (!empty($CFG->enrol_mailstudents)) {
send_welcome_messages($order->id);
}
@@ -405,7 +405,7 @@ class enrolment_plugin_authorize
$a->url = "$CFG->wwwroot/$CFG->admin/settings.php?section=httpsecurity";
notice(get_string('adminconfighttps', 'enrol_authorize', $a));
}
elseif (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off') {
elseif (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 443) { // MDL-9836
$wwwsroot = qualified_me();
$wwwsroot = str_replace('http:', 'https:', $wwwsroot);
$a = new stdClass;
@@ -417,13 +417,14 @@ class enrolment_plugin_authorize
$captureday = intval($frm->an_capture_day);
$emailexpired = intval($frm->an_emailexpired);
if ($captureday > 0 || $emailexpired > 0) {
if ((time() - intval($mconfig->an_lastcron) > 3600 * 24)) {
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
if ((time() - intval($lastcron) > 3600 * 24)) {
notify(get_string('admincronsetup', 'enrol_authorize'));
}
}
}
if ($count = count_records('enrol_authorize', 'status', AN_STATUS_AUTH)) {
if (($count = count_records('enrol_authorize', 'status', AN_STATUS_AUTH))) {
$a = new stdClass;
$a->count = $count;
$a->url = $CFG->wwwroot."/enrol/authorize/index.php?status=".AN_STATUS_AUTH;
@@ -491,7 +492,8 @@ class enrolment_plugin_authorize
$emailexpired = ($emailexpired > 5) ? 5 : (($emailexpired < 0) ? 0 : $emailexpired);
if (!empty($reviewval) && ($captureday > 0 || $emailexpired > 0)) {
if (time() - intval($mconfig->an_lastcron) > 3600 * 24) {
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
if (time() - intval($lastcron) > 3600 * 24) {
return false;
}
}
@@ -560,7 +562,6 @@ class enrolment_plugin_authorize
$settlementtime = authorize_getsettletime($timenow);
$timediff30 = $settlementtime - (30 * $oneday);
$mconfig = get_config('enrol/authorize');
set_config('an_lastcron', $timenow, 'enrol/authorize');
mtrace("Processing authorize cron...");
@@ -601,6 +602,7 @@ class enrolment_plugin_authorize
mtrace("blocked");
return;
}
set_config('an_lastcron', $timenow, 'enrol/authorize');
mtrace(" $ordercount orders are being processed now", ": ");
@@ -627,7 +629,7 @@ class enrolment_plugin_authorize
$timeend = $order->settletime + $course->enrolperiod;
}
$user = get_record('user', 'id', $order->userid);
if (role_assign($role->id, $user->id, 0, $context->id, $timestart, $timeend, 0, 'manual')) {
if (role_assign($role->id, $user->id, 0, $context->id, $timestart, $timeend, 0, 'authorize')) {
$this->log .= "User($user->id) has been enrolled to course($course->id).\n";
if (!empty($CFG->enrol_mailstudents)) {
$sendem[] = $order->id;
@@ -766,7 +768,7 @@ class enrolment_plugin_authorize
foreach($courseinfos as $courseinfo) {
$lastcourse = $courseinfo->courseid;
$context = get_context_instance(CONTEXT_COURSE, $lastcourse);
if ($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments')) {
if (($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments'))) {
$a = new stdClass;
$a->course = $courseinfo->shortname;
$a->pending = $courseinfo->cnt;
+3
View File
@@ -2,7 +2,10 @@
/// Load libraries
require_once('../../config.php');
require_once('const.php');
require_once('locallib.php');
require_once('localfuncs.php');
require_once('authorizenetlib.php');
/// Parameters
$orderid = optional_param('order', 0, PARAM_INT);
+2 -2
View File
@@ -40,7 +40,7 @@ function prevent_double_paid($course)
$sql .= 'AND status='.AN_STATUS_NONE;
}
if ($recid = get_field_sql($sql)) {
if (($recid = get_field_sql($sql))) {
$a = new stdClass;
$a->orderid = $recid;
$a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$a->orderid";
@@ -49,7 +49,7 @@ function prevent_double_paid($course)
}
if (isset($SESSION->ccpaid)) {
unset($SESSION->ccpaid);
redirect($CFG->wwwroot . '/login/logout.php');
redirect($CFG->wwwroot . '/login/logout.php?sesskey='.sesskey());
return;
}
}
+10 -14
View File
@@ -4,9 +4,6 @@ if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.');
}
require_once('const.php');
require_once('authorizenetlib.php');
define('ORDER_CAPTURE', 'capture');
define('ORDER_DELETE', 'delete');
define('ORDER_REFUND', 'refund');
@@ -53,7 +50,7 @@ function authorize_print_orders($courseid, $userid)
$sql .= "WHERE (e.userid='$userid') ";
}
$sql .= "ORDER BY c.sortorder, c.fullname";
if ($popupcrs = get_records_sql_menu($sql)) {
if (($popupcrs = get_records_sql_menu($sql))) {
$popupcrs = array($SITE->id => $SITE->fullname) + $popupcrs;
echo "<table border='0' width='100%' cellspacing=0 cellpadding=3 class='generaltable generalbox'>";
echo "<tr>";
@@ -155,7 +152,7 @@ function authorize_print_orders($courseid, $userid)
$where .= "AND (e.userid = '" . $userid . "') ";
}
if ($sort = $table->get_sql_sort()) {
if (($sort = $table->get_sql_sort())) {
$sort = ' ORDER BY ' . $sort;
}
@@ -163,7 +160,7 @@ function authorize_print_orders($courseid, $userid)
$table->initialbars($totalcount > $perpage);
$table->pagesize($perpage, $totalcount);
if ($records = get_records_sql($select . $from . $where . $sort, $table->get_page_start(), $table->get_page_size())) {
if (($records = get_records_sql($select . $from . $where . $sort, $table->get_page_start(), $table->get_page_size()))) {
foreach ($records as $record) {
$actionstatus = authorize_get_status_action($record);
$color = authorize_get_status_color($actionstatus->status);
@@ -278,7 +275,7 @@ function authorize_print_order_details($orderno)
else {
if (empty($CFG->an_test)) {
$user = get_record('user', 'id', $order->userid);
if (enrol_into_course($course, $user, 'manual')) {
if (enrol_into_course($course, $user, 'authorize')) {
if (!empty($CFG->enrol_mailstudents)) {
send_welcome_messages($order->id);
}
@@ -304,17 +301,14 @@ function authorize_print_order_details($orderno)
error(get_string('youcantdo', 'enrol_authorize', $a));
}
$extra = new stdClass;
$extra->sum = 0.0;
$extra->orderid = $orderno;
$refunded = 0.0;
$sql = "SELECT SUM(amount) AS refunded FROM {$CFG->prefix}enrol_authorize_refunds " .
"WHERE (orderid = '" . $orderno . "') AND (status = '" . AN_STATUS_CREDIT . "')";
if ($refund = get_record_sql($sql)) {
$extra->sum = floatval($refund->refunded);
if (($refundval = get_field_sql($sql))) {
$refunded = floatval($refundval);
}
$upto = format_float($order->amount - $extra->sum, 2);
$upto = format_float($order->amount - $refunded, 2);
if ($upto <= 0) {
error("Refunded to original amount.");
}
@@ -333,6 +327,8 @@ function authorize_print_order_details($orderno)
$strcanbecredit<br /><input type='submit' name='".ORDER_REFUND."' value='$authstrs->refund'>");
}
else {
$extra = new stdClass;
$extra->orderid = $orderno;
$extra->amount = $amount;
$message = '';
$success = authorize_action($order, $message, $extra, AN_ACTION_CREDIT);
+5 -5
View File
@@ -16,7 +16,7 @@
print_heading_with_help($struploadcsv, 'uploadcsv', 'enrol/authorize');
/// Handle CSV file
if ($form = data_submitted() && confirm_sesskey()) {
if (($form = data_submitted()) && confirm_sesskey()) {
$um = new upload_manager('csvfile', false, false, null, false, 0);
if ($um->preprocess_files()) {
$filename = $um->files['csvfile']['tmp_name'];
@@ -115,7 +115,7 @@ function authorize_process_csv($filename)
$settlementdate = strtotime($data[$csvfields['Settlement Date/Time']]);
if ($transstatus == 'Approved Review' || $transstatus == 'Review Failed') {
if ($order = get_record('enrol_authorize', 'transid', $transid)) {
if (($order = get_record('enrol_authorize', 'transid', $transid))) {
$order->status = ($transstatus == 'Approved Review') ? AN_STATUS_APPROVEDREVIEW : AN_STATUS_REVIEWFAILED;
update_record('enrol_authorize', $order);
$updated++; // Updated order status
@@ -124,7 +124,7 @@ function authorize_process_csv($filename)
}
if (!empty($reftransid) && is_numeric($reftransid) && 'Settled Successfully' == $transstatus && 'Credit' == $transtype) {
if ($order = get_record('enrol_authorize', 'transid', $reftransid)) {
if (($order = get_record('enrol_authorize', 'transid', $reftransid))) {
if (AN_METHOD_ECHECK == $order->paymentmethod) {
$refund = get_record('enrol_authorize_refunds', 'transid', $transid);
if ($refund) {
@@ -195,14 +195,14 @@ function authorize_process_csv($filename)
}
// If user wasn't enrolled, enrol now. Ignore otherwise. Because admin user might submit this file again.
if ($role = get_default_course_role($course)) {
if (($role = get_default_course_role($course))) {
if (! user_has_role_assignment($user->id, $role->id, $coursecontext->id)) {
$timestart = $timeend = 0;
if ($course->enrolperiod) {
$timestart = time();
$timeend = $timestart + $course->enrolperiod;
}
if (role_assign($role->id, $user->id, 0, $coursecontext->id, $timestart, $timeend, 0, 'manual')) {
if (role_assign($role->id, $user->id, 0, $coursecontext->id, $timestart, $timeend, 0, 'authorize')) {
$imported++;
if (!empty($CFG->enrol_mailstudents)) {
$sendem[] = $order->id;
+1 -1
View File
@@ -79,7 +79,7 @@
</td>
</tr>
<th colspan="2">
<?php print_string("field_mapping", "enrol_database") ?>
<?php print_string("remote_fields_mapping", "enrol_database") ?>
</td>
<tr valign="top">
<td align="right">enrol_localcoursefield:</td>
+65 -48
View File
@@ -83,43 +83,61 @@ function setup_enrolments(&$user) {
if ($rs->RecordCount() > 0) { // We found some courses
$courselist = array();
while (!$rs->EOF) { // Make a nice little array of courses to process
$courselist[] = $rs->fields['enrolremotecoursefield'];
$rs->MoveNext();
while ($fields_obj = rs_fetch_next_record($rs)) { // Make a nice little array of courses to process
$courselist[] = $fields_obj->enrolremotecoursefield;
}
$rs->Close();
rs_close($rs);
foreach ($courselist as $coursefield) { /// Check the list of courses against existing
if ($course = get_record('course', $CFG->enrol_localcoursefield, $coursefield)) {
/// If there's no role specified, we get the default course role (usually student)
if ($use_default_role) {
$role = get_default_course_role($course);
$course = get_record('course', $CFG->enrol_localcoursefield, $coursefield);
if (!is_object($course)) {
if (empty($CFG->enrol_db_autocreate)) { // autocreation not allowed
print "Course $coursefield does not exist, skipping\n";
continue; // next foreach course
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
// Couldn't get a role or context, skip.
if (!$role || !$context) {
continue;
// ok, now then let's create it!
print "Creating Course $coursefield...";
// prepare any course properties we actually have
$course = new StdClass;
$course->{$CFG->enrol_localcoursefield} = $coursefield;
$course->fullname = $coursefield;
$course->shortname = $coursefield;
if ($newcourseid = $this->create_course($course, true)
and $course = get_record( 'course', 'id', $newcourseid)) {
// we are skipping fix_course_sortorder()
print "created\n";
} else {
print "failed\n";
continue; // nothing left to do...
}
// Search the role assignments to see if this user
// already has this role in this context. If it is, we
// skip to the next course.
foreach($existing as $key => $role_assignment) {
if ($role_assignment->roleid = $role->id
&& $role_assignment->contextid = $context->id) {
unset($existing[$key]);
//error_log('[ENROL_DB] User is already enroled in course '.$course->idnumber);
continue 2;
}
}
//error_log('[ENROL_DB] Enrolling user in course '.$course->idnumber);
role_assign($role->id, $user->id, 0, $context->id, 0, 0, 0, 'database');
}
/// If there's no role specified, we get the default course role (usually student)
if ($use_default_role) {
$role = get_default_course_role($course);
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
// Couldn't get a role or context, skip.
if (!$role || !$context) {
continue;
}
// Search the role assignments to see if this user
// already has this role in this context. If it is, we
// skip to the next course.
foreach($existing as $key => $role_assignment) {
if ($role_assignment->roleid == $role->id
&& $role_assignment->contextid == $context->id) {
unset($existing[$key]);
//error_log('[ENROL_DB] User is already enroled in course '.$course->idnumber);
continue 2;
}
}
//error_log('[ENROL_DB] Enrolling user in course '.$course->idnumber);
role_assign($role->id, $user->id, 0, $context->id, 0, 0, 0, 'database');
}
} // We've processed all external courses found
@@ -193,10 +211,9 @@ function sync_enrolments($role = null) {
begin_sql();
$extcourses = array();
while (!$rs->EOF) { // there are more course records
$extcourse = $rs->Fields($CFG->enrol_remotecoursefield);
while ($extcourse_obj = rs_fetch_next_record($rs)) { // there are more course records
$extcourse = $extcourse_obj->{$CFG->enrol_remotecoursefield};
array_push($extcourses, $extcourse);
$rs->MoveNext(); // prep the next record
print "course $extcourse\n";
@@ -255,11 +272,10 @@ function sync_enrolments($role = null) {
}
// slurp results into an array
while (!$crs->EOF) {
array_push($extenrolments,$crs->Fields($CFG->enrol_remoteuserfield));
$crs->MoveNext();
while ($crs_obj = rs_fetch_next_record($crs)) {
array_push($extenrolments, $crs_obj->{$CFG->enrol_remoteuserfield});
}
$crs->Close(); // release the handle
rs_close($crs); // release the handle
//
// prune enrolments
@@ -318,9 +334,10 @@ function sync_enrolments($role = null) {
trigger_error('weird! no user record entry?');
continue;
}
$userid = $ers->Fields('userid');
$enrolmentid = $ers->Fields('enrolmentid');
unset($ers); // release the handle
$user_obj = rs_fetch_record($ers);
$userid = $user_obj->userid;
$enrolmentid = $user_obj->enrolmentid;
rs_close($ers); // release the handle
if ($enrolmentid) { // already enrolled - skip
continue;
@@ -334,6 +351,7 @@ function sync_enrolments($role = null) {
} // end foreach member
} // end while course records
rs_close($rs); //Close the main course recordset
//
// prune enrolments to courses that are no longer in ext auth
@@ -364,19 +382,18 @@ function sync_enrolments($role = null) {
return false;
}
if ( $ers->RecordCount() > 0 ) {
while (!$ers->EOF) {
$roleid = $ers->Fields('roleid');
$user = $ers->Fields('userid');
$contextid = $ers->Fields('contextid');
$ers->MoveNext();
while ($user_obj = rs_fetch_next_record($ers)) {
$roleid = $user_obj->roleid;
$user = $user_obj->userid;
$contextid = $user_obj->contextid;
if (role_unassign($roleid, $user, 0, $contextid)){
print "Unassigned role {$roleid} from user $user in context $contextid\n";
} else {
print "Failed unassign role {$roleid} from user $user in context $contextid\n";
}
}
rs_close($ers); // release the handle
}
unset($ers); // release the handle
commit_sql();
// we are done now, a bit of housekeeping
@@ -561,7 +578,7 @@ function create_course ($course,$skip_fix_course_sortorder=0){
$course->shortname = substr($course->shortname, 0, 15);
// store it and log
if ($newcourseid = insert_record("course", $course)) { // Set up new course
if ($newcourseid = insert_record("course", addslashes_object($course))) { // Set up new course
$section = NULL;
$section->course = $newcourseid; // Create a default section.
$section->section = 0;
+1 -1
View File
@@ -542,7 +542,7 @@ function process_group_tag($tagcontents){
}else{
$course->sortorder = 1000;
}
if($course->id = insert_record('course', $course)){
if($course->id = insert_record('course', addslashes_object($course))){
// Setup the blocks
$page = page_create_object(PAGE_COURSE_VIEW, $course->id);
+4 -4
View File
@@ -76,7 +76,7 @@ function setup_enrolments(&$user) {
error_log("[ENROL_LDAP] User $user->username enrolled to a nonexistant course $course_ext_id \n");
}
} else { // the course object exists before we call...
if ($course_obj->visible==0 && $user->{$type}[$course_obj->id] == 'ldap') {
if ($course_obj->visible==0) {
// non-visible courses don't show up in the enrolled
// array, so we should skip them --
continue;
@@ -576,8 +576,8 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){
// override with required ext data
$course->idnumber = $course_ext[$CFG->enrol_ldap_course_idnumber][0];
$course->fullname = $course_ext[$CFG->enrol_ldap_course_fullname][0];
$course->shortname = $course_ext[$CFG->enrol_ldap_course_shortname][0];
$course->fullname = addslashes($course_ext[$CFG->enrol_ldap_course_fullname][0]);
$course->shortname = addslashes($course_ext[$CFG->enrol_ldap_course_shortname][0]);
if ( empty($course->idnumber)
|| empty($course->fullname)
|| empty($course->shortname) ) {
@@ -589,7 +589,7 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){
$course->summary = empty($CFG->enrol_ldap_course_summary) || empty($course_ext[$CFG->enrol_ldap_course_summary][0])
? ''
: $course_ext[$CFG->enrol_ldap_course_summary][0];
: addslashes($course_ext[$CFG->enrol_ldap_course_summary][0]);
if(!empty($CFG->enrol_ldap_category)){ // optional ... but ensure it is set!
$course->category = $CFG->enrol_ldap_category;
+8
View File
@@ -8,12 +8,20 @@
global $CFG;
// Trivial-cache - keyed on $cachedcourseid
static $activitylist;
static $cachedcourseid;
if (empty($courseid)) {
$courseid = SITEID;
}
// Initialise/invalidate our trivial cache if dealing with a different course
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
$activitylist = array();
}
$cachedcourseid = (int)$courseid;
/// It may be cached
if (empty($activitylist)) {
+63 -64
View File
@@ -84,7 +84,7 @@
}
function algebra2tex($algebra) {
Global $CFG;
global $CFG;
$algebra = str_replace('&lt;','<',$algebra);
$algebra = str_replace('&gt;','>',$algebra);
$algebra = str_replace('<>','#',$algebra);
@@ -99,9 +99,9 @@ function algebra2tex($algebra) {
$algebra = str_replace('epsilon','zepslon',$algebra);
$algebra = str_replace('upsilon','zupslon',$algebra);
$algebra = preg_replace('!\r\n?!',' ',$algebra);
$algebra = escapeshellarg($algebra);
if ( (PHP_OS == "WINNT") || (PHP_OS == "WIN32") || (PHP_OS == "Windows") ) {
$algebra = "\"". str_replace('"','\"',$algebra) . "\"";
$cmd = "cd $CFG->dirroot\\$CFG->algebrafilterdirwin & algebra2tex.pl x/2";
$test = `$cmd`;
if ($test != '\frac{x}{2}') {
@@ -117,7 +117,6 @@ function algebra2tex($algebra) {
}
$cmd = "cd $CFG->dirroot\\$CFG->algebrafilterdirwin & algebra2tex.pl $algebra";
} else {
$algebra = escapeshellarg($algebra);
$cmd = "cd $CFG->dirroot/$CFG->algebrafilterdir; ./algebra2tex.pl x/2";
$test = `$cmd`;
if ($test != '\frac{x}{2}') {
@@ -206,66 +205,66 @@ function outputText($texexp) {
}
function tex2image($texexp, $md5, $return=false) {
global $CFG;
$error_message1 = "Your system is not configured to run mimeTeX. ";
$error_message1 .= "You need to download the appropriate<br /> executable ";
$error_message1 .= "from <a href=\"http://moodle.org/download/mimetex/\">";
$error_message1 .= "http://moodle.org/download/mimetex/</a>, or obtain the ";
$error_message1 .= "C source<br /> from <a href=\"http://www.forkosh.com/mimetex.zip\">";
$error_message1 .= "http://www.forkosh.com/mimetex.zip</a>, compile it and ";
$error_message1 .= "put the executable into your<br /> moodle/filter/tex/ directory. ";
$error_message1 .= "You also need to edit your moodle/filter/algebra/pix.php file<br />";
$error_message1 .= ' by adding the line<br /><pre> case "' . PHP_OS . "\":\n";
$error_message1 .= " \$cmd = \"\\\\\"\$CFG->dirroot/\$CFG->texfilterdir/";
$error_message1 .= 'mimetex.' . strtolower(PHP_OS) . "\\\\\" -e \\\\\"\$pathname\\\\\" \". escapeshellarg(\$texexp);";
$error_message1 .= "</pre>You also need to add this to your algebradebug.php file.";
global $CFG;
$error_message1 = "Your system is not configured to run mimeTeX. ";
$error_message1 .= "You need to download the appropriate<br /> executable ";
$error_message1 .= "from <a href=\"http://moodle.org/download/mimetex/\">";
$error_message1 .= "http://moodle.org/download/mimetex/</a>, or obtain the ";
$error_message1 .= "C source<br /> from <a href=\"http://www.forkosh.com/mimetex.zip\">";
$error_message1 .= "http://www.forkosh.com/mimetex.zip</a>, compile it and ";
$error_message1 .= "put the executable into your<br /> moodle/filter/tex/ directory. ";
$error_message1 .= "You also need to edit your moodle/filter/algebra/pix.php file<br />";
$error_message1 .= ' by adding the line<br /><pre> case "' . PHP_OS . "\":\n";
$error_message1 .= " \$cmd = \"\\\\\"\$CFG->dirroot/\$CFG->texfilterdir/";
$error_message1 .= 'mimetex.' . strtolower(PHP_OS) . "\\\\\" -e \\\\\"\$pathname\\\\\" \". escapeshellarg(\$texexp);";
$error_message1 .= "</pre>You also need to add this to your algebradebug.php file.";
if ($texexp) {
$texexp = '\Large ' . $texexp;
$lifetime = 86400;
$image = $md5 . ".gif";
$filetype = 'image/gif';
if (!file_exists("$CFG->dataroot/$CFG->algebraimagedir")) {
make_upload_directory($CFG->algebraimagedir);
}
$pathname = "$CFG->dataroot/$CFG->algebraimagedir/$image";
if (file_exists($pathname)) {
unlink($pathname);
}
$commandpath = "";
$cmd = "";
switch (PHP_OS) {
case "Linux":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.linux";
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" ". escapeshellarg($texexp);
break;
case "WINNT":
case "WIN32":
case "Windows":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
$texexp = str_replace('"','\"',$texexp);
$cmd = str_replace(' ','^ ',$commandpath);
$cmd .= " ++ -e \"$pathname\" \"$texexp\"";
break;
case "Darwin":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin";
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" ". escapeshellarg($texexp);
break;
}
if (!$cmd) {
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname ". escapeshellarg($texexp);
} else {
error($error_message1);
}
}
system($cmd, $status);
}
if ($return) {
return $image;
}
if ($texexp && file_exists($pathname)) {
if ($texexp) {
$texexp = '\Large ' . $texexp;
$lifetime = 86400;
$image = $md5 . ".gif";
$filetype = 'image/gif';
if (!file_exists("$CFG->dataroot/$CFG->algebraimagedir")) {
make_upload_directory($CFG->algebraimagedir);
}
$pathname = "$CFG->dataroot/$CFG->algebraimagedir/$image";
if (file_exists($pathname)) {
unlink($pathname);
}
$commandpath = "";
$cmd = "";
$texexp = escapeshellarg($texexp);
switch (PHP_OS) {
case "Linux":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.linux";
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" $texexp";
break;
case "WINNT":
case "WIN32":
case "Windows":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
$cmd = str_replace(' ','^ ',$commandpath);
$cmd .= " ++ -e \"$pathname\" $texexp";
break;
case "Darwin":
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin";
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" $texexp";
break;
}
if (!$cmd) {
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname $texexp";
} else {
error($error_message1);
}
}
system($cmd, $status);
}
if ($return) {
return $image;
}
if ($texexp && file_exists($pathname)) {
$lastmodified = filemtime($pathname);
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastmodified) . " GMT");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT");
@@ -275,7 +274,7 @@ function tex2image($texexp, $md5, $return=false) {
header("Content-length: ".filesize($pathname));
header("Content-type: $filetype");
readfile("$pathname");
} else {
} else {
$ecmd = "$cmd 2>&1";
echo `$ecmd` . "<br />\n";
echo "The shell command<br />$cmd<br />returned status = $status<br />\n";
@@ -301,7 +300,7 @@ function tex2image($texexp, $md5, $return=false) {
echo "mimetex executable $commandpath not found!<br />";
}
echo "Image not found!";
}
}
}
function slasharguments($texexp, $md5) {

Some files were not shown because too many files have changed in this diff Show More