Compare commits

..

461 Commits

Author SHA1 Message Date
moodler bc9cec3cd6 Updated version for release 1.5 2005-06-06 05:21:11 +00:00
moodler f9cff66906 Merged all the changes in HEAD until now 2005-06-06 05:04:31 +00:00
ikawhero 5450baa28a Added a 'Save Changes' button to the top of the page for those of us too
lazy to scroll!
2005-06-06 03:35:28 +00:00
ikawhero 422eaecc13 Check array is initialised. Bug 3424. 2005-06-06 00:39:35 +00:00
moodler e10ed4e667 file preferences.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:48 +0000 2005-06-06 00:13:12 +00:00
moodler ecfbaad4b4 file preferences.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:28 +0000 2005-06-06 00:13:12 +00:00
ikawhero e4cedd797a Errors will now return to course page instead of site. Related to Bug 3418. 2005-06-05 23:57:19 +00:00
gustav_delius 9dadc1a89e Regrading now used the proper session mechanism. Also it now works with old-style attempts which have only a single state. 2005-06-05 20:37:52 +00:00
moodler 5b0ae9d41c file student.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 20:33:47 +00:00
gustav_delius 2ac3cee674 Restoring of user attempts and states disabled for now, see bug 3159 2005-06-05 20:25:04 +00:00
gustav_delius f3bb54f36f Fixed typo 2005-06-05 20:19:17 +00:00
moodler e8edd40064 file exceptions.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:56:09 +00:00
moodler b1120b07c9 file letter.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:56:09 +00:00
moodler 00fcb704d3 file weight.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:56:09 +00:00
moodler 2b1ebff73c file preferences.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:56:09 +00:00
moodler 26549e7692 file category.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:56:08 +00:00
moodler efd780a339 file teacher.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:13 +0000 2005-06-05 19:24:45 +00:00
urs_hunkler 0c4a965346 mainly corretion for a disply problem of the course page in MSIE plus some minor changes. 2005-06-05 16:38:01 +00:00
gustav_delius 7371dc44d0 removed some unnecessary fields 2005-06-05 15:52:18 +00:00
gustav_delius 16a8215aa1 just fixing some comments 2005-06-05 15:37:22 +00:00
gustav_delius 6d0ea08227 taken out a notice to temporarily fix bug 3130 2005-06-05 15:08:34 +00:00
gustav_delius 85a6b27786 Fixed the calculated question editing wizard temporarily for Moodle 1.5 until Julian gets his new version ready. 2005-06-05 14:14:54 +00:00
gustav_delius db7f11c3d7 fixed some typos 2005-06-05 13:59:37 +00:00
gustav_delius 98133a3eec Random questions now store both the wrapped question id and the response in the same state record, essentially going back to Julian's model. 2005-06-05 13:22:03 +00:00
moodler 52de50d2d5 Just a small fix for people tracking betas 2005-06-05 13:11:05 +00:00
gustav_delius 122299654f Improved the display of readonly form fields in questions so that they are no longer grey on grey 2005-06-05 12:03:50 +00:00
gustav_delius 52fa982eba Change to when newly created states get saved
Changes to what is printed during regrade
2005-06-05 11:49:32 +00:00
stronk7 5eab4b5c43 Removed reference to Journal (Diario in es) 2005-06-05 10:09:32 +00:00
stronk7 e68e7af8ed Merged from HEAD... 2005-06-05 09:46:33 +00:00
moodler 2e52e3c14b file gradinggrade.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:30 +0000 2005-06-05 08:55:11 +00:00
moodler 2be7e8b347 file grading.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:30 +0000 2005-06-05 08:49:33 +00:00
moodler b8187e5ae0 file grade.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:30 +0000 2005-06-05 08:44:38 +00:00
thepurpleblob 74be4f9a8d Removed reference to Journals. 2005-06-05 07:37:16 +00:00
moodler cb21e292fa file penalty.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:31 +0000 2005-06-05 07:31:24 +00:00
moodler 3a8e6b5f4b file adaptive.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:31 +0000 2005-06-05 07:31:24 +00:00
thepurpleblob cdd11103b7 Removed reference to Journal 2005-06-05 07:24:46 +00:00
thepurpleblob dab41ccfdc Removed reference to Journal. 2005-06-05 07:11:44 +00:00
thepurpleblob 49e8438753 Removed references to Journal. 2005-06-05 06:51:09 +00:00
thepurpleblob 12c3f08cb0 Removed reference to journals. 2005-06-05 06:47:02 +00:00
thepurpleblob 2f6b3b1966 Removed references to journals. 2005-06-05 06:44:09 +00:00
moodler 9d39272ded Added support for $CFG->allowobjectembed in the GUI 2005-06-05 05:39:25 +00:00
moodler 14bc8df569 Added $CFG->allowobjectembed in weblib.php so that these can be selected by admin 2005-06-05 05:25:02 +00:00
moodler 6dca5725ea file nextpageaction.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:49 +0000 2005-06-05 03:48:41 +00:00
moodler bf3932fc42 file nextpageaction.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:29 +0000 2005-06-05 03:48:40 +00:00
moodler 2c8a7e32db Turn off script access for autoembedded flash SC126 2005-06-05 03:31:44 +00:00
gustav_delius 3c76674f76 More graceful behaviour when there are not enough questions for the random questions. 2005-06-04 22:43:28 +00:00
ecastrolt fba559da7a *** empty log message *** 2005-06-04 21:07:57 +00:00
moodler 468f3c1cc4 file webquest.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler fe0df5f546 file tex.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler 370454c947 file workshop.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler 3010db0e48 file wiki.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler ae6a28706b file survey.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler 63fd025955 file scorm.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler f5e2a57092 file resource.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:16 +0000 2005-06-04 20:05:32 +00:00
moodler 1edf4fcaa6 file mediaplugin.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler 191ac5e692 file questionnaire.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler ad50e44876 file label.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler 1a833b187a file multilang.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler 5983511872 file message.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler df644c8811 file pix.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler 52183b89b1 file lesson.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:32 +00:00
moodler cfe70c4f90 file exercise.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler 98a68126ed file journal.php.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler 39538ed31a file grades.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler 42bdd31e68 file hotpot.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler d0fa39395c file install.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler 737d922645 file glossary.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:15 +0000 2005-06-04 20:05:31 +00:00
moodler 5e3b40221a file block_rss_client.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler fd91ea6371 file block_course_list.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler cee15d365b file countries.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler c29cc45005 file block_online_users.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 2db4405ca0 file attendance.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 2e3d0ff372 file editor.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler fe2c9820e8 file algebra.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 72df247c50 file censor.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler d35f4bcabd file enrol_paypal.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler a46eb2ee08 file enrol_ldap.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 18ac802f51 file dialogue.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler d520a0a173 file emailprotect.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler e264c29fa1 file appointment.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 406d542d00 file block_html.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler a02176516b file block_course_summary.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 27b0d869e6 file admin.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 21971c4ed0 file calendar.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler e1c24a9dba file block_social_activities.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler dcb1b0cbdf file enrol_database.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 9c94bb15aa file enrol_flatfile.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler bec8a5ca4b file error.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler cee8d7fb63 file block_quiz_results.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler 5a67edcc09 file enrol_internal.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
moodler c5f0945604 file block_section_links.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:14 +0000 2005-06-04 20:05:31 +00:00
defacer ff642e93ba Fixing all Tidy warnings in this page. This has to be A Good Thing. 2005-06-04 17:43:52 +00:00
gustav_delius 5ebe26c7d0 fixed typo 2005-06-04 17:22:00 +00:00
gustav_delius a616b09790 The versioning code will not be in Moodle 1.5 2005-06-04 17:13:26 +00:00
stronk7 e64dfa80dd Changed name of the container category a bit and avoided one notice. 2005-06-04 15:37:40 +00:00
gustav_delius 4a4d46cade slight improvement of layout 2005-06-04 11:40:57 +00:00
moodler 905746771f file quiz_analysis.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:05 +0000 2005-06-04 11:25:51 +00:00
moodler 82a838920f file block_search_forums.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:03 +0000 2005-06-04 11:25:51 +00:00
moodler d913dc4244 file enrol_authorize.php was added on branch MOODLE_15_STABLE on 2005-06-06 05:04:03 +0000 2005-06-04 11:25:51 +00:00
gustav_delius 4aa3ac1609 Print notice on preview when secure window will be used for students
Also improved some language strings
2005-06-04 11:19:48 +00:00
gustav_delius 775d4dd817 Print notice on preview when secure window will be used for students 2005-06-04 11:16:37 +00:00
gustav_delius e0b0ef395f Show link to attempts list only if student attemtps exist. 2005-06-04 11:10:36 +00:00
mindforge a21fc2b7c9 Cleaned up and documented regrading code. 2005-06-04 11:04:00 +00:00
mindforge aee2784751 Manual regrading page implemented. 2005-06-04 10:58:31 +00:00
ikawhero 3e41bf36a3 Link to add new courses only shown to course creators when there are no
courses available. Bug 3420.
2005-06-04 10:39:57 +00:00
urs_hunkler cf26a12c62 corrected width of the middle column in course view. 2005-06-04 09:16:20 +00:00
gustav_delius 90abc87934 attempts.php has moved to report/overview/report.php 2005-06-04 09:10:13 +00:00
gustav_delius 8c040068ca Removed the quiz upgrade warning. 2005-06-04 09:07:40 +00:00
gustav_delius 67a8ef4235 removing the old statistics reports 2005-06-04 08:58:16 +00:00
gustav_delius c17f91905a put back the overview report folder 2005-06-04 08:55:37 +00:00
gustav_delius 1b2457c312 added regrading page 2005-06-04 08:54:56 +00:00
gustav_delius 2fbd81b02d Fixed bug 3410. Admins are no longer shown ALL categories in drop-down menu. 2005-06-04 08:47:33 +00:00
gustav_delius e729020eda Improve alignment in table in mod.html for IE
Missing questions lead to notice rather than fatal error
Attempts report now moved to reports/overview
put in empty regrading page for Julian to complete
Moved some of the styles out of styles.php into standard style
Fixed error on reviewquestion.php
put infobox on reviewquestion.php
fixed <form> tag on item analysis report
2005-06-04 08:30:49 +00:00
defacer 6e296332ca Fix for bug 3316: Now students which have attempted the quiz but have
since been unenrolled from the course are shown with a dimmed style.
2005-06-04 00:18:57 +00:00
defacer 94640580f3 Forgot to prepend country codes to the teacher list as well when sorting. 2005-06-03 23:40:19 +00:00
defacer 113130bd32 Adding one new string: "Show $a per page" 2005-06-03 23:31:06 +00:00
defacer 1443433431 CSS styles for the revamped user/index.php 2005-06-03 23:26:31 +00:00
defacer 4fd2dff9fe A big big big patch:
Converted the students table to use the new table class

Fixed bug 3114: when sorting by country, prepend country code to the country name

Fixed behavior of autohiding teacher list; now there is a hide/show icon to be
consistent with the rest of Moodle

Fixed "show all" option so that the user can control it instead of relying on auto behavior

Fixed HTML, removed all inline styles

Improved accessibility (alt tags for images)

Updated obsolete optional_variable calls to optional_param

Several cosmetic and other improvements I 've already forgotten :P
2005-06-03 23:19:12 +00:00
defacer 680da3b4af Added function that exports current selection for first/last initial
Added extra CSS class to initial bars (can now differentiate first/last)
2005-06-03 22:46:54 +00:00
moodler dc0d77760a file maxpages.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:49 +0000 2005-06-03 21:53:41 +00:00
moodler c700b6c43b file review.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:49 +0000 2005-06-03 21:53:41 +00:00
moodler adb2f6e2fc file highscores.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:49 +0000 2005-06-03 21:53:41 +00:00
moodler def727dc7d file maxpages.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:29 +0000 2005-06-03 21:53:41 +00:00
moodler c5d16299de file review.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:29 +0000 2005-06-03 21:53:41 +00:00
moodler 93b2625047 file highscores.html was added on branch MOODLE_15_STABLE on 2005-06-06 05:03:28 +0000 2005-06-03 21:53:41 +00:00
gustav_delius b769175004 The popup window didn't always close. 2005-06-03 20:43:50 +00:00
stronk7 816f68c8aa Upgraded backup/restore TODO list. Only two points remains open:
- SCORM: restore. See bug 3404.
- QUIZ: 1.5 <=> 1.5 backup and restore. Gustav's team is polishing it.

Bump to 1.5 (Final)
2005-06-03 17:43:46 +00:00
stronk7 c3f0763f7b Added support for forum->trackingtype 2005-06-03 17:35:27 +00:00
moodler e0dcb5734f Merged many language files from HEAD 2005-06-03 17:17:15 +00:00
stronk7 321aae1d8b Small typo, preventing group events to be restored properly.
Records in backup_ids table must use the name of the table
without the prefix as name. Bug 3360. Thanks Jon.
(http://moodle.org/bugs/bug.php?op=show&bugid=3360)
2005-06-03 16:43:26 +00:00
ikawhero 9bb32eb744 Meaningful string shown in breadcrumb and heading when editing site topic.
Bug 3408.
2005-06-03 14:41:35 +00:00
mindforge 2c20f70dca Fix for bug #3357. Random questions now check properly if a question is already in use. 2005-06-03 12:56:53 +00:00
stronk7 a3247baa3a Bump!
Deletion (or move to site course) of orphan categories
executed in the upgrade process. Now we shouldn't have
such orphans anymore! B-)

Part of bug 2459
(http://moodle.org/bugs/bug.php?op=show&bugid=2459)

Important NOTE: In the upgrade code for postgreSQL I've included
                some steps that weren't up to date. They seem to
                standard SQL code but they should be tested
                properly.... hope all works!
2005-06-03 12:49:16 +00:00
stronk7 c0624b017b Deletion (or move to site course) of orphan categories
executed in the upgrade process. Now we shouldn't have
such orphans anymore! B-)

Part of bug 2459
(http://moodle.org/bugs/bug.php?op=show&bugid=2459)

Important NOTE: In the upgrade code for postgreSQL I've included
                some steps that weren't up to date. They seem to
                standard SQL code but they should be tested
                properly.... hope all works!
2005-06-03 12:47:44 +00:00
moodler 81b1951adf Labels can now have apostrophes again! :-) bug 3411 2005-06-03 12:21:16 +00:00
moodler 73c1140d6a Fix for Bug 3036. (SE) 2005-06-03 08:15:38 +00:00
moodler 20fe7276ff Merged French from HEAD 2005-06-03 05:25:09 +00:00
moodler dd8fb6e848 file autocontinue.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler 1ece975598 file browsemode.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler 4308feffbd file height.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler 66674833f6 file maxgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler 578462059e file width.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler bd8b6c6f0e file summary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler e5e43b42ec file package.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler f309507a9f file grademethod.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-06-03 03:55:38 +00:00
moodler 5c3cf81dfb file navigation.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler 5bf11225c4 file analysistable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler c10f0b5df7 file reportselector.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler abac5c2107 file mediaplayers.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler d6c5e20610 file forceplugins.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler b9b4610906 file responsestable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler 03231ca0b3 file outputformat.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
moodler 6d53e3b77d file shownextquiz.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-06-03 03:55:38 +00:00
martinlanghoff a0b22b3218 auth/ldap : minor html fix 2005-06-03 03:41:16 +00:00
moodler 0db7057a78 file browsemode.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-06-02 22:31:41 +00:00
moodler 7bc02fa10a file maxgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-06-02 22:31:41 +00:00
moodler 01737697a4 file grademethod.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-06-02 22:31:41 +00:00
moodler 2eb6412ef8 file maxgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-06-02 22:31:40 +00:00
moodler 4fad751ed9 file grademethod.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-06-02 22:31:40 +00:00
moodler e32e7ca09c file browsemode.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-06-02 22:31:34 +00:00
moodler da7d308c32 Disable Attendance in core tables because the module has been deleted 2005-06-02 15:01:12 +00:00
moodler 4a625f17af Remove attendance from 1.5 too 2005-06-02 14:59:38 +00:00
exe-cutor 9fa1dad004 Adapted Shibboleth authentication to new field lock/update mechanism by Martin 2005-06-02 14:34:22 +00:00
moodler 651dfa878e file itemanalysis.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-06-02 13:57:26 +00:00
urs_hunkler 50da41e264 some theme optimizations: manly font-sizes and the list pages. 2005-06-02 12:31:35 +00:00
martinlanghoff 6406bef13e Fixed typo in configuration of ldap_memberattribute for RFC2307-style LDAP servers. Should fix handling of iscreator group. Thanks to Teemu Haapoja for the diagnosis and fix. 2005-06-02 09:55:06 +00:00
martinlanghoff 5a2cfa7efb Version bump triggers config_plugin migration for locks and field mapping. 2005-06-02 04:25:36 +00:00
moodler 0bb30298d0 file nelements.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 37553f8493 file managing2.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 1761c44531 file regrading.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler d1869b995e file managing.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 5e01a18606 file gradingstrategy.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 1ef00c891f file password.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 2d910a2d08 file gradinggrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:18 +00:00
moodler 3b61c3c5d6 file elements.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:17 +00:00
moodler 17dec907b9 file grade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:17 +00:00
moodler c90daf0b4b file comparisonofassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-06-02 02:46:17 +00:00
moodler a69f876e76 file removepages.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler a960f39fbb file wikitype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 474ce18912 file strippages.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 6c8f0ed5a8 file initialcontent.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 5ace54167e file htmlmode.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler d981f1b6e3 file wikilinkoptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 0810574be1 file ewikiacceptbinary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler ee5b1788f7 file setpageflags.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 9a6222dd38 file revertpages.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 46cc45f293 file checklinks.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 8e8380fb97 file revertauthorfieldpattern.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 5aef10640e file wikiname.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler b34d0917a6 file howtowiki.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler 1067cb28f1 file wikiusage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler f94e02f057 file studentadminoptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-06-02 02:46:17 +00:00
moodler fec8049d34 file leaguetable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler a111b749fc file finalgrades.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler f42449f77e file nelements.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler cc13541244 file takeownership.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler d67ad45602 file submissionofdescriptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 0ef063825f file moreinfo.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 09be6630de file usemax.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 26b9be1d7a file regrading.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 10692d97e6 file leaguetablenames.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler f327821e4e file grade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler b9fc85815e file usepassword.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 312f8b5410 file specimen.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 6d163e8a59 file grading.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 888faa0559 file managing.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 62dec3d6b5 file gradingstrategy.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 06979a542b file password.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 2f4ae7848b file gradinggrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:06 +0000 2005-06-02 02:46:17 +00:00
moodler 9199bfc986 file elements.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 3fde815636 file administration.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler ea6787cb2f file comparisonofassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 4f0f9f52c6 file info.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler e628acf30d file dialoguetype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 97d94ab7f2 file addsubject.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 675522cb1b file multiple.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 69f2570655 file deleteafter.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler 9206c92895 file closedialogue.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler d3f8a394bc file maildefault.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-06-02 02:46:17 +00:00
moodler de735d30a8 file reportselector.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-06-02 00:52:14 +00:00
moodler 8afa0586cc file reportselector.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-06-02 00:52:14 +00:00
gustav_delius 72a054b9f9 Fixed bug 3393 2005-06-01 20:07:50 +00:00
zibas 643f215f0a file xsl_emulate_xslt.inc was added on branch MOODLE_15_STABLE on 2005-06-07 14:21:19 +0000 2005-06-01 19:32:52 +00:00
moodler 6acfcce9a8 file itemanalysis.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:55 +0000 2005-06-01 19:24:17 +00:00
gustav_delius 6be3c99802 replaced some error() by redirect() 2005-06-01 18:34:24 +00:00
gustav_delius 20101a6092 Improved error messages a bit 2005-06-01 18:16:52 +00:00
moodler 4d044e6e84 SQL should not assume mdl_ prefix on tables (bug 3390) 2005-06-01 08:08:37 +00:00
martinlanghoff d08c400d31 auth fieldlocks: smarter handling of UI strings for user fields 2005-06-01 08:05:28 +00:00
martinlanghoff 770764f392 config_plugins settings migration -- this is a DB upgrade block 2005-06-01 07:47:49 +00:00
martinlanghoff 4f6af1254b get_config() now preserves CFG if DB fails or is empty 2005-06-01 06:57:09 +00:00
martinlanghoff e3cd7f35b9 config_plugin with auth/shibboleth
* config.html now uses print_auth_lock_options()
 * config.html better handling of default vars, and removed some warnings
 * lib.php uses new config_plugin vars
2005-06-01 06:23:44 +00:00
martinlanghoff 2ba609cc8c config_plugin work
* lang updates and lang-related fixes
 * auth/db uses the new convention
2005-06-01 06:01:29 +00:00
gustav_delius 3d7a1cbf2b A missing ! led to bug 3377 2005-06-01 05:56:46 +00:00
martinlanghoff b50eee807b Almost there with config_plugins work!
* More solid checking for auth GET/POST var.
 * print_auth_lock_options() now handles user field mapping options for LDAP and similar modules
 * user mapping options have moved to config_plugins table
 * LDAP module has migrated to using new field mapping vars -- simplified config.html a lot
 * strings are mostly resolved
 * a bit of work pending on CAS and DB modules
 * need an upgrade path for field-mapping config entries -- limited to LDAP only
2005-06-01 04:44:17 +00:00
martinlanghoff 6b64601101 Bumping the revision for the config_plugins table. 2005-06-01 02:28:33 +00:00
moodler 28d21ce79e file gradingstrategy.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:27 +0000 2005-06-01 01:15:06 +00:00
moodler 07387b3124 file gradingstrategy.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-06-01 01:15:06 +00:00
moodler df699778c4 file autocontinue.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 2d7915885a file browsemode.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 9d24e151bc file height.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 9fbed4dc26 file maxgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 9896fa3de5 file mods.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler ea5cb3bbde file width.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 732216d72a file summary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler b08068e829 file package.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 1622a2d06f file grademethod.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 23:34:37 +00:00
moodler 0d4a213943 Better handling of dates when timedue isn't set 2005-05-31 23:28:08 +00:00
moodler 98823d2ac0 Hide due date when there isn;t one 2005-05-31 23:18:54 +00:00
moodler facf76eede Added event handling from trunk 2005-05-31 23:02:44 +00:00
moodler 41591a4a17 file categories_edit.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler cd22423ceb file penalty.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler 479c8e5958 file penaltyscheme.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler 271228d527 file analysisoptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler d592dc462d file questionsperpage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler bfaf3c876b file adaptive.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
moodler 3954fbf809 file rqp.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:15 +0000 2005-05-31 22:48:21 +00:00
stronk7 c63bcbf27c Complete refactor of quiz_delete_course()
Now this function works following this:
- Iterate over every quiz category in the course (following parent-child relationships).
- If the category is being used*, move it to site level (under a container category) and
      mark it as published.
- If the category isn't being used, remove** it completely (questions, instances...) and
      re-parent its child categories.
- Feedback is shown in a table detailing all the changes performed.

* One category is being used if it has one question that is being used in any quiz,
  independently of its publish status.
** Removal of categories (and associated questions) has benn improved but, it won't
  be perfect until bug 3366 was solved.

Tested against some large courses with reused questions and multiple levels of
categories. Seems to work but

PLEASE TEST IT AND SEND ANY FEEDBACK TO BUG 2459
(http://moodle.org/bugs/bug.php?op=show&bugid=2459)

Exactly this function is going to be used in the upgrade script to solve
the orphan categories issue and it must work perfectly!
2005-05-31 22:31:22 +00:00
stronk7 0242dc70f3 Four new strings added to show the work done
against quiz_categories when a course is deleted.
Part of bug 2459
(http://moodle.org/bugs/bug.php?op=show&bugid=2459)
2005-05-31 21:26:09 +00:00
moodler 25957101a8 file responsestable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-31 20:23:27 +00:00
moodler 6d079b698f file responsestable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-05-31 20:23:27 +00:00
stronk7 0456f1c62a Simplify the quizzes_category_used() function.
I was using the $excluded parameter to avoid
loops between categories. A->B->A. Think we can
assume such loops won't exist, so I've deleted
the $excluded use.
2005-05-31 16:30:36 +00:00
thepurpleblob 5c6c7224eb Took out dos line endings 2005-05-31 15:17:20 +00:00
thepurpleblob a40014f758 Removed spurious aligns in <input> tags for optional units - now formats
properly in Apple Safari
2005-05-31 14:45:05 +00:00
thepurpleblob 53b9b145ab Fixed incorrect !important tags in CSS 2005-05-31 14:21:28 +00:00
thepurpleblob ded3459821 'Fixed' quizzes_category_used declaration to make it work. Based on it only
being called in one place. Might need a 'proper' fix though, but this gets us
moving!
2005-05-31 13:34:15 +00:00
thepurpleblob 331b64ac3f Removed uneccessary call-time pass by reference. 2005-05-31 10:11:00 +00:00
thepurpleblob b89246267b Checks import/export class file actually exists before trying to include it. 2005-05-31 10:02:48 +00:00
martinlanghoff cdbba24134 First cut of field locks support. functional but missing strings and support for LDAP/DB modules.
- Extended set_config()
- Implemented get_config() which takes over $CFG loading in setup.php
- admin/auth.php has special handling if post vars starting in pluginconfig_
- admin/auth.php print_auth_lock_options() prints a form fragment -- being called from most plugins now
- user/edit.php follows the new convention when locking down fields, both javascript UI and on POST.
2005-05-31 05:36:41 +00:00
moodler fa84313875 file quiz_analysis.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:06 +0000 2005-05-31 05:13:33 +00:00
moodler e2d02f322e file timezones.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:06 +0000 2005-05-31 05:13:33 +00:00
moodler 2b545bff3b file block_search_forums.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:05 +0000 2005-05-31 05:13:33 +00:00
moodler ec0e8976e9 file block_glossary_random.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:05 +0000 2005-05-31 05:13:33 +00:00
moodler 24ad970192 file grades.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:05 +0000 2005-05-31 05:13:33 +00:00
moodler 83bf0c7ac3 file block_html.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:05 +0000 2005-05-31 05:13:33 +00:00
moodler 2a55ad8736 file block_quiz_results.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:05 +0000 2005-05-31 05:13:33 +00:00
moodler 25b68ad11e Fix for SC122 2005-05-31 04:36:04 +00:00
moodler d347fbefd6 file qtype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-05-31 01:48:07 +00:00
moodler 6124af76ab file questionnaireid.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-05-31 01:48:07 +00:00
moodler 893e4ecc77 file qmanage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-05-31 01:48:07 +00:00
moodler f5925fe29a file respondenttype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:08 +0000 2005-05-31 01:48:07 +00:00
moodler d07e7183e6 file casesensitive.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler c82589c6b5 file editalways.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 2c0436b1a6 file importcategories.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler a1e04405ff file aliases2.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 0516af71ef file globalglossary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 8f459f900b file usedynalink.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 866885022f file aliases.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 350ad0ef85 file entbypage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 6b73dbaa20 file rssarticles.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 291f7bd8ba file studentcanpost.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 40fb06a8d0 file allowprintview.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler c4563fe0fb file shows.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 17c9ed588d file mainglossary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 9480b8f1f4 file linkcategory.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 6c45d66129 file allowduplicatedentries.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler ae29b65979 file destination.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler e43dd3defa file defaultapproval.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 02c71b5a1e file filetoimport.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler b6f1f29147 file rsstype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 6b9ab9e4fc file attachment.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler cffd20cede file usedynalinkentry.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 3372fd30ff file description.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 8353441838 file allowcomments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 5d213075c3 file displayformat.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler 5da1448d69 file fullmatch.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-31 01:48:07 +00:00
moodler cc082cb176 file dynsection.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler 53e1d700bf file hours.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler b9441c6e63 file maxgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler 98aa5c1e21 file choosedays.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler fa43dc51f8 file grade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler ef405b2a1b file autoattend.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-31 01:48:07 +00:00
moodler 58c4dc24c7 file penaltyscheme.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-31 00:12:27 +00:00
moodler 741ee69fad file questionsperpage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-31 00:12:27 +00:00
moodler 754e6ee60b file penaltyscheme.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-05-31 00:12:27 +00:00
moodler 780d107619 file questionsperpage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-05-31 00:12:27 +00:00
stronk7 61842c3a01 Added the sort_categories_by_tree() function that
returns an ordered array of categories following
the parent-child relationships. It doesn't forget
any category and returns all the categories passed
although their parent were incorrect. Try to build
as much tree structure as possible.
2005-05-30 23:56:38 +00:00
mjollnir_ 8c28ed7838 Fixing up problem in generate_email_processing_address -- using sitesecret rather than siteidentifier 2005-05-30 23:25:56 +00:00
martinlanghoff 8bfac5b93d Fixed field lenght in config_plugins 2005-05-30 22:30:50 +00:00
stronk7 6d64a7091d Deleting one debug message... 2005-05-30 22:27:20 +00:00
stronk7 22ad0a2e45 Now the quizzes_category_used() function supports searching
for uses recursively plus an array of excluded categories.

Needed to solve bug 2459...in progress.
2005-05-30 22:25:52 +00:00
moodler e8eaff0171 file analysisoptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:55 +0000 2005-05-30 22:07:12 +00:00
moodler f3bfb270af Fixed _new with _blank 2005-05-30 18:42:41 +00:00
moodler 260d699c17 Added limit of 900 characters to subject line, to prevent overflows 2005-05-30 18:09:03 +00:00
defacer bb25fc1bca Fix for bug 3364:
The Great Global $course Hack strikes again. I had to put in another instance
of the hack for course themes to work in the "calendar" part of the course.

Hopefully some day we 'll do all that "correctly"! (search for "hack" in
weblib and despair).
2005-05-30 13:31:44 +00:00
defacer 7bc4158521 More correct handling of group events, we cannot simply omit them because
the course has "no groups" UNLESS groupmodeforce == 1 as well.

Sadly, this severely weakens the performace optimizations :(

See bug 3303 for an example of what the problem was before.
2005-05-30 12:40:44 +00:00
mudrd8mz a0028106e3 Included fix by Jaime Villate posted Sunday, 8 May 2005, 10:45 PM 2005-05-30 09:31:28 +00:00
martinlanghoff fc0ee03121 Capture the outcome of the config_plugins table creation. 2005-05-30 05:24:19 +00:00
martinlanghoff 987d846223 Created config_plugins table to manage configuration entries on a per-module/plugin. This breaks the rules a little bit, but it has been discussed with MD. 2005-05-30 05:10:22 +00:00
martinlanghoff e7c83f42ef enrol/ldap offers enrol_allowinternal config option as it should. 2005-05-30 03:51:07 +00:00
moodler c8198e1311 file summary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-30 01:49:53 +00:00
moodler 17620a4193 file package.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-30 01:49:53 +00:00
moodler 61b7abf279 file summary.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-05-30 01:49:52 +00:00
moodler 4be10f9c9d file package.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-05-30 01:49:52 +00:00
watcanz 606f29ff1d styles_layout.css updated for new sideblocks code. header.html removed logo. 2005-05-30 00:02:22 +00:00
ecastrolt 6a43c2aae4 *** empty log message *** 2005-05-29 20:50:14 +00:00
ecastrolt 29a4e4e556 *** empty log message *** 2005-05-29 19:45:14 +00:00
ecastrolt c65086aab0 *** empty log message *** 2005-05-29 19:36:41 +00:00
stronk7 6d85897f87 Added the quizzes_category_used() to detect the list of
quizzes that are using questions from one category.
It relies in the quizzes_question_used() function. Will
be use in the 'orphan_categories' bug (#2459)

(http://moodle.org/bugs/bug.php?op=show&bugid=2459)
2005-05-29 18:58:14 +00:00
stronk7 83c5e8f6b1 format_string() applied once deleting courses...
Merged from HEAD
2005-05-29 17:32:18 +00:00
moodler 3d8a508910 Fix for bug 3350 where older SESSION->wantsurl was hanging around 2005-05-29 07:58:37 +00:00
moodler cb9b40a576 file book.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:14 +0000 2005-05-29 07:07:18 +00:00
moodler e21964e8b0 file timerestrict.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-05-29 06:48:37 +00:00
moodler d15938ce5f file limit.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-05-29 06:48:37 +00:00
moodler 22f52e2bf3 file options.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-05-29 06:48:37 +00:00
moodler b6f8c22bc3 file chatting.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:05 +0000 2005-05-29 06:48:36 +00:00
moodler c89d8d7636 file resubmit.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler a17794496c file commentinline.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler e545ae1876 file types.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler 236ec5b9b6 file assignmenttype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler bae75cb826 file emailteachers.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler 89552fc789 file search.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:04 +0000 2005-05-29 06:48:36 +00:00
moodler 3684c9f4e2 file authchange.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:03 +0000 2005-05-29 06:48:36 +00:00
moodler db3a8b8a59 file advancedsettings.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:03 +0000 2005-05-29 06:48:36 +00:00
moodler 2b82654492 file cost.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:03 +0000 2005-05-29 06:48:36 +00:00
moodler bb4e105b49 FIxed a problem when stripping terms from search string for highlighting 2005-05-29 04:04:31 +00:00
defacer 1819221450 Now tablelib allows the GET variables that control sorting etc. to be
configured. Essential in order to allow two independent tables in the same
screen, which is required for /user/index.php.
2005-05-28 21:22:45 +00:00
defacer 4ac7b06a76 Revisited blocks administration page!
* Incompatible blocks which have been disabled during the upgrade
     from Moodle 1.4 can now be deleted.

   * Incompatible blocks (if any) are presented in a separate table
     and are clearly marked as such.

   * Using the new table class.

   * Improved visuals.

   * Fixed HTML and updated obsolete coding conventions all around.
2005-05-28 18:36:01 +00:00
defacer 379298d6ae NEW STRING ADDED for admin/blocks.php
One string we no longer use removed.
2005-05-28 18:28:26 +00:00
defacer 49307babf5 New styles for the revisited admin/blocks page, coming up next. 2005-05-28 18:22:28 +00:00
moodler ac6e8f1133 $CFG->ignoresesskey can override all sesskey checking 2005-05-28 14:02:53 +00:00
moodler ce34811cdd Addes mms protocol 2005-05-28 13:29:37 +00:00
moodler 51f2f92ca5 file trackingtype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:14 +0000 2005-05-28 08:58:56 +00:00
moodler 3bcee5d4c7 Fixed a missing global 2005-05-28 06:38:10 +00:00
moodler 07a5d7cb3e file penalty.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-28 01:27:05 +00:00
moodler 7adc79d42c file penalty.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:24 +0000 2005-05-28 01:27:05 +00:00
moodler 069577e929 file ungradedassessments_teacher.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler cffe2e51bd file usepassword.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:13 +0000 2005-05-28 01:04:34 +00:00
moodler 317dbb6f67 file submissionofexamples.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 0c06ed4263 file selfassessment.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler abb8d37084 file leaguetable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler f0cffb1e49 file resubmit.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 16b96bf3c9 file gradingsubmissions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler e47e30a11f file overallocation.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 4431f7188f file nattachments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 7f6d1637d0 file includeteachersgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 7e01657166 file nassessmentsofteachersexamples.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 51cb63459b file includeself.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 5992f232aa file ungradedassessments_student.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 688d2f7d5b file teacherweight.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler b5cb37d9ea file specimen.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler e892f04d05 file showinggrades.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 01c784002a file nassessmentsofstudentsubmissions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 267a7811fc file ungradedassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:34 +00:00
moodler 0ac29d7f60 file gradingassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler c975e6afad file finalgrades.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler 80118a25eb file breakdownoffinalgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler 13bc6270d6 file calculatingfinalgrade.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler 85b2ee359b file editingacomment.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler 9cd2e8b3d4 file grading.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:12 +0000 2005-05-28 01:04:33 +00:00
moodler 2dcc168e63 file assessmentofexamples.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler 05f64e893d file addcommenttobank.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler f40c81f9b7 file analysisofassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler fac82b6f2a file agreeassessments.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler d55bcca3a5 file assignmenttype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler bbc338767a file addingacomment.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
moodler e88d8a3aa4 file anonymous.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:11 +0000 2005-05-28 01:04:33 +00:00
urs_hunkler bb0ceba26d I removed the inlinestyle for the userentry in the sideblock "online user" and added the class "listentry" to the div. The properties of th inline style are now defined in styles_layout.css and stylews_fonts.css. 2005-05-27 17:24:27 +00:00
moodler 2b63e793a2 file analysistable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-27 17:18:47 +00:00
moodler e0514c228d file analysistable.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-05-27 17:18:47 +00:00
moodler 8f92195276 Added an extra style based on the glossary id which might allow
some nice effects.  This idea should probably be extended later,
perhaps with the ability to define the style in the glossary itself.
2005-05-27 14:56:43 +00:00
moodler 4a21ecc113 file block_search_forums.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:19 +0000 2005-05-27 12:25:38 +00:00
moodler 3217988a86 file emailprotect.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:19 +0000 2005-05-27 12:25:38 +00:00
bobopinna 65497822b9 Added AICC API to bug fix a problem with AICC package launch 2005-05-27 09:07:56 +00:00
bobopinna 5bd1036974 file aicc.js.php was added on branch MOODLE_15_STABLE on 2005-05-27 09:07:56 +0000 2005-05-27 09:05:04 +00:00
moodler 01d08c35d6 file quiz_analysis.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:00 +0000 2005-05-27 07:39:59 +00:00
moodler 8415a420df file authchange.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:14 +0000 2005-05-26 23:05:29 +00:00
moodler fa614c0451 file cost.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:14 +0000 2005-05-26 22:40:02 +00:00
moodler 532231e9e8 file retake.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-26 20:46:47 +00:00
moodler 98dba5cea6 file retake.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-05-26 20:46:47 +00:00
moodler d29f2368de file slideshow.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-26 18:50:09 +00:00
moodler 234c4e5276 file slideshow.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-05-26 18:50:09 +00:00
moodler f5e5206c00 file useeditor.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:26 +0000 2005-05-26 17:30:03 +00:00
moodler d19c7d4459 file useeditor.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:23 +0000 2005-05-26 17:30:03 +00:00
moodler 50e20544b7 Merged stability fix from HEAD 2005-05-26 15:25:47 +00:00
moodler a4f3ee5b1e New string for registration 2005-05-26 14:45:15 +00:00
moodler 192d6a6ea9 A little note for admins looking in the source who might be really annoyed. :-) 2005-05-26 14:44:51 +00:00
moodler 705e3a7f76 Registration is now a bit more in-your-face.
Every six months you get prompted by a slightly annoying button on
the admin page to re-register.  Once you've done so it disappears.
2005-05-26 14:43:31 +00:00
moodler d716e12ac4 More little fixes for the calendar days thing 2005-05-26 12:53:11 +00:00
moodler e8b9d71f03 Fixed Strange calls to get_string for weekdays in calendar
http://moodle.org/mod/forum/discuss.php?d=24476
2005-05-26 12:33:10 +00:00
ethem aabfe78ed5 $CFG 2005-05-26 11:22:30 +00:00
bobopinna e41e727022 Fixed some bugs. Now AICC seems to work. 2005-05-26 10:01:56 +00:00
ethem fcee2e9780 Fixing enrol_allowinternal. 2005-05-26 07:35:45 +00:00
gustav_delius 94acf297c6 Better name for the new function 2005-05-26 07:18:25 +00:00
gustav_delius b94257273c Disabled versioning and re-grading until it is fixed. 2005-05-26 07:11:20 +00:00
moodler fc071f0cfc file adaptive.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:55 +0000 2005-05-25 22:17:18 +00:00
gustav_delius 6680874953 reverted to version before Julian's attempt at fixing bug 3311 2005-05-25 21:41:39 +00:00
defacer dbf8f55057 Er, fix for bug 3334 once more.
If at first you don't succeed...
2005-05-25 17:54:58 +00:00
moodler 477647c885 Updated from HEAD 2005-05-25 16:29:16 +00:00
moodler 8fe1a6a72f file grades.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:59 +0000 2005-05-25 16:28:09 +00:00
moodler 6f1a4d5f55 file lesson.php was added on branch MOODLE_15_STABLE on 2005-06-03 17:16:59 +0000 2005-05-25 16:28:09 +00:00
moodler f96e334571 SOme cleaning up of the code 2005-05-25 16:25:43 +00:00
defacer 14b7da1527 Fixing the other half of bug 3334. 2005-05-25 14:26:28 +00:00
defacer 101415b202 Fixing one half of bug 3334 with the patch provided by the reporter.
Also fixing another unfriendly behavior in that screen.
2005-05-25 14:22:05 +00:00
gustav_delius 11e9ca5af1 updated database creation by exporting from my database that was created by updating from 1.4 2005-05-25 06:02:03 +00:00
moodler a4369a6ac4 file penaltyscheme.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:09 +0000 2005-05-25 02:24:44 +00:00
moodler f0eda67f46 file questionsperpage.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-05-25 02:24:44 +00:00
moodler 3ea6ab6652 file rqp.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:10 +0000 2005-05-25 02:24:44 +00:00
moodler 4597517cf5 file penalty.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:09 +0000 2005-05-25 02:24:44 +00:00
moodler d7a8d13cb4 file itemanalysis.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:09 +0000 2005-05-25 02:24:44 +00:00
moodler 289d8f834b file analysisoptions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:09 +0000 2005-05-25 02:24:44 +00:00
moodler cb219861eb file adaptive.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:09 +0000 2005-05-25 02:24:44 +00:00
moodler 206f13e19a file ratings.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler 141f2eb969 file rssarticles.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler 54c362fdaf file maxattachmentsize.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler b7f3681c1d file forumtype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler c71b977964 file subscription2.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler f86849b8e5 file subscription.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler 0d07ff6170 file allowdiscussions.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler cf1db6bad7 file rsstype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler 7e85d1188a file attachment.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
moodler 76de166ee1 file trackingtype.html was added on branch MOODLE_15_STABLE on 2005-06-03 17:17:07 +0000 2005-05-25 02:24:44 +00:00
defacer 76e2cb0a9b Backporting changes from HEAD 2005-05-24 18:58:02 +00:00
moodler 1b0649d558 Moved some things from People block to Administration. Each of them
will probably be tweaked a little more still.
2005-05-24 16:55:48 +00:00
thepurpleblob 05ac097e4c Now includes missing text re. missingword format suppporting short answer questions. 2005-05-24 16:53:34 +00:00
gustav_delius 4c21136a5b fixed bug 3329 2005-05-24 16:07:10 +00:00
bobopinna d38835ab1b Fixed some typo and bugs
Added support to Moodle 1.4 backup
2005-05-24 15:29:51 +00:00
thepurpleblob b0fe38fc78 Put addslashes around question name - truncate at unlucky point could break sql. 2005-05-24 15:17:07 +00:00
julmis ce2e784b47 Adding buttons:
- nolink
- search and replace
2005-05-24 14:21:00 +00:00
gustav_delius 9114cce39b file report.php was added on branch MOODLE_15_STABLE on 2005-06-04 08:54:56 +0000 2005-05-06 06:24:04 +00:00
gustav_delius 0d00dc375f file report.php was added on branch MOODLE_15_STABLE on 2005-06-04 08:55:37 +0000 2005-05-06 06:24:04 +00:00
moodler 27437410f4 file survey.php was added on branch MOODLE_15_STABLE on 2006-03-10 07:27:54 +0000 2005-04-05 20:54:43 +00:00
12541 changed files with 614352 additions and 336475 deletions
+12256
View File
File diff suppressed because it is too large Load Diff
+35 -36
View File
@@ -1,36 +1,35 @@
README $Id$
------
QUICK INSTALL
=============
For the impatient, here is a basic outline of the
installation process, which normally takes me only
a few minutes:
1) Move the Moodle files into your web directory.
2) Create a single database for Moodle to store all
it's tables in (or choose an existing database).
3) Visit your Moodle site with a browser, you should
be taken to the install.php script, which will lead
you through creating a config.php file and then
setting up Moodle, creating an admin account etc.
4) Set up a cron task to call the file admin/cron.php
every five minutes or so.
For more information, see the INSTALL DOCUMENTATION:
http://docs.moodle.org/en/Installing_Moodle
A local copy can also be found in
lang/en_utf8/help/install.html (or your language)
Good luck and have fun!
Martin Dougiamas, Lead Developer
README $Id$
------
QUICK INSTALL
=============
For the impatient, here is a basic outline of the
installation process, which normally takes me only
a few minutes:
1) Move the Moodle files into your web directory.
2) Create a single database for Moodle to store all
it's tables in (or choose an existing database).
3) Visit your Moodle site with a browser, you should
be taken to the install.php script, which will lead
you through creating a config.php file and then
setting up Moodle, creating an admin account etc.
4) Set up a cron task to call the file admin/cron.php
every five minutes or so.
For more information, see the INSTALL DOCUMENTATION:
http://moodle.org/doc
If you have real trouble, please visit the Moodle course
"Using Moodle" on moodle.org.
Good luck and have fun!
Martin Dougiamas, Lead Developer
+6 -12
View File
@@ -62,23 +62,17 @@
echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
}
echo "</optgroup>\n";
} else {
if ($usercount > MAX_USERS_PER_PAGE) {
echo '<optgroup label="'.get_string('toomanytoshow').'"><option></option></optgroup>'."\n"
.'<optgroup label="'.get_string('trysearching').'"><option></option></optgroup>'."\n";
} else {
if (!empty($users)) {
foreach ($users as $user) {
$fullname = fullname($user, true);
echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
}
}
}
if (!empty($users)) {
foreach ($users as $user) {
$fullname = fullname($user, true);
echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
}
}
?>
</select>
<br />
<input type="text" name="searchtext" size="30" value="<?php p($searchtext, true) ?>"
<input type="text" name="searchtext" size="30" value="<?php echo $searchtext ?>"
onFocus ="document.adminform.add.disabled=true;
document.adminform.remove.disabled=true;
document.adminform.removeselect.selectedIndex=-1;
+10 -13
View File
@@ -1,10 +1,14 @@
<?PHP // $Id$
// Admin-only script to assign administrative rights to users
require_once('../config.php');
require_once("../config.php");
define("MAX_USERS_PER_PAGE", 50);
optional_variable($add, "");
optional_variable($remove, "");
optional_variable($search, "");
if (! $site = get_site()) {
redirect("$CFG->wwwroot/$CFG->admin/index.php");
}
@@ -77,7 +81,7 @@
}
/// Is there a current search?
$previoussearch = (!empty($frm->search) or (isset($frm->previoussearch) and $frm->previoussearch == 1)) ;
$previoussearch = (!empty($frm->search) or ($frm->previoussearch == 1)) ;
/// Get all existing admins
$admins = get_admins();
@@ -101,18 +105,11 @@
/// If no search results then get potential users excluding current admins
if (empty($searchusers)) {
$usercount = get_users(false, '', true, $adminlist, 'firstname ASC, lastname ASC', '', '',
0, 99999, 'id, firstname, lastname, email');
$users = array();
if ($usercount <= MAX_USERS_PER_PAGE) {
if (!$users = get_users(true, '', true, $adminlist, 'firstname ASC, lastname ASC', '', '',
0, 99999, 'id, firstname, lastname, email') ) {
$users = array();
}
if (!$users = get_users(true, '', true, $adminlist, 'firstname ASC, lastname ASC', '', '',
0, 99999, 'id, firstname, lastname, email') ) {
$users = array();
}
$usercount = count($users);
}
$searchtext = (isset($frm->searchtext)) ? $frm->searchtext : "";
+24 -65
View File
@@ -1,10 +1,7 @@
<?PHP // $Id$
// config.php - allows admin to edit all configuration variables
require_once('../config.php');
$auth = optional_param('auth', '', PARAM_SAFEDIR);
include("../config.php");
require_login();
if (!$site = get_site()) {
@@ -19,13 +16,12 @@
error(get_string('confirmsesskeybad', 'error'));
}
$focus = '';
/// If data submitted, then process and store.
if ($config = data_submitted()) {
$config = (array)$config;
validate_form($config, $err);
// extract and sanitize the auth key explicitly
$modules = get_list_of_plugins("auth");
@@ -35,15 +31,8 @@
notify("Error defining the authentication method");
}
// load the auth plugin library
require_once("{$CFG->dirroot}/auth/$auth/lib.php");
$err = array();
if (function_exists('auth_validate_form')) {
auth_validate_form($config, $err);
}
if (count($err) == 0) {
print_header();
foreach ($config as $name => $value) {
if (preg_match('/^pluginconfig_(.+?)$/', $name, $matches)) {
$plugin = "auth/$auth";
@@ -74,25 +63,16 @@
}
$modules = get_list_of_plugins("auth");
$options = array();
foreach ($modules as $module) {
$options[$module] = get_string("auth_$module"."title", "auth");
}
asort($options);
if (!empty($auth) && in_array($auth, $modules)) {
if (isset($_GET['auth']) && in_array($_GET['auth'], $modules)) {
$auth = $_GET['auth'];
} else {
$auth = $config->auth;
}
// changepassword link replaced by individual auth setting
if (!empty($config->changepassword)) {
if (empty($config->{'auth_'.$auth.'_changepasswordurl'})) {
$config->{'auth_'.$auth.'_changepasswordurl'} = $config->changepassword;
}
set_config('changepassword','');
}
$auth = clean_param($auth,PARAM_SAFEDIR);
$auth = clean_filename($auth);
require_once("$CFG->dirroot/auth/$auth/lib.php"); //just to make sure that current authentication functions are loaded
if (! isset($config->guestloginbutton)) {
$config->guestloginbutton = 1;
@@ -106,14 +86,12 @@
if (! isset($config->changepassword)) {
$config->changepassword = "";
}
if (! isset($config->{'auth_'.$auth.'_changepasswordurl'})) {
$config->{'auth_'.$auth.'_changepasswordurl'} = '';
}
if (! isset($config->{'auth_'.$auth.'_changepasswordhelp'})) {
$config->{'auth_'.$auth.'_changepasswordhelp'} = '';
}
$user_fields = array("firstname", "lastname", "email", "phone1", "phone2", "department", "address", "city", "country", "description", "idnumber", "lang");
if (empty($focus)) {
$focus = "";
}
$guestoptions[0] = get_string("hide");
$guestoptions[1] = get_string("show");
@@ -152,39 +130,20 @@
echo "<table border=\"0\" width=\"100%\" cellpadding=\"4\">";
require_once("$CFG->dirroot/auth/$auth/config.html");
$CFG->pagepath = 'auth/' . $auth;
echo '<tr><td colspan="3">';
print_heading(get_string('auth_common_settings', 'auth'));
echo '<td/></tr>';
if ($auth != "email" and $auth != "none" and $auth != "manual") {
// display box for URL to change password. NB now on a per-method basis (multiple auth)
echo "<tr valign=\"top\">";
echo "<td align=\"right\" nowrap=\"nowrap\">";
print_string("changepassword", "auth");
echo ":</td>";
echo "<td>";
$passurl = $config->{'auth_'.$auth.'_changepasswordurl'};
echo "<input type=\"text\" name=\"auth_{$auth}_changepasswordurl\" size=\"40\" value=\"$passurl\" />";
echo "<input type=\"text\" name=\"changepassword\" size=\"40\" value=\"$config->changepassword\" />";
echo "</td>";
echo "<td>";
print_string("auth_changepasswordurl_expl","auth",$auth);
echo "</td></tr>";
// display textbox for lost password help. NB now on a per-method basis (multiple auth)
echo "<tr valign=\"top\">";
echo "<td align=\"right\" nowrap=\"nowrap\">";
print_string("auth_changepasswordhelp", "auth");
echo ":</td>";
echo "<td>";
$passhelp = $config->{'auth_'.$auth.'_changepasswordhelp'};
echo "<textarea name=\"auth_{$auth}_changepasswordhelp\" cols=\"30\" rows=\"10\" wrap=\"virtual\">";
echo $passhelp;
echo "</textarea>\n";
echo "</td>";
echo "<td>";
print_string("auth_changepasswordhelp_expl","auth",$auth);
print_string("changepasswordhelp","auth");
echo "</td></tr>";
}
@@ -240,6 +199,14 @@
/// Functions /////////////////////////////////////////////////////////////////
function validate_form(&$form, &$err) {
// if (empty($form->fullname))
// $err["fullname"] = get_string("missingsitename");
return;
}
//
// Good enough for most auth plugins
// but some may want a custom one if they are offering
@@ -273,18 +240,10 @@ function print_auth_lock_options ($auth, $user_fields, $helptext, $retrieveopts,
foreach ($user_fields as $field) {
// Define some vars we'll work with
if(empty($pluginconfig->{"field_map_$field"})) {
$pluginconfig->{"field_map_$field"} = '';
}
if(empty($pluginconfig->{"field_updatelocal_$field"})) {
$pluginconfig->{"field_updatelocal_$field"} = '';
}
if (empty($pluginconfig->{"field_updateremote_$field"})) {
$pluginconfig->{"field_updateremote_$field"} = '';
}
if (empty($pluginconfig->{"field_lock_$field"})) {
$pluginconfig->{"field_lock_$field"} = '';
}
optional_variable($pluginconfig->{"field_map_$field"}, '');
optional_variable($pluginconfig->{"field_updatelocal_$field"}, '');
optional_variable($pluginconfig->{"field_updateremote_$field"}, '');
optional_variable($pluginconfig->{"field_lock_$field"}, '');
// define the fieldname we display to the user
$fieldname = $field;
+1
View File
@@ -54,6 +54,7 @@
$config = (object)$a_config;
//weekdays conversions done. Continue
print_header();
foreach ($config as $name => $value) {
backup_set_config($name, $value);
}
+4 -6
View File
@@ -14,7 +14,8 @@
error("Site isn't defined!");
}
$blockid = required_param('block', PARAM_INT);
require_variable($_REQUEST['block']);
$blockid = intval($_REQUEST['block']);
if(($blockrecord = blocks_get_record($blockid)) === false) {
error('This block does not exist');
@@ -47,6 +48,7 @@
unset($config->$item);
}
$block->config_save($config);
print_header();
redirect("$CFG->wwwroot/$CFG->admin/blocks.php", get_string("changessaved"), 1);
exit;
}
@@ -57,11 +59,7 @@
$strconfiguration = get_string('configuration');
$strmanageblocks = get_string('manageblocks');
$strblockname = $block->get_title();
// $CFG->pagepath is used to generate the body and id attributes for the body tag
// of the page. It is also used to generate the link to the Moodle Docs for this view.
$CFG->pagepath = 'block/' . $block->name() . '/config';
print_header($site->shortname.': '.$strblockname.": $strconfiguration", $site->fullname,
"<a href=\"index.php\">$stradmin</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> ".
+3 -3
View File
@@ -6,7 +6,7 @@
require_once($CFG->libdir.'/blocklib.php');
require_once($CFG->libdir.'/tablelib.php');
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$confirm = optional_param('confirm', 0, PARAM_INT);
$hide = optional_param('hide', 0, PARAM_INT);
$show = optional_param('show', 0, PARAM_INT);
$delete = optional_param('delete', 0, PARAM_INT);
@@ -156,7 +156,7 @@
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'multiple', 'delete', 'settings'));
$table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strmultiple, $strdelete, $strsettings));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->define_baseurl($CFG->wwwroot.'/admin/blocks.php');
$table->set_attribute('cellspacing', '0');
$table->set_attribute('id', 'blocks');
@@ -218,7 +218,7 @@
$table->define_columns(array('block', 'delete'));
$table->define_headers(array($strname, $strdelete));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->define_baseurl($CFG->wwwroot.'/admin/blocks.php');
$table->set_attribute('cellspacing', '0');
$table->set_attribute('id', 'incompatible');
+1 -1
View File
@@ -1,6 +1,6 @@
<form method="post" action="calendar.php">
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>" />
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>">
<table class="formtable">
<tr>
<th>adminseesall:</th>
+2 -1
View File
@@ -35,7 +35,8 @@
}
if(isset($form->forcetimezone)) {
// To protect from SQL injections ...
$form->timezone = clean_param($form->timezone, PARAM_PATH); //not a path, but it looks like it anyway
$form->forcetimezone = str_replace(';', '', $form->forcetimezone);
$form->forcetimezone = str_replace('\'', '', $form->forcetimezone);
set_config('forcetimezone', $form->forcetimezone);
}
if(isset($form->startwday)) {
+14 -31
View File
@@ -3,10 +3,6 @@
require_once('../config.php');
$installing = optional_param('installing', 0, PARAM_BOOL);
$focus = '';
if ($site = get_site()) { // If false then this is a new installation
require_login();
if (!isadmin()) {
@@ -34,24 +30,12 @@
validate_form($config, $err);
if (count($err) == 0) {
print_header();
foreach ($config as $name => $value) {
if ($name == "sessioncookie") {
$value = eregi_replace("[^a-zA-Z0-9_]", "", $value);
$value = eregi_replace("[^a-zA-Z]", "", $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();
unset($conf);
$conf->name = $name;
$conf->value = $value;
if ($current = get_record('config', 'name', $name)) {
@@ -65,16 +49,8 @@
}
}
}
if ($installing) {
print_header();
notify(get_string('changessaved'), 'notifysuccess');
print_continue('index.php');
exit;
} else {
// the following redirect was randomly breaking upgrades because it did double redirects,
// we must not use it during install/upgrade
redirect('index.php', get_string('changessaved'), 1);
}
redirect('index.php', get_string('changessaved'), 1);
exit;
} else {
foreach ($err as $key => $value) {
@@ -87,6 +63,12 @@
if (empty($config)) {
$config = $CFG;
if (!$config->locale = get_field('config', 'value', 'name', 'locale')) {
$config->locale = $CFG->lang;
}
}
if (empty($focus)) {
$focus = '';
}
$sesskey = !empty($USER->id) ? $USER->sesskey : '';
@@ -111,7 +93,7 @@
/// Get all the configuration fields and helptext
require('configvars.php');
include('configvars.php');
/// Cycle through the sections to get the sectionnames
$linktext = '';
@@ -124,6 +106,7 @@
echo "<center>$linktext</center>\n";
print_simple_box_start('center');
echo '<form method="post" action="config.php" name="form">';
echo '<center><input type="submit" value="'.get_string('savechanges').'" /></center>';
@@ -153,13 +136,13 @@
}
echo '<center>';
echo '<input type="hidden" name="installing" value="'.$installing.'" />';
echo '<input type="hidden" name="sesskey" value="'.$sesskey.'" />';
echo '<input type="submit" value="'.get_string('savechanges').'" />';
echo '</center>';
echo '</form>';
print_simple_box_end();
+5 -181
View File
@@ -1,6 +1,5 @@
<?php // $Id$
// Shane Elliott
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
/// Add new sitewide configuration variables to this file.
@@ -69,15 +68,12 @@ class configvar {
/// debug
unset($options);
$options[5] = $strno;
$options[7] = $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() {
@@ -89,19 +85,8 @@ class configvarrss extends configvar {
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
@@ -141,8 +126,6 @@ class configvarrss extends configvar {
/// 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'),
@@ -152,13 +135,10 @@ class configvarrss extends configvar {
$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";
$options[0] = "file.php?file=/pic.jpg";
$options[1] = "file.php/pic.jpg";
$operatingsystem['slasharguments'] = new configvar (get_string('configslasharguments', 'admin'),
choose_from_menu ($options, 'slasharguments', $config->slasharguments, '', '', '', true) );
@@ -226,71 +206,6 @@ class configvarrss extends configvar {
choose_from_menu ($noyesoptions, 'allowobjectembed', $config->allowobjectembed, '', '', '', 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
@@ -312,20 +227,12 @@ class configvarrss extends configvar {
/// 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) );
'<input name="locale" type="text" size="10" value="'.s($config->locale).'" alt="locale" />' );
/// timezone
$interface['timezone'] = new configvar ( get_string('configtimezone', 'admin'),
choose_from_menu (get_list_of_timezones(), 'timezone', $config->timezone, get_string('serverlocaltime'), '', '99', true ) );
@@ -396,23 +303,6 @@ class configvarrss extends configvar {
$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>' );
@@ -450,9 +340,6 @@ class configvarrss extends configvar {
$security['notifyloginthreshold'] = new configvar (get_string('confignotifyloginthreshold', 'admin'),
choose_from_menu($options, 'notifyloginthreshold', $config->notifyloginthreshold, '', '', '', true) );
$security['protectusernames'] = new configvar (get_string('configprotectusernames', 'admin'),
choose_from_menu($noyesoptions, 'protectusernames', $config->protectusernames, '', '', '', true) );
/// secureforms
$security['secureforms'] = new configvar (get_string('configsecureforms', 'admin'),
choose_from_menu ($noyesoptions, 'secureforms', $config->secureforms, '', '', '', true) );
@@ -578,69 +465,10 @@ class configvarrss extends configvar {
$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.'" />');
}
////////////////////////////////////////////////////////////////////
@@ -651,10 +479,6 @@ if (empty($CFG->disablestatsprocessing)) {
$configvars['mail'] = $mail;
$configvars['user'] = $user;
$configvars['permissions'] = $permissions;
$configvars['requestedcourse'] = $reqcourse;
$configvars['misc'] = $misc;
if (empty($CFG->disablestatsprocessing)) {
$configvars['stats'] = $stats;
}
?>
-42
View File
@@ -1,42 +0,0 @@
<?php // $Id$
require_once('../config.php');
require_login();
if (!isadmin()) {
error("Only admins can access this page");
}
if (!$site = get_site()) {
redirect("index.php");
}
$stradministration = get_string("administration");
$strcourses = get_string("courses");
print_header("$site->shortname: $stradministration: $strcourses", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> $strcourses");
print_heading($strcourses);
$table->align = array ("right", "left");
$table->data[] = array('<b><a href="../course/index.php?edit=on&amp;sesskey='.$USER->sesskey.'">'.get_string("managecourses")."</a></b>",
get_string("adminhelpcourses"));
$table->data[] = array("<b><a href=\"enrol.php?sesskey=$USER->sesskey\">".get_string("enrolmentplugins")."</a></b>",
get_string("adminhelpenrolments"));
$table->data[] = array("<b><a href=\"../course/index.php?edit=off&amp;sesskey=$USER->sesskey\">".get_string("assignstudents")."</a></b>",
get_string("adminhelpassignstudents"));
$table->data[] = array("<b><a href=\"../course/index.php?edit=on&amp;sesskey=$USER->sesskey\">".get_string("assignteachers")."</a></b>",
get_string("adminhelpassignteachers")." <img src=\"../pix/t/user.gif\" height=\"11\" width=\"11\" alt=\"\" />");
$table->data[] = array("<b><a href=\"creators.php?sesskey=$USER->sesskey\">".get_string("assigncreators")."</a></b>",
get_string("adminhelpassigncreators"));
$table->data[] = array("<b><a href=\"admin.php?sesskey=$USER->sesskey\">".get_string("assignadmins")."</a></b>",
get_string("adminhelpassignadmins"));
print_table($table);
print_footer($site);
?>
+4 -1
View File
@@ -64,7 +64,10 @@
?>
</select>
<br />
<input type="text" name="searchtext" size="30" value="<?php p($searchtext) ?>"
<script type="text/javascript">
function
</script>
<input type="text" name="searchtext" size="30" value="<?php echo $searchtext ?>"
onFocus ="document.creatorsform.add.disabled=true;
document.creatorsform.remove.disabled=true;
document.creatorsform.removeselect.selectedIndex=-1;
+6 -3
View File
@@ -1,10 +1,14 @@
<?PHP // $Id$
// Admin only script to assign course creator rights to users
require_once('../config.php');
require_once("../config.php");
define("MAX_USERS_PER_PAGE", 50);
optional_variable($search, "");
optional_variable($add, "");
optional_variable($remove, "");
if (! $site = get_site()) {
redirect("$CFG->wwwroot/$CFG->admin/index.php");
}
@@ -46,7 +50,6 @@
if (!$frm = data_submitted()) {
print_simple_box("<center>".get_string("adminhelpassigncreators")."</center>", "center", "50%");
$frm = new object();
/// A form was submitted so process the input
@@ -70,7 +73,7 @@
}
/// Is there a current search?
$previoussearch = (!empty($frm->search) or (isset($frm->previoussearch) && $frm->previoussearch == 1)) ;
$previoussearch = (!empty($frm->search) or ($frm->previoussearch == 1)) ;
/// Get all existing creators
+15 -159
View File
@@ -26,8 +26,7 @@
chdir(dirname($_SERVER['argv'][0]));
}
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->dirroot.'/lib/adminlib.php');
require_once("../config.php");
if (!$alreadyadmin = isadmin()) {
unset($_SESSION['USER']);
@@ -35,30 +34,16 @@
unset($_SESSION['SESSION']);
unset($SESSION);
$USER = get_admin(); /// Temporarily, to provide environment for this script
// we need to override the admin timezone to the moodle timezone!
$USER->timezone = $CFG->timezone;
}
//unset test cookie, user must login again anyway
setcookie('MoodleSessionTest'.$CFG->sessioncookie, '', time() - 3600, '/');
/// switch to site language and locale
if (!empty($CFG->courselang)) {
unset ($CFG->courselang);
}
if (!empty($SESSION->lang)) {
unset ($SESSION->lang);
}
$USER->lang = '';
moodle_setlocale();
/// send mime type and encoding
@header('Content-Type: text/plain; charset='.current_charset());
/// Start output log
$timenow = time();
mtrace("<pre>");
mtrace("Server Time: ".date('r',$timenow)."\n\n");
/// Run all cron jobs for each module
@@ -84,31 +69,6 @@
}
mtrace("Finished activity modules");
mtrace("Starting blocks");
if ($blocks = get_records_select("block", "cron > 0 AND (($timenow - lastcron) > cron)")) {
// we will need the base class.
require_once($CFG->dirroot.'/blocks/moodleblock.class.php');
foreach ($blocks as $block) {
$blockfile = $CFG->dirroot.'/blocks/'.$block->name.'/block_'.$block->name.'.php';
if (file_exists($blockfile)) {
require_once($blockfile);
$classname = 'block_'.$block->name;
$blockobj = new $classname;
if (method_exists($blockobj,'cron')) {
mtrace("Processing cron function for ".$block->name.'....','');
if ($blockobj->cron()) {
if (!set_field('block','lastcron',$timenow,'id',$block->id)) {
mtrace('Error: could not update timestamp for '.$block->name);
}
}
mtrace('done.');
}
}
}
}
mtrace("Finished blocks");
if (!empty($CFG->langcache)) {
mtrace('Updating languages cache');
get_list_of_languages();
@@ -141,35 +101,15 @@
/// Delete users who haven't confirmed within required period
if (!empty($CFG->deleteunconfirmed)) {
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
if ($users = get_users_unconfirmed($oneweek)) {
foreach ($users as $user) {
if (delete_records('user', 'id', $user->id)) {
mtrace("Deleted unconfirmed user for ".fullname($user, true)." ($user->id)");
}
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
if ($users = get_users_unconfirmed($oneweek)) {
foreach ($users as $user) {
if (delete_records("user", "id", $user->id)) {
mtrace("Deleted unconfirmed user for ".fullname($user, true)." ($user->id)");
}
}
}
flush();
/// Delete users who haven't completed profile within required period
if (!empty($CFG->deleteunconfirmed)) {
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
if ($users = get_users_not_fully_set_up($oneweek)) {
foreach ($users as $user) {
if (delete_records('user', 'id', $user->id)) {
mtrace("Deleted not fully setup user $user->username ($user->id)");
}
}
}
}
flush();
/// Delete old logs to save space (this might need a timer to slow it down...)
@@ -182,8 +122,8 @@
/// Delete old cached texts
if (!empty($CFG->cachetext)) { // Defined in config.php
$cachelifetime = time() - $CFG->cachetext - 60; // Add an extra minute to allow for really heavy sites
delete_records_select('cache_text', "timemodified < '$cachelifetime'");
$cachelifetime = time() - $CFG->cachetext;
delete_records_select("cache_text", "timemodified < '$cachelifetime'");
}
flush();
@@ -194,31 +134,6 @@
sync_metacourses();
//
// generate new password emails for users
//
mtrace('checking for create_password');
if (count_records('user_preferences', 'name', 'create_password', 'value', '1')) {
mtrace('creating passwords for new users');
$newusers = get_records_sql("SELECT u.id as id, u.email, u.firstname,
u.lastname, u.username,
p.id as prefid
FROM {$CFG->prefix}user u
JOIN {$CFG->prefix}user_preferences p ON u.id=p.userid
WHERE p.name='create_password' AND p.value=1 AND u.email !='' ");
foreach ($newusers as $newuserid => $newuser) {
$newuser->emailstop = 0; // send email regardless
// email user
if (setnew_password_and_mail($newuser)) {
// remove user pref
delete_records('user_preferences', 'id', $newuser->prefid);
} else {
trigger_error("Could not create and mail new user password!");
}
}
}
} // End of occasional clean-up tasks
@@ -227,12 +142,6 @@
//Perhaps a long time and memory could help in large sites
@set_time_limit(0);
@raise_memory_limit("128M");
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
// memory management is truly awful but we can help it.
@apache_child_terminate();
}
if (file_exists("$CFG->dirroot/backup/backup_scheduled.php") and
file_exists("$CFG->dirroot/backup/backuplib.php") and
file_exists("$CFG->dirroot/backup/lib.php") and
@@ -244,7 +153,7 @@
mtrace("Running backups if required...");
if (! schedule_backup_cron()) {
mtrace("ERROR: Something went wrong while performing backup tasks!!!");
mtrace("ERORR: Something went wrong while performing backup tasks!!!");
} else {
mtrace("Backup tasks finished.");
}
@@ -263,64 +172,11 @@
}
/// Run the enrolment cron, if any
if (!($plugins = explode(',', $CFG->enrol_plugins_enabled))) {
$plugins = array($CFG->enrol);
}
require_once($CFG->dirroot .'/enrol/enrol.class.php');
foreach ($plugins as $p) {
$enrol = enrolment_factory::factory($p);
if (method_exists($enrol, 'cron')) {
$enrol->cron();
}
if (!empty($enrol->log)) {
mtrace($enrol->log);
}
unset($enrol);
}
if (!empty($CFG->enablestats) and empty($CFG->disablestatsprocessing)) {
// check we're not before our runtime
$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)
$clobber = true;
if (!empty($CFG->statsmaxruntime)) {
$time = $CFG->statsmaxruntime+(60*30); // add on half an hour just to make sure (it could take that long to break out of the loop)
}
if (!get_field_sql('SELECT id FROM '.$CFG->prefix.'stats_daily LIMIT 1')) {
// first run, set another lock. we'll check for this in subsequent runs to set the timeout to later for the normal lock.
set_cron_lock('statsfirstrunlock',true,$time,true);
$firsttime = true;
}
$time = 60*60*2; // this time set to 2.. (overridden by $CFG)
if (!empty($CFG->statsmaxruntime)) {
$time = $CFG->statsmaxruntime+(60*30); // add on half an hour to make sure (it could take that long to break out of the loop)
}
if ($config = get_record('config','name','statsfirstrunlock')) {
if (!empty($config->value)) {
$clobber = false; // if we're on the first run, just don't clobber it.
}
}
if (set_cron_lock('statsrunning',true,$time, $clobber)) {
require_once($CFG->dirroot.'/lib/statslib.php');
$return = stats_cron_daily();
if (stats_check_runtime() && $return == STATS_RUN_COMPLETE) {
stats_cron_weekly();
}
if (stats_check_runtime() && $return == STATS_RUN_COMPLETE) {
$return = $return && stats_cron_monthly();
}
if (stats_check_runtime() && $return == STATS_RUN_COMPLETE) {
stats_clean_old();
}
set_cron_lock('statsrunning',false);
if (!empty($firsttime)) {
set_cron_lock('statsfirstrunlock',false);
}
}
}
require_once("$CFG->dirroot/enrol/$CFG->enrol/enrol.php");
$enrol = new enrolment_plugin();
$enrol->cron();
if (!empty($enrol->log)) {
mtrace($enrol->log);
}
//Unset session variables and destroy it
+3 -7
View File
@@ -1,11 +1,7 @@
<?PHP // $Id$
// dbperformance.php - shows latest ADOdb stats for the current server
require_once('../config.php');
$topframe = optional_param('topframe', 0, PARAM_BOOL);
$bottomframe = optional_param('bottomframe', 0, PARAM_BOOL);
$do = optional_param('do', '', PARAM_ALPHA);
require_once("../config.php");
require_login();
@@ -17,13 +13,13 @@
$stradministration = get_string("administration");
$site = get_site();
if (!empty($topframe)) {
if (isset($topframe)) {
print_header("$site->shortname: $strdatabaseperformance", "$site->fullname",
"<a target=\"$CFG->framename\" href=\"index.php\">$stradministration</a> -> Database performance");
exit;
}
if (!empty($bottomframe) or !empty($do)) {
if (isset($bottomframe) or isset($_GET['do'])) {
$perf =&NewPerfMonitor($db);
$perf->UI($pollsecs=5);
exit;
+3 -3
View File
@@ -7,8 +7,8 @@
require_login();
$sure = optional_param('sure', 0, PARAM_BOOL);
$reallysure = optional_param('reallysure', 0, PARAM_BOOL);
$sure = optional_param('sure', '');
$reallysure = optional_param('reallysure', '');
if (!isadmin()) {
error('You must be admin to use this script!');
@@ -43,7 +43,7 @@ function delete_subdirectories($rootdir) {
$dir = opendir($rootdir);
while (false !== ($file = readdir($dir))) {
while ($file = readdir($dir)) {
if ($file != '.' and $file != '..') {
$fullfile = $rootdir .'/'. $file;
if (filetype($fullfile) == 'dir') {
+37 -103
View File
@@ -1,6 +1,5 @@
<form method="post" action="editor.php">
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>" />
<input type="hidden" name="tab" value="<?php p($currentpage) ?>" />
<table border="0" cellpadding="4" cellspacing="2">
<tr>
<td align="right" valign="top">htmleditor:</td>
@@ -16,7 +15,6 @@
<?php print_string('confightmleditor', 'admin') ?>
</td>
</tr>
<?php if ( $currenttab == 'htmlarea' ) { ?>
<tr>
<td align="right" valign="top">editorbackgroundcolor:</td>
<td valign="top"><input type="text" name="backgroundcolor" size="10" value="<?php print($CFG->editorbackgroundcolor);?>" /></td>
@@ -114,18 +112,18 @@
<input type="checkbox" name="buttons[formatblock]"<?php print(in_array("formatblock", $buttons)) ? " checked=\"checked\"": "";?> /> <?php print_string("formatblock","editor");?></td>
</tr>
<tr>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_bold.gif" width="18" height="18" alt="<?php print_string("bold","editor");?>" title="<?php print_string("bold","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_italic.gif" width="18" height="18" alt="<?php print_string("italic","editor");?>" title="<?php print_string("italic","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_underline.gif" width="18" height="18" alt="<?php print_string("underline","editor");?>" title="<?php print_string("underline","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_strike.gif" width="18" height="18" alt="<?php print_string("strikethrough","editor");?>" title="<?php print_string("strikethrough","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_sub.gif" width="18" height="18" alt="<?php print_string("subscript","editor");?>" title="<?php print_string("subscript","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_format_sup.gif" width="18" height="18" alt="<?php print_string("superscript","editor");?>" title="<?php print_string("superscript","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_copy.gif" width="18" height="18" alt="<?php print_string("copy","editor");?>" title="<?php print_string("copy","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_cut.gif" width="18" height="18" alt="<?php print_string("cut","editor");?>" title="<?php print_string("cut","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_paste.gif" width="18" height="18" alt="<?php print_string("paste","editor");?>" title="<?php print_string("paste","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_wordclean.gif" width="18" height="18" alt="<?php print_string("wordclean","editor");?>" title="<?php print_string("wordclean","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_undo.gif" width="18" height="18" alt="<?php print_string("undo","editor");?>" title="<?php print_string("undo","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_redo.gif" width="18" height="18" alt="<?php print_string("redo","editor");?>" title="<?php print_string("redo","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_bold.gif" width="18" height="18" alt="<?php print_string("bold","editor");?>" title="<?php print_string("bold","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_italic.gif" width="18" height="18" alt="<?php print_string("italic","editor");?>" title="<?php print_string("italic","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_underline.gif" width="18" height="18" alt="<?php print_string("underline","editor");?>" title="<?php print_string("underline","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_strike.gif" width="18" height="18" alt="<?php print_string("strikethrough","editor");?>" title="<?php print_string("strikethrough","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_sub.gif" width="18" height="18" alt="<?php print_string("subscript","editor");?>" title="<?php print_string("subscript","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_format_sup.gif" width="18" height="18" alt="<?php print_string("superscript","editor");?>" title="<?php print_string("superscript","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_copy.gif" width="18" height="18" alt="<?php print_string("copy","editor");?>" title="<?php print_string("copy","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_cut.gif" width="18" height="18" alt="<?php print_string("cut","editor");?>" title="<?php print_string("cut","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_paste.gif" width="18" height="18" alt="<?php print_string("paste","editor");?>" title="<?php print_string("paste","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_wordclean.gif" width="18" height="18" alt="<?php print_string("wordclean","editor");?>" title="<?php print_string("wordclean","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_undo.gif" width="18" height="18" alt="<?php print_string("undo","editor");?>" title="<?php print_string("undo","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_redo.gif" width="18" height="18" alt="<?php print_string("redo","editor");?>" title="<?php print_string("redo","editor");?>" /></td>
</tr>
<tr>
<td><input type="checkbox" name="buttons[bold]"<?php print(in_array("bold", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
@@ -142,18 +140,18 @@
<td><input type="checkbox" name="buttons[redo]"<?php print(in_array("redo", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
</tr>
<tr>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_align_left.gif" width="18" height="18" alt="<?php print_string("justifyleft","editor");?>" title="<?php print_string("justifyleft","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_align_center.gif" width="18" height="18" alt="<?php print_string("justifycenter","editor");?>" title="<?php print_string("justifycenter","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_align_right.gif" width="18" height="18" alt="<?php print_string("justifyright","editor");?>" title="<?php print_string("justifyright","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_align_justify.gif" width="18" height="18" alt="<?php print_string("justifyfull","editor");?>" title="<?php print_string("justifyfull","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_left_to_right.gif" width="18" height="18" alt="<?php print_string("lefttoright","editor");?>" title="<?php print_string("lefttoright","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_right_to_left.gif" width="18" height="18" alt="<?php print_string("righttoleft","editor");?>" title="<?php print_string("righttoleft","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_list_num.gif" width="18" height="18" alt="<?php print_string("orderedlist","editor");?>" title="<?php print_string("orderedlist","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_list_bullet.gif" width="18" height="18" alt="<?php print_string("unorderedlist","editor");?>" title="<?php print_string("unorderedlist","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_indent_less.gif" width="18" height="18" alt="<?php print_string("outdent","editor");?>" title="<?php print_string("outdent","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_indent_more.gif" width="18" height="18" alt="<?php print_string("indent","editor");?>" title="<?php print_string("indent","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_color_fg.gif" width="18" height="18" alt="<?php print_string("forecolor","editor");?>" title="<?php print_string("forecolor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_color_bg.gif" width="18" height="18" alt="<?php print_string("hilitecolor","editor");?>" title="<?php print_string("hilitecolor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_align_left.gif" width="18" height="18" alt="<?php print_string("justifyleft","editor");?>" title="<?php print_string("justifyleft","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_align_center.gif" width="18" height="18" alt="<?php print_string("justifycenter","editor");?>" title="<?php print_string("justifycenter","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_align_right.gif" width="18" height="18" alt="<?php print_string("justifyright","editor");?>" title="<?php print_string("justifyright","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_align_justify.gif" width="18" height="18" alt="<?php print_string("justifyfull","editor");?>" title="<?php print_string("justifyfull","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_left_to_right.gif" width="18" height="18" alt="<?php print_string("lefttoright","editor");?>" title="<?php print_string("lefttoright","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_right_to_left.gif" width="18" height="18" alt="<?php print_string("righttoleft","editor");?>" title="<?php print_string("righttoleft","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_list_num.gif" width="18" height="18" alt="<?php print_string("orderedlist","editor");?>" title="<?php print_string("orderedlist","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_list_bullet.gif" width="18" height="18" alt="<?php print_string("unorderedlist","editor");?>" title="<?php print_string("unorderedlist","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_indent_less.gif" width="18" height="18" alt="<?php print_string("outdent","editor");?>" title="<?php print_string("outdent","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_indent_more.gif" width="18" height="18" alt="<?php print_string("indent","editor");?>" title="<?php print_string("indent","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_color_fg.gif" width="18" height="18" alt="<?php print_string("forecolor","editor");?>" title="<?php print_string("forecolor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_color_bg.gif" width="18" height="18" alt="<?php print_string("hilitecolor","editor");?>" title="<?php print_string("hilitecolor","editor");?>" /></td>
</tr>
<tr>
<td><input type="checkbox" name="buttons[justifyleft]"<?php print(in_array("justifyleft", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
@@ -170,18 +168,18 @@
<td><input type="checkbox" name="buttons[hilitecolor]"<?php print(in_array("hilitecolor", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
</tr>
<tr>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_hr.gif" width="18" height="18" alt="<?php print_string("horizontalrule","editor");?>" title="<?php print_string("horizontalrule","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_anchor.gif" width="18" height="18" alt="<?php print_string("createanchor","editor");?>" title="<?php print_string("createanchor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_link.gif" width="18" height="18" alt="<?php print_string("insertlink","editor");?>" title="<?php print_string("insertlink","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_unlink.gif" width="18" height="18" alt="<?php print_string("removelink","editor");?>" title="<?php print_string("removelink","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_image.gif" width="18" height="18" alt="<?php print_string("insertimage","editor");?>" title="<?php print_string("insertimage","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/insert_table.gif" width="18" height="18" alt="<?php print_string("inserttable","editor");?>" title="<?php print_string("inserttable","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/em.icon.smile.gif" width="18" height="18" alt="<?php print_string("insertsmile","editor");?>" title="<?php print_string("insertsmile","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/icon_ins_char.gif" width="18" height="18" alt="<?php print_string("insertchar","editor");?>" title="<?php print_string("insertchar","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/spell-check.gif" width="18" height="18" alt="<?php print_string("spellcheck","editor");?>" title="<?php print_string("spellcheck","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_html.gif" width="18" height="18" alt="<?php print_string("htmlmode","editor");?>" title="<?php print_string("htmlmode","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/fullscreen_maximize.gif" width="18" height="18" alt="<?php print_string("popupeditor","editor");?>" title="<?php print_string("popupeditor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_replace.gif" width="18" height="18" alt="<?php print_string("popupeditor","editor");?>" title="<?php print_string("searchandreplace","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_hr.gif" width="18" height="18" alt="<?php print_string("horizontalrule","editor");?>" title="<?php print_string("horizontalrule","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_anchor.gif" width="18" height="18" alt="<?php print_string("createanchor","editor");?>" title="<?php print_string("createanchor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_link.gif" width="18" height="18" alt="<?php print_string("insertlink","editor");?>" title="<?php print_string("insertlink","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_unlink.gif" width="18" height="18" alt="<?php print_string("removelink","editor");?>" title="<?php print_string("removelink","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_image.gif" width="18" height="18" alt="<?php print_string("insertimage","editor");?>" title="<?php print_string("insertimage","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/insert_table.gif" width="18" height="18" alt="<?php print_string("inserttable","editor");?>" title="<?php print_string("inserttable","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/em.icon.smile.gif" width="18" height="18" alt="<?php print_string("insertsmile","editor");?>" title="<?php print_string("insertsmile","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/icon_ins_char.gif" width="18" height="18" alt="<?php print_string("insertchar","editor");?>" title="<?php print_string("insertchar","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/spell-check.gif" width="18" height="18" alt="<?php print_string("spellcheck","editor");?>" title="<?php print_string("spellcheck","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_html.gif" width="18" height="18" alt="<?php print_string("htmlmode","editor");?>" title="<?php print_string("htmlmode","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/fullscreen_maximize.gif" width="18" height="18" alt="<?php print_string("popupeditor","editor");?>" title="<?php print_string("popupeditor","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_replace.gif" width="18" height="18" alt="<?php print_string("popupeditor","editor");?>" title="<?php print_string("searchandreplace","editor");?>" /></td>
</tr>
<tr>
<td><input type="checkbox" name="buttons[inserthorizontalrule]"<?php print(in_array("inserthorizontalrule", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
@@ -198,7 +196,7 @@
<td><input type="checkbox" name="buttons[search_replace]"<?php print(in_array("search_replace", $buttons)) ? " checked=\"checked\"" : "" ;?> /></td>
</tr>
<tr>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/htmlarea/images/ed_nolink.gif" width="18" height="18" alt="<?php print_string("horizontalrule","editor");?>" title="<?php print_string("nolink","editor");?>" /></td>
<td><img src="<?php echo $CFG->wwwroot ?>/lib/editor/images/ed_nolink.gif" width="18" height="18" alt="<?php print_string("horizontalrule","editor");?>" title="<?php print_string("nolink","editor");?>" /></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
@@ -228,69 +226,6 @@
</table>
</td>
</tr>
<?php
}
else if ( $currenttab == 'tinymce' ) {
?>
<tr>
<td>tinymcetheme:</td>
<td><?php
$options = array('advanced' => 'Advanced','simple' => 'Simple');
choose_from_menu ($options, "tinymcetheme", $CFG->tinymcetheme, "", "", "");
?></td>
<td>&nbsp;</td>
</tr>
<tr>
<td valign="top">tinymceplugins:</td>
<td nowrap="nowrap"><?php
$pluginsdir = $CFG->libdir .'/editor/tinymce/jscripts/tiny_mce/plugins';
$plugins = editor_get_tiny_plugins();
$pluginsinuse = explode(",", $CFG->tinymceplugins);
sort($plugins);
$cnt = 0;
echo '<table border="0" cellpadding="2">';
foreach ( $plugins as $plugin ) {
$num = ($cnt % 2);
if ( $num < 1 ) {
echo '<tr>';
}
echo '<td><input type="checkbox" name="tinymceplugins[]" value="'. s($plugin) .'"';
if ( in_array($plugin, $pluginsinuse) ) {
echo ' checked="checked"';
}
echo ' /> '. $plugin .'</td>'."\n";
if ( $num > 0 ) {
echo '</tr>';
}
$cnt++;
}
echo '</table>';
?></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>tinymcecontentcss:</td>
<td><input type="text" name="tinymcecontentcss" value="<?php
!empty($CFG->tinymcecontentcss) ? p($CFG->tinymcecontentcss) : ''; ?>" size="40" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>tinymcepopupcss:</td>
<td><input type="text" name="tinymcepopupcss" value="<?php
!empty($CFG->tinymcepopupcss) ? p($CFG->tinymcepopupcss) : ''; ?>" size="40" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>tinymceeditorcss:</td>
<td><input type="text" name="tinymceeditorcss" value="<?php
!empty($CFG->tinymceeditorcss) ? p($CFG->tinymceeditorcss) : ''; ?>" size="40" /></td>
<td>&nbsp;</td>
</tr>
<?php
}
?>
<tr>
<td colspan="3" align="center"><input type="submit" value="<?php print_string("savechanges");?>" /></td>
</tr>
@@ -299,7 +234,6 @@
<form method="post" action="<?php print($GLOBALS['ME']);?>">
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>" />
<input type="hidden" name="tab" value="<?php p($currentpage) ?>" />
<center>
<input type="submit" name="resettodefaults" value="<?php print_string('editorresettodefaults') ?>" />
</center>
+7 -99
View File
@@ -1,10 +1,7 @@
<?php // $Id$
/// configuration routines for HTMLArea editor
require_once('../config.php');
$currentpage = optional_param('tab', 1, PARAM_INT);
require_once("../config.php");
require_login();
if (!isadmin()) {
@@ -15,38 +12,20 @@
// do we want default values?
if (isset($data->resettodefaults)) {
if (!(reset_to_defaults($currentpage))) {
if (!(reset_to_defaults())) {
error("Editor settings could not be restored!");
}
} else {
if (!(editor_update_config($data, $currentpage))) {
if (!(editor_update_config($data))) {
error("Editor settings could not be updated!");
}
}
redirect("$CFG->wwwroot/$CFG->admin/editor.php?tab=$currentpage", get_string("changessaved"), 1);
redirect("$CFG->wwwroot/$CFG->admin/editor.php", get_string("changessaved"), 1);
} else {
// Generate edit form
$inactive = array();
switch ( $currentpage ) {
case 1:
$currenttab = 'htmlarea';
break;
case 2:
$currenttab = 'tinymce';
break;
default:
error("Unknown currentpage: $currentpage");
}
//$url = 'editor.php?tab=';
//$tabrow = array();
//$tabrow[] = new tabobject('htmlarea',$url . '1', 'HTMLArea');
//$tabrow[] = new tabobject('tinymce',$url . '2', 'TinyMCE');
//$tabs = array($tabrow);
$fontlist = editor_convert_to_array($CFG->editorfontlist);
$dicts = editor_get_dictionaries();
@@ -58,11 +37,8 @@
"<a href=\"index.php\">$stradmin</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> $streditorsettings");
print_heading($streditorsettings);
print_simple_box("<center>$streditorsettingshelp</center>","center","50%");
print("<br />\n");
//print_tabs($tabs, $currenttab, $inactive);
print_simple_box_start("center");
include("editor.html");
print_simple_box_end();
@@ -91,7 +67,7 @@ function editor_convert_to_array ($string) {
return $fonts;
}
function editor_update_config ($data, $editor) {
function editor_update_config ($data) {
/// Updates the editor config values.
@@ -99,8 +75,6 @@ function editor_update_config ($data, $editor) {
return false;
}
switch($editor) {
case 1: // HTMLArea.
// Make array for unwanted characters.
$nochars = array(chr(33),chr(34),chr(35),chr(36),chr(37),
chr(38),chr(39),chr(40),chr(41),chr(42),
@@ -141,30 +115,6 @@ function editor_update_config ($data, $editor) {
}
}
$updatedata['editorhidebuttons'] = trim($hidebuttons);
break;
case 2: // TinyMCE.
$updatedata = array();
$updatedata['htmleditor'] = !empty($data->htmleditor) ? $data->htmleditor : 0;
// Process plugins
if ( !empty($data->tinymceplugins) ) {
foreach ( $data->tinymceplugins as $key => $value ) {
$value = stripslashes(clean_param($value, PARAM_ALPHA));
$data->tinymceplugins[$key] = addslashes($value);
}
}
$updatedata['tinymceplugins'] = !empty($data->tinymceplugins) ? implode(",", $data->tinymceplugins) : '';
$updatedata['tinymcetheme'] = !empty($data->tinymcetheme) ?
clean_param($data->tinymcetheme, PARAM_ALPHA) : '';
$updatedata['tinymcecontentcss'] = !empty($data->tinymcecontentcss) ?
clean_param($data->tinymcecontentcss, PARAM_URL) : '';
$updatedata['tinymcepopupcss'] = !empty($data->tinymcepopupcss) ?
clean_param($data->tinymcepopupcss, PARAM_URL) : '';
$updatedata['tinymceeditorcss'] = !empty($data->tinymceeditorcss) ?
clean_param($data->tinymceeditorcss, PARAM_URL) : '';
break;
}
foreach ($updatedata as $name => $value) {
if (!(set_config($name, $value))) {
@@ -175,7 +125,7 @@ function editor_update_config ($data, $editor) {
return true;
}
function reset_to_defaults ($editor) {
function reset_to_defaults () {
/// Reset the values to default
global $CFG;
@@ -183,8 +133,6 @@ function reset_to_defaults ($editor) {
$updatedata = array();
switch ( $editor ) {
case 1: // HTMLArea.
$updatedata['editorbackgroundcolor'] = $defaults['editorbackgroundcolor'];
$updatedata['editorfontfamily'] = $defaults['editorfontfamily'];
$updatedata['editorfontsize'] = $defaults['editorfontsize'];
@@ -193,16 +141,6 @@ function reset_to_defaults ($editor) {
$updatedata['editorfontlist'] = $defaults['editorfontlist'];
$updatedata['editorhidebuttons'] = $defaults['editorhidebuttons'];
$updatedata['editordictionary'] = '';
break;
case 2: // TinyMCE.
$updatedata['tinymceplugins'] = $defaults['tinymceplugins'];
$updatedata['tinymcetheme'] = $defaults['tinymcetheme'];
$updatedata['tinymcecontentcss'] = $defaults['tinymcecontentcss'];
$updatedata['tinymcepopupcss'] = $defaults['tinymcepopupcss'];
$updatedata['tinymceeditorcss'] = $defaults['tinymceeditorcss'];
break;
}
foreach ($updatedata as $name => $value) {
if (!(set_config($name, $value))) {
@@ -240,7 +178,7 @@ function editor_get_dictionaries () {
$dictionaries = array();
$dicts = array();
if(!($handle = @popen(escapeshellarg($cmd) .' dump dicts', 'r'))) {
if(!($handle = @popen($cmd .' dump dicts', 'r'))) {
return $strerror = "Couldn't create handle!";
exit;
}
@@ -273,34 +211,4 @@ function editor_get_dictionaries () {
}
function editor_get_tiny_plugins() {
global $CFG;
$plugins = array();
$plugindir = $CFG->libdir .'/editor/tinymce/jscripts/tiny_mce/plugins';
if ( !$fp = opendir($plugindir) ) {
return $plugins;
exit;
}
while ( ($file = readdir($fp)) !== false ) {
if ( preg_match("/^\.+/", $file) ) {
continue;
}
if ( is_dir($plugindir .'/'. $file) ) {
array_push($plugins, $file);
}
}
if ( $fp ) {
closedir($fp);
}
return $plugins;
}
?>
+41 -64
View File
@@ -2,11 +2,10 @@
// enrol.php - allows admin to edit all enrollment variables
// Yes, enrol is correct English spelling.
require_once('../config.php');
include("../config.php");
$enrol = optional_param('enrol', $CFG->enrol, PARAM_ALPHA);
$enrol = optional_param('enrol', $CFG->enrol, PARAM_SAFEDIR);
$CFG->pagepath = 'enrol';
require_login();
if (!$site = get_site()) {
@@ -21,91 +20,69 @@
error(get_string('confirmsesskeybad', 'error'));
}
require_once("$CFG->dirroot/enrol/enrol.class.php"); /// Open the factory class
require_once("$CFG->dirroot/enrol/$enrol/enrol.php"); /// Open the class
/// Save settings
$enrolment = new enrolment_plugin();
/// If data submitted, then process and store.
if ($frm = data_submitted()) {
if (empty($frm->enable)) {
$frm->enable = array();
if ($enrolment->process_config($frm)) {
set_config('enrol', $frm->enrol);
redirect("enrol.php?sesskey=$USER->sesskey", get_string("changessaved"), 1);
}
if (empty($frm->default)) {
$frm->default = '';
}
if ($frm->default && $frm->default != 'manual' && !in_array($frm->default, $frm->enable)) {
$frm->enable[] = $frm->default;
}
asort($frm->enable);
$frm->enable = array_merge(array('manual'), $frm->enable); // make sure manual plugin is called first
set_config('enrol_plugins_enabled', implode(',', $frm->enable));
set_config('enrol', $frm->default);
redirect("enrol.php?sesskey=$USER->sesskey", get_string("changessaved"), 1);
} else {
$frm = $CFG;
}
/// Print the form
/// Otherwise fill and print the form.
$str = get_strings(array('enrolmentplugins', 'users', 'administration', 'settings', 'edit'));
/// get language strings
$str = get_strings(array('enrolments', 'users', 'administration', 'settings'));
print_header("$site->shortname: $str->enrolmentplugins", "$site->fullname",
"<a href=\"index.php\">$str->administration</a> ->
<a href=\"users.php\">$str->users</a> -> $str->enrolmentplugins");
$modules = get_list_of_plugins("enrol");
$options = array();
foreach ($modules as $module) {
$options[$module] = get_string("enrolname", "enrol_$module");
}
asort($options);
print_simple_box(get_string('configenrolmentplugins', 'admin'), 'center', '700');
print_header("$site->shortname: $str->enrolments", "$site->fullname",
"<a href=\"index.php\">$str->administration</a> ->
<a href=\"users.php\">$str->users</a> -> $str->enrolments");
echo "<form target=\"{$CFG->framename}\" name=\"enrolmenu\" method=\"post\" action=\"enrol.php\">";
echo "<input type=\"hidden\" name=\"sesskey\" value=\"".$USER->sesskey."\">";
echo "<div align=\"center\"><p><b>";
$table = new stdClass();
$table->head = array(get_string('name'), get_string('enable'), get_string('default'), $str->settings);
$table->align = array('left', 'center', 'center', 'center');
$table->size = array('60%', '', '', '15%');
$table->width = '700';
$table->data = array();
$modules = get_list_of_plugins("enrol");
foreach ($modules as $module) {
/// Choose an enrolment method
echo get_string('chooseenrolmethod').': ';
choose_from_menu ($options, "enrol", $enrol, "",
"document.location='enrol.php?sesskey=$USER->sesskey&enrol='+document.enrolmenu.enrol.options[document.enrolmenu.enrol.selectedIndex].value", "");
// skip if directory is empty
if (!file_exists("$CFG->dirroot/enrol/$module/enrol.php")) {
continue;
}
echo "</b></p></div>";
/// Print current enrolment type description
print_simple_box_start("center", "80%");
print_heading($options[$enrol]);
$name = get_string("enrolname", "enrol_$module");
$plugin = enrolment_factory::factory($module);
$enable = '<input type="checkbox" name="enable[]" value="'.$module.'"';
if (stristr($CFG->enrol_plugins_enabled, $module) !== false) {
$enable .= ' checked="checked"';
}
if ($module == 'manual') {
$enable .= ' disabled="disabled"';
}
$enable .= ' />';
if (method_exists($plugin, 'print_entry')) {
$default = '<input type="radio" name="default" value="'.$module.'"';
if ($CFG->enrol == $module) {
$default .= ' checked="checked"';
}
$default .= ' />';
} else {
$default = '';
}
$table->data[$name] = array($name, $enable, $default,
'<a href="enrol_config.php?sesskey='.$USER->sesskey.'&amp;enrol='.$module.'">'.$str->edit.'</a>');
}
asort($table->data);
print_simple_box_start("center", "60%", '', 5, 'informationbox');
print_string("description", "enrol_$enrol");
print_simple_box_end();
print_table($table);
echo "<hr />";
// print_heading($str->settings);
$enrolment->config_form($frm);
echo "<center><input type=\"submit\" value=\"".get_string("savechanges")."\"></center>\n";
echo "<center><p><input type=\"submit\" value=\"".get_string("savechanges")."\"></p></center>\n";
echo "</form>";
print_simple_box_end();
print_footer();
?>
exit;
?>
-88
View File
@@ -1,88 +0,0 @@
<?PHP // $Id$
// enrol_config.php - allows admin to edit all enrollment variables
// Yes, enrol is correct English spelling.
require_once("../config.php");
$enrol = required_param('enrol', PARAM_ALPHA);
$CFG->pagepath = 'enrol/' . $enrol;
require_login();
if (!$site = get_site()) {
redirect("index.php");
}
if (!isadmin()) {
error("Only the admin can use this page");
}
if (!confirm_sesskey()) {
error(get_string('confirmsesskeybad', 'error'));
}
require_once("$CFG->dirroot/enrol/enrol.class.php"); /// Open the factory class
$enrolment = enrolment_factory::factory($enrol);
/// If data submitted, then process and store.
if ($frm = data_submitted()) {
if ($enrolment->process_config($frm)) {
redirect("enrol.php?sesskey=$USER->sesskey", get_string("changessaved"), 1);
}
} else {
$frm = $CFG;
}
/// Otherwise fill and print the form.
/// get language strings
$str = get_strings(array('enrolmentplugins', 'configuration', 'users', 'administration'));
$modules = get_list_of_plugins("enrol");
foreach ($modules as $module) {
$options[$module] = get_string("enrolname", "enrol_$module");
}
asort($options);
print_header("$site->shortname: $str->enrolmentplugins", "$site->fullname",
"<a href=\"index.php\">$str->administration</a> ->
<a href=\"users.php\">$str->users</a> ->
<a href=\"enrol.php?sesskey=$USER->sesskey\">$str->enrolmentplugins</a> ->
$str->configuration");
echo "<form target=\"{$CFG->framename}\" name=\"enrolmenu\" method=\"post\" action=\"enrol_config.php\">";
echo "<input type=\"hidden\" name=\"sesskey\" value=\"".$USER->sesskey."\">";
echo "<div align=\"center\"><p><b>";
/// Choose an enrolment method
echo get_string('chooseenrolmethod').': ';
choose_from_menu ($options, "enrol", $enrol, "",
"document.location='enrol_config.php?sesskey=$USER->sesskey&enrol='+document.enrolmenu.enrol.options[document.enrolmenu.enrol.selectedIndex].value", "");
echo "</b></p></div>";
/// Print current enrolment type description
print_simple_box_start("center", "80%");
print_heading($options[$enrol]);
print_simple_box_start("center", "60%", '', 5, 'informationbox');
print_string("description", "enrol_$enrol");
print_simple_box_end();
echo "<hr />";
$enrolment->config_form($frm);
echo "<center><p><input type=\"submit\" value=\"".get_string("savechanges")."\"></p></center>\n";
echo "</form>";
print_simple_box_end();
print_footer();
exit;
?>
+20 -43
View File
@@ -31,12 +31,12 @@
require_once('../config.php');
require_once($CFG->libdir.'/environmentlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
/// Parameters
$action = optional_param('action', '', PARAM_ACTION);
$version = optional_param('version', '', PARAM_FILE); //
$action = optional_param('action', '', PARAM_ALPHA);
$sesskey = optional_param('sesskey');
$version = optional_param('version');
/// Security checks
require_login();
@@ -55,48 +55,14 @@
$strenvironment = get_string('environment', 'admin');
$strerror = get_string('error');
$strmoodleversion = get_string('moodleversion');
$strupdate = get_string('updatecomponent', 'admin');
$strupwards = get_string('upwards', 'admin');
$strmisc = get_string('miscellaneous');
/// Print the header stuff
print_header("$SITE->shortname: $strenvironment", $SITE->fullname,
"<a href=\"index.php\">$stradmin</a> -> <a href=\"misc.php\">$strmisc</a> -> "
.$strenvironment);
/// Print the component download link
echo '<div class="reportlink"><a href="environment.php?action=updatecomponent&amp;sesskey='.$USER->sesskey.'">'.$strupdate.'</a></div>';
"<a href=\"index.php\">$stradmin</a> -> ".$strenvironment);
print_heading($strenvironment);
/// Handle the 'updatecomponent' action
if ($action == 'updatecomponent' && confirm_sesskey()) {
/// Create component installer and execute it
if ($cd = new component_installer('http://download.moodle.org',
'environment',
'environment.zip')) {
$status = $cd->install(); //returns ERROR | UPTODATE | INSTALLED
switch ($status) {
case ERROR:
if ($cd->get_error() == 'remotedownloadnotallowed') {
$a = new stdClass();
$a->url = 'http://download.moodle.org/environment/environment.zip';
$a->dest= $CFG->dataroot.'/';
print_simple_box(get_string($cd->get_error(), 'error', $a), 'center', '', '', 5, 'errorbox');
} else {
print_simple_box(get_string($cd->get_error(), 'error'), 'center', '', '', 5, 'errorbox');
}
break;
case UPTODATE:
print_simple_box(get_string($cd->get_error(), 'error'), 'center');
break;
case INSTALLED:
print_simple_box(get_string('componentinstalled', 'admin'), 'center');
break;
}
}
}
/// Start of main box
print_simple_box_start('center');
@@ -130,7 +96,7 @@
}
/// Print form and popup menu
echo '<center><form method="post" action="environment.php">';
echo '<center><form method="post" action="'.$CFG->wwwroot.'/admin/environment.php">';
echo $strmoodleversion.' ';
choose_from_menu ($versions, 'version', $version, null, 'this.form.submit();' );
echo '<input type="hidden" name="sesskey" value="'.$USER->sesskey.'" />';
@@ -141,10 +107,21 @@
/// Gather and show results
$status = check_moodle_environment($version, $environment_results);
/// Other links
echo '<div align="center">';
print_single_button('phpinfo.php', NULL, get_string('phpinfo'));
echo '</div>';
/// Process action
if ($form = data_submitted()) {
if (confirm_sesskey()) {
if ($form->action == "disable") {
} else {
}
}
}
/// Default action, show explanation and popup menu
/// Print footer
print_footer();
+3 -44
View File
@@ -12,54 +12,13 @@
</MOODLE>
<MOODLE version="1.6">
<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="mysql" version="4.1.12" />
<VENDOR name="postgres" version="7.4" />
</DATABASE>
<PHP version="4.3.0" level="required" />
<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="1.7">
<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="7.4" />
<VENDOR name="mssql" 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_EXTENSION name="iconv" level="optional" />
<PHP_EXTENSION name="mbstring" level="optional" />
</PHP_EXTENSIONS>
</MOODLE>
</COMPATIBILITY_MATRIX>
-108
View File
@@ -1,108 +0,0 @@
<?php // $Id$
// filter.php
// Edit text filter settings
require_once('../config.php');
require_once($CFG->libdir.'/tablelib.php');
// check for allowed access
require_login();
if (!isadmin()) {
error( 'Only administrators can use the filters administration page' );
}
if (!$site = get_site()) {
error( 'Site is not defined in filters administration page' );
}
// get parameters
$param = new Object;
$param->filter = required_param('filter', PARAM_PATH);
$param->submit = optional_param('submit', 0, PARAM_BOOL);
$param->reset = optional_param('reset', 0, PARAM_BOOL);
$filtername = substr($param->filter, strpos( $param->filter, '/' )+1 ) ;
// $CFG->pagepath is used to generate the body and id attributes for the body tag
// of the page. It is also used to generate the link to the Moodle Docs for this view.
$CFG->pagepath = 'filter/' . $filtername . '/config';
// get translated strings for use on page
$txt = new Object;
$txt->managefilters = get_string( 'managefilters' );
$txt->administration = get_string( 'administration' );
$txt->configuration = get_string( 'configuration' );
//======================
// Process Actions
//======================
// if reset pressed let filter config page handle it
$forcereset = false;
if (!empty($param->reset)) {
$forcereset = true;
}
else
if ($config = data_submitted()) {
// check session key
if (!confirm_sesskey()) {
error( get_string('confirmsesskeybad', 'error' ) );
}
$configpath = $CFG->dirroot.'/filter/'.$filtername.'/filterconfig.php';
if (file_exists($configpath)) {
require_once($configpath);
$functionname = $filtername.'_process_config';
if (function_exists($functionname)) {
$functionname($config);
$saved = true;
}
}
if (empty($saved)) {
// run through submitted data
// reject if does not start with filter_
foreach ($config as $name => $value) {
set_config( $name,$value );
}
}
redirect( "$CFG->wwwroot/$CFG->admin/filters.php", get_string('changessaved'), 1);
exit;
}
//==============================
// Display logic
//==============================
$filtername = ucfirst($filtername);
print_header( "$site->shortname: $txt->managefilters", "$site->fullname",
"<a href=\"index.php\">$txt->administration</a> -> <a href=\"configure.php\">$txt->configuration</a> " .
"-> <a href=\"filters.php\">$txt->managefilters</a> -> $filtername" );
print_heading( $txt->managefilters );
print_simple_box("<center>".get_string("configwarning", "admin")."</center>", "center", "50%");
echo "<br />";
print_simple_box_start("center",'');
?>
<form action="filter.php?filter=<?php echo urlencode($param->filter); ?>" method="post">
<input type="hidden" name="sesskey" value="<?php echo sesskey(); ?>" />
<?php include "$CFG->dirroot/$param->filter/filterconfig.html"; ?>
<center>
<input type="submit" name="submit" value="<?php print_string('savechanges'); ?>" />
<input type="submit" name="reset" value="<?php echo print_string('resettodefaults'); ?>" />
</center>
</form>
<?php
print_simple_box_end();
print_simple_box_end();
print_footer();
?>
+159
View File
@@ -0,0 +1,159 @@
<?php print_simple_box_start("center"); ?>
<form name="filters" id="filters" method="post" action="filters.php">
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>">
<table align="center" border="0" cellpadding="5" cellspacing="0">
<tr>
<td valign="top"><div align="right">
<br />
<input name="up" type="submit" id="up" value="&uarr;" />
<br />
<input name="down" type="submit" id="down" value="&darr;" />
<br />
</div></td>
<td valign="top">
<?php p($stractive) ?>
<br />
<select name="iselect" size="20" id="iselect"
onclick="document.filters.add.disabled=true;
document.filters.remove.disabled=false;
document.filters.uselect.selectedIndex=-1;">
<?php
$runscript = "";
foreach ($installedfilters as $filter) {
if ($selectedfilter == $filter) {
$selected = " selected ";
$runscript = "eval(\"document.filters.add.disabled=true\");
eval(\"document.filters.remove.disabled=false\");
eval(\"document.filters.uselect.selectedIndex=-1\");";
} else {
$selected = "";
}
echo "<option value=\"$filter\" $selected>".$allfilters[$filter]."</option>";
}
?>
</select></td>
<td valign="top">
<br />
<input name="add" type="submit" id="add" value="&larr;" />
<br />
<input name="remove" type="submit" id="remove" value="&rarr;" />
<br />
</td>
<td valign="top">
<?php p($strinactive) ?>
<br />
<select name="uselect" size="20" id="select"
onclick="document.filters.add.disabled=false;
document.filters.remove.disabled=true;
document.filters.iselect.selectedIndex=-1;">
<?php
foreach ($uninstalledfilters as $filter) {
if ($selectedfilter == $filter) {
$selected = " selected ";
$runscript = "eval(\"document.filters.add.disabled=false\");
eval(\"document.filters.remove.disabled=true\");
eval(\"document.filters.iselect.selectedIndex=-1\");";
} else {
$selected = "";
}
echo "<option value=\"$filter\" $selected>".$allfilters[$filter]."</option>";
}
?>
</select></td>
</tr>
</table>
</form>
<script language="Javascript">
<!--
<?php echo $runscript ?>
-->
</script>
<?php print_simple_box_end(); ?>
<br />
<br />
<?php print_simple_box_start("center"); ?>
<form name="options" id="options" method="post" action="filters.php">
<input type="hidden" name="sesskey" value="<?php echo $USER->sesskey ?>">
<input type="hidden" name="options" value="1">
<table cellpadding="20">
<tr valign="top">
<td nowrap="nowrap" align="right"><?php p($strcachetext) ?>:</td>
<td>
<?php
unset($options);
$options[604800] = get_string('numdays', '', 7);
$options[86400] = get_string('numdays', '', 1);
$options[43200] = get_string('numhours', '', 12);
$options[10800] = get_string('numhours', '', 3);
$options[7200] = get_string('numhours', '', 2);
$options[3600] = get_string('numhours', '', 1);
$options[2700] = get_string('numminutes', '', 45);
$options[1800] = get_string('numminutes', '', 30);
$options[900] = get_string('numminutes', '', 15);
$options[600] = get_string('numminutes', '', 10);
$options[540] = get_string('numminutes', '', 9);
$options[480] = get_string('numminutes', '', 8);
$options[420] = get_string('numminutes', '', 7);
$options[360] = get_string('numminutes', '', 6);
$options[300] = get_string('numminutes', '', 5);
$options[240] = get_string('numminutes', '', 4);
$options[180] = get_string('numminutes', '', 3);
$options[120] = get_string('numminutes', '', 2);
$options[60] = get_string('numminutes', '', 1);
$options[30] = get_string('numseconds', '', 30);
$options[0] = get_string('no');
choose_from_menu ($options, "cachetext", $CFG->cachetext, "", "", "");
?>
</td>
<td>
<?php p($strconfigcachetext) ?>
</td>
</tr>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php p($strfilteruploadedfiles) ?>:</td>
<td>
<?php
unset($options);
$options[0] = get_string('no');
$options[1] = get_string('yes');
choose_from_menu ($options, "filteruploadedfiles", $CFG->filteruploadedfiles, "", "", "");
?>
</td>
<td>
<?php p($strconfigfilteruploadedfiles) ?>
</td>
</tr>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php p($strfilterall) ?>:</td>
<td>
<?php
unset($options);
$options[0] = get_string('no');
$options[1] = get_string('yes');
choose_from_menu ($options, "filterall", $CFG->filterall, "", "", "");
?>
</td>
<td>
<?php p($strconfigfilterall) ?>
</td>
</tr>
<tr valign="top">
<td>&nbsp;</td>
<td><input type="submit" value="<?php print_string("savechanges") ?>"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
<?php print_simple_box_end(); ?>
+136 -297
View File
@@ -1,333 +1,172 @@
<?php // $Id$
// filters.php
// Edit list of available text filters
<?PHP // $Id$
// Allows the admin to create, delete and rename course categories
require_once('../config.php');
require_once($CFG->libdir.'/tablelib.php');
require_once("../config.php");
// defines
define('FILTER_TABLE','filter_administration_table');
optional_variable($iselect);
optional_variable($uselect);
optional_variable($add);
optional_variable($remove);
optional_variable($up);
optional_variable($down);
// check for allowed access
require_login();
if (!isadmin()) {
error('Only administrators can use the filters administration page');
error("Only administrators can use this page!");
}
if (!$site = get_site()) {
error('Site is not defined in filters administration page');
error("Site isn't defined!");
}
// get values from page
$params = new object();
$params->action = optional_param('action', '', PARAM_ACTION);
$params->filterpath = optional_param('filterpath', '', PARAM_PATH);
$params->cachetext = optional_param('cachetext', 0, PARAM_INT);
$params->filterall = optional_param('filterall', 0, PARAM_BOOL);
$params->filteruploadedfiles = optional_param('filteruploadedfiles', 0, PARAM_INT);
$params->filtermatchoneperpage = optional_param('filtermatchoneperpage', 0, PARAM_BOOL);
$params->filtermatchonepertext = optional_param('filtermatchonepertext', 0, PARAM_BOOL);
/// Print headings
// some basic information
$url = 'filters.php';
$myurl = "$url?sesskey=" . sesskey();
$img = "$CFG->pixpath/t";
$stradministration = get_string("administration");
$strconfiguration = get_string("configuration");
$strmanagefilters = get_string("managefilters");
$strversion = get_string("version");
$strsettings = get_string("settings");
$strup = get_string("up");
$strdown = get_string("down");
$stractive = get_string("active");
$strinactive = get_string("inactive");
$strcachetext = get_string("cachetext", "admin");
$strconfigcachetext = get_string("configcachetext", 'admin');
$strfilteruploadedfiles = get_string("filteruploadedfiles", "admin");
$strfilterall = get_string("filterall", "admin");
$strconfigfilteruploadedfiles = get_string("configfilteruploadedfiles", 'admin');
$strconfigfilterall = get_string("configfilterall", "admin");
// get translated strings for use on page
$txt = new object();
$txt->managefilters = get_string('managefilters');
$txt->administration = get_string('administration');
$txt->configuration = get_string('configuration');
$txt->name = get_string('name');
$txt->hide = get_string('hide');
$txt->show = get_string('show');
$txt->hideshow = "$txt->hide/$txt->show";
$txt->settings = get_string('settings');
$txt->up = get_string('up');
$txt->down = get_string('down');
$txt->updown = "$txt->up/$txt->down";
$txt->cachetext = get_string('cachetext', 'admin');
$txt->configcachetext = get_string('configcachetext', 'admin');
$txt->filteruploadedfiles = get_string('filteruploadedfiles','admin');
$txt->configfilteruploadedfiles = get_string('configfilteruploadedfiles','admin');
$txt->filterall = get_string('filterall','admin');
$txt->filtermatchoneperpage = get_string('filtermatchoneperpage','admin');
$txt->filtermatchonepertext = get_string('filtermatchonepertext','admin');
$txt->configfilterall = get_string('configfilterall','admin');
$txt->configfiltermatchoneperpage = get_string('configfiltermatchoneperpage','admin');
$txt->configfiltermatchonepertext = get_string('configfiltermatchonepertext','admin');
$txt->cachecontrols = get_string('cachecontrols');
$txt->yes = get_string('yes');
$txt->no = get_string('no');
$txt->none = get_string('none');
$txt->allfiles = get_string('allfiles');
$txt->htmlfilesonly = get_string('htmlfilesonly');
print_header("$site->shortname: $strmanagefilters", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> $strmanagefilters");
print_heading($strmanagefilters);
/// Make a list of all available filters and the best names for them we can find
$allfilters = array();
$filterlocations = array("mod", "filter");
// get a list of possible filters (and translate name if possible)
// note filters can be in the dedicated filters area OR in their
// associated modules
$installedfilters = array();
$filtersettings = array();
$filterlocations = array('mod','filter');
foreach ($filterlocations as $filterlocation) {
$plugins = get_list_of_plugins($filterlocation);
foreach ($plugins as $plugin) {
$pluginpath = "$CFG->dirroot/$filterlocation/$plugin/filter.php";
$settingspath = "$CFG->dirroot/$filterlocation/$plugin/filterconfig.html";
if (is_readable($pluginpath)) {
foreach ($plugins as $key => $plugin) {
if (is_readable("$CFG->dirroot/$filterlocation/$plugin/filter.php")) {
$name = trim(get_string("filtername", $plugin));
if (empty($name) or ($name == '[[filtername]]')) {
$name = ucfirst($plugin);
}
$installedfilters["$filterlocation/$plugin"] = $name;
if (is_readable($settingspath)) {
$filtersettings[] = "$filterlocation/$plugin";
if (empty($name) or $name == "[[filtername]]") {
$name = $plugin;
}
$allfilters["$filterlocation/$plugin"] = $name;
}
}
}
// get all the currently selected filters
/// Make an array of all the currently installed filters
$installedfilters = array();
if (!empty($CFG->textfilters)) {
$oldactivefilters = explode(',', $CFG->textfilters);
$oldactivefilters = array_unique($oldactivefilters);
} else {
$oldactivefilters = array();
}
$installedfilters = explode(',',$CFG->textfilters);
// take this opportunity to clean up filters
$activefilters = array();
foreach ($oldactivefilters as $oldactivefilter) {
if (!empty($oldactivefilter) and array_key_exists($oldactivefilter, $installedfilters)) {
$activefilters[] = $oldactivefilter;
}
}
//======================
// Process Actions
//======================
if ($params->action=="") {
// store cleaned active filers in db
set_config('textfilters', implode(',', $activefilters));
} elseif (($params->action=="hide") and confirm_sesskey()) {
$key=array_search($params->filterpath, $activefilters);
// check filterpath is valid
if ($key===false) {
// ignore it - doubleclick??
} else {
// just delete it
unset($activefilters[$key]);
set_config('textfilters', implode(',', $activefilters));
}
} elseif (($params->action=="show") and confirm_sesskey()) {
// check filterpath is valid
if (!array_key_exists($params->filterpath, $installedfilters)) {
error("Filter $params->filterpath is not currently installed", $url);
} elseif (array_search($params->filterpath,$activefilters)) {
// filterpath is already active - doubleclick??
} else {
// add it to installed filters
$activefilters[] = $params->filterpath;
$activefilters = array_unique($activefilters);
set_config('textfilters', implode(',', $activefilters));
}
} elseif (($params->action=="down") and confirm_sesskey()) {
$key=array_search($params->filterpath, $activefilters);
// check filterpath is valid
if ($key===false) {
error("Filter $params->filterpath is not currently active", $url);
} elseif ($key>=(count($activefilters)-1)) {
// cannot be moved any further down - doubleclick??
} else {
// swap with $key+1
$fsave = $activefilters[$key];
$activefilters[$key] = $activefilters[$key+1];
$activefilters[$key+1] = $fsave;
set_config('textfilters', implode(',', $activefilters));
}
} elseif (($params->action=="up") and confirm_sesskey()) {
$key=array_search($params->filterpath, $activefilters);
// check filterpath is valid
if ($key===false) {
error("Filter $params->filterpath is not currently active", $url);
} elseif ($key<1) {
//cannot be moved any further up - doubleclick??
} else {
// swap with $key-1
$fsave = $activefilters[$key];
$activefilters[$key] = $activefilters[$key-1];
$activefilters[$key-1] = $fsave;
set_config('textfilters', implode(',', $activefilters));
}
} elseif (($params->action=="config") and confirm_sesskey()) {
set_config('cachetext', $params->cachetext);
set_config('filteruploadedfiles', $params->filteruploadedfiles);
set_config('filterall', $params->filterall);
set_config('filtermatchoneperpage', $params->filtermatchoneperpage);
set_config('filtermatchonepertext', $params->filtermatchonepertext);
}
//======================
// Build Display Objects
//======================
// construct the display array with installed filters
// at the top in the right order
$displayfilters = array();
foreach ($activefilters as $activefilter) {
$name = $installedfilters[$activefilter];
$displayfilters[$activefilter] = $name;
}
foreach ($installedfilters as $key => $filter) {
if (!array_key_exists($key, $displayfilters)) {
$displayfilters[$key] = $filter;
}
}
// construct the flexible table ready to display
$table = new flexible_table(FILTER_TABLE);
$table->define_columns(array('name', 'hideshow', 'order', 'settings'));
$table->column_style('hideshow', 'text-align', 'center');
$table->column_style('order', 'text-align', 'center');
$table->column_style('settings', 'text-align', 'center');
$table->define_headers(array($txt->name, $txt->hideshow, $txt->updown, $txt->settings));
$table->define_baseurl("$CFG->wwwroot/$CFG->admin/filters.php");
$table->set_attribute('id', 'blocks');
$table->set_attribute('class', 'flexible generaltable generalbox');
$table->set_attribute('style', 'margin:auto;');
$table->set_attribute('cellpadding', '5');
$table->setup();
// iterate through filters adding to display table
$updowncount = 1;
$activefilterscount = count($activefilters);
foreach ($displayfilters as $path => $name) {
$upath = urlencode($path);
// get hide/show link
if (in_array($path, $activefilters)) {
$hideshow = "<a href=\"$myurl&amp;action=hide&amp;filterpath=$upath\">";
$hideshow .= "<img src=\"{$CFG->pixpath}/i/hide.gif\" height=\"16\" width=\"16\" alt=\"hide\" /></a>";
$hidden = false;
$displayname = "<span>$name</span>";
}
else {
$hideshow = "<a href=\"$myurl&amp;action=show&amp;filterpath=$upath\">";
$hideshow .= "<img src=\"{$CFG->pixpath}/i/show.gif\" height=\"16\" width=\"16\" alt=\"show\" /></a>";
$hidden = true;
$displayname = "<span class=\"dimmed_text\">$name</span>";
}
// get up/down link (only if not hidden)
$updown = '';
if (!$hidden) {
if ($updowncount>1) {
$updown .= "<a href=\"$myurl&amp;action=up&amp;filterpath=$upath\">";
$updown .= "<img src=\"$img/up.gif\" alt=\"up\" /></a>&nbsp;";
// Do a little cleanup for robustness
foreach ($installedfilters as $key => $installedfilter) {
if (empty($installedfilter)) {
unset($installedfilters[$key]);
set_config("textfilters", implode(',', $installedfilters));
}
else {
$updown .= "<img src=\"$CFG->pixpath/spacer.gif\" height=\"16\" width=\"16\" alt=\"\" />&nbsp;";
}
if ($updowncount<$activefilterscount) {
$updown .= "<a href=\"$myurl&amp;action=down&amp;filterpath=$upath\">";
$updown .= "<img src=\"$img/down.gif\" alt=\"down\" /></a>";
}
else {
$updown .= "<img src=\"$CFG->pixpath/spacer.gif\" height=\"16\" width=\"16\" alt=\"\" />";
}
++$updowncount;
}
// settings link (if defined)
$settings = '';
if (in_array($path, $filtersettings)) {
$settings = "<a href=\"filter.php?filter=" . urlencode($path) . "\">";
$settings .= "{$txt->settings}</a>";
}
// write data into the table object
$table->add_data(array($displayname, $hideshow, $updown, $settings));
}
// build options list for cache lifetime
$seconds = array(604800,86400,43200,10800,7200,3600,2700,1800,900,600,540,480,420,360,300,240,180,120,60,30,0);
unset($lifetimeoptions);
foreach ($seconds as $second) {
if ($second>=86400) {
$options[$second] = get_string('numdays','',$second/86400);
}
elseif ($second>=3600) {
$options[$second] = get_string('numhours','',$second/3600);
}
elseif ($second>=60) {
$options[$second] = get_string('numminutes','',$second/60);
}
elseif ($second>=1) {
$options[$second] = get_string('numseconds','',$second);
}
else {
$options[$second] = get_string('no');
}
}
//==============================
// Display logic
//==============================
$selectedfilter = "none";
print_header("$site->shortname: $txt->managefilters", "$site->fullname",
"<a href=\"index.php\">$txt->administration</a> -> <a href=\"configure.php\">$txt->configuration</a> " .
"-> $txt->managefilters");
/// If data submitted, then process and store.
print_heading_with_help($txt->managefilters, 'filters');
if (!empty($options)) {
if (($config = data_submitted()) && confirm_sesskey()) {
unset($config->options);
unset($config->sesskey);
foreach ($config as $name => $value) {
set_config($name, $value);
}
}
}
// print the table of all the filters
$table->print_html();
if (!empty($add) and !empty($uselect) and confirm_sesskey()) {
$selectedfilter = $uselect;
if (!in_array($selectedfilter, $installedfilters)) {
$installedfilters[] = $selectedfilter;
set_config("textfilters", implode(',', $installedfilters));
}
// print the table for the cache controls
print_heading($txt->cachecontrols);
print_simple_box_start('center');
?>
} else if (!empty($remove) and !empty($iselect) and confirm_sesskey()) {
$selectedfilter = $iselect;
foreach ($installedfilters as $key => $installedfilter) {
if ($installedfilter == $selectedfilter) {
unset($installedfilters[$key]);
}
}
set_config("textfilters", implode(',', $installedfilters));
<form name="options" id="options" method="post" action="<?php echo $url; ?>" >
<input type="hidden" name="sesskey" value="<?php echo sesskey(); ?>" />
<input type="hidden" name="action" value="config" />
<table cellpadding="20">
<tr valign="top">
<td nowrap="nowrap" align="right"><?php echo $txt->cachetext; ?></td>
<td><?php choose_from_menu($options, "cachetext", $CFG->cachetext, "", "", ""); ?></td>
<td><?php echo $txt->configcachetext; ?></td>
</tr>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php echo $txt->filteruploadedfiles; ?></td>
<td><?php choose_from_menu(array($txt->none,$txt->allfiles,$txt->htmlfilesonly),
"filteruploadedfiles", $CFG->filteruploadedfiles,"","",""); ?></td>
<td><?php echo $txt->configfilteruploadedfiles; ?></td>
</tr>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php echo $txt->filtermatchoneperpage; ?></td>
<td><?php choose_from_menu(array($txt->no,$txt->yes), "filtermatchoneperpage", $CFG->filtermatchoneperpage,"","",""); ?></td>
<td><?php echo $txt->configfiltermatchoneperpage; ?></td>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php echo $txt->filtermatchonepertext; ?></td>
<td><?php choose_from_menu(array($txt->no,$txt->yes), "filtermatchonepertext", $CFG->filtermatchonepertext,"","",""); ?></td>
<td><?php echo $txt->configfiltermatchonepertext; ?></td>
</tr>
</tr>
<tr valign="top">
<td nowrap="nowrap" align="right"><?php echo $txt->filterall; ?></td>
<td><?php choose_from_menu(array($txt->no,$txt->yes), "filterall", $CFG->filterall,"","",""); ?></td>
<td><?php echo $txt->configfilterall; ?></td>
</tr>
<tr valign="top">
<td>&nbsp;</td>
<td><input type="submit" value="<?php print_string('savechanges'); ?>" /></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
} else if ((!empty($up) or !empty($down)) and !empty($iselect) and confirm_sesskey()) {
if (!empty($up)) {
if ($allfilters[$iselect]) {
foreach ($installedfilters as $key => $installedfilter) {
if ($installedfilter == $iselect) {
$movefilter = $key;
break;
}
$swapfilter = $key;
}
}
}
if (!empty($down)) {
if ($allfilters[$iselect]) {
$choosenext = false;
foreach ($installedfilters as $key => $installedfilter) {
if ($choosenext) {
$swapfilter = $key;
break;
}
if ($installedfilter == $iselect) {
$movefilter = $key;
$choosenext = true;
}
}
}
}
if (isset($swapfilter) and isset($movefilter)) {
$tempfilter = $installedfilters[$swapfilter];
$installedfilters[$swapfilter] = $installedfilters[$movefilter];
$installedfilters[$movefilter] = $tempfilter;
set_config("textfilters", implode(',', $installedfilters));
}
$selectedfilter = $iselect;
}
/// Make an array of all the currently uninstalled filters
$uninstalledfilters = array();
foreach ($allfilters as $filter => $name) {
$installed = false;
foreach ($installedfilters as $installedfilter) {
if ($installedfilter == $filter) {
$installed = true;
}
}
if (!$installed) {
$uninstalledfilters[] = $filter;
}
}
/// Print the current form
include("filters.html");
<?php
print_simple_box_end();
print_footer();
+1 -1
View File
@@ -1,4 +1,4 @@
<?php // $Id$
<?
/** This expects the output from a command like
* clamscan -r --infected --no-summary <files> 2>&1 | php -d error_log=/path/to/log thisfile.php
* also it's important that the output of clamscan prints the FULL PATH to each infected file, so use absolute paths for area to scan
+30 -55
View File
@@ -1,24 +1,12 @@
<?php // $Id$
ob_start(); //for whitespace test
require_once('../config.php');
// extra whitespace test - intentionally breaks cookieless mode
$extraws = '';
while (true) {
$extraws .= ob_get_contents();
if (!@ob_end_clean()) { //
break;
}
}
define('SEVERITY_NOTICE', 'notice');
define('SEVERITY_ANNOYANCE', 'annoyance');
define('SEVERITY_SIGNIFICANT', 'significant');
define('SEVERITY_CRITICAL', 'critical');
$solution = optional_param('solution', 0, PARAM_SAFEDIR); //in fact it is class name alhanumeric and _
require_login();
if (!isadmin()) {
error('Only the admin can use this page');
@@ -27,11 +15,9 @@
$site = get_site();
$stradmin = get_string('administration');
$strhealthcenter = get_string('healthcenter');
$strmisc = get_string('miscellaneous');
print_header($site->shortname.': '.$strhealthcenter, $site->fullname,
'<a href="index.php">'.$stradmin.'</a> -> <a href="misc.php">'.$strmisc.'</a> ->'.
$strhealthcenter);
'<a href="index.php">'.$stradmin.'</a> -> '.$strhealthcenter);
echo <<<STYLES
<style type="text/css">
@@ -95,7 +81,9 @@ dd.solution li {
</style>
STYLES;
if(strpos($solution, 'problem_') === 0 && class_exists($solution)) {
$solution = optional_param('solution', NULL);
if(!empty($solution) && class_exists($solution)) {
health_print_solution($solution);
}
else {
@@ -227,13 +215,18 @@ class problem_000001 extends problem_base {
class problem_000002 extends problem_base {
function title() {
return 'Extra characters at the end of config.php or other library function';
return 'Extra characters at the end of config.php';
}
function exists() {
global $extraws;
if($extraws === '') {
return false;
// [pj] When the requirements are raised to PHP 4.3.0 this will be file_get_contents()
if($fp = @fopen('../config.php', 'r')) {
$contents = fread($fp, 16384); // 16K should be enough
$ending = substr($contents, -2);
unset($contents);
if($ending == '?>') {
return false;
}
fclose($fp);
}
return true;
}
@@ -241,11 +234,11 @@ class problem_000002 extends problem_base {
return SEVERITY_SIGNIFICANT;
}
function description() {
return 'Your Moodle configuration file config.php or another library file, contains some characters after the closing PHP tag (?>). This causes Moodle to exhibit several kinds of problems (such as broken downloaded files) and must be fixed.';
return 'Your Moodle configuration file, config.php, contains some characters after the closing PHP tag (?>). This could cause Moodle to exhibit several kinds of problems and should be fixed.';
}
function solution() {
global $CFG;
return 'You need to edit <strong>'.$CFG->dirroot.'/config.php</strong> and remove all characters (including spaces and returns) after the ending ?> tag. These two characters should be the very last in that file. The extra trailing whitespace may be also present in other PHP files that are included from lib/setup.php.';
return 'You need to edit <strong>'.$CFG->dirroot.'/config.php</strong> and remove all characters (including spaces and returns) after the ending ?> tag. These two characters should be the very last in that file.';
}
}
@@ -356,41 +349,24 @@ class problem_000008 extends problem_base {
return 'PHP: memory_limit cannot be controlled by Moodle';
}
function exists() {
$oldmemlimit = @ini_get('memory_limit');
if(empty($oldmemlimit)) {
$memlimit = @ini_get('memory_limit');
if(empty($memlimit)) {
// PHP not compiled with memory limits, this means that it's
// probably limited to 8M or in case of Windows not at all.
// We can ignore it for now - there is not much to test anyway
// TODO: add manual test that fills memory??
return false;
// probably limited to 8M so we have a problem...
return true;
}
$oldmemlimit = get_real_size($oldmemlimit);
//now lets change the memory limit to something unique below 128M==134217728
@ini_set('memory_limit', 134217720);
$testmemlimit = get_real_size(@ini_get('memory_limit'));
//verify the change had any effect at all
if ($oldmemlimit == $testmemlimit) {
//memory limit can not be changed - is it big enough then?
if ($oldmemlimit < get_real_size('128M')) {
return true;
} else {
return false;
}
}
@ini_set('memory_limit', $oldmemlimit);
// Otherwise, raise_memory_limit in setup.php will do the trick
return false;
}
function severity() {
return SEVERITY_NOTICE;
return SEVERITY_ANNOYANCE;
}
function description() {
return 'The settings for PHP on your server do not allow a script to request more memory during its execution. '.
'This means that there is a hard limit of '.@ini_get('memory_limit').' for each script. '.
'It is possible that certain operations within Moodle will require more than this amount in order '.
'to complete successfully, especially if there are lots of data to be processed.';
return 'The settings for PHP on your server do not allow a script to request more memory during its execution. This means that most likely there is a hard limit of 8MB for each script. It is possible that certain operations within Moodle will require more than this amount in order to complete successfully, especially if there are lots of data to be processed. Therefore, it is recommended that you contact your server administrator to address this issue.';
}
function solution() {
return 'It is recommended that you contact your web server administrator to address this issue.';
global $CFG;
return 'We need a good solution here. Enabling memory limit control means recompiling PHP... maybe this should be SEVERITY_NOTICE instead of SEVERITY_ANNOYANCE?';
}
}
@@ -444,7 +420,7 @@ class problem_000010 extends problem_base {
$desc .= '<li>slasharguments are enabled in Moodle configuration</li>';
}
if ($this->status() == -1) {
$desc .= '<li>can not run automatic test, you can verify it <a href="'.$CFG->wwwroot.'/file.php/testslasharguments" target="_blank">here</a> manually</li>';
$desc .= '<li>can not run automatic test, you can verify it <a href="'.$CFG->wwwroot.'/file.php/testslasharguments" target="_blank">here</a></li>';
} else if ($this->status() == 0) {
$desc .= '<li>slashargument test <strong>failed</strong>, please check server configuration</li>';
} else {
@@ -485,13 +461,13 @@ class problem_000010 extends problem_base {
function status() {
global $CFG;
$handle = @fopen($CFG->wwwroot.'/file.php?file=/testslasharguments', "r");
$contents = @trim(fread($handle, 10));
$contents = trim(@fread($handle, 7));
@fclose($handle);
if ($contents != 'test -1') {
return -1;
}
$handle = @fopen($CFG->wwwroot.'/file.php/testslasharguments', "r");
$contents = trim(@fread($handle, 10));
$contents = trim(@fread($handle, 6));
@fclose($handle);
switch ($contents) {
case 'test 1': return 1;
@@ -522,7 +498,7 @@ class problem_000011 extends problem_base {
}
function solution() {
global $CFG;
if (optional_param('resetsesserrorcounter', 0, PARAM_BOOL)) {
if (isset($_GET['resetsesserrorcounter'])) {
if (get_field('config', 'name', 'name', 'session_error_counter')) {
delete_records('config', 'name', 'session_error_counter');
}
@@ -558,8 +534,7 @@ class problem_00000x extends problem_base {
TODO:
session.save_path -- it doesn't really matter because we are already IN a session, right?
detect unsupported characters in $CFG->wwwroot - see bug Bug #6091 - relative vs absolute path during backup/restore process
*/
?>
?>
+115 -155
View File
@@ -1,33 +1,23 @@
<?php // $Id$
/// Check that config.php exists, if not then call the install script
if (!file_exists('../config.php')) {
if (!file_exists("../config.php")) {
header('Location: ../install.php');
die;
}
require_once("../config.php");
include_once("$CFG->dirroot/lib/adminlib.php"); // Contains various admin-only functions
/// Check that PHP is of a sufficient version
/// Moved here because older versions do not allow while(@ob_end_clean());
if (version_compare(phpversion(), "4.3.0") < 0) {
$phpversion = phpversion();
echo "Sorry, Moodle requires PHP 4.3.0 or later (currently using version $phpversion)";
if (!check_php_version("4.1.0")) {
$version = phpversion();
print_heading("Sorry, Moodle requires PHP 4.1.0 or later (currently using version $version)");
die;
}
/// Turn off time limits and try to flush everything all the time, sometimes upgrades can be slow.
@set_time_limit(0);
@ob_implicit_flush(true);
while(@ob_end_clean()); // ob_end_flush prevents sending of headers
require_once('../config.php');
include_once($CFG->dirroot.'/lib/adminlib.php'); // Contains various admin-only functions
$id = optional_param('id', '', PARAM_ALPHANUM);
$confirmupgrade = optional_param('confirmupgrade', 0, PARAM_BOOL);
$agreelicence = optional_param('agreelicence',0, PARAM_BOOL);
/// Check some PHP server settings
@@ -76,6 +66,13 @@
$CFG->version = "";
}
/// Turn off time limits and try to flush everything all the time, sometimes upgrades can be slow.
@set_time_limit(0);
@ob_implicit_flush(true);
@ob_end_flush();
/// Check if the main tables have been installed yet or not.
if (! $tables = $db->Metatables() ) { // No tables yet at all.
@@ -100,12 +97,12 @@
print_header($strlicense, $strlicense, $strlicense, "", "", false, "&nbsp;", "&nbsp;");
print_heading("<a href=\"http://moodle.org\">Moodle</a> - Modular Object-Oriented Dynamic Learning Environment");
print_heading(get_string("copyrightnotice"));
print_simple_box_start('center');
print_simple_box_start("center");
echo text_to_html(get_string("gpl"));
print_simple_box_end();
echo "<br />";
notice_yesno(get_string("doyouagree"), "index.php?agreelicence=true",
"http://docs.moodle.org/en/License");
"http://moodle.org/doc/?frame=licence.html");
exit;
}
@@ -144,7 +141,7 @@
$a->newversion = "$release ($version)";
$strdatabasechecking = get_string("databasechecking", "", $a);
if (empty($confirmupgrade)) {
if (empty($_GET['confirmupgrade'])) {
print_header($strdatabasechecking, $stradministration, $strdatabasechecking,
"", "", false, "&nbsp;", "&nbsp;");
notice_yesno(get_string('upgradesure', 'admin', $a->newversion), 'index.php?confirmupgrade=yes', 'index.php');
@@ -180,7 +177,11 @@
print_header($strcurrentversion, $stradministration, $strcurrentversion,
"", "", false, "&nbsp;", "&nbsp;");
if (!set_config("version", $version)) {
if (set_config("version", $version)) {
print_heading("Moodle $release ($version)");
print_continue("index.php");
die;
} else {
$db->debug=true;
if (main_upgrade(0)) {
print_continue("index.php");
@@ -191,6 +192,7 @@
}
}
/// Updated human-readable release version if necessary
if ($release <> $CFG->release) { // Update the release version
@@ -200,10 +202,16 @@
if (!set_config("release", $release)) {
notify("ERROR: Could not update release version in database!!");
}
notice(get_string('releasenoteslink', 'admin', 'http://docs.moodle.org/en/Release_Notes'), 'index.php');
print_continue("index.php");
print_simple_box_start("CENTER");
include("$CFG->dirroot/lang/en/docs/release.html");
print_simple_box_end();
print_continue("index.php");
exit;
}
/// Insert default values for any important configuration variables
include_once("$CFG->dirroot/lib/defaults.php");
@@ -216,22 +224,17 @@
}
}
/// Send $CFG->unicodedb to DB to have it available for next requests
set_config('unicodedb', $CFG->unicodedb);
/// If any new configurations were found then send to the config page to check
if (!empty($configchange)) {
redirect("config.php?installing=1");
redirect("config.php");
}
/// Find and check all main modules and load them up or upgrade them if necessary
upgrade_activity_modules("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
/// Check all questiontype plugins and upgrade if necessary
// It is important that this is done AFTER the quiz module has been upgraded
upgrade_plugins('qtype', 'question/type', "$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
/// Upgrade backup/restore system if necessary
require_once("$CFG->dirroot/backup/lib.php");
upgrade_backup_db("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
@@ -244,11 +247,8 @@
upgrade_blocks_plugins("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
/// Check all enrolment plugins and upgrade if necessary
upgrade_plugins('enrol', 'enrol', "$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
upgrade_enrol_plugins("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
/// Check for local database customisations
require_once("$CFG->dirroot/lib/locallib.php");
upgrade_local_db("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
/// Set up the overall site name etc.
@@ -258,7 +258,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).$_SERVER['HTTP_HOST']);
set_config('siteidentifier', random_string(32));
}
/// Check if the guest user exists. If not, create one.
@@ -293,8 +293,8 @@
/// Check if we are returning from moodle.org registration and if so, we mark that fact to remove reminders
if (!empty($id)) {
if ($id == $CFG->siteidentifier) {
if (!empty($_GET['id'])) {
if ($_GET['id'] == $CFG->siteidentifier) {
set_config('registered', time());
}
}
@@ -306,43 +306,21 @@
print_simple_box_start('center', '100%', '', 20);
print_heading($stradministration);
/// Deprecated database! Warning!!
if (!empty($CFG->migrated_to_new_db)) {
print_simple_box_start('center','60%');
print_string('dbmigrationdeprecateddb','admin');
print_simple_box_end();
}
if (!empty($CFG->upgrade)) { // Print notice about extra upgrading that needs to be done
print_simple_box(get_string("upgrade$CFG->upgrade", "admin",
"$CFG->wwwroot/$CFG->admin/upgrade$CFG->upgrade.php"), "center", '60%');
"$CFG->wwwroot/$CFG->admin/upgrade$CFG->upgrade.php"), "center");
print_spacer(10,10);
}
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 no recently cron run
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
if (time() - $lastcron > 3600 * 24) {
$strinstallation = get_string('installation', 'install');
$helpbutton = helpbutton('install', $strinstallation, 'moodle', true, false, '', true);
print_simple_box(get_string('cronwarning', 'admin')."&nbsp;".$helpbutton, 'center', '60%');
print_simple_box(get_string('cronwarning', 'admin') , 'center');
}
/// Alert if we are currently in maintenance mode
if (file_exists($CFG->dataroot.'/1/maintenance.html')) {
print_simple_box(get_string('sitemaintenancewarning', 'admin') , 'center', '60%');
}
/// Alert if we are currently in maintenance mode
if (empty($CFG->unicodedb)) {
print_simple_box(get_string('unicodeupgradenotice', 'admin') , 'center', '60%');
print_simple_box(get_string('sitemaintenancewarning', 'admin') , 'center');
}
/// Print slightly annoying registration button every six months ;-)
@@ -351,7 +329,7 @@
if (!isset($CFG->registered) || $CFG->registered < (time() - 3600*24*30*6)) {
$options = array();
$options['sesskey'] = $USER->sesskey;
print_simple_box_start('center','60%');
print_simple_box_start('center');
echo '<div align="center">';
print_string('pleaseregister', 'admin');
print_single_button('register.php', $options, get_string('registration'));
@@ -359,126 +337,108 @@
print_simple_box_end();
}
$table->tablealign = "center";
$table->tablealign = "right";
$table->align = array ("right", "left");
$table->wrap = array ("nowrap", "nowrap");
$table->cellpadding = 5;
$table->cellspacing = 0;
$table->width = '40%';
$table->width = "40%";
$configdata = '<div class="adminlink"><a href="config.php">'.get_string('configvariables', 'admin').
'</a> - <span class="explanation">'.get_string('adminhelpconfigvariables').'</span></div>';
$configdata .= '<div class="adminlink"><a href="site.php">'.get_string('sitesettings').
'</a> - <span class="explanation">'.get_string('adminhelpsitesettings').'</span></div>';
$configdata .= '<div class="adminlink"><a href="../theme/index.php">'.get_string('themes').
'</a> - <span class="explanation">'.get_string('adminhelpthemes').'</span></div>';
$configdata .= '<div class="adminlink"><a href="lang.php">'.get_string('language').
'</a> - <span class="explanation">'.get_string('adminhelplanguage').'</span></div>';
$configdata .= '<div class="adminlink"><a href="modules.php">'.get_string('managemodules').
'</a> - <span class="explanation">'.get_string('adminhelpmanagemodules').'</span></div>';
$configdata .= '<div class="adminlink"><a href="blocks.php">'.get_string('manageblocks').
'</a> - <span class="explanation">'.get_string('adminhelpmanageblocks').'</span></div>';
$configdata .= '<div class="adminlink"><a href="filters.php">'.get_string('managefilters').
'</a> - <span class="explanation">'.get_string('adminhelpmanagefilters').'</span></div>';
$configdata = "<font size=\"+1\">&nbsp;</font><a href=\"config.php\">".get_string("configvariables", 'admin')."</a> - <font size=\"1\">".
get_string("adminhelpconfigvariables")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"site.php\">".get_string("sitesettings")."</a> - <font size=\"1\">".
get_string("adminhelpsitesettings")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"../theme/index.php\">".get_string("themes")."</a> - <font size=\"1\">".
get_string("adminhelpthemes")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"lang.php\">".get_string("language")."</a> - <font size=\"1\">".
get_string("adminhelplanguage")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"modules.php\">".get_string("managemodules")."</a> - <font size=\"1\">".
get_string("adminhelpmanagemodules")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"blocks.php\">".get_string("manageblocks")."</a> - <font size=\"1\">".
get_string("adminhelpmanageblocks")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"filters.php\">".get_string("managefilters")."</a> - <font size=\"1\">".
get_string("adminhelpmanagefilters")."</font><br />";
if (!isset($CFG->disablescheduledbackups)) {
$configdata .= '<div class="adminlink"><a href="backup.php">'.get_string('backup').
'</a> - <span class="explanation">'.get_string('adminhelpbackup').'</span></div>';
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"backup.php\">".get_string("backup")."</a> - <font size=\"1\">".
get_string("adminhelpbackup")."</font><br />";
}
$configdata .= '<div class="adminlink"><a href="editor.php">'.get_string('editorsettings').
'</a> - <span class="explanation">'.get_string('adminhelpeditorsettings').'</span></div>';
$configdata .= '<div class="adminlink"><a href="calendar.php">'.get_string('calendarsettings', 'admin').
'</a> - <span class="explanation">'.get_string('helpcalendarsettings', 'admin').'</span></div>';
$configdata .= '<div class="adminlink"><a href="maintenance.php">'.get_string('sitemaintenancemode', 'admin').
'</a> - <span class="explanation">'.get_string('helpsitemaintenance', 'admin').'</span></div>';
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"editor.php\">". get_string("editorsettings") ."</a> - <font size=\"1\">".
get_string("adminhelpeditorsettings")."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"calendar.php\">". get_string('calendarsettings', 'admin') ."</a> - <font size=\"1\">".
get_string('helpcalendarsettings', 'admin')."</font><br />";
$configdata .= "<font size=\"+1\">&nbsp;</font><a href=\"maintenance.php\">". get_string('sitemaintenancemode', 'admin') ."</a> - <font size=\"1\">".
get_string('helpsitemaintenance', 'admin')."</font><br />";
$table->data[] = array('<strong><a href="configure.php">'.get_string('configuration').'</a></strong>', $configdata);
$table->data[] = array("<font size=\"+1\"><b><a href=\"configure.php\">".get_string("configuration")."</a></b></font>",
$configdata);
$userdata = '<div class="adminlink"><a href="auth.php?sesskey='.$USER->sesskey.'">'.get_string("authentication").
'</a> - <span class="explanation">'.get_string('adminhelpauthentication').'</span></div>';
$userdata .= '<div class="adminlink"><a href="user.php">'.get_string('edituser').
'</a> - <span class="explanation">'.get_string('adminhelpedituser').'</span></div>';
$userdata .= '<div class="adminlink"><a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/user.php?newuser=true&amp;sesskey='.$USER->sesskey.'">'.
get_string('addnewuser').'</a> - <span class="explanation">'.get_string('adminhelpaddnewuser').'</span></div>';
$userdata .= '<div class="adminlink"><a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/uploaduser.php?sesskey='.$USER->sesskey.'">'.
get_string('uploadusers').'</a> - <span class="explanation">'.get_string('adminhelpuploadusers').'</span></div>';
$userdata = "<font size=\"+1\">&nbsp;</font><a href=\"auth.php?sesskey=$USER->sesskey\">".get_string("authentication")."</a> - <font size=\"1\">".
get_string("adminhelpauthentication")."</font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"user.php\">".get_string("edituser")."</a> - <font size=\"1\">".
get_string("adminhelpedituser")."</font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"$CFG->wwwroot/$CFG->admin/user.php?newuser=true&amp;sesskey=$USER->sesskey\">".
get_string("addnewuser")."</a> - <font size=\"1\">".
get_string("adminhelpaddnewuser")."</font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"$CFG->wwwroot/$CFG->admin/uploaduser.php?sesskey=$USER->sesskey\">".
get_string("uploadusers")."</a> - <font size=\"1\">".
get_string("adminhelpuploadusers")."</font><br />";
$table->data[] = array('<strong><a href="users.php">'.get_string('users').'</a></strong>', $userdata);
$userdata .= "<hr /><font size=\"+1\">&nbsp;</font><a href=\"enrol.php?sesskey=$USER->sesskey\">".get_string("enrolments")."</a> - <font size=\"1\">".
get_string("adminhelpenrolments")."</font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"../course/index.php?edit=off&amp;sesskey=$USER->sesskey\">".get_string("assignstudents")."</a> - <font size=\"1\">".
get_string("adminhelpassignstudents")."</font><br />";
$coursedata = '<div class="adminlink"><a href="../course/index.php?edit=on&amp;sesskey='.$USER->sesskey.'">'.get_string('managecourses').
'</a> - <span class="explanation">'.get_string('adminhelpcourses').'</span></div>';
$coursedata .= '<div class="adminlink"><a href="enrol.php?sesskey='.$USER->sesskey.'">'.get_string('enrolmentplugins').
'</a> - <span class="explanation">'.get_string('adminhelpenrolments').'</span></div>';
$coursedata .= '<div class="adminlink"><a href="../course/index.php?edit=off&amp;sesskey='.$USER->sesskey.'">'.
get_string('assignstudents').'</a> - <span class="explanation">'.get_string('adminhelpassignstudents').'</span></div>';
$coursedata .= '<div class="adminlink"><a href="../course/index.php?edit=on&amp;sesskey='.$USER->sesskey.'">'.
get_string('assignteachers').'</a> - <span class="explanation">'.get_string('adminhelpassignteachers').
' <img src="../pix/t/user.gif" height="11" width="11" alt="" /></span></div>';
$coursedata .= '<div class="adminlink"><a href="creators.php?sesskey='.$USER->sesskey.'">'.get_string('assigncreators').
'</a> - <span class="explanation">'.get_string('adminhelpassigncreators').'</span></div>';
$coursedata .= '<div class="adminlink"><a href="admin.php?sesskey='.$USER->sesskey.'">'.get_string('assignadmins').
'</a> - <span class="explanation">'.get_string('adminhelpassignadmins').'</span></div>';
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"../course/index.php?edit=on&amp;sesskey=$USER->sesskey\">".get_string("assignteachers")."</a> - <font size=\"1\">".
get_string("adminhelpassignteachers").
" <img src=\"../pix/t/user.gif\" height=\"11\" width=\"11\" alt=\"\" /></font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"creators.php?sesskey=$USER->sesskey\">".get_string("assigncreators")."</a> - <font size=\"1\">".
get_string("adminhelpassigncreators")."</font><br />";
$userdata .= "<font size=\"+1\">&nbsp;</font><a href=\"admin.php?sesskey=$USER->sesskey\">".get_string("assignadmins")."</a> - <font size=\"1\">".
get_string("adminhelpassignadmins")."</font><br />";
$table->data[] = array('<strong><a href="courses.php">'.get_string('courses').'</a></strong>', $coursedata);
$table->data[] = array("<font size=\"+1\"><b><a href=\"users.php\">".get_string("users")."</a></b></font>", $userdata);
$miscdata = '<div class="adminlink"><a href="../files/index.php?id='.$site->id.'">'.get_string('sitefiles').
'</a> - <span class="explanation">'.get_string('adminhelpsitefiles').'</span></div>';
$miscdata .= '<div class="adminlink"><a href="stickyblocks.php">'.get_string('stickyblocks','admin').
'</a> - <span class="explanation">'.get_string('adminhelpstickyblocks').'</span></div>';
$miscdata .= '<div class="adminlink"><a href="report.php">'.get_string('reports').
'</a> - <span class="explanation">'.get_string('adminhelpreports').'</span></div>';
//to be enabled later
/* $miscdata .= '<div class="adminlink"><a href="health.php">'.get_string('healthcenter').
'</a> - <span class="explanation">'.get_string('adminhelphealthcenter').'</span></div>';*/
$miscdata .= '<div class="adminlink"><a href="environment.php">'.get_string('environment', 'admin').
'</a> - <span class="explanation">'.get_string('adminhelpenvironment').'</span></div>';
/// Optional stuff
$table->data[] = array("<font size=\"+1\"><b><a href=\"../course/index.php?edit=on&amp;sesskey=$USER->sesskey\">".get_string("courses")."</a></b></font>",
"<font size=\"+1\">&nbsp;</font>".get_string("adminhelpcourses"));
$table->data[] = array("<font size=\"+1\"><b><a href=\"../course/log.php?id=$site->id\">".get_string("logs")."</a></b></font>",
"<font size=\"+1\">&nbsp;</font>".get_string("adminhelplogs"));
$table->data[] = array("<font size=\"+1\"><b><a href=\"../files/index.php?id=$site->id\">".get_string("sitefiles")."</a></b></font>",
"<font size=\"+1\">&nbsp;</font>".get_string("adminhelpsitefiles"));
if (file_exists("$CFG->dirroot/$CFG->admin/$CFG->dbtype")) {
$miscdata .= '<div class="adminlink"><a href="'.$CFG->dbtype.'/frame.php">'.get_string('managedatabase').
'</a> - <span class="explanation">'.get_string('adminhelpmanagedatabase').'</span></div>';
$table->data[] = array("<font size=+1><b><a href=\"$CFG->dbtype/frame.php\">".get_string("managedatabase")."</a></b></font>",
"<font size=+1>&nbsp;</font>".get_string("adminhelpmanagedatabase"));
}
$table->data[] = array('<strong><a href="misc.php">'.get_string('miscellaneous').'</a></strong>', $miscdata);
/// Hooks for Matt Oquists contrib code for repositories and portfolio.
/// The eventual official versions may not look like this
if (isset($CFG->portfolio) && file_exists("$CFG->dirroot/$CFG->portfolio")) {
$table->data[] = array("<strong><a href=\"../portfolio/\">".get_string('portfolio','portfolio').'</a></
trong>',
'<div class="explanation">'.get_string('adminhelpportfolio','portfolio').'</div>');
}
if (isset($CFG->repo) && file_exists("$CFG->dirroot/$CFG->repo")) {
$table->data[] = array("<strong><a href=\"../repository/?repoid=1&action=list\">".get_string('repository','
epository').'</a></strong>',
'<div class="explanation">'.get_string('adminhelprepository','repository').'</div>');
}
print_table($table);
//////////////////////////////////////////////////////////////////////////////////////////////////
//// IT IS ILLEGAL AND A VIOLATION OF THE GPL TO REMOVE OR MODIFY THE COPYRIGHT NOTICE BELOW ////
$copyrighttext = '<a href="http://moodle.org/">Moodle</a> '.
'<a href="http://docs.moodle.org/en/Release">'.$CFG->release.'</a> ('.$CFG->version.')<br />'.
'Copyright &copy; 1999 onwards, Martin Dougiamas<br />'.
'<a href="http://docs.moodle.org/en/License">GNU Public License</a>';
echo '<p class="copyright">'.$copyrighttext.'</p>';
$copyrighttext = "<a href=\"http://moodle.org/\">Moodle</a> ".
"<a href=\"../doc/?frame=release.html\">$CFG->release</a> ($CFG->version)<br />".
"Copyright &copy; 1999-2005 Martin Dougiamas<br />".
"<a href=\"../doc/?frame=licence.html\">GNU Public License</a>";
echo "<center><p><font size=\"1\">$copyrighttext</font></p></center>";
//////////////////////////////////////////////////////////////////////////////////////////////////
echo '<div align="center">';
echo '<table width="100%" cellspacing="0"><tr>';
echo '<td align="center" width="33%">';
print_single_button($CFG->wwwroot.'/doc/', NULL, get_string('documentation'));
echo '</td>';
echo '<td align="center" width="33%">';
print_single_button('phpinfo.php', NULL, get_string('phpinfo'));
echo '</td>';
echo '<td align="center" width="33%">';
$options = array();
$options['sesskey'] = $USER->sesskey;
print_single_button('register.php', $options, get_string('registration'));
echo '</div>';
echo '</td></tr></table>';
print_simple_box_end();
print_footer($site);
?>
+3 -5
View File
@@ -1,8 +1,6 @@
<?php
require_once('../config.php');
$confirm = optional_param('confirm', 0, PARAM_BOOL);
include('../config.php');
require_login();
@@ -14,7 +12,7 @@
"Convert all tables from MYISAM to InnoDB");
if ($confirm and confirm_sesskey()) {
if (!empty($confirm) and confirm_sesskey()) {
print_heading("Please be patient and wait for this to complete...");
@@ -26,7 +24,7 @@
}
} else {
notice_yesno("Are you sure you want convert all your tables to the InnoDB format?",
"innodb.php?confirm=1&sesskey=".sesskey(), "index.php");
"innodb.php?confirm=yes&sesskey=".sesskey(), "index.php");
}
?>
+142 -442
View File
@@ -1,59 +1,9 @@
<?PHP // $Id$
/**
* Display the admin/language menu and process strings translation.
*
* CHANGES
*
* 2006/06/08 mudrd8mz
* 1) Fixed bug 5745 reported by Harry Smith so now can edit en_utf8_local pack
* 2) More notification messages included
*
* 2006/05/30 mudrd8mz
* Merged with version by Mitsuhiro Yoshida - display icon links instead of text links
* (I have changed the position of arrow icons to not to be so close each other)
*
* 2006/05/19 mudrd8mz
* A lot of changes to support translation of *_utf8_local langugage packs. Needs testing
*
* 2006/05/16 mudrd8mz
* 1) LANG_DEFAULT_FILE can be now set. moodle.php used to be opened automatically.
* As it was (and still is) one of the biggest files it usually took a long time to load the page
* even if you just want to choose the file to translate.
* 2) added links from "missing" to "compare" mode page
* 3) english strings are now key-sorted in "missing" mode
* 4) list of files with missing strings is now displayed at the top of "missing" page
*
* 2006/05/14 mudrd8mz Improvements of lang.php,v 1.65 2006/04/10 22:15:57 stronk7 Exp
* 1) "go to first missing string" link can be displayed (see LANG_DISPLAY_MISSING_LINKS)
* 2) "go to next missing" link can be displayed (see LANG_DISPLAY_MISSING_LINKS)
* 3) submit button may be repeated (see LANG_SUBMIT_REPEAT*)
* 4) added (empty) "summary" attribute for the <table>'s
* 5) added error_reporting(E_ALL ^ E_NOTICE); in "compare" mode (even in debug environment
* we know that missing keys are missing strings here, not bugs ;-)
*/
require_once('../config.php');
require_once("../config.php");
define('LANG_SUBMIT_REPEAT', 1); // repeat displaying submit button?
define('LANG_SUBMIT_REPEAT_EVERY', 20); // if so, after how many lines?
define('LANG_DISPLAY_MISSING_LINKS', 1); // display "go to first/next missing string" links?
define('LANG_DEFAULT_FILE', ''); // default file to translate. Empty allowed
define('LANG_LINK_MISSING_STRINGS', 1); // create links from "missing" page to "compare" page?
define('LANG_DEFAULT_USELOCAL', 0); // should *_utf8_local be used by default?
$mode = optional_param('mode', '', PARAM_ALPHA);
$currentfile = optional_param('currentfile', LANG_DEFAULT_FILE, PARAM_FILE);
$uselocal = optional_param('uselocal', -1, PARAM_INT);
if ($uselocal == -1) {
if (isset($SESSION->langtranslateintolocal)) {
$uselocal = $SESSION->langtranslateintolocal;
} else {
$uselocal = LANG_DEFAULT_USELOCAL;
}
} else {
$SESSION->langtranslateintolocal = $uselocal;
}
optional_variable($mode, "");
optional_variable($currentfile, "moodle.php");
require_login();
@@ -73,30 +23,9 @@
$streditstrings = get_string("editstrings", 'admin');
$stredithelpdocs = get_string("edithelpdocs", 'admin');
$strthislanguage = get_string("thislanguage");
$strgotofirst = get_string('gotofirstmissing','admin');
$strfilestoredin = get_string('langstorein', 'admin');
$strfilestoredinhelp = get_string('langstoreinhelp', 'admin');
$strswitchlangdirbtn = get_string('langstoreswitch', 'admin');
$strchoosefiletoedit = get_string('langchoosefile', 'admin');
$streditennotallowed = get_string('langnoeditenglish', 'admin');
$strfilecreated = get_string('langfilecreated', 'admin');
// FIXME / TODO
// remove following lines after adding string into proper english lang pack
$strgotofirst = 'go to first missing string';
$strfilestoredin = 'Save file into folder :';
$strfilestoredinhelp = 'Where the file will be stored';
$strswitchlangdirbtn = 'switch';
$strchoosefiletoedit = 'Choose file to edit from the box above';
$streditennotallowed = 'Language en_utf8 cannot be edited with this page - switch to local';
$strfilecreated = 'New file created';
$currentlang = current_language();
switch ($mode) {
case "missing":
// Missing array keys are not bugs here but missing strings
error_reporting(E_ALL ^ E_NOTICE);
$navigation = "<a href=\"lang.php\">$strlanguage</a> -> $strmissingstrings";
$title = $strmissingstrings;
$button = '<form target="'.$CFG->framename.'" method="get" action="'.$CFG->wwwroot.'/'.$CFG->admin.'/lang.php">'.
@@ -117,6 +46,7 @@
break;
}
$currentlang = current_language();
print_header("$site->shortname: $title", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> ".
@@ -124,129 +54,76 @@
'', '', true, $button);
if (!$mode) {
print_simple_box_start('center','80%');
echo '<table summary="" align="center" width="100%"><tr><td width="50%" align="center">';
print_string('managelang','admin');
echo '</td><td align="center" width="50%">';
print_string('editlang','admin');
echo '</td></tr><tr><td>';
print_string('lang16notify','admin');
echo '<p /><a href="langimport.php">'.get_string('langimport','admin').'</a>';
echo '</td><td>';
$currlang = current_language();
$langs = get_list_of_languages();
echo "<table summary=\"\" align=\"center\"><tr><td align=\"right\">";
echo "<table align=\"center\"><tr><td align=\"right\">";
echo "<b>$strcurrentlanguage:</b>";
echo "</td><td>";
echo popup_form ("$CFG->wwwroot/$CFG->admin/lang.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
echo '</td></tr><tr><td colspan="2">';
$options["lang"] = $currentlang;
//print_single_button("http://moodle.org/download/lang/", $options, get_string("latestlanguagepack"));
print_single_button("http://moodle.org/download/lang/", $options, get_string("latestlanguagepack"));
echo "</td></tr></table>";
print_heading("<a href=\"lang.php?mode=missing\">$strmissingstrings</a>");
print_heading("<a href=\"lang.php?mode=compare\">$streditstrings</a>");
print_heading("<a href=\"langdoc.php\">$stredithelpdocs</a>");
echo '</td></tr></table>';
print_simple_box_end();
print_footer();
exit;
}
// Get a list of all the root files in the English directory
$enlangdir = "$CFG->dirroot/lang/en_utf8";
if ($currentlang == 'en_utf8') {
$langdir = $enlangdir;
} else {
$langdir = "$CFG->dataroot/lang/$currentlang";
}
$locallangdir = "$CFG->dataroot/lang/{$currentlang}_local";
$langdir = "$CFG->dirroot/lang/$currentlang";
$enlangdir = "$CFG->dirroot/lang/en";
if (! $stringfiles = get_directory_list($enlangdir, "", false)) {
error("Could not find English language pack!");
}
foreach ($stringfiles as $key => $file) {
if (substr($file, -4) != ".php") { //Avoid non php files to be showed
unset($stringfiles[$key]);
}
if ($file == "langconfig.php") { //Avoid langconfig.php to be showed
if (substr($file, -4) != ".php") {
unset($stringfiles[$key]);
}
}
if ($mode == "missing") {
if (!file_exists($langdir)) {
error ('to edit this language pack, you need to put it in '.$CFG->dataroot.'/lang');
}
// Following variables store the HTML output to be echo-ed
$m = '';
$o = '';
// For each file, check that a counterpart exists, then check all the strings
foreach ($stringfiles as $file) {
if (!file_exists("$langdir/$file")) {
if (!touch("$langdir/$file")) {
echo "<p><font color=\"red\">".get_string("filemissing", "", "$langdir/$file")."</font></p>";
continue;
}
}
unset($string);
include("$enlangdir/$file");
$enstring = $string;
ksort($enstring);
unset($string);
if (file_exists("$langdir/$file")) {
include("$langdir/$file");
$fileismissing = 0;
} else {
$fileismissing = 1;
// notify(get_string("filemissing", "", "$langdir/$file"));
$o .= '<div class="notifyproblem" align="center">'.get_string("filemissing", "", "$langdir/$file").'</div><br />';
$string = array();
}
$missingcounter = 0;
include("$langdir/$file");
$first = true;
foreach ($enstring as $key => $value) {
if (empty($string[$key]) and $string[$key] != "0") { //bug fix 4735 mits
if (!isset($string[$key]) or $string[$key] == "") {
$value = htmlspecialchars($value);
$value = str_replace("$"."a", "\\$"."a", $value);
$value = str_replace("%%","%",$value);
if ($first) {
$m .= "<a href=\"lang.php?mode=missing#$file\">$file";
$m .= $fileismissing ? '*' : '';
$m .= '</a> &nbsp; ';
$o .= "<p><a name=\"$file\"></a><b>".get_string("stringsnotset","","$langdir/$file")."</b></p><pre>";
echo "<p><b>".get_string("stringsnotset","","$langdir/$file")."</b></p><pre>";
$first = false;
$somethingfound = true;
}
$missingcounter++;
if (LANG_LINK_MISSING_STRINGS) {
$missinglinkstart = "<a href=\"lang.php?mode=compare&amp;currentfile=$file#missing$missingcounter\">";
$missinglinkend = '</a>';
} else {
$missinglinkstart = '';
$missinglinkend = '';
}
$o .= "$"."string['".$missinglinkstart.$key.$missinglinkend."'] = \"$value\";<br />";
echo "$"."string['$key'] = \"$value\";<br />";
}
}
if (!$first) {
$o .= '</pre><hr />';
echo '</pre><hr />';
}
}
if ($m <> '') {
echo '<br />';
print_simple_box_start("center", "80%");
echo '<center><font size="2">';
echo $m;
echo '</font></center>';
print_simple_box_end();
}
echo $o;
if (! $files = get_directory_list("$CFG->dirroot/lang/en_utf8/help", "CVS")) {
if (! $files = get_directory_list("$CFG->dirroot/lang/en/help", "CVS")) {
error("Could not find English language help files!");
}
@@ -258,7 +135,7 @@
}
}
if (! $files = get_directory_list("$CFG->dirroot/lang/en_utf8/docs", "CVS")) {
if (! $files = get_directory_list("$CFG->dirroot/lang/en/docs", "CVS")) {
error("Could not find English language docs files!");
}
foreach ($files as $filekey => $file) { // check all the docs files.
@@ -276,61 +153,19 @@
}
} else if ($mode == "compare") {
if (!$uselocal && !file_exists($langdir)) {
if (!lang_make_directory($langdir)) {
error('ERROR: Could not create directory '.$langdir);
} else {
echo '<div class="notifysuccess" align="center">Created directory '.
$langdir .'</div>'."<br />\n";
}
}
if ($uselocal && !file_exists($locallangdir)) {
if (!lang_make_directory($locallangdir)) {
echo '<div class="notifyproblem" align="center">ERROR: Could not create directory '.
$locallangdir .'</div>'."<br />\n";
$uselocal = 0;
} else {
echo '<div class="notifysuccess" align="center">Created directory '.
$locallangdir .'</div>'."<br />\n";
}
}
if (isset($_POST['currentfile'])){ // Save a file
if (!confirm_sesskey()) {
error(get_string('confirmsesskeybad', 'error'));
}
$newstrings = array();
foreach ($_POST as $postkey => $postval) {
$stringkey = lang_file_string_key($postkey);
$newstrings[$stringkey] = $postval;
}
$newstrings = $_POST;
unset($newstrings['currentfile']);
if ($uselocal) {
include("$langdir/$currentfile");
if (isset($string)) {
$packstring = $string;
} else {
$packstring = array();
}
unset($string);
$saveinto = $locallangdir;
if (lang_save_file($langdir, $currentfile, $newstrings)) {
notify(get_string("changessaved")." ($langdir/$currentfile)", "green");
} else {
$packstring = array();
$saveinto = $langdir;
error("Could not save the file '$currentfile'!", "lang.php?mode=compare&amp;currentfile=$currentfile");
}
if (lang_save_file($saveinto, $currentfile, $newstrings, $uselocal, $packstring)) {
notify(get_string("changessaved")." ($saveinto/$currentfile)", "green");
} else {
error("Could not save the file '$saveinto/$currentfile'!", "lang.php?mode=compare&amp;currentfile=$currentfile");
}
unset($packstring);
}
}
print_heading_with_help($streditstrings, "langedit");
@@ -346,213 +181,131 @@
echo '</font></center>';
print_simple_box_end();
print_simple_box_start("center", "80%");
echo '<center>'.$strfilestoredin.' <strong>';
echo $uselocal ? "{$currentlang}_local" : $currentlang;
echo '</strong> ';
helpbutton('langswitchstorage', $strfilestoredinhelp, 'moodle');
echo '<form target="'.$CFG->framename.'" method="get" action="'.$CFG->wwwroot.'/'.$CFG->admin.'/lang.php">'.
'<input type="hidden" name="mode" value="compare" />'.
'<input type="hidden" name="currentfile" value="'.$currentfile.'" />'.
'<input type="hidden" name="uselocal" value="'.(1 - $uselocal % 2).'" />'.
'<input type="submit" value="'.$strswitchlangdirbtn.'" />'.
'</form></center>';
print_simple_box_end();
if ($currentfile <> '') {
$saveto = $uselocal ? $locallangdir : $langdir;
error_reporting(0);
if (!file_exists("$saveto/$currentfile")) {
if (!@touch("$saveto/$currentfile")) {
print_heading(get_string("filemissing", "", "$saveto/$currentfile"), "center", 4, "error");
} else {
print_heading($strfilecreated, "center", 4, "notifysuccess");
}
print_heading("$currentfile", "center", 4);
if (!file_exists("$langdir/$currentfile")) {
if (!touch("$langdir/$currentfile")) {
echo "<p><font color=\"red\">".get_string("filemissing", "", "$langdir/$currentfile")."</font></p>";
continue;
}
if ($currentlang == "en_utf8" && !$uselocal) {
$editable = false;
print_heading($streditennotallowed, 'center', 4);
} elseif ($f = fopen("$saveto/$currentfile","r+")) {
$editable = true;
fclose($f);
} else {
$editable = false;
echo "<p><font size=\"1\">".get_string("makeeditable", "", "$saveto/$currentfile")."</font></p>";
}
error_reporting($CFG->debug);
print_heading("$currentfile", "center", 4);
if (LANG_DISPLAY_MISSING_LINKS && $editable) {
print_heading('<a href="#missing1">'.$strgotofirst.'</a>', "center", 4);
}
unset($string);
include("$enlangdir/$currentfile");
$enstring = $string;
if ($currentlang != 'en' and $currentfile == 'moodle.php') {
$enstring['thislanguage'] = "<< TRANSLATORS: Specify the name of your language here. If possible use Unicode Numeric Character References >>";
$enstring['thischarset'] = "<< TRANSLATORS: Specify the character set of your language here. Note that all text created while this language is active will be stored using this character set, so don't change it once you have set it. Example: iso-8859-1 >>";
$enstring['thisdirection'] = "<< TRANSLATORS: This string specifies the direction of your text, either left-to-right or right-to-left. Insert either 'ltr' or 'rtl' here. >>";
$enstring['parentlanguage'] = "<< TRANSLATORS: If your language has a Parent Language that Moodle should use when strings are missing from your language pack, then specify the code for it here. If you leave this blank then English will be used. Example: nl >>";
}
ksort($enstring);
unset($string);
@include("$locallangdir/$currentfile");
$localstring = isset($string) ? $string : array();
unset($string);
@include("$langdir/$currentfile");
if ($editable) {
echo "<form name=\"$currentfile\" action=\"lang.php\" method=\"post\">";
}
echo "<table summary=\"\" width=\"100%\" cellpadding=\"2\" cellspacing=\"3\" border=\"0\" class=\"generalbox\">";
$linescounter = 0;
$missingcounter = 0;
foreach ($enstring as $key => $envalue) {
$linescounter++ ;
if (LANG_SUBMIT_REPEAT && $editable && $linescounter % LANG_SUBMIT_REPEAT_EVERY == 0) {
echo '<tr><td colspan="2">&nbsp;<td><br />';
echo ' <input type="submit" name="update" value="'.get_string('savechanges').': '.$currentfile.'" />';
echo '<br />&nbsp;</td></tr>';
}
$envalue = nl2br(htmlspecialchars($envalue));
$envalue = preg_replace('/(\$a\-\&gt;[a-zA-Z0-9]*|\$a)/', '<b>$0</b>', $envalue); // Make variables bold.
$envalue = str_replace("%%","%",$envalue);
$envalue = str_replace("\\","",$envalue); // Delete all slashes
echo "\n\n".'<tr>';
echo '<td dir="ltr" lang="en" width="20%" nowrap="nowrap" valign="top">'.$key.'</td>'."\n";
echo '<td dir="ltr" lang="en" width="40%" valign="top">'.$envalue.'</td>'."\n";
// Missing array keys are not bugs here but missing strings
error_reporting(E_ALL ^ E_NOTICE);
if ($uselocal) {
$value = lang_fix_value_from_file($localstring[$key]);
$value2 = lang_fix_value_from_file($string[$key]);
if ($value == '') {
$value = $value2;
}
} else {
$value = lang_fix_value_from_file($string[$key]);
$value2 = lang_fix_value_from_file($localstring[$key]);
}
error_reporting($CFG->debug);
// Color highlighting:
// red #ef6868 - translation missing in both system and local pack
// yellow #feff7f - translation missing in system pack but is translated in local
// green #AAFFAA - translation present in both system and local but is different
if (!$value) {
if (!$value2) {
$cellcolour = 'style="background-color: #ef6868"'; // TODO: replace by CSS class
} else {
$cellcolour = 'style="background-color: #feff7f"'; // TODO: replace by CSS class
}
$missingcounter++;
if (LANG_DISPLAY_MISSING_LINKS) {
$missingtarget = '<a name="missing'.$missingcounter.'"></a>';
$missingnext = '<a href="#missing'.($missingcounter+1).'">'.
'<img src="' . $CFG->pixpath . '/t/down.gif" height="11" width="11" border="0" alt="" /></a>';
$missingprev = '<a href="#missing'.($missingcounter-1).'">'.
'<img src="' . $CFG->pixpath . '/t/up.gif" height="11" width="11" border="0" alt="" /></a>';
} else {
$missingtarget = '';
$missingnext = '';
$missingprev = '';
}
} else {
if ($value <> $value2 && $value2 <> '') {
$cellcolour = 'style="background-color: #AAFFAA"'; // TODO: replace by CSS class
} else {
$cellcolour = '';
}
$missingtarget = '';
$missingnext = '';
$missingprev = '';
}
if ($editable) {
echo '<td width="40%" '.$cellcolour.' valign="top">'. $missingprev . $missingtarget."\n";
if (isset($string[$key])) {
$valuelen = strlen($value);
} else {
$valuelen = strlen($envalue);
}
$cols=50;
if (strstr($value, "\r") or strstr($value, "\n") or $valuelen > $cols) {
$rows = ceil($valuelen / $cols);
echo '<textarea name="stringXXX'.lang_form_string_key($key).'" cols="'.$cols.'" rows="'.$rows.'">'.$value.'</textarea>'."\n";
} else {
if ($valuelen) {
$cols = $valuelen + 5;
}
echo '<input type="text" name="stringXXX'.lang_form_string_key($key).'" value="'.$value.'" size="'.$cols.'" />';
}
if ($value2 <> '' && $value <> $value2) {
echo '<br /><span style="font-size:small">'.$value2.'</span>';
}
echo $missingnext . '</td>';
} else {
echo '<td width="40%" bgcolor="'.$cellcolour.'" valign="top">'.$value.'</td>';
}
}
if ($editable) {
echo '<tr><td colspan="2">&nbsp;<td><br />';
echo '<input type="hidden" name="sesskey" value="'.$USER->sesskey.'" />';
echo ' <input type="hidden" name="currentfile" value="'.$currentfile.'" />';
echo ' <input type="hidden" name="mode" value="compare" />';
echo ' <input type="submit" name="update" value="'.get_string('savechanges').': '.$currentfile.'" />';
echo '</td></tr>';
}
echo '</table>';
echo '</form>';
} else {
// no $currentfile specified
print_heading($strchoosefiletoedit, "center", 4);
}
error_reporting(0);
if ($f = fopen("$langdir/$currentfile","r+")) {
$editable = true;
fclose($f);
} else {
$editable = false;
echo "<p><font size=\"1\">".get_string("makeeditable", "", "$langdir/$currentfile")."</font></p>";
}
error_reporting(7);
unset($string);
include("$enlangdir/$currentfile");
$enstring = $string;
if ($currentlang != 'en' and $currentfile == 'moodle.php') {
$enstring['thislanguage'] = "<< TRANSLATORS: Specify the name of your language here. If possible use Unicode Numeric Character References >>";
$enstring['thischarset'] = "<< TRANSLATORS: Specify the character set of your language here. Note that all text created while this language is active will be stored using this character set, so don't change it once you have set it. Example: iso-8859-1 >>";
$enstring['thisdirection'] = "<< TRANSLATORS: This string specifies the direction of your text, either left-to-right or right-to-left. Insert either 'ltr' or 'rtl' here. >>";
$enstring['parentlanguage'] = "<< TRANSLATORS: If your language has a Parent Language that Moodle should use when strings are missing from your language pack, then specify the code for it here. If you leave this blank then English will be used. Example: nl >>";
}
ksort($enstring);
unset($string);
include("$langdir/$currentfile");
if ($editable) {
echo "<form name=\"$currentfile\" action=\"lang.php\" method=\"post\">";
}
echo "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"3\" border=\"0\" class=\"generalbox\">";
foreach ($enstring as $key => $envalue) {
$envalue = nl2br(htmlspecialchars($envalue));
$envalue = preg_replace('/(\$a\-\&gt;[a-zA-Z0-9]*|\$a)/', '<b>$0</b>', $envalue); // Make variables bold.
$envalue = str_replace("%%","%",$envalue);
$envalue = str_replace("\\","",$envalue); // Delete all slashes
echo "\n\n".'<tr>';
echo '<td dir="ltr" lang="en" width="20%" nowrap="nowrap" valign="top">'.$key.'</td>'."\n";
echo '<td dir="ltr" lang="en" width="40%" valign="top">'.$envalue.'</td>'."\n";
$value = $string[$key];
$value = str_replace("\r","",$value); // Bad character caused by Windows
$value = preg_replace("/\n{3,}/", "\n\n", $value); // Collapse runs of blank lines
$value = trim($value, "\n"); // Delete leading/trailing lines
$value = str_replace("\\","",$value); // Delete all slashes
$value = str_replace("%%","%",$value);
$value = str_replace("<","&lt;",$value);
$value = str_replace(">","&gt;",$value);
$value = str_replace('"',"&quot;",$value);
$cellcolour = $value ? '': 'class="highlight"';
if ($editable) {
echo '<td width="40%" '.$cellcolour.' valign="top">'."\n";
if (isset($string[$key])) {
$valuelen = strlen($value);
} else {
$valuelen = strlen($envalue);
}
$cols=50;
if (strstr($value, "\r") or strstr($value, "\n") or $valuelen > $cols) {
$rows = ceil($valuelen / $cols);
echo '<textarea name="stringXXX'.$key.'" cols="'.$cols.'" rows="'.$rows.'">'.$value.'</textarea>'."\n";
} else {
if ($valuelen) {
$cols = $valuelen + 2;
}
echo '<input type="text" name="stringXXX'.$key.'" value="'.$value.'" size="'.$cols.'" />';
}
echo '</td>';
} else {
echo '<td width="40%" bgcolor="'.$cellcolour.'" valign="top">'.$value.'</td>';
}
}
if ($editable) {
echo '<tr><td colspan="2">&nbsp;<td><br />';
echo '<input type="hidden" name="sesskey" value="'.$USER->sesskey.'" />';
echo ' <input type="hidden" name="currentfile" value="'.$currentfile.'" />';
echo ' <input type="hidden" name="mode" value="compare" />';
echo ' <input type="submit" name="update" value="'.get_string('savechanges').': '.$currentfile.'" />';
echo '</td></tr>';
}
echo '</table>';
echo '</form>';
}
print_footer();
//////////////////////////////////////////////////////////////////////
/**
* Save language translation file.
*
* Thanks to Petri Asikainen for the original version of code
* used to save language files.
*
* @uses $CFG
* @uses $USER
* @param string $path Full pathname to the directory to use
* @param string $file File to overwrite
* @param array $strings Array of strings to write
* @param bool $local Should *_local version be saved?
* @param array $packstrings Array of default langpack strings (needed if $local)
* @return bool Created successfully?
*/
function lang_save_file($path, $file, $strings, $local, $packstrings) {
function lang_save_file($path, $file, $strings) {
// Thanks to Petri Asikainen for the original version of code
// used to save language files.
//
// $path is a full pathname to the file
// $file is the file to overwrite.
// $strings is an array of strings to write
global $CFG, $USER;
if (!$f = @fopen("$path/$file","w")) {
error_reporting(0);
if (!$f = fopen("$path/$file","w")) {
return false;
}
error_reporting(7);
fwrite($f, "<?PHP // \$Id\$ \n");
fwrite($f, " // $file - created with Moodle $CFG->release ($CFG->version)\n");
if ($local) {
fwrite($f, " // local modifications from $CFG->wwwroot\n");
}
fwrite($f, "\n\n");
fwrite($f, " // $file - created with Moodle $CFG->release ($CFG->version)\n\n\n");
ksort($strings);
foreach ($strings as $key => $value) {
@list($id, $stringname) = explode('XXX',$key);
list($id, $stringname) = explode('XXX',$key);
if ($CFG->lang != "zh_hk" and $CFG->lang != "zh_tw") { // Some MB languages include backslash bytes
$value = str_replace("\\","",$value); // Delete all slashes
}
@@ -560,67 +313,14 @@ function lang_save_file($path, $file, $strings, $local, $packstrings) {
$value = str_replace('"', "\\\"", $value); // Add slashes for "
$value = str_replace("%","%%",$value); // Escape % characters
$value = str_replace("\r", "",$value); // Remove linefeed characters
$value = trim($value); // Delete leading/trailing white space
if ($id == "string" and $value != ""){
if ((!$local) || (lang_fix_value_from_file($packstrings[$stringname]) <> lang_fix_value_from_file($value))) {
fwrite($f,"\$string['$stringname'] = '$value';\n");
}
fwrite($f,"\$string['$stringname'] = '$value';\n");
}
}
fwrite($f,"\n?>\n");
fclose($f);
return true;
}
/**
* Fix value of string to translate.
*
* @param string $value Original string from the file
* @return string Fixed value
*/
function lang_fix_value_from_file($value='') {
$value = str_replace("\r","",$value); // Bad character caused by Windows
$value = preg_replace("/\n{3,}/", "\n\n", $value); // Collapse runs of blank lines
$value = trim($value); // Delete leading/trailing white space
$value = str_replace("\\","",$value); // Delete all slashes
$value = str_replace("%%","%",$value);
$value = str_replace("<","&lt;",$value);
$value = str_replace(">","&gt;",$value);
$value = str_replace('"',"&quot;",$value);
return $value;
}
/**
* Try and create a new language directory.
*
* @uses $CFG
* @param string $directory directory name under $CFG->dataroot/lang eg cs_utf8_local
* @return string|false Returns full path to directory if successful, false if not
*/
function lang_make_directory($dir, $shownotices=true) {
global $CFG;
umask(0000);
if (! file_exists($dir)) {
if (! @mkdir($dir, $CFG->directorypermissions)) {
return false;
}
//@chmod($dir, $CFG->directorypermissions); // Just in case mkdir didn't do it
}
return $dir;
}
/// Following functions are required because '.' in form input names
/// get replaced by '_' by PHP.
function lang_form_string_key($keyfromfile) {
return str_replace('.', '##46#', $keyfromfile); /// Derived from &#46, the ascii value for a period.
}
function lang_file_string_key($keyfromform) {
return str_replace('##46#', '.', $keyfromform);
}
?>
+14 -35
View File
@@ -9,7 +9,6 @@ Based on: lang.php in 1.4.3+ release
Thanks: Jaime Villate for important bug fixing, koen roggemans for his job and all moodlers
for intensive testing of this my first contribution
*/
require_once('../config.php');
//
// Some local configuration
@@ -22,6 +21,8 @@ Thanks: Jaime Villate for important bug fixing, koen roggemans for his job a
// or to filenames with filesize() == 0
$filetemplate = ''; // template for new files, i.e. '$Id$';
require_once("../config.php");
$currentfile = optional_param('currentfile', 'docs/README.txt', PARAM_PATH);
require_login();
@@ -48,13 +49,9 @@ Thanks: Jaime Villate for important bug fixing, koen roggemans for his job a
'choosefile.popup', '', true);
$currentlang = current_language();
$langdir = "$CFG->dataroot/lang/$currentlang";
$enlangdir = "$CFG->dirroot/lang/en_utf8";
$langdir = "$CFG->dirroot/lang/$currentlang";
$enlangdir = "$CFG->dirroot/lang/en";
if (!file_exists($langdir)) {
error ('to edit this language pack, you need to put it in '.$CFG->dataroot.'/lang');
}
// Shall I save POSTed data?
if (isset($_POST['currentfile'])) {
@@ -73,7 +70,7 @@ Thanks: Jaime Villate for important bug fixing, koen roggemans for his job a
// Get all files from /docs directory
if (! $files = get_directory_list("$CFG->dirroot/lang/en_utf8/docs", "CVS")) {
if (! $files = get_directory_list("$CFG->dirroot/lang/en/docs", "CVS")) {
error("Could not find English language docs files!");
}
@@ -85,7 +82,7 @@ Thanks: Jaime Villate for important bug fixing, koen roggemans for his job a
if (( !file_exists("$langdir/docs/$file")) || (filesize("$langdir/docs/$file") == 0)) {
$options["docs/$file"] .= "$filemissingmark";
} else {
if (filemtime("$langdir/docs/$file") < filemtime("$CFG->dirroot/lang/en_utf8/docs/$file")) {
if (filemtime("$langdir/docs/$file") < filemtime("$CFG->dirroot/lang/en/docs/$file")) {
$options["docs/$file"] .= "$fileoldmark";
}
}
@@ -93,13 +90,13 @@ Thanks: Jaime Villate for important bug fixing, koen roggemans for his job a
// Get all files from /help directory
if (! $files = get_directory_list("$CFG->dirroot/lang/en_utf8/help", "CVS")) {
if (! $files = get_directory_list("$CFG->dirroot/lang/en/help", "CVS")) {
error("Could not find English language help files!");
}
foreach ($files as $filekey => $file) { // check all the help files.
$options["help/$file"] = "help/$file";
if (( !file_exists("$langdir/help/$file")) || (filesize("$CFG->dirroot/lang/en_utf8/help/$file") == 0)) {
if (( !file_exists("$langdir/help/$file")) || (filesize("$CFG->dirroot/lang/en/help/$file") == 0)) {
$options["help/$file"] .= "$filemissingmark";
} else {
if (filemtime("$langdir/help/$file") < filemtime("$langdir/help/$file")) {
@@ -161,17 +158,11 @@ $langdir/$currentfile")."</font></p>";
."</font></p>";
}
//en_utf8 in dataroot is not editable
if ($currentlang == 'en_utf8') {
$editable = false;
}
echo "<table align=\"center\"><tr valign=\"center\"><td align=\"center\">\n";
echo "<textarea rows=\"$fileeditorrows\" cols=\"$fileeditorcols\" name=\"\">\n";
echo htmlspecialchars(file_get_contents("$enlangdir/$currentfile"));
echo "</textarea>\n";
//link_to_popup_window("/lang/en_utf8/$currentfile", "popup", get_string("preview"));
link_to_popup_window(help_preview_url($currentfile).'&amp;forcelang=en_utf8', 'popup', get_string('preview'));
link_to_popup_window("/lang/en/$currentfile", "popup", get_string("preview"));
echo "</td>\n";
if ($fileeditorinline == 1) {
echo "</tr>\n<tr valign=\"center\">\n";
@@ -185,13 +176,15 @@ $langdir/$currentfile")."</font></p>";
}
echo "<textarea rows=\"$fileeditorrows\" cols=\"$fileeditorcols\" name=\"filedata\">\n";
if (file_exists("$langdir/$currentfile")) {
echo htmlspecialchars(file_get_contents("$langdir/$currentfile"));
echo htmlspecialchars(file_get_contents("$langdir/$currentfile"));
} else {
echo ($filetemplate);
}
echo "</textarea>\n";
link_to_popup_window(help_preview_url($currentfile), 'popup', get_string('preview'));
link_to_popup_window("/lang/$currentlang/$currentfile", "popup", get_string("preview"));
echo "</td>\n</tr>\n</table>";
if ($editable) {
@@ -240,18 +233,4 @@ function langdoc_save_file($path, $file, $content) {
return true;
}
function help_preview_url($currentfile) {
if (substr($currentfile, 0, 5) == 'help/') {
$currentfile = substr($currentfile, 5);
}
$currentpathexp = explode('/', $currentfile);
if (count($currentpathexp) > 1) {
$url = '/help.php?module='.$currentpathexp[0].'&amp;file='.$currentpathexp[1];
} else {
$url = '/help.php?module=moodle&amp;file='.$currentfile;
}
return $url;
}
?>
?>
-424
View File
@@ -1,424 +0,0 @@
<?php //$Id$
///This file only manages the installation of 1.6 lang packs.
///in downloads.moodle.org, they are store in separate directory /lang16
///in local server, they are stored in $CFG->dataroot/lang
///This helps to avoid confusion.
require_once('../config.php');
$mode = optional_param('mode', 0, PARAM_INT); //phase
$pack = optional_param('pack', '', PARAM_FILE); //pack to install
$displaylang = $pack;
$uninstalllang = optional_param('uninstalllang', '', PARAM_FILE);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$sitelang = optional_param('sitelangconfig', '', PARAM_FILE);
define('INSTALLATION_OF_SELECTED_LANG', 2);
define('CHANGE_SITE_LANG', 3);
define('DELETION_OF_SELECTED_LANG', 4);
define('UPDATE_ALL_LANG', 5);
require_login();
if (!isadmin()) {
error('You must be an admin');
}
if (!$site = get_site()) {
error("Site not defined!");
}
$strlang = get_string('langimport','admin');
$stradministration = get_string("administration");
$strconfiguration = get_string("configuration");
$strlanguage = get_string("language");
$strthislanguage = get_string("thislanguage");
$title = $strlang;
print_header("$site->shortname: $title", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> ".
"<a href=\"lang.php\">$strlanguage</a> -> $strlang",
'', '', true, '');
print_heading('');
switch ($mode){
case INSTALLATION_OF_SELECTED_LANG: ///installation of selected language pack
if (confirm_sesskey()) {
@mkdir ($CFG->dataroot.'/temp/'); //make it in case it's a fresh install, it might not be there
@mkdir ($CFG->dataroot.'/lang/');
require_once($CFG->libdir.'/componentlib.class.php');
if ($cd = new component_installer('http://download.moodle.org', 'lang16',
$pack.'.zip', 'languages.md5', 'lang')) {
$status = $cd->install(); //returns ERROR | UPTODATE | INSTALLED
switch ($status) {
case ERROR:
if ($cd->get_error() == 'remotedownloadnotallowed') {
$a = new stdClass();
$a->url = 'http://download.moodle.org/lang16/'.$pack.'zip';
$a->dest= $CFG->dataroot.'/lang';
error(get_string($cd->get_error(), 'error', $a));
} else {
error(get_string($cd->get_error(), 'error'));
}
break;
case INSTALLED:
@unlink($CFG->dataroot.'/cache/languages');
redirect('langimport.php', get_string('langpackupdated','admin',$pack));
break;
case UPTODATE:
break;
}
} else {
notify('Had an unspecified error with the component installer, sorry.');
}
}
break;
case CHANGE_SITE_LANG: //change site language
if (confirm_sesskey()) {
$langconfig = get_record('config','name','lang');
$langconfig->value = $sitelang;
if (!empty($sitelang) && update_record('config',$langconfig)){
redirect('langimport.php', get_string('sitelangchanged','admin'));
} else {
error('Could not update the default site language!');
}
}
break;
case DELETION_OF_SELECTED_LANG: //delete a directory(ies) containing a lang pack completely
if (!$confirm && confirm_sesskey()) {
notice_yesno(get_string('uninstallconfirm', 'admin', $uninstalllang),
'langimport.php?mode=4&amp;uninstalllang='.$uninstalllang.'&amp;confirm=1&amp;sesskey='.sesskey(),
'langimport.php');
} else if (confirm_sesskey()) {
if ($uninstalllang == 'en_utf8') {
error ('en_utf8 can not be uninstalled!');
}
$dest1 = $CFG->dataroot.'/lang/'.$uninstalllang;
$dest2 = $CFG->dirroot.'/lang/'.$uninstalllang;
$rm1 = false;
$rm2 = false;
if (file_exists($dest1)){
$rm1 = remove_dir($dest1);
}
if (file_exists($dest2)){
$rm2 = remove_dir($dest2);
}
//delete the direcotries
if ($rm1 or $rm2) {
redirect('langimport.php', get_string('langpackremoved','admin'));
} else { //nothing deleted, possibly due to permission error
error('An error has occurred, language pack is not completely uninstalled, please check file permissions');
}
}
@unlink($CFG->dataroot.'/cache/languages');
break;
case UPDATE_ALL_LANG: //1 click update for all updatable language packs
//0th pull a list from download.moodle.org,
//key = langname, value = md5
$source = 'http://download.moodle.org/lang16/languages.md5';
$md5array = array();
$updated = 0; //any packs updated?
unset($CFG->langlist); // ignore admin's langlist
$alllangs = array_keys(get_list_of_languages());
$lang16 = array(); //all the Moodle 1.6 unicode lang packs (updated and not updated)
$packs = array(); //all the packs that needs updating
if (!$availablelangs = proxy_url($source)) {
error ('can not read from course');
}
//and build an associative array
foreach ($availablelangs as $alang) {
$md5array[$alang[0]] = $alang[1];
}
//filtering out non-16 packs
foreach ($alllangs as $clang) {
$dest1 = $CFG->dataroot.'/lang/'.$clang;
$dest2 = $CFG->dirroot.'/lang/'.$clang;
if (file_exists($dest1.'/langconfig.php') || file_exists($dest2.'/langconfig.php')){
$lang16[] = $clang;
}
}
//then filter out packs that have the same md5 key
foreach ($lang16 as $clang) {
if (!is_installed_lang($clang, $md5array[$clang])){
$packs[] = $clang;
}
}
@mkdir ($CFG->dataroot.'/temp/');
@mkdir ($CFG->dataroot.'/lang/');
foreach ($packs as $pack){ //for each of the remaining in the list, we
if ($pack == 'en_utf8') { // no update for en_utf8
continue;
}
//1. delete old director(ies)
$dest1 = $CFG->dataroot.'/lang/'.$pack;
$dest2 = $CFG->dirroot.'/lang/'.$pack;
$rm1 = false;
$rm2 = false;
if (file_exists($dest1)) {
$rm1 = remove_dir($dest1);
}
if (file_exists($dest2)) {
$rm2 = remove_dir($dest2);
}
if (!($rm1 || $rm2)) {
error ('could not delete old directory, update failed');
}
//2. copy & unzip into new
require_once($CFG->libdir.'/componentlib.class.php');
if ($cd = new component_installer('http://download.moodle.org', 'lang16',
$pack.'.zip', 'languages.md5', 'lang')) {
$status = $cd->install(); //returns ERROR | UPTODATE | INSTALLED
switch ($status) {
case ERROR:
if ($cd->get_error() == 'remotedownloadnotallowed') {
$a = new stdClass();
$a->url = 'http://download.moodle.org/lang16/'.$pack.'zip';
$a->dest= $CFG->dataroot.'/lang';
error(get_string($cd->get_error(), 'error', $a));
} else {
error(get_string($cd->get_error(), 'error'));
}
break;
case UPTODATE:
//Print error string or whatever you want to do
break;
case INSTALLED:
notify(get_string('langpackupdated','admin',$pack), 'notifysuccess');
$updated = true;
//Print/do whatever you want
break;
default:
}
} else {
}
}
if ($updated) {
notice(get_string('langupdatecomplete','admin'), 'langimport.php');
} else {
notice(get_string('nolangupdateneeded','admin'), 'langimport.php');
}
break;
default: //display choice mode
$source = 'http://download.moodle.org/lang16/languages.md5';
$remote = 0; //flag for reading from remote or local
if ($availablelangs = proxy_url($source)) {
$remote = 1;
} else {
$availablelangs = get_local_list_of_languages();
}
/*
if ($fp = fopen($source, 'r')){ /// attempt to get the list from Moodle.org.
while(!feof ($fp)) {
$availablelangs[] = split(',', fgets($fp,1024));
}
$remote = 1; //can read from download.moodle.org
} else { /// fopen failed, we find local copy of list.
$availablelangs = get_local_list_of_languages();
}
*/
if (!$remote) {
print_simple_box_start('center','60%');
echo '<div align="center">';
print_string('remotelangnotavailable','admin',$CFG->dataroot.'/lang/');
echo '</div>';
print_simple_box_end();
}
print_simple_box_start('center','60%');
echo '<table width="100%"><tr><td align="center">';
echo get_string('installedlangs','admin');
echo '</td><td align="center">';
echo get_string('availablelangs','admin');
echo '</td></tr>';
echo '<tr><td align="center" valign="top">';
echo '<form name="uninstallform" action="langimport.php?mode=4" method="POST">';
echo '<input name="sesskey" type="hidden" value="'.sesskey().'" />';
unset($CFG->langlist); // ignore admin's langlist
$installedlangs = get_list_of_languages();
/// display installed langs here
echo '<select name="uninstalllang" size="15">';
foreach ($installedlangs as $clang =>$ilang){
echo '<option value="'.$clang.'">'.$ilang.'</option>';
}
echo '</select>';
echo '<br /><input type="submit" value="'.get_string('uninstall','admin').'" />';
echo '</form>';
echo '<form name="updateform" action="langimport.php?mode=5" method="POST">';
echo '<br /><input type="submit" value="'.get_string('updatelangs','admin').'" />';
echo '</form>';
echo '<p />';
/// Display option to change site language
print_string('changesitelang','admin');
$sitelanguage = get_record('config','name','lang');
echo '<form name="changelangform" action="langimport.php?mode=3" method="POST">';
echo '<select name="sitelangconfig">';
foreach ($installedlangs as $clang =>$ilang) {
if ($clang == $sitelanguage->value){
echo '<option value="'.$clang.'" selected="selected">'.$ilang.'</option>';
} else {
echo '<option value="'.$clang.'">'.$ilang.'</option>';
}
}
echo '</select>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="submit" value="'.get_string('change','admin').'" />';
echo '</form>';
/// display to be installed langs here
echo '</td><td align="center" valign="top">';
echo '<table><tr><td valign="top" align="center">'; //availabe langs table
$empty = 1; //something to pring
/// if this language pack is not already installed, then we allow installation
echo '<form name="installform" method="POST" action="langimport.php?mode=2">';
echo '<input name="sesskey" type="hidden" value="'.sesskey().'" />';
if ($remote) {
echo '<select name="pack" size="15">';
}
foreach ($availablelangs as $alang) {
if (trim($alang[0]) != "en_utf8") {
if ($remote){
if (substr($alang[0], -5) == '_utf8') { //Remove the _utf8 suffix from the lang to show
$shortlang = substr($alang[0], 0, -5);
} else {
$shortlang = $alang[0];
}
if (!is_installed_lang($alang[0], $alang[1])){ //if not already installed
echo '<option value="'.$alang[0].'">'.$alang[2].' ('.$shortlang.')</option>';
}
} else { //print list in local format, and instruction to install
echo '<tr><td>'.$alang[2].'</td><td><a href="http://download.moodle.org/lang16/'.$alang[0].'.zip">'.get_string('download','admin').'</a>';
}
$empty = 0;
}
}
if ($remote) {
echo '</select>';
echo '<br/ ><input type="submit" value="<-- '.get_string('install','admin').'">';
}
echo '</form>';
if ($empty) {
echo '<tr><td align="center">';
print_string('nolanguagetodownload','admin');
echo '</td></tr>';
}
echo '</td><tr></table>'; //close available langs table
echo '<form>';
echo '</td></tr></table>';
print_simple_box_end();
break;
} //close of main switch
print_footer();
/* returns a list of available language packs from a
* local copy shipped with standard moodle distro
* this is for site that can't perform fopen
* @return array
*/
function get_local_list_of_languages() {
global $CFG;
$source = $CFG->wwwroot.'/lib/languages.md5';
$availablelangs = array();
if ($fp = fopen($source, 'r')){
while(!feof ($fp)) {
$availablelangs[] = split(',', fgets($fp,1024));
}
}
return $availablelangs;
}
/* checks the md5 of the zip file, grabbed from download.moodle.org,
* against the md5 of the local language file from last update
* @param string $lang
* @param string $md5check
* @return bool
*/
function is_installed_lang($lang, $md5check) {
global $CFG;
$md5file = $CFG->dataroot.'/lang/'.$lang.'/'.$lang.'.md5';
if (file_exists($md5file)){
return (file_get_contents($md5file) == $md5check);
}
return false;
}
//returns an array of languages, or false if can not read from source
//uses a socket if proxy is set as a config variable
function proxy_url($url) {
global $CFG;
if ($CFG->proxyhost && $CFG->proxyport) {
$proxy_fp = fsockopen($CFG->proxyhost, $CFG->proxyport);
if (!$proxy_fp) {
return false; //failed
}
fputs($proxy_fp, "GET $url HTTP/1.0\r\nHost: $CFG->proxyhost\r\n\r\n");
$i = 0;
while(!feof($proxy_fp)) {
$string = fgets($proxy_fp, 1024);
if ($i > 11) { //12 lines of info skipped
$availablelangs[] = split(',', $string);
}
$i++;
}
fclose($proxy_fp);
} else { //proxy not in use
if ($fp = fopen($url, 'r')){ /// attempt to get the list from Moodle.org.
while(!feof ($fp)) {
$availablelangs[] = split(',', fgets($fp,1024));
}
} else { /// fopen failed, return false.
return false;
}
}
return $availablelangs;
}
?>
+1
View File
@@ -4,6 +4,7 @@
require('../config.php');
$action = optional_param('action', '', PARAM_ALPHA);
$sesskey = optional_param('sesskey');
require_login();
-47
View File
@@ -1,47 +0,0 @@
<?php // $Id$
require_once('../config.php');
require_login();
if (!isadmin()) {
error("Only admins can access this page");
}
if (!$site = get_site()) {
redirect("index.php");
}
$stradministration = get_string("administration");
$strmisc = get_string("miscellaneous");
print_header("$site->shortname: $stradministration: $strmisc", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> $strmisc");
print_heading($strmisc);
$table->align = array ("right", "left");
$table->data[] = array('<b><a href="../files/index.php?id='.$site->id.'">'.get_string('sitefiles').'</a></b>',
get_string("adminhelpsitefiles"));
$table->data[] = array('<b><a href="stickyblocks.php">'.get_string('stickyblocks','admin')."</a></b>",
get_string('adminhelpstickyblocks'));
$table->data[] = array('<b><a href="report.php">'.get_string('reports')."</a></b>",
get_string('adminhelpreports'));
// to be enabled later
/* $table->data[] = array('<b><a href="health.php">'.get_string('healthcenter')."</a></b>",
get_string('adminhelphealthcenter'));*/
$table->data[] = array('<b><a href="environment.php">'.get_string('environment', 'admin')."</a></b>",
get_string('adminhelpenvironment'));
if (file_exists("$CFG->dirroot/$CFG->admin/$CFG->dbtype")) {
$table->data[] = array('<b><a href="'.$CFG->dbtype.'/frame.php">'.get_string('managedatabase')."</a></b>",
get_string('adminhelpmanagedatabase'));
}
print_table($table);
print_footer($site);
?>
+9 -14
View File
@@ -1,7 +1,7 @@
<?PHP // $Id$
// module.php - allows admin to edit all local configuration variables for a module
require_once('../config.php');
require_once("../config.php");
require_login();
@@ -16,20 +16,19 @@
/// If data submitted, then process and store.
if ($config = data_submitted()) {
$module = optional_param('module', '', PARAM_SAFEDIR);
if (!confirm_sesskey()) {
error(get_string('confirmsesskeybad', 'error'));
}
if ($module != '') {
require_once("$CFG->dirroot/mod/$module/lib.php");
if ($module = optional_param('module', '', PARAM_CLEANFILE)) {
// if the config.html contains a hidden form field giving
// the module name then the form does not have to prefix all
// its variable names, we will do it here.
$moduleprefix = $module.'_';
// let the module process the form data if it has to,
// $config is passed to this function by reference
require_once("$CFG->dirroot/mod/$module/lib.php");
$moduleconfig = $module.'_process_options';
if (function_exists($moduleconfig)) {
$moduleconfig($config);
@@ -38,8 +37,7 @@
$moduleprefix = '';
}
unset($config->sesskey);
unset($config->module);
print_header();
foreach ($config as $name => $value) {
set_config($moduleprefix.$name, $value);
@@ -49,18 +47,15 @@
}
/// Otherwise print the form.
$module = required_param('module', PARAM_SAFEDIR);
$module = required_param('module', '', PARAM_CLEANFILE);
require_once("$CFG->dirroot/mod/$module/lib.php");
$stradmin = get_string("administration");
$strconfiguration = get_string("configuration");
$strmanagemodules = get_string("managemodules");
$strmodulename = get_string("modulename", $module);
// $CFG->pagepath is used to generate the body and id attributes for the body tag
// of the page. It is also used to generate the link to the Moodle Docs for this view.
$CFG->pagepath = 'mod/' . $module . '/config';
print_header("$site->shortname: $strmodulename: $strconfiguration", $site->fullname,
"<a href=\"index.php\">$stradmin</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> ".
@@ -68,7 +63,7 @@
print_heading($strmodulename);
print_simple_box("<center>".get_string("configwarning", 'admin')."</center>", "center", "60%");
print_simple_box("<center>".get_string("configwarning", 'admin')."</center>", "center", "50%");
echo "<br />";
print_simple_box_start("center", "");
+16 -31
View File
@@ -1,13 +1,13 @@
<?PHP // $Id$
// Allows the admin to manage activity modules
// Allows the admin to create, delete and rename course categories
require_once('../config.php');
require_once('../course/lib.php');
require_once("../config.php");
require_once("../course/lib.php");
$show = optional_param('show', '', PARAM_SAFEDIR);
$hide = optional_param('hide', '', PARAM_SAFEDIR);
$delete = optional_param('delete', '', PARAM_SAFEDIR);
$confirm = optional_param('confirm', '', PARAM_BOOL);
optional_variable($disable);
optional_variable($enable);
optional_variable($delete);
optional_variable($confirm);
require_login();
@@ -39,8 +39,6 @@
print_heading($strmanagemodules);
$coursesaffected = false;
/// If data submitted, then process and store.
@@ -48,29 +46,25 @@
if (!$module = get_record("modules", "name", $hide)) {
error("Module doesn't exist!");
}
set_field("modules", "visible", "0", "id", $module->id); // Hide main module
set_field('course_modules', 'visibleold', '1', 'visible' ,'1', 'module', $module->id); // Remember the previous visible state so we can toggle this back if the module is unhidden.
set_field('course_modules', 'visibleold', '0', 'visible' ,'0', 'module', $module->id);
set_field("course_modules", "visible", "0", "module", $module->id); // Hide all related activity modules
$coursesaffected = true;
set_field("modules", "visible", "0", "id", $module->id); // Hide main module
set_field("course_modules", "visible", "0", "module", $module->id); // Hide all related activity modules
}
if (!empty($show) and confirm_sesskey()) {
if (!$module = get_record("modules", "name", $show)) {
error("Module doesn't exist!");
}
set_field("modules", "visible", "1", "id", $module->id); // Show main module
set_field('course_modules', 'visible', '1', 'visibleold', '1', 'module', $module->id); // Get the previous saved visible state for the course module.
$coursesaffected = true;
set_field("modules", "visible", "1", "id", $module->id); // Show main module
set_field("course_modules", "visible", "1", "module", $module->id); // Show all related activity modules
}
if (!empty($delete) and confirm_sesskey()) {
$strmodulename = get_string("modulename", "$delete");
if (!$confirm) {
if (empty($confirm)) {
notice_yesno(get_string("moduledeleteconfirm", "", $strmodulename),
"modules.php?delete=$delete&amp;confirm=1&amp;sesskey=$USER->sesskey",
"modules.php?delete=$delete&amp;confirm=$delete&amp;sesskey=$USER->sesskey",
"modules.php");
print_footer();
exit;
@@ -127,19 +121,14 @@
}
}
//rebuild_course_cache(); // Because things have changed
$coursesaffected = true;
rebuild_course_cache(); // Because things have changed
$a->module = $strmodulename;
$a->directory = "$CFG->dirroot/mod/$delete";
notice(get_string("moduledeletefiles", "", $a), "modules.php");
}
}
if ($coursesaffected) {
rebuild_course_cache(); // Because things have changed
}
/// Get and sort the existing modules
@@ -149,10 +138,6 @@
foreach ($modules as $module) {
$strmodulename = get_string("modulename", "$module->name");
// Deal with modules which are lacking the language string
if ($strmodulename == '[[modulename]]') {
$strmodulename = $module->name;
}
$modulebyname[$strmodulename] = $module;
}
ksort($modulebyname);
@@ -177,7 +162,7 @@
$settings = "";
}
$count = count_records_select("$module->name",'course<>0');
$count = count_records("$module->name");
if ($module->visible) {
$visible = "<a href=\"modules.php?hide=$module->name&amp;sesskey=$USER->sesskey\" title=\"$strhide\">".
+3 -16
View File
@@ -1,4 +1,4 @@
<?php // $Id$
<?php
if (!isset($CFG)) {
@@ -29,20 +29,7 @@ function online_assignment_cleanup($output=false) {
echo '<center>';
}
/// We don't want to run this code if we are doing an upgrade from an assignment
/// version earlier than 2005041400
/// because the assignment type field will not exist
$amv = get_field('modules', 'version', 'name', 'assignment');
if ((int)$amv < 2005041400) {
if ($output) {
echo '</center>';
}
return;
}
/// get the module id for assignments from db
// get the module id for assignments from db
$arecord = get_record('modules', 'name', 'assignment');
$aid = $arecord->id;
@@ -57,7 +44,7 @@ function online_assignment_cleanup($output=false) {
if ($output) print_heading($fullname);
/// retrieve a list of sections beyond what is currently being shown
$sql = 'SELECT * FROM '.$CFG->prefix.'course_sections WHERE course='.$course->id.' AND section>'.$course->numsections.' ORDER BY section ASC';
$sql = 'SELECT * FROM '.$CFG->prefix.'course_sections WHERE `course`='.$course->id.' AND `section`>'.$course->numsections.' ORDER BY `section` ASC';
if (!($xsections = get_records_sql($sql))) {
if ($output) echo 'No extra sections<br />';
continue;
+15 -20
View File
@@ -3,37 +3,32 @@
require_once("../config.php");
$topframe = optional_param('topframe', false, PARAM_BOOL);
$bottomframe = optional_param('bottomframe', false, PARAM_BOOL);
require_login();
if (!isadmin()) {
error("Only the admin can use this page");
}
if (!$topframe && !$bottomframe) {
?>
<head>
<title>PHP info</title>
</head>
<frameset rows="80,*">
<frame src="phpinfo.php?topframe=true&amp;sesskey=<?php echo $USER->sesskey ?>">
<frame src="phpinfo.php?bottomframe=true&amp;sesskey=<?php echo $USER->sesskey ?>">
</frameset>
<?php
} else if ($topframe && confirm_sesskey()) {
if (isset($topframe)) {
$stradministration = get_string("administration");
$site = get_site();
print_header("$site->shortname: phpinfo", "$site->fullname",
print_header("$site->shortname: phpinfo", "$site->fullname",
"<a target=\"$CFG->framename\" href=\"index.php\">$stradministration</a> -> PHP info");
exit;
} else if ($bottomframe && confirm_sesskey()) {
}
if (isset($bottomframe)) {
phpinfo();
exit;
}
?>
<head>
<title>PHP info</title>
</head>
<frameset rows="80,*">
<frame src="phpinfo.php?topframe=true">
<frame src="phpinfo.php?bottomframe=true">
</frameset>
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/php -f
<?php // $Id$
<?
define('FULLME','cron'); // prevent warnings
//error_reporting(0);
//ini_set('display_errors',0);
-171
View File
@@ -1,171 +0,0 @@
<?PHP // $Id$
// Allows the admin to manage questiontypes
// This page is adapted from modules.php
// This page is not yet in service, the whole plug-in architecture
// for question types is still under construction.
require_once('../config.php');
$show = optional_param('show', '', PARAM_SAFEDIR);
$hide = optional_param('hide', '', PARAM_SAFEDIR);
$delete = optional_param('delete', '', PARAM_SAFEDIR);
$confirm = optional_param('confirm', '', PARAM_BOOL);
require_login();
if (!isadmin()) {
error("Only administrators can use this page!");
}
if (!$site = get_site()) {
error("Site isn't defined!");
}
/// Print headings
$stradministration = get_string("administration");
$strconfiguration = get_string("configuration");
$strdelete = get_string("delete");
$strversion = get_string("version");
$strhide = get_string("hide");
$strshow = get_string("show");
$strsettings = get_string("settings");
$strquestions = get_string("questions");
$strquestiontype = get_string("questiontype", 'quiz');
print_header("$site->shortname: $strquestions", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> $strquestions");
print_heading($strquestions);
/// If data submitted, then process and store.
if (!empty($hide) and confirm_sesskey()) {
if (!$qtype = get_record("question_types", "name", $hide)) {
error("Question type doesn't exist!");
}
set_field("question_types", "visible", "0", "id", $qtype->id); // Hide question type
}
if (!empty($show) and confirm_sesskey()) {
if (!$qtype = get_record("question_types", "name", $show)) {
error("Question type doesn't exist!");
}
set_field("question_types", "visible", "1", "id", $qtype->id); // Show question type
}
if (!empty($delete) and confirm_sesskey()) {
$strqtypename = get_string("qtypename", "qtype_$delete");
if (!$confirm) {
notice_yesno(get_string("qtypedeleteconfirm", "admin", $strqtypename),
"questiontypes.php?delete=$delete&amp;confirm=1&amp;sesskey=$USER->sesskey",
"questiontypes.php");
print_footer();
exit;
} else { // Delete everything!!
if ($delete == "random") {
error("You can not delete the random question type!!");
}
if (!$qtype = get_record("question_types", "name", $delete)) {
error("Question type doesn't exist!");
}
// OK, first delete all the questions
if ($questions = get_records("quiz_questions", "qtype", $qtype->id)) {
foreach ($questions as $question) {
if (! quiz_delete_question($coursemod->id, $coursemod->section)) {
notify("Could not delete the $strqtypename with id = $question->id");
}
}
}
// And the qtype entry itself
if (!delete_records("question_types", "name", $qtype->name)) {
notify("Error occurred while deleting the $strqtypename record from question_types table");
}
// Then the tables themselves
if ($tables = $db->Metatables()) {
$prefix = $CFG->prefix.$qtype->name;
foreach ($tables as $table) {
if (strpos($table, $prefix) === 0) {
if (!execute_sql("DROP TABLE $table", false)) {
notify("ERROR: while trying to drop table $table");
}
}
}
}
$a->qtype = $strqtypename;
$a->directory = "$CFG->dirroot/qtype/$delete";
notice(get_string("qtypedeletefiles", "", $a), "questiontypes.php");
}
}
/// Get and sort the existing questiontypes
if (!$qtypes = get_records("question_types")) {
error("No question types found!!"); // Should never happen
}
foreach ($qtypes as $qtype) {
$strqtypename = get_string("qtypename", "qtype_$qtype->name");
$qtypebyname[$strqtypename] = $qtype;
}
ksort($qtypebyname);
/// Print the table of all questiontypes
$table->head = array ($strquestiontype, $strquestions, $strversion, "$strhide/$strshow", $strdelete, $strsettings);
$table->align = array ("left", "right", "left", "center", "center", "center");
$table->wrap = array ("nowrap", "", "", "", "","");
$table->size = array ("100%", "10", "10", "10", "10","12");
$table->width = "100";
foreach ($qtypebyname as $qtypename => $qtype) {
$icon = "<img src=\"$CFG->dirroot/mod/quiz/questiontypes/$qtype->name/icon.gif\" hspace=\"10\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" />";
if (file_exists("$CFG->dirroot/mod/quiz/questiontypes/$qtype->name/config.html")) {
$settings = "<a href=\"questiontype.php?qtype=$qtype->name\">$strsettings</a>";
} else {
$settings = "";
}
$count = count_records('quiz_questions', 'qtype', $qtype->id);
$delete = $count ? '' : "<a href=\"questiontypes.php?delete=$qtype->name&amp;sesskey=$USER->sesskey\">$strdelete</a>";
if ($qtype->visible) {
$visible = "<a href=\"questiontypes.php?hide=$qtype->name&amp;sesskey=$USER->sesskey\" title=\"$strhide\">".
"<img src=\"$CFG->pixpath/i/hide.gif\" align=\"middle\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" /></a>";
$class = "";
} else {
$visible = "<a href=\"questiontypes.php?show=$qtype->name&amp;sesskey=$USER->sesskey\" title=\"$strshow\">".
"<img src=\"$CFG->pixpath/i/show.gif\" align=\"middle\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" /></a>";
$class = "class=\"dimmed_text\"";
}
if ($qtype->name == "random") {
$delete = "";
$visible = "";
$class = "";
}
$table->data[] = array ("<span $class>$icon $qtypename</span>", $count, $qtype->version, $visible, $delete, $settings);
}
print_table($table);
echo "<br /><br />";
print_footer();
?>
+3 -3
View File
@@ -1,7 +1,7 @@
<?php // $Id$
// register.php - allows admin to register their site on moodle.org
require_once('../config.php');
include("../config.php");
require_login();
@@ -26,7 +26,7 @@
}
if (empty($CFG->siteidentifier)) { // Unique site identification code
set_config('siteidentifier', random_string(32).$_SERVER['HTTP_HOST']);
set_config('siteidentifier', random_string(32));
}
@@ -139,7 +139,7 @@
echo "<input type=\"hidden\" name=\"posts\" value=\"$count\">\n";
echo '<br />';
$count = count_records('question');
$count = count_records('quiz_questions');
echo get_string("questions", 'quiz').": ".$count;
echo "<input type=\"hidden\" name=\"questions\" value=\"$count\">\n";
echo '<br />';
+4 -4
View File
@@ -1,10 +1,10 @@
<?php /// $Id$
/// Search and replace strings throughout all texts in the whole database
require_once('../config.php');
require('../config.php');
$search = optional_param('search', '', PARAM_RAW);
$replace = optional_param('replace', '', PARAM_RAW);
$search = optional_param('search', '');
$replace = optional_param('replace', '');
require_login();
@@ -45,7 +45,7 @@ foreach ($tables as $table) {
foreach ($columns as $column => $data) {
if (in_array($data->type, array('text','mediumtext','longtext','varchar'))) { // Text stuff only
$db->debug = true;
execute_sql("UPDATE $table SET $column = REPLACE($column, '$search', '$replace');");
execute_sql("UPDATE {$CFG->prefix}$table SET $column = REPLACE($column, '$search', '$replace');");
$db->debug = false;
}
}
-28
View File
@@ -1,28 +0,0 @@
<?php // $Id$
// Display all the reports available in admin/report
require_once('../config.php');
if (!isadmin()) {
error("You are not allowed to look at this page");
}
$stradmin = get_string('administration');
$strreports = get_string('reports');
$strmisc = get_string('miscellaneous');
print_header($strreports, $strreports,
'<a href="index.php">'.$stradmin.'</a> -> <a href="misc.php">'.$strmisc.'</a> ->'.
$strreports);
$directories = get_list_of_plugins('admin/report');
foreach ($directories as $directory) {
echo '<div class="plugin '.$directory.'">';
include_once($CFG->dirroot.'/admin/report/'.$directory.'/mod.php'); // Fragment for listing
echo '</div>';
}
print_footer();
?>
-115
View File
@@ -1,115 +0,0 @@
<?php
require_once('../../../config.php');
require_once($CFG->dirroot.'/lib/statslib.php');
$report = optional_param('report', STATS_REPORT_ACTIVE_COURSES, PARAM_INT);
$time = optional_param('time', 0, PARAM_INT);
$numcourses = optional_param('numcourses', 20, PARAM_INT);
if (empty($CFG->enablestats)) {
error("Stats is not enabled.");
}
require_login();
if (!isadmin()) {
error("This page is for admins only");
}
$course = get_site();
stats_check_uptodate($course->id);
$strreports = get_string('reports');
$strcourseoverview = get_string('courseoverview');
$strnav = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/index.php">'.get_string('administration').'</a> -> <a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/report.php">'.$strreports.'</a> -> '.$strcourseoverview;
$reportoptions = stats_get_report_options($course->id,STATS_MODE_RANKED);
$tableprefix = $CFG->prefix.'stats_';
$earliestday = get_field_sql('SELECT timeend FROM '.$tableprefix.'daily ORDER BY timeend LIMIT 1');
$earliestweek = get_field_sql('SELECT timeend FROM '.$tableprefix.'weekly ORDER BY timeend LIMIT 1');
$earliestmonth = get_field_sql('SELECT timeend FROM '.$tableprefix.'monthly ORDER BY timeend LIMIT 1');
if (empty($earliestday)) $earliestday = time();
if (empty($earliestweek)) $earliestweek = time();
if (empty($earliestmonth)) $earliestmonth = time();
$now = stats_get_base_daily();
$lastweekend = stats_get_base_weekly();
$lastmonthend = stats_get_base_monthly();
$timeoptions = stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
if (empty($timeoptions)) {
error(get_string('nostatstodisplay'), $CFG->wwwroot.'/course/view.php?id='.$course->id);
}
print_header($strcourseoverview, $strcourseoverview, $strnav,'','',true,'&nbsp');
echo '<form action="index.php" method="post">'."\n";
$table->width = '*';
$table->align = array('left','left','left','left','left','left');
$table->data[] = array(get_string('statsreporttype'),choose_from_menu($reportoptions,'report',$report,'','','',true),
get_string('statstimeperiod'),choose_from_menu($timeoptions,'time',$time,'','','',true),
'<input type="text" name="numcourses" size="3" maxlength="2" value="'.$numcourses.'" />',
'<input type="submit" value="'.get_string('view').'" />') ;
print_table($table);
echo '</form>';
if (!empty($report) && !empty($time)) {
$param = stats_get_parameters($time,$report,SITEID,STATS_MODE_RANKED);
$sql = "SELECT courseid,".$param->fields." FROM ".$CFG->prefix.'stats_'.$param->table
." WHERE timeend >= ".$param->timeafter
." GROUP BY courseid "
.$param->extras
." ORDER BY ".$param->orderby
." LIMIT ".$numcourses;
$courses = get_records_sql($sql);
if (empty($courses)) {
error(get_string('statsnodata'),$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/index.php');
}
if (empty($CFG->gdversion)) {
echo "<center>(".get_string("gdneed").")</center>";
} else {
echo '<center><img src="'.$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/reportsgraph.php?time='.$time.'&report='.$report.'&numcourses='.$numcourses.'" /></center>';
}
$table = new object();
$table->align = array('left','center','center','center');
$table->head = array(get_string('course'),$param->line1);
if (!empty($param->line2)) {
$table->head[] = $param->line2;
}
if (!empty($param->line3)) {
$table->head[] = $param->line3;
}
foreach ($courses as $c) {
$a = array();
$a[] = '<a href="'.$CFG->wwwroot.'/course/view.php?id='.$c->courseid.'">'.get_field('course','shortname','id',$c->courseid).'</a>';
$a[] = $c->line1;
if (isset($c->line2)) {
$a[] = $c->line2;
}
if (isset($c->line3)) {
$a[] = $c->line3;
}
$table->data[] = $a;
}
print_table($table);
}
print_footer();
?>
-57
View File
@@ -1,57 +0,0 @@
<?php
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
}
if (!empty($CFG->enablestats)) {
$strreports = get_string('reports');
$strcourseoverview = get_string('courseoverview');
print_heading("$strcourseoverview:");
require_once($CFG->dirroot.'/lib/statslib.php');
$report = optional_param('report', STATS_REPORT_ACTIVE_COURSES, PARAM_INT);
$time = optional_param('time', 0, PARAM_INT);
$numcourses = optional_param('numcourses', 20, PARAM_INT);
$course = get_site();
$statsstatus = stats_check_uptodate($course->id);
$reportoptions = stats_get_report_options($course->id,STATS_MODE_RANKED);
$tableprefix = $CFG->prefix.'stats_';
$earliestday = get_field_sql('SELECT timeend FROM '.$tableprefix.'daily ORDER BY timeend LIMIT 1');
$earliestweek = get_field_sql('SELECT timeend FROM '.$tableprefix.'weekly ORDER BY timeend LIMIT 1');
$earliestmonth = get_field_sql('SELECT timeend FROM '.$tableprefix.'monthly ORDER BY timeend LIMIT 1');
if (empty($earliestday)) $earliestday = time();
if (empty($earliestweek)) $earliestweek = time();
if (empty($earliestmonth)) $earliestmonth = time();
$now = stats_get_base_daily();
$lastweekend = stats_get_base_weekly();
$lastmonthend = stats_get_base_monthly();
$timeoptions = stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
$table->width = '*';
$table->align = array('left','left','left','left','left','left');
$table->data[] = array(get_string('statsreporttype'),choose_from_menu($reportoptions,'report',$report,'','','',true),
get_string('statstimeperiod'),choose_from_menu($timeoptions,'time',$time,'','','',true),
'<input type="text" name="numcourses" size="3" maxlength="2" value="'.$numcourses.'" />',
'<input type="submit" value="'.get_string('view').'" />') ;
echo '<form action="report/courseoverview/index.php" method="post">'."\n";
print_table($table);
echo '</form>';
if ($statsstatus !== NULL) {
notify ($statsstatus);
}
}
?>
@@ -1,54 +0,0 @@
<?php // $Id$
require_once('../../../config.php');
require_once($CFG->dirroot.'/lib/statslib.php');
require_once($CFG->dirroot.'/lib/graphlib.php');
$report = required_param('report', PARAM_INT);
$time = required_param('time', PARAM_INT);
$numcourses = required_param('numcourses', PARAM_INT);
require_login();
if (!isadmin()) {
error("You must be an admin to use this page");
}
stats_check_uptodate($course->id);
$param = stats_get_parameters($time,$report,SITEID,STATS_MODE_RANKED);
$sql = "SELECT courseid,".$param->fields." FROM ".$CFG->prefix.'stats_'.$param->table
." WHERE timeend >= ".$param->timeafter
." GROUP BY courseid "
.$param->extras
." ORDER BY ".$param->orderby
." LIMIT ".$numcourses;
$courses = get_records_sql($sql);
if (empty($courses)) {
error(get_string('statsnodata'),$CFG->wwwroot.'/'.$CFG->admin.'/report/course/index.php');
}
$graph = new graph(750,400);
$graph->parameter['legend'] = 'outside-right';
$graph->parameter['legend_size'] = 10;
$graph->parameter['x_axis_angle'] = 90;
$graph->parameter['title'] = false; // moodle will do a nicer job.
if ($report != STATS_REPORT_ACTIVE_COURSES) {
$graph->parameter['y_decimal_left'] = 2;
}
foreach ($courses as $c) {
$graph->x_data[] = get_field('course','shortname','id',$c->courseid);
$graph->y_data['bar1'][] = $c->{$param->graphline};
}
$graph->y_order = array('bar1');
$graph->y_format['bar1'] = array('colour' => 'blue','bar' => 'fill','legend' => $param->{$param->graphline});
$graph->draw_stack();
?>
-23
View File
@@ -1,23 +0,0 @@
<?php
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
}
require_once($CFG->dirroot.'/course/lib.php');
require_once($CFG->dirroot.'/course/report/log/lib.php');
$course = get_site();
print_heading(get_string('chooselogs') .':');
print_log_selector_form($course);
echo '<br />';
print_heading(get_string('chooselivelogs') .':');
echo '<center><h3>';
link_to_popup_window('/course/report/log/live.php?id='. $course->id,'livelog', get_string('livelogs'), 500, 800);
echo '</h3></center>';
?>
-63
View File
@@ -1,63 +0,0 @@
<?php // $Id$
require_once('../../../config.php');
require_once($CFG->dirroot.'/lib/statslib.php');
require_once($CFG->dirroot.'/course/report/stats/lib.php');
if (empty($CFG->enablestats)) {
error("Stats is not enabled.");
}
$courseid = required_param('course', PARAM_INT);
$report = optional_param('report', 0, PARAM_INT);
$time = optional_param('time', 0, PARAM_INT);
$mode = optional_param('mode', STATS_MODE_GENERAL, PARAM_INT);
$userid = optional_param('userid', 0, PARAM_INT);
if ($report == STATS_REPORT_USER_LOGINS) {
$courseid = SITEID; //override
}
if ($mode == STATS_MODE_RANKED) {
redirect($CFG->wwwroot.'/'.$CFG->admin.'/report.php?time='.$time);
}
if (!$course = get_record("course","id",$courseid)) {
error("That's an invalid course id");
}
if (!empty($userid)) {
if (!$user = get_record('user','id',$userid)) {
error("That's an invalid user id");
}
}
require_login();
if (!isteacher($course->id)) {
error("You need to be a teacher to use this page");
}
add_to_log($course->id, "course", "report stats", "report/stats/index.php?course=$course->id", $course->id);
stats_check_uptodate($course->id);
$strreports = get_string("reports");
$strstats = get_string('stats');
$menu = report_stats_mode_menu($course, $mode, $time);
$crumb = "<a href=\"{$CFG->wwwroot}/admin\">".get_string('administration')."</a> ->
<a href=\"{$CFG->wwwroot}/admin/report.php\">$strreports</a> ->
$strstats";
print_header("$course->shortname: $strstats", "$course->fullname",
$crumb, '', '', true, '&nbsp', $menu);
require_once($CFG->dirroot.'/course/report/stats/report.php');
print_footer();
?>
-16
View File
@@ -1,16 +0,0 @@
<?php //$Id$
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
}
if (!empty($CFG->enablestats)) {
echo '<p style="text-align:center;">';
echo '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/report/stats/index.php?course='.$course->id.'">'.get_string('stats').'</a>';
echo '</p>';
$statsstatus = stats_check_uptodate($course->id);
if ($statsstatus !== NULL) {
notify ($statsstatus);
}
}
?>
+8 -44
View File
@@ -29,55 +29,19 @@
</tr>
<tr valign="top">
<td align="right"><?php print_string("frontpageformat") ?>:</td>
<td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<?php
$coursecount = (count_records('course') <= FRONTPAGECOURSELIMIT);
<td><?php
$options = array(FRONTPAGENEWS => get_string("frontpagenews"),
FRONTPAGECOURSELIST => get_string("frontpagecourselist"),
FRONTPAGECATEGORYNAMES => get_string("frontpagecategorynames"),
FRONTPAGECATEGORYCOMBO => get_string("frontpagecategorycombo"),
);
$values = array(get_string('hide'), get_string('order1', 'admin'), get_string('order2', 'admin'), get_string('order3', 'admin'), get_string('order4', 'admin'));
$seq = array_flip(explode(',',$form->frontpage));
foreach ($seq as $k => $s) {
$seq[$k]++;
}
if (!$coursecount and isset($seq[FRONTPAGECOURSELIST])) {
unset($seq[FRONTPAGECOURSELIST]); //disable course list option when too many course present
}
foreach ($options as $key => $option) {
$disabled = (!$coursecount and ($key == FRONTPAGECOURSELIST));
echo "<td>$option<br />";
choose_from_menu ($values, "frontpage[$key]", isset($seq[$key])?$seq[$key]:0, '', '', 0, false, $disabled);
echo '</td>';
FRONTPAGETOPICONLY => get_string("frontpagetopiconly"));
if (count_records("course") > 200) {
unset($options[1]);
if ($form->frontpage == 1) {
$form->frontpage = 2;
}
}
choose_from_menu ($options, "frontpage", "$form->frontpage", "");
?>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td align="right"><?php print_string("frontpageformatloggedin") ?>:</td>
<td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<?php
$seq = array_flip(explode(',',$form->frontpageloggedin));
foreach ($seq as $k => $s) {
$seq[$k]++;
}
foreach ($options as $key => $option) {
echo "<td>$option<br />";
choose_from_menu ($values, "frontpageloggedin[$key]", isset($seq[$key])?$seq[$key]:0, '');
echo '</td>';
}
?>
</tr>
</table>
</td>
</tr>
<tr valign="top">
+11 -23
View File
@@ -1,7 +1,7 @@
<?php // $Id$
require_once('../config.php');
require_once('../course/lib.php');
require_once("../config.php");
require_once("../course/lib.php");
if ($site = get_site()) {
require_login();
@@ -11,8 +11,6 @@
$site->format = "social"; // override
}
$focus = "form.fullname";
/// If data submitted, then process and store.
if ($form = data_submitted()) {
@@ -27,23 +25,11 @@
if (count($err) == 0) {
$form->frontpage = array_flip($form->frontpage);
unset($form->frontpage[0]);
$form->frontpage = array_flip($form->frontpage);
asort($form->frontpage);
$form->frontpage = implode(',',array_flip($form->frontpage));
set_config("frontpage", $form->frontpage);
if ($form->frontpage == '') {
if ($form->frontpage == FRONTPAGETOPICONLY) {
$form->numsections = 1; // Force the topic display for this format
}
$form->frontpageloggedin = array_flip($form->frontpageloggedin);
unset($form->frontpageloggedin[0]);
$form->frontpageloggedin = array_flip($form->frontpageloggedin);
asort($form->frontpageloggedin);
$form->frontpageloggedin = implode(',',array_flip($form->frontpageloggedin));
set_config("frontpageloggedin", $form->frontpageloggedin);
$form->timemodified = time();
if ($form->id) {
@@ -105,16 +91,18 @@
if (isset($CFG->frontpage)) {
$form->frontpage = $CFG->frontpage;
} else {
$form->frontpage = FRONTPAGECOURSELIST; // Show course list by default
if ($form->newsitems > 0) {
$form->frontpage = 0;
} else {
$form->frontpage = 1;
}
set_config("frontpage", $form->frontpage);
}
if (isset($CFG->frontpageloggedin)) {
$form->frontpageloggedin = $CFG->frontpageloggedin;
} else {
$form->frontpageloggedin = $form->frontpage;
set_config("frontpageloggedin", $form->frontpageloggedin);
if (empty($focus)) {
$focus = "form.fullname";
}
$stradmin = get_string("administration");
-87
View File
@@ -1,87 +0,0 @@
<?PHP // $Id$
require_once('../config.php');
require_once($CFG->dirroot.'/my/pagelib.php');
require_once($CFG->dirroot.'/lib/pagelib.php');
require_once($CFG->dirroot.'/lib/blocklib.php');
$pt = optional_param('pt', null, PARAM_SAFEDIR); //alhanumeric and -
$pagetypes = array(PAGE_MY_MOODLE => array('id' => PAGE_MY_MOODLE,
'lib' => '/my/pagelib.php',
'name' => get_string('stickyblocksmymoodle','admin')),
PAGE_COURSE_VIEW => array('id' => PAGE_COURSE_VIEW,
'lib' => '/lib/pagelib.php',
'name' => get_string('stickyblockscourseview','admin'))
// ... more?
);
// for choose_from_menu
$options = array();
foreach ($pagetypes as $p) {
$options[$p['id']] = $p['name'];
}
require_login();
if (!isadmin()) {
error("Only the admin can use this page");
}
// first thing to do is print the dropdown menu
$strtitle = get_string('stickyblocks','admin');
$strheading = get_string('adminhelpstickyblocks');
print_header($strtitle,$strtitle,'<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/index.php">'.
get_string('admin').'</a> -> <a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/misc.php">'.
get_string('miscellaneous').'</a> ->'.$strtitle);
echo '<table border="0" cellpadding="3" cellspacing="0" width="100%" id="layout-table">';
echo '<tr valign="top">';
if (!empty($pt)) {
require_once($CFG->dirroot.$pagetypes[$pt]['lib']);
define('ADMIN_STICKYBLOCKS',$pt);
$PAGE = page_create_object($pt);
$blocks = blocks_setup($PAGE,BLOCKS_PINNED_TRUE);
$blocks_preferred_width = bounded_number(180, blocks_preferred_width($blocks[BLOCK_POS_LEFT]), 210);
echo '<td style="vertical-align: top; width: '.$blocks_preferred_width.'px;" id="left-column">';
blocks_print_group($PAGE, $blocks, BLOCK_POS_LEFT);
} else {
echo '<td style="vertical-align: top;" id="left-column">';
}
echo '</td>';
echo '<td valign="top" width="*" id="middle-column">';
print_simple_box_start('center');
print_heading($strheading);
echo '<form method="post" action="'.$CFG->wwwroot.'/'.$CFG->admin.'/stickyblocks.php">'
.'<p align="center">'.get_string('stickyblockspagetype','admin').': ';
choose_from_menu($options,'pt',$pt,'choose','this.form.submit();');
echo '</p></form>';
echo get_string('stickyblocksduplicatenotice','admin');
print_simple_box_end();
echo '</td>';
if (!empty($pt)) {
echo '<td style="vertical-align: top; width: '.$blocks_preferred_width.'px;" id="left-column">';
blocks_print_group($PAGE, $blocks, BLOCK_POS_RIGHT);
}
echo '<td style="vertical-align: top;" id="left-column">';
echo '</td>';
echo '</tr></table>';
print_footer();
?>
+22 -7
View File
@@ -1,8 +1,6 @@
<?php // $Id$
require_once('../config.php');
$zone = optional_param('zone', '', PARAM_PATH); //not a path, but it looks like it anyway
include("../config.php");
require_login();
@@ -19,7 +17,7 @@
print_heading("");
if (!empty($zone) and confirm_sesskey()) {
if (isset($zone) and confirm_sesskey()) {
$db->debug = true;
echo "<center>";
execute_sql("UPDATE {$CFG->prefix}user SET timezone = '$zone'");
@@ -29,12 +27,29 @@
$USER->timezone = $zone;
}
require_once($CFG->dirroot.'/calendar/lib.php');
$timezones = get_list_of_timezones();
$user = $USER;
if (abs($user->timezone) > 13) {
$user->timezone = 99;
}
$timenow = time();
$timeformat = get_string('strftimedaytime');
for ($tz = -26; $tz <= 26; $tz++) {
$zone = (float)$tz/2.0;
$usertime = $timenow + ($tz * 1800);
if ($tz == 0) {
$timezones["$zone"] = gmstrftime($timeformat, $usertime)." (GMT)";
} else if ($tz < 0) {
$timezones["$zone"] = gmstrftime($timeformat, $usertime)." (GMT$zone)";
} else {
$timezones["$zone"] = gmstrftime($timeformat, $usertime)." (GMT+$zone)";
}
}
echo '<center><form action="timezone.php" method="get">';
echo "$strusers ($strall): ";
choose_from_menu ($timezones, "zone", 99, get_string("serverlocaltime"), "", "99");
choose_from_menu ($timezones, "zone", $user->timezone, get_string("serverlocaltime"), "", "99");
echo "<input type=\"hidden\" name=\"sesskey\" value=\"$USER->sesskey\">";
echo "<input type=\"submit\" value=\"$strsavechanges\">";
echo "</form></center>";
+1 -1
View File
@@ -6,7 +6,7 @@
require_once($CFG->libdir.'/filelib.php');
require_once($CFG->libdir.'/olson.php');
$ok = optional_param('ok', 0, PARAM_BOOL);
$ok = optional_param('ok');
require_login();
+46 -5
View File
@@ -1,10 +1,9 @@
<?PHP //$Id$
require_once('../config.php');
require_once($CFG->dirroot.'/mod/forum/lib.php');
require_once($CFG->libdir.'/adminlib.php');
require("../config.php");
require("$CFG->dirroot/mod/forum/lib.php");
$confirm = optional_param('confirm', 0, PARAM_BOOL);
optional_variable($confirm);
require_login();
@@ -29,7 +28,7 @@
print_header("$site->shortname: $stradministration: $strupgradingdata", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> $strupgradingdata");
if (empty($confirm)) {
if (empty($_GET['confirm'])) {
notice_yesno(get_string("upgradeforumreadinfo", "admin"),
"upgradeforumread.php?confirm=true&sesskey=$USER->sesskey",
"index.php");
@@ -116,4 +115,46 @@
exit;
function print_progress($done, $total, $updatetime=5, $sleeptime=1) {
static $count;
static $starttime;
static $lasttime;
if (empty($starttime)) {
$starttime = $lasttime = time();
$lasttime = $starttime - $updatetime;
echo '<table width="500" cellpadding="0" cellspacing="0" align="center"><tr><td width="500">';
echo '<div id="bar" style="border-style:solid;border-width:1px;width:500px;height:50px;">';
echo '<div id="slider" style="border-style:solid;border-width:1px;height:48px;width:10px;background-color:green;"></div>';
echo '</div>';
echo '<div id="text" align="center" style="width:500px;"></div>';
echo '</td></tr></table>';
echo '</div>';
}
if (!isset($count)) {
$count = 0;
}
$count++;
$now = time();
if ($done && (($now - $lasttime) >= $updatetime)) {
$elapsedtime = $now - $starttime;
$projectedtime = (int)(((float)$total / (float)$done) * $elapsedtime) - $elapsedtime;
$percentage = format_float((float)$done / (float)$total, 2);
$width = (int)(500 * $percentage);
echo '<script>';
echo 'document.getElementById("text").innerHTML = "'.$count.' done. Ending: '.format_time($projectedtime).'";'."\n";
echo 'document.getElementById("slider").style.width = \''.$width.'px\';'."\n";
echo '</script>';
$lasttime = $now;
sleep($sleeptime);
}
}
?>
+3 -3
View File
@@ -1,8 +1,8 @@
<?PHP //$Id$
require_once('../config.php');
require("../config.php");
$confirm = optional_param('confirm', 0, PARAM_BOOL);
optional_variable($confirm);
require_login();
@@ -31,7 +31,7 @@
print_header("$site->shortname: $stradministration: $strupgradinglogs", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> $strupgradinglogs");
if (empty($confirm)) {
if (empty($_GET['confirm'])) {
notice_yesno(get_string("upgradelogsinfo", "admin"),
"upgradelogs.php?confirm=true&sesskey=$USER->sesskey",
"index.php");
+256 -372
View File
@@ -3,401 +3,285 @@
/// Bulk user registration script from a comma separated file
/// Returns list of users with their user ids
require_once('../config.php');
require_once($CFG->libdir.'/uploadlib.php');
require_once("../config.php");
$createpassword = optional_param('createpassword', 0, PARAM_BOOL);
$updateaccounts = optional_param('updateaccounts', 0, PARAM_BOOL);
$allowrenames = optional_param('allowrenames', 0, PARAM_BOOL);
optional_variable($numusers, 0);
require_login();
require_login();
if (!isadmin()) {
error("You must be an administrator to edit users this way.");
}
if (! $site = get_site()) {
error("Could not find site-level course");
}
if (!$adminuser = get_admin()) {
error("Could not find site admin");
}
$streditmyprofile = get_string("editmyprofile");
$stradministration = get_string("administration");
$strfile = get_string("file");
$struser = get_string("user");
$strusers = get_string("users");
$strusersnew = get_string("usersnew");
$strusersupdated = get_string("usersupdated");
$struploadusers = get_string("uploadusers");
$straddnewuser = get_string("importuser");
$csv_encode = '/\&\#44/';
if (isset($CFG->CSV_DELIMITER)) {
$csv_delimiter = '\\' . $CFG->CSV_DELIMITER;
$csv_delimiter2 = $CFG->CSV_DELIMITER;
if (isset($CFG->CSV_ENCODE)) {
$csv_encode = '/\&\#' . $CFG->CSV_ENCODE . '/';
if (!isadmin()) {
error("You must be an administrator to edit users this way.");
}
if (! $site = get_site()) {
error("Could not find site-level course");
}
if (!confirm_sesskey()) {
error(get_string('confirmsesskeybad', 'error'));
}
if (!$adminuser = get_admin()) {
error("Could not find site admin");
}
$streditmyprofile = get_string("editmyprofile");
$stradministration = get_string("administration");
$strchoose = get_string("choose");
$struser = get_string("user");
$strusers = get_string("users");
$strusersnew = get_string("usersnew");
$struploadusers = get_string("uploadusers");
$straddnewuser = get_string("importuser");
$csv_encode = '/\&\#44/';
if (isset($CFG->CSV_DELIMITER)) {
$csv_delimiter = '\\' . $CFG->CSV_DELIMITER;
$csv_delimiter2 = $CFG->CSV_DELIMITER;
if (isset($CFG->CSV_ENCODE)) {
$csv_encode = '/\&\#' . $CFG->CSV_ENCODE . '/';
}
} else {
$csv_delimiter = "\,";
$csv_delimiter2 = ",";
}
} else {
$csv_delimiter = "\,";
$csv_delimiter2 = ",";
}
/// Print the header
print_header("$site->shortname: $struploadusers", $site->fullname,
"<a href=\"index.php\">$stradministration</a> ->
<a href=\"users.php\">$strusers</a> -> $struploadusers");
print_header("$site->shortname: $struploadusers", $site->fullname,
"<a href=\"index.php\">$stradministration</a> ->
<a href=\"users.php\">$strusers</a> -> $struploadusers");
/// If a file has been uploaded, then process it
$um = new upload_manager('userfile',false,false,null,false,0);
require_once($CFG->dirroot.'/lib/uploadlib.php');
$um = new upload_manager('userfile',false,false,null,false,0);
if ($um->preprocess_files()) {
$filename = $um->files['userfile']['tmp_name'];
if ($um->preprocess_files() && confirm_sesskey()) {
$filename = $um->files['userfile']['tmp_name'];
//Fix mac/dos newlines
$text = my_file_get_contents($filename);
$text = preg_replace('!\r\n?!',"\n",$text);
$fp = fopen($filename, "w");
fwrite($fp,$text);
fclose($fp);
// Large files are likely to take their time and memory. Let PHP know
// that we'll take longer, and that the process should be recycled soon
// to free up memory.
@set_time_limit(0);
@raise_memory_limit("128M");
if (function_exists('apache_child_terminate')) {
@apache_child_terminate();
$fp = fopen($filename, "r");
// make arrays of valid fields for error checking
$required = array("username" => 1,
"password" => 1,
"firstname" => 1,
"lastname" => 1,
"email" => 1);
$optionalDefaults = array("institution" => 1,
"department" => 1,
"city" => 1,
"country" => 1,
"lang" => 1,
"auth" => 1,
"timezone" => 1);
$optional = array("idnumber" => 1,
"icq" => 1,
"phone1" => 1,
"phone2" => 1,
"address" => 1,
"url" => 1,
"description" => 1,
"mailformat" => 1,
"maildisplay" => 1,
"htmleditor" => 1,
"autosubscribe" => 1,
"idnumber" => 1,
"icq" => 1,
"course1" => 1,
"course2" => 1,
"course3" => 1,
"course4" => 1,
"course5" => 1,
"group1" => 1,
"group2" => 1,
"group3" => 1,
"group4" => 1,
"group5" =>1);
// --- get header (field names) ---
$header = split($csv_delimiter, fgets($fp,1024));
// check for valid field names
foreach ($header as $i => $h) {
$h = trim($h); $header[$i] = $h; // remove whitespace
if (!($required[$h] or $optionalDefaults[$h] or $optional[$h])) {
error(get_string('invalidfieldname', 'error', $h), 'uploaduser.php?sesskey='.$USER->sesskey);
}
if ($required[$h]) {
$required[$h] = 2;
}
}
// check for required fields
foreach ($required as $key => $value) {
if ($value < 2) {
error(get_string('fieldrequired', 'error', $key), 'uploaduser.php?sesskey='.$USER->sesskey);
}
}
$linenum = 2; // since header is line 1
while (!feof ($fp)) {
foreach ($optionalDefaults as $key => $value) {
$user->$key = addslashes($adminuser->$key);
}
//Note: commas within a field should be encoded as &#44 (for comma separated csv files)
//Note: semicolon within a field should be encoded as &#59 (for semicolon separated csv files)
$line = split($csv_delimiter, fgets($fp,1024));
foreach ($line as $key => $value) {
//decode encoded commas
$record[$header[$key]] = preg_replace($csv_encode,$csv_delimiter2,trim($value));
}
if ($record[$header[0]]) {
// add a new user to the database
optional_variable($newuser, "");
// add fields to object $user
foreach ($record as $name => $value) {
// check for required values
if ($required[$name] and !$value) {
error(get_string('missingfield', 'error', $name). " ".
get_string('erroronline', 'error', $linenum) .". ".
get_string('processingstops', 'error'),
'uploaduser.php?sesskey='.$USER->sesskey);
}
// password needs to be encrypted
else if ($name == "password") {
$user->password = md5($value);
}
else if ($name == "username") {
$user->username = addslashes(moodle_strtolower($value));
}
// normal entry
else {
$user->{$name} = addslashes($value);
}
}
$user->confirmed = 1;
$user->timemodified = time();
$linenum++;
$username = $user->username;
$addcourse[0] = $user->course1;
$addcourse[1] = $user->course2;
$addcourse[2] = $user->course3;
$addcourse[3] = $user->course4;
$addcourse[4] = $user->course5;
$addgroup[0] = $user->group1;
$addgroup[1] = $user->group2;
$addgroup[2] = $user->group3;
$addgroup[3] = $user->group4;
$addgroup[4] = $user->group5;
$courses = get_courses("all",'c.sortorder','c.id,c.shortname,c.fullname,c.sortorder');
for ($i=0; $i<5; $i++) {
$courseid[$i]=0;
}
foreach ($courses as $course) {
for ($i=0; $i<5; $i++) {
if ($course->shortname == $addcourse[$i]) {
$courseid[$i] = $course->id;
}
}
}
if (get_record("user","username",$username) || !($user->id = insert_record("user", $user))) {
if (!$user = get_record("user", "username", "changeme")) { // half finished user from another time
//Record not added - probably because user is already registered
//In this case, output userid from previous registration
//This can be used to obtain a list of userids for existing users
if ($user = get_record("user","username",$username)) {
notify("$user->id ".get_string('usernotaddedregistered', 'error', $username));
} else {
notify(get_string('usernotaddederror', 'error', $username));
}
}
} else if ($user->username != "changeme") {
notify("$struser: $user->id = $user->username");
$numusers++;
}
for ($i=0; $i<5; $i++) {
if ($addcourse[$i] && !$courseid[$i]) {
notify(get_string('unknowncourse', 'error', $addcourse[$i]));
}
}
for ($i=0; $i<5; $i++) {
$groupid[$i] = 0;
if ($addgroup[$i]) {
if (!$courseid[$i]) {
notify(get_string('coursegroupunknown','error',$addgroup[$i]));
} else {
if ($group = get_record("groups","courseid",$courseid[$i],"name",$addgroup[$i])) {
$groupid[$i] = $group->id;
} else {
notify(get_string('groupunknown','error',$addgroup[$i]));
}
}
}
}
for ($i=0; $i<5; $i++) {
if ($courseid[$i]) {
if (enrol_student($user->id, $courseid[$i])) {
notify('-->'. get_string('enrolledincourse', '', $addcourse[$i]));
} else {
notify('-->'.get_string('enrolledincoursenot', '', $addcourse[$i]));
}
}
}
for ($i=0; $i<5; $i++) {
if ($courseid[$i] && $groupid[$i]) {
if (record_exists("user_students","userid",$user->id,"course",$courseid[$i])) {
$usergroup = user_group($courseid[$i],$user->id);
if ($usergroup) {
notify('-->' . get_string('groupalready','error',$usergroup->name));
} else {
$group_member->groupid = $groupid[$i];
$group_member->userid = $user->id;
$group_member->timeadded = time();
if (insert_record("groups_members",$group_member)) {
notify('-->' . get_string('addedtogroup','',$addgroup[$i]));
} else {
notify('-->' . get_string('addedtogroupnot','',$addgroup[$i]));
}
}
} else {
notify('-->' . get_string('addedtogroupnotenrolled','',$addgroup[$i]));
}
}
}
unset ($user);
}
}
fclose($fp);
notify("$strusersnew: $numusers");
echo '<hr />';
}
//Fix mac/dos newlines
$text = my_file_get_contents($filename);
$text = preg_replace('!\r\n?!',"\n",$text);
$fp = fopen($filename, "w");
fwrite($fp,$text);
fclose($fp);
$fp = fopen($filename, "r");
// make arrays of valid fields for error checking
$required = array("username" => 1,
"password" => !$createpassword,
"firstname" => 1,
"lastname" => 1,
"email" => 1);
$optionalDefaults = array("institution" => 1,
"department" => 1,
"city" => 1,
"country" => 1,
"lang" => 1,
"auth" => 1,
"timezone" => 1);
$optional = array("idnumber" => 1,
"icq" => 1,
"phone1" => 1,
"phone2" => 1,
"address" => 1,
"url" => 1,
"description" => 1,
"mailformat" => 1,
"maildisplay" => 1,
"htmleditor" => 1,
"autosubscribe" => 1,
"idnumber" => 1,
"icq" => 1,
"course1" => 1,
"course2" => 1,
"course3" => 1,
"course4" => 1,
"course5" => 1,
"group1" => 1,
"group2" => 1,
"group3" => 1,
"group4" => 1,
"group5" => 1,
"type1" => 1,
"type2" => 1,
"type3" => 1,
"type4" => 1,
"type5" => 1,
"password" => $createpassword,
"oldusername" => $allowrenames);
// --- get header (field names) ---
$header = split($csv_delimiter, fgets($fp,1024));
// check for valid field names
foreach ($header as $i => $h) {
$h = trim($h); $header[$i] = $h; // remove whitespace
if (!($required[$h] or $optionalDefaults[$h] or $optional[$h])) {
error(get_string('invalidfieldname', 'error', $h), 'uploaduser.php?sesskey='.$USER->sesskey);
}
if ($required[$h]) {
$required[$h] = 0;
}
}
// check for required fields
foreach ($required as $key => $value) {
if ($value) { //required field missing
error(get_string('fieldrequired', 'error', $key), 'uploaduser.php?sesskey='.$USER->sesskey);
}
}
$linenum = 2; // since header is line 1
$usersnew = 0;
$usersupdated = 0;
$userserrors = 0;
$renames = 0;
$renameerrors = 0;
// Will use this course array a lot
// so fetch it early and keep it in memory
$courses = get_courses('all','c.sortorder','c.id,c.shortname,c.fullname,c.sortorder,c.teacher');
while (!feof ($fp)) {
foreach ($optionalDefaults as $key => $value) {
$user->$key = addslashes($adminuser->$key);
}
//Note: commas within a field should be encoded as &#44 (for comma separated csv files)
//Note: semicolon within a field should be encoded as &#59 (for semicolon separated csv files)
$line = split($csv_delimiter, fgets($fp,1024));
foreach ($line as $key => $value) {
//decode encoded commas
$record[$header[$key]] = preg_replace($csv_encode,$csv_delimiter2,trim($value));
}
if ($record[$header[0]]) {
// add a new user to the database
// add fields to object $user
foreach ($record as $name => $value) {
// check for required values
if ($required[$name] and !$value) {
error(get_string('missingfield', 'error', $name). " ".
get_string('erroronline', 'error', $linenum) .". ".
get_string('processingstops', 'error'),
'uploaduser.php?sesskey='.$USER->sesskey);
}
// password needs to be encrypted
else if ($name == "password" && !empty($value)) {
$user->password = hash_internal_user_password($value);
}
else if ($name == "username") {
$user->username = addslashes(moodle_strtolower($value));
}
// normal entry
else {
$user->{$name} = addslashes($value);
}
}
$user->confirmed = 1;
$user->timemodified = time();
$linenum++;
$username = $user->username;
$addcourse[0] = $user->course1;
$addcourse[1] = $user->course2;
$addcourse[2] = $user->course3;
$addcourse[3] = $user->course4;
$addcourse[4] = $user->course5;
$addgroup[0] = $user->group1;
$addgroup[1] = $user->group2;
$addgroup[2] = $user->group3;
$addgroup[3] = $user->group4;
$addgroup[4] = $user->group5;
$addtype[0] = $user->type1;
$addtype[1] = $user->type2;
$addtype[2] = $user->type3;
$addtype[3] = $user->type4;
$addtype[4] = $user->type5;
for ($i=0; $i<5; $i++) {
$course[$i]=NULL;
}
foreach ($courses as $eachcourse) {
for ($i=0; $i<5; $i++) {
if ($eachcourse->shortname == $addcourse[$i]) {
$course[$i] = $eachcourse;
}
}
}
if ($user->username === 'changeme') {
notify(get_string('invaliduserchangeme', 'admin'));
$userserrors++;
continue;
}
// before insert/update, check whether we should be updating
// an old record instead
if ($allowrenames && !empty($user->oldusername) ) {
$user->oldusername = moodle_strtolower($user->oldusername);
if ($olduser = get_record('user','username',$user->oldusername)) {
if (set_field('user', 'username', $user->username, 'username', $user->oldusername)) {
notify(get_string('userrenamed', 'admin') . " : $user->oldusername $user->username");
$renames++;
} else {
notify(get_string('usernotrenamedexists', 'error') . " : $user->oldusername $user->username");
$renameerrors++;
continue;
}
} else {
notify(get_string('usernotrenamedmissing', 'error') . " : $user->oldusername $user->username");
$renameerrors++;
continue;
}
}
if ($olduser = get_record("user","username",$username)) {
if ($updateaccounts) {
// Record is being updated
$user->id = $olduser->id;
if (update_record('user', $user)) {
notify("$user->id , $user->username ".get_string('useraccountupdated', 'admin'));
$usersupdated++;
} else {
notify(get_string('usernotupdatederror', 'error', $username));
$userserrors++;
continue;
}
} else {
//Record not added - user is already registered
//In this case, output userid from previous registration
//This can be used to obtain a list of userids for existing users
notify("$user->id ".get_string('usernotaddedregistered', 'error', $username));
$userserrors++;
}
} else { // new user
if ($user->id = insert_record("user", $user)) {
notify("$struser: $user->id = $user->username");
$usersnew++;
if (empty($user->password) && $createpassword) {
// passwords will be created and sent out on cron
insert_record('user_preferences', array( userid => $user->id,
name => 'create_password',
value => 1));
insert_record('user_preferences', array( userid => $user->id,
name => 'auth_forcepasswordchange',
value => 1));
}
} else {
// Record not added -- possibly some other error
notify(get_string('usernotaddederror', 'error', $username));
$userserrors++;
continue;
}
}
for ($i=0; $i<5; $i++) {
if ($addcourse[$i] && !$course[$i]) {
notify(get_string('unknowncourse', 'error', $addcourse[$i]));
}
}
for ($i=0; $i<5; $i++) {
$groupid[$i] = 0;
if ($addgroup[$i]) {
if (!$course[$i]) {
notify(get_string('coursegroupunknown','error',$addgroup[$i]));
} else {
if ($group = get_record("groups","courseid",$course[$i]->id,"name",$addgroup[$i])) {
$groupid[$i] = $group->id;
} else {
notify(get_string('groupunknown','error',$addgroup[$i]));
}
}
}
}
for ($i=0; $i<5; $i++) { /// Enrol into courses if necessary
if ($course[$i]) {
if (isset($addtype[$i])) {
switch ($addtype[$i]) {
case 2: // teacher
$ret = add_teacher($user->id, $course[$i]->id, 1);
break;
case 3: // non-editing teacher
$ret = add_teacher($user->id, $course[$i]->id, 0);
break;
default: // student
$ret = enrol_student($user->id, $course[$i]->id);
break;
}
} else {
$ret = enrol_student($user->id, $course[$i]->id);
}
if ($ret) { // OK
notify('-->'. get_string('enrolledincourse', '', $addcourse[$i]));
} else {
notify('-->'.get_string('enrolledincoursenot', '', $addcourse[$i]));
}
}
}
for ($i=0; $i<5; $i++) { // Add user to groups if necessary
if ($course[$i] && $groupid[$i]) {
if (record_exists('user_students','userid',$user->id,'course',$course[$i]->id) ||
record_exists('user_teachers','userid',$user->id,'course',$course[$i]->id)) {
if (add_user_to_group($groupid[$i], $user->id)) {
notify('-->' . get_string('addedtogroup','',$addgroup[$i]));
} else {
notify('-->' . get_string('addedtogroupnot','',$addgroup[$i]));
}
} else {
notify('-->' . get_string('addedtogroupnotenrolled','',$addgroup[$i]));
}
}
}
unset ($user);
}
}
fclose($fp);
notify("$strusersnew: $usersnew");
notify(get_string('usersupdated', 'admin') . ": $usersupdated");
notify(get_string('errors', 'admin') . ": $userserrors");
if ($allowrenames) {
notify(get_string('usersrenamed', 'admin') . ": $renames");
notify(get_string('renameerrors', 'admin') . ": $renameerrors");
}
echo '<hr />';
}
/// Print the form
print_heading_with_help($struploadusers, 'uploadusers');
print_heading_with_help($struploadusers, 'uploadusers');
$noyesoptions = array( get_string('no'), get_string('yes') );
$maxuploadsize = get_max_upload_file_size();
echo '<center>';
echo '<form method="post" enctype="multipart/form-data" action="uploaduser.php">'.
$strchoose.':<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxuploadsize.'">'.
'<input type="hidden" name="sesskey" value="'.$USER->sesskey.'">'.
'<input type="file" name="userfile" size="30">'.
'<input type="submit" value="'.$struploadusers.'">'.
'</form></br>';
echo '</center>';
$maxuploadsize = get_max_upload_file_size();
echo '<center>';
echo '<form method="post" enctype="multipart/form-data" action="uploaduser.php">'.
$strfile.'&nbsp;<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxuploadsize.'">'.
'<input type="hidden" name="sesskey" value="'.$USER->sesskey.'">'.
'<input type="file" name="userfile" size="30">';
print_heading(get_string('settings'));
echo '<table>';
echo '<tr><td>' . get_string('passwordhandling', 'auth') . '</td><td>';
$passwordopts = array( 0 => get_string('infilefield', 'auth'),
1 => get_string('createpasswordifneeded', 'auth'),
);
choose_from_menu($passwordopts, 'createpassword', $createpassword);
echo '</td></tr>';
echo '<tr><td>' . get_string('updateaccounts', 'admin') . '</td><td>';
choose_from_menu($noyesoptions, 'updateaccounts', $updateaccounts);
echo '</td></tr>';
echo '<tr><td>' . get_string('allowrenames', 'admin') . '</td><td>';
choose_from_menu($noyesoptions, 'allowrenames', $allowrenames);
echo '</td></tr>';
echo '</table><br />';
echo '<input type="submit" value="'.$struploadusers.'">';
echo '</form><br />';
echo '</center>';
print_footer($course);
print_footer($course);
function my_file_get_contents($filename, $use_include_path = 0) {
/// Returns the file as one big long string
/// Returns the file as one big long string
$data = "";
$file = @fopen($filename, "rb", $use_include_path);
+54 -51
View File
@@ -1,35 +1,38 @@
<?php // $Id$
require_once('../config.php');
require_once("../config.php");
$newuser = optional_param('newuser', 0, PARAM_BOOL);
$delete = optional_param('delete', 0, PARAM_INT);
$confirm = optional_param('confirm', '', PARAM_ALPHANUM); //md5 confirmation hash
$confirmuser = optional_param('confirmuser', 0, PARAM_INT);
$sort = optional_param('sort', 'name', PARAM_ALPHA);
$dir = optional_param('dir', 'ASC', PARAM_ALPHA);
$page = optional_param('page', 0, PARAM_INT);
$perpage = optional_param('perpage', 30, PARAM_INT); // how many per page
$search = optional_param('search', '', PARAM_RAW);
$lastinitial = optional_param('lastinitial', '', PARAM_CLEAN); // only show students with this last initial
$firstinitial = optional_param('firstinitial', '', PARAM_CLEAN); // only show students with this first initial
optional_variable($newuser, "");
optional_variable($delete, "");
optional_variable($confirm, "");
optional_variable($confirmuser, "");
optional_variable($sort, "name");
optional_variable($dir, "ASC");
optional_variable($page, 0);
optional_variable($search, "");
if (!empty($search)) {
$search=trim($search);
}
optional_variable($lastinitial, ""); // only show students with this last initial
optional_variable($firstinitial, ""); // only show students with this first initial
optional_variable($perpage, "30"); // how many per page
unset($user);
unset($admin);
unset($teacher);
$search = trim($search);
$user = new object();
$admin = new object();
$teacher = new object();
if (! record_exists("user_admins")) { // No admin user yet
$user->firstname = get_string("admin");
$user->lastname = get_string("user");
$user->username = "admin";
$user->password = hash_internal_user_password("admin");
$user->email = "root@localhost";
$user->confirmed = 1;
$user->lang = $CFG->lang;
$user->maildisplay = 1;
$user->firstname = get_string("admin");
$user->lastname = get_string("user");
$user->username = "admin";
$user->password = md5("admin");
$user->email = "root@localhost";
$user->confirmed = 1;
$user->lang = $CFG->lang;
$user->maildisplay = 1;
$user->timemodified = time();
if (! $user->id = insert_record("user", $user)) {
@@ -82,14 +85,14 @@
}
if ($newuser and confirm_sesskey()) { // Create a new user
$user->auth = "manual";
$user->firstname = "";
$user->lastname = "";
$user->username = "changeme";
$user->password = "";
$user->email = "";
$user->lang = $CFG->lang;
$user->confirmed = 1;
$user->auth = "manual";
$user->firstname = "";
$user->lastname = "";
$user->username = "changeme";
$user->password = "";
$user->email = "";
$user->lang = $CFG->lang;
$user->confirmed = 1;
$user->timemodified = time();
if (! $user->id = insert_record("user", $user)) {
@@ -127,7 +130,7 @@
error("No such user!");
}
$confirmeduser = new object();
unset($confirmeduser);
$confirmeduser->id = $confirmuser;
$confirmeduser->confirmed = 1;
$confirmeduser->timemodified = time();
@@ -155,10 +158,10 @@
exit;
} else if (!$user->deleted) {
$updateuser = new object();
unset($updateuser);
$updateuser->id = $user->id;
$updateuser->deleted = "1";
$updateuser->username = addslashes("$user->email.".time()); // Remember it just in case
$updateuser->username = "$user->email.".time(); // Remember it just in case
$updateuser->email = ""; // Clear this field to free it up
$updateuser->idnumber = ""; // Clear this field to free it up
$updateuser->timemodified = time();
@@ -196,7 +199,7 @@
$columnicon = " <img src=\"$CFG->pixpath/t/$columnicon.gif\" alt=\"\" />";
}
$$column = "<a href=\"user.php?sort=$column&amp;dir=$columndir&amp;search=".urlencode(stripslashes($search))."&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial\">".$string[$column]."</a>$columnicon";
$$column = "<a href=\"user.php?sort=$column&amp;dir=$columndir&amp;search=$search&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial\">".$string[$column]."</a>$columnicon";
}
if ($sort == "name") {
@@ -223,7 +226,7 @@
echo "<center><p align=\"center\">";
echo get_string("firstname")." : ";
if ($firstinitial) {
echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&".
"perpage=$perpage&amp;lastinitial=$lastinitial\">$strall</a> ";
} else {
echo " <b>$strall</b> ";
@@ -232,7 +235,7 @@
if ($letter == $firstinitial) {
echo " <b>$letter</b> ";
} else {
echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&".
"perpage=$perpage&amp;lastinitial=$lastinitial&amp;firstinitial=$letter\">$letter</a> ";
}
}
@@ -242,7 +245,7 @@
echo get_string("lastname")." : ";
if ($lastinitial) {
echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&".
"perpage=$perpage&amp;firstinitial=$firstinitial\">$strall</a> ";
} else {
echo " <b>$strall</b> ";
@@ -251,7 +254,7 @@
if ($letter == $lastinitial) {
echo " <b>$letter</b> ";
} else {
echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&".
"perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$letter\">$letter</a> ";
}
}
@@ -259,15 +262,15 @@
echo "</center>";
print_paging_bar($usercount, $page, $perpage,
"user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
"user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=$search&amp;");
flush();
if (!$users) {
$match = array();
if ($search !== '') {
$match[] = s($search);
if ($search) {
$match[] = $search;
}
if ($firstinitial) {
$match[] = get_string("firstname").": $firstinitial"."___";
@@ -307,7 +310,7 @@
if ($user->id == $USER->id or $user->username == "changeme") {
$deletebutton = "";
} else {
$deletebutton = "<a href=\"user.php?delete=$user->id&amp;sesskey=$USER->sesskey\">$strdelete</a>";
$deletebutton = "<a href=\"user.php?delete=$user->id&sesskey=$USER->sesskey\">$strdelete</a>";
}
if ($user->lastaccess) {
$strlastaccess = format_time(time() - $user->lastaccess);
@@ -315,7 +318,7 @@
$strlastaccess = get_string("never");
}
if ($user->confirmed == 0) {
$confirmbutton = "<a href=\"user.php?confirmuser=$user->id&amp;sesskey=$USER->sesskey\">" . get_string("confirm") . "</a>";
$confirmbutton = "<a href=\"user.php?confirmuser=$user->id&sesskey=$USER->sesskey\">" . get_string("confirm") . "</a>";
} else {
$confirmbutton = "";
}
@@ -333,21 +336,21 @@
echo "<table class=\"searchbox\" align=\"center\" cellpadding=\"10\"><tr><td>";
echo "<form action=\"user.php\" method=\"get\">";
echo "<input type=\"text\" name=\"search\" value=\"".s($search, true)."\" size=\"20\" />";
echo "<input type=\"submit\" value=\"$strsearch\" />";
echo "<input type=\"text\" name=\"search\" value=\"$search\" size=\"20\">";
echo "<input type=\"submit\" value=\"$strsearch\">";
if ($search) {
echo "<input type=\"button\" onclick=\"document.location='user.php';\" value=\"$strshowallusers\" />";
echo "<input type=\"button\" onclick=\"document.location='user.php';\" value=\"$strshowallusers\">";
}
echo "</form>";
echo "</td></tr></table>";
print_heading("<a href=\"user.php?newuser=true&amp;sesskey=$USER->sesskey\">".get_string("addnewuser")."</a>");
print_heading("<a href=\"user.php?newuser=true&sesskey=$USER->sesskey\">".get_string("addnewuser")."</a>");
if (!empty($table)) {
print_table($table);
print_paging_bar($usercount, $page, $perpage,
"user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage".
"&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
print_heading("<a href=\"user.php?newuser=true&amp;sesskey=$USER->sesskey\">".get_string("addnewuser")."</a>");
"&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=$search&amp;");
print_heading("<a href=\"user.php?newuser=true&sesskey=$USER->sesskey\">".get_string("addnewuser")."</a>");
}
+14 -2
View File
@@ -1,6 +1,6 @@
<?php // $Id$
require_once('../config.php');
require_once("../config.php");
require_login();
@@ -24,15 +24,27 @@
$table->data[] = array("<b><a href=\"auth.php?sesskey=$USER->sesskey\">".get_string("authentication")."</a></b>",
get_string("adminhelpauthentication"));
$table->data[] = array("<b><a href=\"user.php\">".get_string("edituser")."</a></b>",
get_string("adminhelpedituser"));
$table->data[] = array("<b><a href=\"$CFG->wwwroot/$CFG->admin/user.php?newuser=true&amp;sesskey=$USER->sesskey\">".get_string("addnewuser")."</a></b>",
get_string("adminhelpaddnewuser"));
$table->data[] = array("<b><a href=\"$CFG->wwwroot/$CFG->admin/uploaduser.php?sesskey=$USER->sesskey\">".get_string("uploadusers")."</a></b>",
get_string("adminhelpuploadusers"));
$table->data[] = array('', '<hr />');
$table->data[] = array("<b><a href=\"enrol.php?sesskey=$USER->sesskey\">".get_string("enrolments")."</a></b>",
get_string("adminhelpenrolments"));
$table->data[] = array("<b><a href=\"../course/index.php?edit=off&amp;sesskey=$USER->sesskey\">".get_string("assignstudents")."</a></b>",
get_string("adminhelpassignstudents"));
$table->data[] = array("<b><a href=\"../course/index.php?edit=on&amp;sesskey=$USER->sesskey\">".get_string("assignteachers")."</a></b>",
get_string("adminhelpassignteachers")." <img src=\"../pix/t/user.gif\" height=\"11\" width=\"11\" alt=\"\" />");
$table->data[] = array("<b><a href=\"creators.php?sesskey=$USER->sesskey\">".get_string("assigncreators")."</a></b>",
get_string("adminhelpassigncreators"));
$table->data[] = array("<b><a href=\"admin.php?sesskey=$USER->sesskey\">".get_string("assignadmins")."</a></b>",
get_string("adminhelpassignadmins"));
print_table($table);
print_footer($site);
?>
-70
View File
@@ -1,70 +0,0 @@
<?php
if (!isset($form->dbhost)) {
$form->dbhost = '';
}
if (!isset($form->dbname)) {
$form->dbname = '';
}
if (!isset($form->dbuser)) {
$form->dbuser = '';
}
if (!isset($form->dbpass)) {
$form->dbpass = '';
}
if (!isset($form->dbcluster)) {
$form->dbcluster = '';
}
if (!isset($form->pathtopgdump)) {
$form->pathtopgdump = '';
}
if (!isset($form->pathtopsql)) {
$form->pathtopsql = '';
}
?>
<form name="migratefrom" action="utfdbmigrate.php" method="POST">
<input name="migrate" type="hidden" value="1" />
<input name="sesskey" type="hidden" value="<?php echo sesskey() ?>" />
<?php if (isset($err["dbconnect"])) formerr($err["dbconnect"]); ?>
<?php if (isset($err["pathtopgdump"])) formerr($err["pathtopgdump"]); ?>
<?php if (isset($err["pathtopsql"])) formerr($err["pathtopsql"]); ?>
<table cellpadding="9" cellspacing="0" width="500">
<tr valign="top">
<td align="right"><?php print_string("dbhost", "install") ?>:</td>
<td><input type="text" name="dbhost" value="<?php p($form->dbhost) ?>" />
</td>
</tr>
<tr valign="top">
<td align="right"><?php print_string("database", "install") ?>:</td>
<td><input type="text" name="dbname" value="<?php p($form->dbname) ?>" />
</td>
</tr>
<tr valign="top">
<td align="right"><?php print_string("user") ?>:</td>
<td><input type="text" name="dbuser" value="<?php p($form->dbuser) ?>" />
</td>
</tr>
<tr valign="top">
<td align="right"><?php print_string("password") ?>:</td>
<td><input type="text" name="dbpass" value="<?php p($form->dbpass) ?>" />
</td>
</tr>
<tr valign="top">
<td align="right"><?php print_string("pgcluster", "admin") ?>:</td>
<td><input type="text" name="dbcluster" value="<?php p($form->dbcluster) ?>" />
<td><?php print_string("pgclusterdescription", "admin") ?></td>
</tr>
<tr valign="top">
<td align="right" nowrap="nowrap"><?php print_string("pathtopgdump","admin") ?>:</td>
<td><input type="text" name="pathtopgdump" value="<?php p($form->pathtopgdump) ?>" />
<td><?php print_string("pathtopgdumpdesc","admin"); ?></td>
</tr>
<tr valign="top">
<td align="right" nowrap="nowrap"><?php print_string("pathtopsql","admin") ?>:</td>
<td><input type="text" name="pathtopsql" value="<?php p($form->pathtopsql) ?>" />
<td><?php print_string("pathtopsqldesc","admin"); ?></td>
</tr>
</table>
<center>
<input type="submit" value="<?php print_string('continue') ?>"/>
&nbsp;<input type="button" value="<?php print_string('cancel') ?>" onclick="javascript:history.go(-1)" />
</center>
File diff suppressed because it is too large Load Diff
-8
View File
@@ -121,14 +121,6 @@ Optional:
Userinformation in array ( name => value, ....
or false in case of error
auth_validate_form(&$form, &$err)
Validate form data.
Returns:
Bool. Manipulates $form and $err arrays in place
COURSE CREATING
auth_iscreator($username)
+7 -21
View File
@@ -1,27 +1,13 @@
<?php
require_once('languages.php');
// Initialize vars
if (!isset ($config->cas_hostname)) {
$config->cas_hostname = "";
}
if (!isset ($config->cas_port)) {
$config->cas_port = "";
}
if (!isset ($config->cas_version)) {
$config->cas_version = "";
}
if (!isset ($config->cas_baseuri)) {
$config->cas_baseuri = "";
}
if (!isset ($config->cas_language)) {
$config->cas_language = "";
}
if (!isset ($config->cas_use_cas)) {
$config->cas_use_cas = "";
}
if (!isset ($config->cas_create_user)) {
$config->cas_create_user = "0";
}
optional_variable($config->cas_hostname,"");
optional_variable($config->cas_port,"");
optional_variable($config->cas_version,"");
optional_variable($config->cas_baseuri,"");
optional_variable($config->cas_language,"");
optional_variable($config->cas_use_cas,"");
optional_variable($config->cas_create_user,"0");
?>
+3 -9
View File
@@ -1,16 +1,10 @@
<?php
// version $Id$
// Page for forbidden access from CAS
require("../../config.php");
if (!$site = get_site()) {
error("No site found!");
}
$loginsite = get_string("loginsite");
require_once("../../config.php");
$errormsg = get_string("auth_cas_invalidcaslogin", "auth");
print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite);
print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite,
$focus, "", true, "<div align=right>$langmenu</div>");
include("forbidden.html");
print_footer();
exit;
+1 -87
View File
@@ -1,87 +1 @@
<table width="90%" border="0" cellspacing="10" cellpadding="5" align="center">
<tr>
<?php if ($show_instructions) { ?>
<td width="50%" class="headingblock">
<p align="center"><b><font size="3"><?php print_string("returningtosite") ?></font></b></p>
</td>
<td width="50%" class="headingblock">
<p align="center"><b><font size="3"><?php print_string("firsttime") ?></font></b></p>
</td>
<?php } ?>
</tr>
<tr>
<td width="50%" align="center" valign="top" class="generalbox">
<p><?php print_string("loginusing") ?>:<br />
(<?php print_string("cookiesenabled");?>)
<?php helpbutton("cookies", get_string("cookiesenabled"))?><br /><?php formerr($errormsg) ?>
</p>
<form action="index.php" method="post" name="login" id="login">
<table border="0" align="center" style="font-size: small">
<tr>
<td width="100%">
<input type="hidden" name="username" value="cas" />
<input type="hidden" name="password" value="cas" />
<input type="submit" value="<?php print_string("auth_cas_logincas", "auth") ?>" />
</td>
</tr>
</table>
</form>
<?php if ($CFG->guestloginbutton) { ?>
<hr width="80%" />
<p><?php print_string("someallowguest") ?>:</p>
<form action="index.php" method="post" name="guestlogin">
<input type="hidden" name="username" value="guest" />
<input type="hidden" name="password" value="guest" />
<input type="submit" value="<?php print_string("loginguest") ?>" />
</form>
<?php } ?>
<?php if (is_internal_auth() ) {
$changepassword = "forgot_password.php";
$changebuttonname = get_string("senddetails");
?>
<hr width="80%" />
<p><?php print_string("forgotten") ?></p>
<form action="<?php p($changepassword) ?>" method="get" name="changepassword">
<input type="submit" value="<?php p($changebuttonname) ?>" />
</form>
<?php } ?>
</td>
<?php if ($show_instructions) { ?>
<td width="50%" valign="top" class="generalbox">
<?php switch ($CFG->auth) {
case "email":
print_string("loginsteps", "", "signup.php");
?>
<div align="center">
<form action="signup.php" method="get" name="signup">
<input type="submit" value="<?php print_string("startsignup") ?>" />
</form>
</div>
<?php break;
case "none":
print_string("loginstepsnone");
break;
default:
echo format_text($CFG->auth_instructions);
if (!function_exists('auth_user_login')) {
require_once("../auth/$CFG->auth/lib.php");
}
if (!empty($CFG->auth_user_create) and function_exists('auth_user_create') ){
?>
<div align="center">
<form action="signup.php" method="get" name="signup">
<input type="submit" value="<?php print_string("startsignup") ?>" />
</form>
</div>
<?php }
}
?>
</td></tr>
<?php } ?>
</table>
<table width="90%" border="0" cellspacing="10" cellpadding="5" align="center">
+11 -13
View File
@@ -1,5 +1,5 @@
<?PHP
// $Id$
// $Id: lib.php
// author: romuald Lorthioir
//CHANGELOG:
//16/03/2005 Use of LDAP Module
@@ -13,7 +13,6 @@ This Module is using the /auth/cas/index_form.html.
This module is using the LDAP Module so you need the /auth/ldap directory.
You can see /auth/ldap/lib.php for the other functions.
*/
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
define('AUTH_LDAP_NAME', 'cas'); // for ldap module
require_once($CFG->dirroot.'/config.php');
@@ -98,11 +97,13 @@ function cas_ldap_auth_user_login ($username, $password) {
function cas_authenticate_user_login ($username, $password) {
global $CFG;
// FIX ME: $cas_validate is not global
$cas_validate=true;
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(int)$CFG->cas_port,$CFG->cas_baseuri);
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(Integer)$CFG->cas_port,$CFG->cas_baseuri);
phpCAS::setLang($CFG->cas_language);
phpCAS::forceAuthentication();
if (!phpCAS::isAuthenticated()){
phpCAS::authenticateIfNeeded();
}
if ($CFG->cas_create_user=="0"){
if (record_exists('user', 'username', phpCAS::getUser())) {
$user = authenticate_user_login(phpCAS::getUser(), 'cas');
@@ -132,16 +133,14 @@ function cas_authenticate_user_login ($username, $password) {
*/
function cas_automatic_authenticate ($user="") {
global $CFG;
// FIX ME: $cas_validate is not global, but it works anyway ;-)
if (!$cas_validate){
$cas_validate=true;
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(int)$CFG->cas_port,$CFG->cas_baseuri);
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(Integer)$CFG->cas_port,$CFG->cas_baseuri);
phpCAS::setLang($CFG->cas_language);
$cas_user_exist=phpCAS::checkAuthentication();
if (!$cas_user_exist && !$CFG->guestloginbutton){
$cas_user_exist=phpCAS::forceAuthentication();
if (!phpCAS::isAuthenticated() && !$CFG->guestloginbutton){
phpCAS::authenticateIfNeeded();
}
if ($cas_user_exist){
if (phpCAS::isAuthenticated()){
if ($CFG->cas_create_user=="0"){
if (record_exists('user', 'username', phpCAS::getUser())) {
$user = authenticate_user_login(phpCAS::getUser(), 'cas');
@@ -167,5 +166,4 @@ function cas_automatic_authenticate ($user="") {
}
}
?>
?>
+11 -5
View File
@@ -1,9 +1,9 @@
<?php
// $Id$
// $Id: login.php
// author: romualdLorthioir $
//CHANGELOG:
//05.03.2005 replace /login/index.php
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
//Define variables used in page
if (!$site = get_site()) {
@@ -18,7 +18,7 @@ defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
if (empty($CFG->loginhttps)) {
$wwwroot = $CFG->wwwroot;
} else {
$wwwroot = str_replace('http:','https:',$CFG->wwwroot);
$wwwroot = str_replace('http','https',$CFG->wwwroot);
}
$langmenu = popup_form ("$wwwroot/login/index.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
}
@@ -109,7 +109,10 @@ defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
//Select password change url
if (is_internal_auth() || $CFG->{'auth_'.$USER->auth.'_stdchangepassword'}){
$passwordchangeurl=$CFG->wwwroot.'/login/change_password.php';
} elseif($CFG->changepassword) {
$passwordchangeurl=$CFG->changepassword;
}
// check whether the user should be changing password
if (get_user_preferences('auth_forcepasswordchange', false)){
@@ -216,7 +219,10 @@ defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
//Select password change url
if (is_internal_auth() || $CFG->{'auth_'.$USER->auth.'_stdchangepassword'}){
$passwordchangeurl=$CFG->wwwroot.'/login/change_password.php';
}
} elseif($CFG->changepassword) {
$passwordchangeurl=$CFG->changepassword;
}
// check whether the user should be changing password
if (get_user_preferences('auth_forcepasswordchange', false)){
@@ -313,4 +319,4 @@ defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
// No footer on this page
?>
?>
+6 -11
View File
@@ -1,15 +1,10 @@
<?php
// $Id$
// logout the user from CAS server (destroy the ticket)
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
// logout the user from CAS server (destroy the ticket)
global $CFG;
if ($CFG->cas_logout){
require_once($CFG->dirroot.'/config.php');
include_once($CFG->dirroot.'/lib/cas/CAS.php');
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(int)$CFG->cas_port,$CFG->cas_baseuri);
$backurl = $CFG->wwwroot;
phpCAS::logout($backurl);
}
require_once($CFG->dirroot.'/config.php');
include_once($CFG->dirroot.'/lib/cas/CAS.php');
phpCAS::client($CFG->cas_version,$CFG->cas_hostname,(Integer)$CFG->cas_port,$CFG->cas_baseuri);
$backurl = $CFG->wwwroot;
phpCAS::logout($backurl);
?>
-39
View File
@@ -1,39 +0,0 @@
<?php
/** auth_db_sync_users.php
*
* This script is meant to be called from a cronjob to sync moodle with the LDAP
* backend in those setups where the LDAP backend acts as 'master'.
*
* Recommended cron entry:
* # 5 minutes past 4am
* 5 4 * * * /usr/bin/php -c /etc/php4/cli/php.ini /var/www/moodle/auth/db/auth_db_sync_users.php
*
* Notes:
* - If you have a large number of users, you may want to raise the memory limits
* by passing -d memory_limit=256M
* - For debugging & better logging, you are encouraged to use in the command line:
* -d log_errors=1 -d error_reporting=E_ALL -d display_errors=0 -d html_errors=0
*
* Performance notes:
* + The code is simpler, but not as optimized as its LDAP counterpart.
*
*
*/
if(!empty($_SERVER['GATEWAY_INTERFACE'])){
error_log("should not be called from apache!");
exit;
}
require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); // global moodle config file.
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.'/auth/db/lib.php');
require_once($CFG->dirroot.'/mod/forum/lib.php');
$CFG->debug=10;
auth_sync_users(true );
?>
-5
View File
@@ -26,10 +26,7 @@
if (!isset($config->auth_dbpasstype)) {
$config->auth_dbpasstype = "plaintext";
}
$pluginconfig = get_config('auth/db');
?>
<tr valign="top" class="required">
<td align="right">auth_dbhost:</td>
<td>
@@ -129,8 +126,6 @@
<?php
$passtype["plaintext"] = get_string("plaintext", "auth");
$passtype["md5"] = get_string("md5", "auth");
$passtype["internal"] = get_string("internal", "auth");
choose_from_menu($passtype, "auth_dbpasstype", $config->auth_dbpasstype, "");
?>
+21 -394
View File
@@ -21,59 +21,31 @@ function auth_user_login ($username, $password) {
}
// Connect to the external database
$authdb = &ADONewConnection($CFG->auth_dbtype);
$authdb = &ADONewConnection($CFG->auth_dbtype);
$authdb->PConnect($CFG->auth_dbhost,$CFG->auth_dbuser,$CFG->auth_dbpass,$CFG->auth_dbname);
if ($CFG->auth_dbpasstype === 'internal') {
// lookup username externally, but resolve
// password locally -- to support backend that
// don't track passwords
$rs = $authdb->Execute("SELECT * FROM $CFG->auth_dbtable
WHERE $CFG->auth_dbfielduser = '$username' ");
$authdb->Close();
if (!$rs) {
notify("Could not connect to the specified authentication database...");
return false;
}
if ( $rs->RecordCount() ) {
// user exists exterally
// check username/password internally
if ($user = get_record('user', 'username', $username)) {
return validate_internal_user_password($user, $password);
}
} else {
// user does not exist externally
return false;
}
} else {
// normal case: use external db for passwords
if ($CFG->auth_dbpasstype === 'md5') { // Re-format password accordingly
switch ($CFG->auth_dbpasstype) { // Re-format password accordingly
case "md5":
$password = md5($password);
}
break;
}
$rs = $authdb->Execute("SELECT * FROM $CFG->auth_dbtable
$rs = $authdb->Execute("SELECT * FROM $CFG->auth_dbtable
WHERE $CFG->auth_dbfielduser = '$username'
AND $CFG->auth_dbfieldpass = '$password' ");
$authdb->Close();
$CFG->prefix = $prefix;
if (!$rs) {
notify("Could not connect to the specified authentication database...");
return false;
}
if ( $rs->RecordCount() ) {
return true;
} else {
return false;
}
$authdb->Close();
$CFG->prefix = $prefix;
if (!$rs) {
notify("Could not connect to the specified authentication database...");
return false;
}
if ( $rs->RecordCount() ) {
return true;
} else {
return false;
}
}
@@ -104,11 +76,7 @@ function auth_get_userinfo($username){
if ($rs = $authdb->Execute("SELECT ".$pcfg["field_map_$field"]." FROM $CFG->auth_dbtable
WHERE $CFG->auth_dbfielduser = '$username'")) {
if ( $rs->RecordCount() == 1 ) {
if (!empty($CFG->unicodedb)) {
$result["$field"] = addslashes(stripslashes($rs->fields[0]));
} else {
$result["$field"] = addslashes(stripslashes(utf8_decode($rs->fields[0])));
}
$result["$field"] = $rs->fields[0];
}
}
}
@@ -117,345 +85,4 @@ function auth_get_userinfo($username){
return $result;
}
function auth_user_update_password($username, $newpassword) {
global $CFG;
if ($CFG->auth_dbpasstype === 'internal') {
return set_field('user', 'password', md5($newpassword), 'username', $username);
} else {
// we should have never been called!
return false;
}
}
/**
* syncronizes user fron external db to moodle user table
*
* Sync shouid be done by using idnumber attribute, not username.
* You need to pass firstsync parameter to function to fill in
* idnumbers if they dont exists in moodle user table.
*
* Syncing users removes (disables) users that dont exists anymore in external db.
* Creates new users and updates coursecreator status of users.
*
* @param bool $do_updates Optional: set to true to force an update of existing accounts
*
* This implementation is simpler but less scalable than the one found in the LDAP module.
*
*/
function auth_sync_users ($do_updates=0) {
global $CFG;
$pcfg = get_config('auth/db');
///
/// list external users
///
$userlist = auth_get_userlist();
$quoteduserlist = implode("', '", $userlist);
$quoteduserlist = "'$quoteduserlist'";
///
/// delete obsolete internal users
///
// find obsolete users
if (count($userlist)) {
$sql = 'SELECT u.id, u.username
FROM ' . $CFG->prefix .'user u
WHERE u.auth=\'db\' AND u.deleted=\'0\' AND u.username NOT IN (' . $quoteduserlist . ')';
} else {
$sql = 'SELECT u.id, u.username
FROM ' . $CFG->prefix .'user u
WHERE u.auth=\'db\' AND u.deleted=\'0\' ';
}
$remove_users = get_records_sql($sql);
if (!empty($remove_users)){
print "User entries to remove: ". count($remove_users) . "\n";
begin_sql();
foreach ($remove_users as $user) {
//following is copy pasted from admin/user.php
//maybe this should moved to function in lib/datalib.php
unset($updateuser);
$updateuser->id = $user->id;
$updateuser->deleted = "1";
$updateuser->timemodified = time();
if (update_record("user", $updateuser)) {
unenrol_student($user->id); // From all courses
remove_teacher($user->id); // From all courses
remove_admin($user->id);
notify(get_string("deletedactivity", "", fullname($user, true)) );
} else {
notify(get_string("deletednot", "", fullname($user, true)));
}
//copy pasted part ends
}
commit_sql();
}
unset($remove_users); // free mem!
if (!count($userlist)) {
// exit right here
// nothing else to do
return true;
}
///
/// update existing accounts
///
if ($do_updates) {
// narrow down what fields we need to update
$all_keys = array_keys(get_object_vars($pcfg));
$updatekeys = array();
foreach ($all_keys as $key) {
if (preg_match('/^field_updatelocal_(.+)$/',$key, $match)) {
if ($pcfg->{$key} === 'onlogin') {
array_push($updatekeys, $match[1]); // the actual key name
}
}
}
// print_r($all_keys); print_r($updatekeys);
unset($all_keys); unset($key);
// only go ahead if we actually
// have fields to update locally
if (!empty($updatekeys)) {
$sql = 'SELECT u.id, u.username
FROM ' . $CFG->prefix .'user u
WHERE u.auth=\'db\' AND u.deleted=\'0\' AND u.username IN (' . $quoteduserlist . ')';
$update_users = get_records_sql($sql);
foreach ($update_users as $user) {
auth_db_update_user_record($user->username, $updatekeys);
}
unset($update_users); // free memory
}
}
///
/// create missing accounts
///
// NOTE: this is very memory intensive
// and generally inefficient
$sql = 'SELECT u.id, u.username
FROM ' . $CFG->prefix .'user u
WHERE u.auth=\'db\' AND u.deleted=\'0\'';
$users = get_records_sql($sql);
// simplify down to usernames
$usernames = array();
foreach ($users as $user) {
array_push($usernames, $user->username);
}
unset($users);
$add_users = array_diff($userlist, $usernames);
unset($usernames);
if(!empty($add_users)){
print "User entries to add: ". count($add_users). "\n";
begin_sql();
foreach($add_users as $user){
$username = $user;
$user = auth_get_userinfo_asobj($user);
// prep a few params
$user->username = $username;
$user->modified = time();
$user->confirmed = 1;
$user->auth = 'db';
// insert it
$old_debug=$CFG->debug;
$CFG->debug=10;
// maybe the user has been deleted before
if ($old_user = get_record('user', 'username', $user->username, 'deleted', 1)) {
$user->id = $old_user->id;
set_field('user', 'deleted', 0, 'username', $user->username);
echo "Revived user $user->username id $user->id\n";
} elseif ($id=insert_record ('user',$user)) { // it is truly a new user
echo "inserted user $user->username id $id\n";
$user->id = $id;
// if relevant, tag for password generation
if ($CFG->auth_dbpasstype === 'internal') {
set_user_preference('auth_forcepasswordchange', 1, $id);
set_user_preference('create_password', 1, $id);
}
} else {
echo "error inserting user $user->username \n";
}
$CFG->debug=$old_debug;
}
commit_sql();
unset($add_users); // free mem
}
return true;
}
function auth_user_exists ($username) {
global $CFG;
$authdb = &ADONewConnection($CFG->auth_dbtype);
$authdb->PConnect($CFG->auth_dbhost,$CFG->auth_dbuser,$CFG->auth_dbpass,$CFG->auth_dbname);
$rs = $authdb->Execute("SELECT * FROM $CFG->auth_dbtable
WHERE $CFG->auth_dbfielduser = '$username' ");
$authdb->Close();
if (!$rs) {
notify("Could not connect to the specified authentication database...");
return false;
}
if ( $rs->RecordCount() ) {
// user exists exterally
// check username/password internally
// ?? there is no $password variable, so why??
/*if ($user = get_record('user', 'username', $username)) {
return ($user->password == md5($password));
}*/
return $rs->RecordCount();
} else {
// user does not exist externally
return false;
}
}
function auth_get_userlist() {
global $CFG;
// Connect to the external database
$authdb = &ADONewConnection($CFG->auth_dbtype);
$authdb->PConnect($CFG->auth_dbhost,$CFG->auth_dbuser,$CFG->auth_dbpass,$CFG->auth_dbname);
// fetch userlist
$rs = $authdb->Execute("SELECT $CFG->auth_dbfielduser AS username
FROM $CFG->auth_dbtable ");
$authdb->Close();
if (!$rs) {
notify("Could not connect to the specified authentication database...");
return false;
}
if ( $rs->RecordCount() ) {
$userlist = array();
while ($rec = $rs->FetchRow()) {
array_push($userlist, $rec['username']);
}
return $userlist;
} else {
return array();
}
}
/**
* reads userinformation from DB and return it in an object
*
* @param string $username username
* @return array
*/
function auth_get_userinfo_asobj($username){
$user_array = truncate_userinfo(auth_get_userinfo($username));
$user = new object;
foreach($user_array as $key=>$value){
$user->{$key} = $value;
}
return $user;
}
function auth_db_update_user_record($username, $updatekeys=false) {
/// will update a local user record from an external source.
/// is a lighter version of the one in moodlelib -- won't do
/// expensive ops such as enrolment
///
/// If you don't pass $updatekeys, there is a performance hit and
/// values removed from DB won't be removed from moodle.
global $CFG;
$pcfg = get_config('auth/db');
//just in case check text case
$username = trim(moodle_strtolower($username));
// get the current user record
$user = get_record('user', 'username', $username);
if (empty($user)) { // trouble
error_log("Cannot update non-existent user: $username");
die;
}
if (function_exists('auth_get_userinfo')) {
if ($newinfo = auth_get_userinfo($username)) {
$newinfo = truncate_userinfo($newinfo);
if (empty($updatekeys)) { // all keys? this does not support removing values
$updatekeys = array_keys($newinfo);
}
foreach ($updatekeys as $key){
unset($value);
if (isset($newinfo[$key])) {
$value = $newinfo[$key];
$value = addslashes(stripslashes($value)); // Just in case
} else {
$value = '';
}
if (!empty($pcfg->{'field_updatelocal_' . $key})) {
if ($user->{$key} != $value) { // only update if it's changed
set_field('user', $key, $value, 'username', $username);
}
}
}
}
}
return get_record_select("user", "username = '$username' AND deleted <> '1'");
}
// A chance to validate form data, and last chance to
// do stuff before it is inserted in config_plugin
function auth_validate_form(&$form, &$err) {
// compat until we rework auth a bit
if ($form['auth_dbpasstype'] === 'internal') {
$CFG->auth_db_stdchangepassword = true;
if ($conf = get_record('config', 'name', 'auth_db_stdchangepassword')) {
$conf->value = 1;
if (! update_record('config', $conf)) {
notify("Could not update $name to $value");
}
} else {
$conf = new StdClass;
$conf->name = 'auth_db_stdchangepassword';
$conf->value = 1;
if (! insert_record('config', $conf)) {
notify("Error: could not add new variable $name !");
}
}
} else {
$CFG->auth_db_stdchangepassword = false;
if ($conf = get_record('config', 'name', 'auth_db_stdchangepassword')) {
$conf->value = 0;
if (! update_record('config', $conf)) {
notify("Could not update $name to $value");
}
} else {
$conf = new StdClass;
$conf->name = 'auth_db_stdchangepassword';
$conf->value = 0;
if (! insert_record('config', $conf)) {
notify("Error: could not add new variable $name !");
}
}
}
return true;
}
?>
?>
+4 -4
View File
@@ -7,11 +7,11 @@ function auth_user_login ($username, $password) {
global $CFG;
if ($user = get_record('user', 'username', $username)) {
return validate_internal_user_password($user, $password);
if (! $user = get_record('user', 'username', $username)) {
return false;
}
return false;
return ($user->password == md5($password));
}
+2 -3
View File
@@ -111,8 +111,7 @@ class fcFPP
$this->_user = $userid;
$this->_pwd = $passwd;
return TRUE;
} elseif (strpos($line, 'You are not allowed')){ // Denied access but a valid user and password
// "Sorry. You are not allowed to login with the FPP interface"
} elseif (preg_match ("/^\Sorry/",$line)){ //Denied access but a valid user and password
return TRUE;
} else { //Invalid user or password
return FALSE;
@@ -216,4 +215,4 @@ class fcFPP
}
?>
?>
+38 -75
View File
@@ -1,51 +1,28 @@
<?php
// Initialize vars
if (!isset($config->ldap_host_url))
{ $config->ldap_host_url = ''; }
if (!isset($config->ldap_contexts))
{ $config->ldap_contexts = ''; }
if (!isset($config->ldap_user_type))
{ $config->ldap_user_type = ''; }
if (!isset($config->ldap_user_attribute))
{ $config->ldap_user_attribute = ''; }
if (!isset($config->ldap_search_sub))
{ $config->ldap_search_sub = ''; }
if (!isset($config->ldap_opt_deref))
{ $config->ldap_opt_deref = ''; }
if (!isset($config->ldap_preventpassindb))
{ $config->ldap_preventpassindb = 0; }
if (!isset($config->ldap_bind_dn))
{$config->ldap_bind_dn = ''; }
if (!isset($config->ldap_bind_pw))
{$config->ldap_bind_pw = ''; }
if (!isset($config->ldap_version))
{$config->ldap_version = '2'; }
if (!isset($config->ldap_objectclass))
{$config->ldap_objectclass = ''; }
if (!isset($config->ldap_memberattribute))
{$config->ldap_memberattribute = ''; }
if (!isset($config->ldap_creators))
{$config->ldap_creators = ''; }
if (!isset($config->ldap_create_context))
{$config->ldap_create_context = ''; }
if (!isset($config->ldap_expiration))
{$config->ldap_expiration = ''; }
if (!isset($config->ldap_expiration_warning))
{$config->ldap_expiration_warning = '10'; }
if (!isset($config->ldap_expireattr))
{$config->ldap_expireattr = ''; }
if (!isset($config->ldap_gracelogins))
{$config->ldap_gracelogins = ''; }
if (!isset($config->ldap_graceattr))
{$config->ldap_graceattr = ''; }
if (!isset($config->auth_user_create))
{$config->auth_user_create = ''; }
if (!isset($config->auth_ldap_forcechangepassword))
{$config->auth_ldap_forcechangepassword = false; }
if (!isset($config->auth_ldap_stdchangepassword))
{$config->auth_ldap_stdchangepassword = false; }
$yesno = array( get_string('no'), get_string('yes') );
optional_variable($config->ldap_host_url, "");
optional_variable($config->ldap_contexts, "");
optional_variable($config->ldap_user_type, "");
optional_variable($config->ldap_user_attribute, "");
optional_variable($config->ldap_search_sub, "");
optional_variable($config->ldap_opt_deref, "");
optional_variable($config->ldap_bind_dn, "");
optional_variable($config->ldap_bind_pw, "");
optional_variable($config->ldap_version, "2");
optional_variable($config->ldap_objectclass, "");
optional_variable($config->ldap_memberattribute, "");
optional_variable($config->ldap_creators, "");
optional_variable($config->ldap_create_context, "");
optional_variable($config->ldap_expiration, "");
optional_variable($config->ldap_expiration_warning, "10");
optional_variable($config->ldap_expireattr, "");
optional_variable($config->ldap_gracelogins, "");
optional_variable($config->ldap_graceattr, "");
optional_variable($config->auth_user_create, "");
optional_variable($config->auth_user_create, "");
optional_variable($config->auth_ldap_forcechangepassword, "");
optional_variable($config->auth_ldap_stdchangepassword, false);
if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
print '<tr><td><p align="center"><font color="red"><strong>Warning:
@@ -63,7 +40,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_host_url:</td>
<td>
<input name="ldap_host_url" type="text" size="30" value="<?php echo $config->ldap_host_url?>" />
<input name="ldap_host_url" type="text" size="30" value="<?php echo $config->ldap_host_url?>">
<?php if (isset($err["ldap_host_url"])) formerr($err["ldap_host_url"]); ?>
</td>
<td>
@@ -92,24 +69,10 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
</td>
</tr>
<tr valign="top" class="required">
<td align="right">ldap_preventpassindb:</td>
<td>
<?php
$choices = array();
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
choose_from_menu ($choices, "ldap_preventpassindb", $config->ldap_preventpassindb, "");
?>
</td><td>
<?php print_string("auth_ldap_preventpassindb","auth") ?>
</td>
</tr>
<tr valign="top" class="required">
<td align="right">ldap_bind_dn:</td>
<td>
<input name="ldap_bind_dn" type="text" size="30" value="<?php echo $config->ldap_bind_dn?>" />
<input name="ldap_bind_dn" type="text" size="30" value="<?php echo $config->ldap_bind_dn?>">
<?php if (isset($err["ldap_bind_dn"])) formerr($err["ldap_bind_dn"]); ?>
</td><td>
<?php print_string("auth_ldap_bind_dn","auth") ?>
@@ -119,7 +82,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_bind_pw:</td>
<td>
<input name="ldap_bind_pw" type="password" size="30" value="<?php echo $config->ldap_bind_pw?>" />
<input name="ldap_bind_pw" type="password" size="30" value="<?php echo $config->ldap_bind_pw?>">
<?php if (isset($err["ldap_bind_pw"])) formerr($err["ldap_bind_pw"]); ?>
</td><td>
<?php print_string("auth_ldap_bind_pw","auth") ?>
@@ -146,7 +109,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_contexts:</td>
<td>
<input name="ldap_contexts" type="text" size="30" value="<?php echo $config->ldap_contexts?>" />
<input name="ldap_contexts" type="text" size="30" value="<?php echo $config->ldap_contexts?>">
<?php if (isset($err["ldap_contexts"])) formerr($err["ldap_contexts"]); ?>
</td>
<td>
@@ -158,7 +121,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<td align="right">ldap_search_sub:</td>
<td>
<?php
$choices = array();
$choices = array();;
$choices["0"] = get_string("no");
$choices["1"] = get_string("yes");
choose_from_menu ($choices, "ldap_search_sub", $config->ldap_search_sub, "");
@@ -189,7 +152,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_user_attribute:</td>
<td>
<input name="ldap_user_attribute" type="text" size="30" value="<?php echo $config->ldap_user_attribute?>" />
<input name="ldap_user_attribute" type="text" size="30" value="<?php echo $config->ldap_user_attribute?>">
<?php if (isset($err["ldap_user_attribute"])) formerr($err["ldap_user_attribute"]); ?>
</td>
<td>
@@ -200,7 +163,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_memberattribute:</td>
<td>
<input name="ldap_memberattribute" type="text" size="30" value="<?php echo $config->ldap_memberattribute?>" />
<input name="ldap_memberattribute" type="text" size="30" value="<?php echo $config->ldap_memberattribute?>">
<?php if (isset($err["ldap_memberattribute"])) formerr($err["ldap_memberattribute"]); ?>
</td><td>
<?php print_string("auth_ldap_memberattribute","auth") ?>
@@ -210,7 +173,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_objectclass:</td>
<td>
<input name="ldap_objectclass" type="text" size="30" value="<?php echo $config->ldap_objectclass?>" />
<input name="ldap_objectclass" type="text" size="30" value="<?php echo $config->ldap_objectclass?>">
<?php if (isset($err["ldap_objectclass"])) formerr($err["ldap_objectclass"]); ?>
</td>
<td>
@@ -233,7 +196,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<?php print_string("no") ?></option>
<option value="1" <?php echo ($config->auth_ldap_forcechangepassword ? 'selected="yes"' : '') ?> >
<?php print_string("yes") ?></option>
</select><br />
</select><br>
</td>
<td align="left" valign="top">
@@ -250,7 +213,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<?php print_string("no") ?></option>
<option value="1" <?php echo ($config->auth_ldap_stdchangepassword ? 'selected="yes"' : '') ?> >
<?php print_string("yes") ?></option>
</select><br />
</select><br>
</td>
<td align="left" valign="top">
@@ -284,7 +247,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_expiration_warning:</td>
<td>
<input name="ldap_expiration_warning" type="text" size="2" value="<?php echo $config->ldap_expiration_warning?>" />
<input name="ldap_expiration_warning" type="text" size="2" value="<?php echo $config->ldap_expiration_warning?>">
<?php if (isset($err["ldap_expiration_warning"])) formerr($err["ldap_expiration_warning"]);
?>
</td>
@@ -296,7 +259,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_exprireattr:</td>
<td>
<input name="ldap_expireattr" type="text" size="30" value="<?php echo $config->ldap_expireattr?>" />
<input name="ldap_expireattr" type="text" size="30" value="<?php echo $config->ldap_expireattr?>">
<?php if (isset($err["ldap_expireattr"])) formerr($err["ldap_expireattr"]);
?>
</td>
@@ -323,7 +286,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_graceattr:</td>
<td>
<input name="ldap_graceattr" type="text" size="30" value="<?php echo $config->ldap_graceattr?>" />
<input name="ldap_graceattr" type="text" size="30" value="<?php echo $config->ldap_graceattr?>">
<?php if (isset($err["ldap_graceattr"])) formerr($err["ldap_graceattr"]);
?>
</td>
@@ -344,7 +307,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_create_context:</td>
<td>
<input name="ldap_create_context" type="text" size="30" value="<?php echo $config->ldap_create_context?>" />
<input name="ldap_create_context" type="text" size="30" value="<?php echo $config->ldap_create_context?>">
<?php if (isset($err["ldap_create_context"])) formerr($err["ldap_create_context"]); ?>
</td><td>
<?php print_string("auth_ldap_create_context","auth") ?>
@@ -361,7 +324,7 @@ if (!function_exists('ldap_connect')){ // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right">ldap_creators:</td>
<td>
<input name="ldap_creators" type="text" size="30" value="<?php echo $config->ldap_creators?>" />
<input name="ldap_creators" type="text" size="30" value="<?php echo $config->ldap_creators?>">
<?php if (isset($err["ldap_creators"])) formerr($err["ldap_creators"]); ?>
</td><td>
<?php print_string("auth_ldap_creators","auth") ?>
+45 -94
View File
@@ -68,7 +68,7 @@ function auth_user_login ($username, $password) {
}
// Try to bind with current username and password
$ldap_login = @ldap_bind($ldapconnection, $ldap_user_dn, stripslashes($password));
$ldap_login = @ldap_bind($ldapconnection, $ldap_user_dn, $password);
ldap_close($ldapconnection);
if ($ldap_login) {
return true;
@@ -124,28 +124,10 @@ function auth_get_userinfo($username){
if (!is_array($values)) {
$values = array($values);
}
$ldapval = NULL;
foreach ($values as $value) {
if(is_array($user_entry[0][strtolower($value)])) {
if (!empty($CFG->unicodedb)) {
$newval = addslashes(stripslashes($user_entry[0][strtolower($value)][0]));
} else {
$newval = addslashes(stripslashes(utf8_decode($user_entry[0][strtolower($value)][0])));
}
if(isset($user_entry[0][strtolower($value)][0])){
$result[$key]=addslashes(stripslashes(utf8_decode($user_entry[0][strtolower($value)][0])));
}
else {
if (!empty($CFG->unicodedb)) {
$newval = addslashes(stripslashes($user_entry[0][strtolower($value)]));
} else {
$newval = addslashes(stripslashes(utf8_decode($user_entry[0][strtolower($value)])));
}
}
if (!empty($newval)) { // favour ldap entries that are set
$ldapval = $newval;
}
}
if (!is_null($ldapval)) {
$result[$key] = $ldapval;
}
}
}
@@ -216,11 +198,7 @@ function auth_user_create ($userobject,$plainpass) {
}
foreach ($values as $value) {
if(!empty($userobject->$key) ){
if (!empty($CFG->unicodedb)) {
$newuser[$value]= $userobject->$key;
} else {
$newuser[$value]=utf8_encode($userobject->$key);
}
$newuser[$value]=utf8_encode($userobject->$key);
}
}
}
@@ -232,14 +210,14 @@ function auth_user_create ($userobject,$plainpass) {
switch ($CFG->ldap_user_type) {
case 'edir':
$newuser['objectClass']= array("inetOrgPerson","organizationalPerson","person","top");
$newuser['uniqueId']= $userobject->username;
$newuser['logindisabled']="TRUE";
$newuser['userpassword']=$plainpass;
break;
$newuser['objectClass']= array("inetOrgPerson","organizationalPerson","person","top");
$newuser['uniqueId']= $userobject->username;
$newuser['logindisabled']="TRUE";
$newuser['userpassword']=$plainpass;
default:
error('auth: ldap auth_user_create() does not support selected usertype:"'.$CFG->ldap_user_type.'" (..yet)');
error('auth: ldap auth_user_create() does not support selected usertype (..yet)');
}
$uadd = ldap_add($ldapconnection, $CFG->ldap_user_attribute."=$userobject->username,".$CFG->ldap_create_context, $newuser);
ldap_close($ldapconnection);
@@ -401,10 +379,10 @@ function auth_sync_users ($bulk_insert_records = 1000, $do_updates=1) {
if(strtolower($CFG->dbtype) === 'mysql'){
// help old mysql versions cope with large temp tables
execute_sql('SET SQL_BIG_TABLES=1', false);
execute_sql('CREATE TEMPORARY TABLE ' . $CFG->prefix .'extuser (idnumber VARCHAR(64), PRIMARY KEY (idnumber)) TYPE=MyISAM',false);
execute_sql('CREATE TEMPORARY TABLE ' . $CFG->prefix .'extuser (idnumber VARCHAR(12), PRIMARY KEY (idnumber)) TYPE=MyISAM',false);
} elseif (strtolower($CFG->dbtype) === 'postgres7'){
$bulk_insert_records = 1; // no support for multiple sets of values
execute_sql('CREATE TEMPORARY TABLE '.$CFG->prefix.'extuser (idnumber VARCHAR(64), PRIMARY KEY (idnumber))',false);
execute_sql('CREATE TEMPORARY TABLE '.$CFG->prefix.'extuser (idnumber VARCHAR(12), PRIMARY KEY (idnumber))',false);
}
@@ -530,11 +508,7 @@ function auth_sync_users ($bulk_insert_records = 1000, $do_updates=1) {
$updatekeys = array();
foreach ($all_keys as $key) {
if (preg_match('/^field_updatelocal_(.+)$/',$key, $match)) {
// if we have a field to update it from
// and it must be updated 'onlogin' we
// update it on cron
if ( !empty($pcfg->{'field_map_'.$match[1]})
&& $pcfg->{$match[0]} === 'onlogin') {
if ($pcfg->{$match[0]}) { // if it has a true value
array_push($updatekeys, $match[1]); // the actual key name
}
}
@@ -626,7 +600,7 @@ function auth_sync_users ($bulk_insert_records = 1000, $do_updates=1) {
$CFG->debug=$old_debug;
$userobj = auth_ldap_update_user_record($user->username);
if(isset($CFG->{'auth_ldap_forcechangepassword'}) && $CFG->{'auth_ldap_forcechangepassword'}){
set_user_preference('auth_forcepasswordchange', 1, $userobj->id);
set_user_preference('auth_forcepasswordchange', 1, $userobj);
}
// update course creators
@@ -640,7 +614,7 @@ function auth_sync_users ($bulk_insert_records = 1000, $do_updates=1) {
}
} else {
if ( record_exists("user_coursecreators", "userid", $user->id)) {
$creator = delete_records("user_coursecreators", "userid", $user->id);
$creator = delete_records("user_coursecreators", "userid", $$user->id);
if (! $creator) {
error("Cannot remove user from course creators.");
}
@@ -711,7 +685,7 @@ function auth_ldap_bulk_insert($users){
// bulk insert -- superfast with $bulk_insert_records
$sql = 'INSERT INTO '.$CFG->prefix.'extuser (idnumber) VALUES ';
// make those values safe
$users = array_map('addslashes', $users);
array_map('addslashes', $users);
// join and quote the whole lot
$sql = $sql . '(\'' . join('\'),(\'', $users) . '\')';
print "+ " . count($users) . " users\n";
@@ -729,19 +703,17 @@ function auth_ldap_bulk_insert($users){
* @return boolen result
*/
function auth_user_activate ($username) {
global $CFG;
$ldapconnection = auth_ldap_connect();
$ldapconnection = auth_ldap_connect();
$userdn = auth_ldap_find_userdn($ldapconnection, $username);
switch ($CFG->ldap_user_type) {
case 'edir':
$newinfo['loginDisabled']="FALSE";
break;
default:
error ('auth: ldap auth_user_activate() does not support selected usertype:"'.$CFG->ldap_user_type.'" (..yet)');
}
case 'edir':
$newinfo['loginDisabled']="FALSE";
default;
error ('auth: ldap auth_user_activate() does not support selected usertype (..yet)');
}
$result = ldap_modify($ldapconnection, $userdn, $newinfo);
ldap_close($ldapconnection);
return $result;
@@ -763,8 +735,7 @@ function auth_user_disable ($username) {
$userdn = auth_ldap_find_userdn($ldapconnection, $username);
switch ($CFG->ldap_user_type) {
case 'edir':
$newinfo['loginDisabled']="TRUE";
break;
$newinfo['loginDisabled']="TRUE";
default:
error ('auth: ldap auth_user_disable() does not support selected usertype (..yet)');
}
@@ -840,19 +811,10 @@ 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.");
}
$user_entry = $user_entry[0];
//error_log(var_export($user_entry) . 'fpp' );
foreach ($attrmap as $key=>$ldapkeys){
// only process if the moodle field ($key) has changed and we
// are set to update LDAP with it
if ($olduser->$key !== $newuser->$key &&
!empty($pcfg->{'field_updateremote_'. $key})) {
if (!empty($pcfg->{'field_updateremote_'. $key})) {
// for ldap values that could be in more than one
// ldap key, we will do our best to match
@@ -860,42 +822,33 @@ function auth_user_update($olduser, $newuser) {
$ambiguous = true;
$changed = false;
if (!is_array($ldapkeys)) {
$ldapkeys = array($ldapkeys);
$ldapkeys = $array($ldapkeys);
}
if (count($ldapkeys) < 2) {
$ambiguous = false;
}
foreach ($ldapkeys as $ldapkey) {
$ldapkey = strtolower($ldapkey);
$ldapvalue = $user_entry[$ldapkey][0];
if (!$ambiguous) {
// skip update if the values already match
if( !($newuser->$key === $ldapvalue) ){
if( !($newuser->$key === $user_entry[0][strtolower($ldapkey)][0]) ){
ldap_modify($ldapconnection, $user_dn, array($ldapkey => $newuser->$key));
} else {
error_log("Skip updating field $key for entry $user_dn: it seems to be already same on LDAP. " .
" old moodle value: '" . $olduser->$key .
"' new value '" . $newuser->$key .
"' current value in ldap entry " . $ldapvalue);
"' current value in ldap entry " . $user_entry[0][strtolower($ldapkey)][0]);
}
} else { // ambiguous
// value empty before in Moodle (and LDAP) - use 1st ldap candidate field
// no need to guess
if (empty($olduser->$key)) { // value empty before - use 1st ldap candidate
if(ldap_modify($ldapconnection, $user_dn, array($ldapkey => $newuser->$key))){
$changed=true;
last;
} else {
error ('Error updating LDAP record. Error code: '
. ldap_errno($ldapconnection) . '; Error string : '
. ldap_err2str(ldap_errno($ldapconnection)));
}
}
// we found which ldap key to update!
if ( !empty($ldapvalue) && $olduser->$key === $ldapvalue ) {
// error_log("Matched: ". $olduser->$key . " === " . $ldapvalue);
// check the old values match
//error_log("keys $key $ldapkey");
//error_log("olduser " . $olduser->$key);
//error_log("ldapuser " . $user_entry[0][strtolower($ldapkey)][0]);
if ( !empty($olduser->$key)
&& !empty($user_entry[0][strtolower($ldapkey)][0])
&& $olduser->$key === $user_entry[0][strtolower($ldapkey)][0] ) {
// we found which value to update!
error_log("Matched: ". $olduser->$key . " === " . $user_entry[0][strtolower($ldapkey)][0]);
if(ldap_modify($ldapconnection, $user_dn, array($ldapkey => $newuser->$key))){
$changed=true;
last;
@@ -1077,7 +1030,7 @@ function auth_ldap_getdefaults(){
'rfc2307' => 'member',
'rfc2307bis' => 'member',
'samba' => 'member',
'ad' => 'member',
'ad' => 'member', //is this right?
'default' => 'member'
);
$default['ldap_memberattribute_isdn'] = array(
@@ -1085,7 +1038,7 @@ function auth_ldap_getdefaults(){
'rfc2307' => '0',
'rfc2307bis' => '1',
'samba' => '0', //is this right?
'ad' => '1',
'ad' => '0', //is this right?
'default' => '0'
);
$default['ldap_expireattr'] = array (
@@ -1260,8 +1213,7 @@ function auth_ldap_isgroupmember ($username='', $groupdns='') {
}
//echo "Checking group $group for member $username\n";
$search = @ldap_read($ldapconnection, $group, '('.$CFG->ldap_memberattribute.'='.$username.')', array($CFG->ldap_memberattribute));
if (!empty($search) AND ldap_count_entries($ldapconnection, $search)) {$info = auth_ldap_get_entries($ldapconnection, $search);
if (ldap_count_entries($ldapconnection, $search)) {$info = auth_ldap_get_entries($ldapconnection, $search);
if (count($info) > 0 ) {
// user is member of group
@@ -1318,8 +1270,7 @@ function auth_ldap_connect($binddn='',$bindpwd=''){
if (!empty($binddn)){
//bind with search-user
//$debuginfo .= 'Using bind user'.$binddn.'and password:'.$bindpwd;
$bindresult=ldap_bind($connresult, $binddn,$bindpwd);
$bindresult=@ldap_bind($connresult, $binddn,$bindpwd);
} else {
//bind anonymously
$bindresult=@ldap_bind($connresult);
@@ -1333,7 +1284,7 @@ function auth_ldap_connect($binddn='',$bindpwd=''){
return $connresult;
}
$debuginfo .= "<br/>Server: '$server' <br/> Connection: '$connresult'<br/> Bind result: '$bindresult'</br>";
$debuginfo == "<br/>Server: '$server' <br/> Connection: '$connresult'<br/> Bind result: '$bindresult'</br>";
}
//If any of servers are alive we have already returned connection
@@ -1463,7 +1414,7 @@ function auth_ldap_get_userlist($filter="*") {
$filter,
array($CFG->ldap_user_attribute));
}
$users = auth_ldap_get_entries($ldapconnection, $ldap_result);
//add found users to list
@@ -1491,7 +1442,7 @@ function auth_ldap_get_entries($conn, $searchresult){
$fresult=array();
$entry = ldap_first_entry($conn, $searchresult);
do {
$attributes = @ldap_get_attributes($conn, $entry);
$attributes = ldap_get_attributes($conn, $entry);
for($j=0; $j<$attributes['count']; $j++) {
$values = ldap_get_values_len($conn, $entry,$attributes[$j]);
if (is_array($values)) {
@@ -1502,7 +1453,7 @@ function auth_ldap_get_entries($conn, $searchresult){
}
$i++;
}
while ($entry = @ldap_next_entry($conn, $entry));
while ($entry = ldap_next_entry($conn, $entry));
//were done
return ($fresult);
}
+1 -1
View File
@@ -6,7 +6,7 @@ function auth_user_login ($username, $password) {
// Returns true if the username and password work
if ($user = get_record('user', 'username', $username)) {
return validate_internal_user_password($user, $password);
return ($user->password == md5($password));
}
return false;
+2 -2
View File
@@ -6,10 +6,10 @@ function auth_user_login ($username, $password) {
// Returns true if the username and password work
if ($user = get_record('user', 'username', $username)) {
return validate_internal_user_password($user, $password);
return ($user->password == md5($password));
}
return true;
return false;
}
-61
View File
@@ -1,61 +0,0 @@
<?PHP // $Id: config.html
if ((!include_once('Auth/RADIUS.php')) or (!class_exists(Auth_RADIUS_PAP))) { // Is Auth/RADIUS really there?
print '<p align="center"><font color="red"><strong>Warning: The Auth_RADIUS module does not seem to be present. Please ensure it is installed and enabled.</strong></font></p>';
}
if (!isset($config->auth_radiushost)) {
$config->auth_radiushost = "127.0.0.1";
}
if (!isset($config->auth_radiusnasport)) {
$config->auth_radiusport = "0";
}
if (!isset($config->auth_radiussecret)) {
$config->auth_radiussecret = "";
}
?>
<tr valign="top" >
<td align="right"><P>auth_radiushost:</td>
<td>
<input name="auth_radiushost" type="text" size="30" value="<?php echo $config->auth_radiushost?>">
<?php if (isset($err["auth_radiushost"]))
formerr($err["auth_radiushost"]); ?>
</td>
<td>
<?php print_string("auth_radiushost","auth") ?>
</td>
</TR>
<TR valign="top" >
<td align="right"><P>auth_radiusnasport:</td>
<td>
<input name="auth_radiusport" type="text" size="6" value="<?php echo $config->auth_radiusport ?>">
<?php if (isset($err["auth_radiusnasport"])) formerr($err["auth_radiusnasport"]); ?>
</td>
<td>
<?php print_string("auth_radiusnasport","auth") ?>
</td>
</TR>
<TR valign="top" >
<td align="right"><P>auth_radiussecret:</td>
<td>
<input name="auth_radiussecret" type="text" size="6" value="<?php echo $config->auth_radiussecret ?>">
<?php if (isset($err["auth_radiussecret"])) formerr($err["auth_radiussecret"]); ?> </td>
<td>
<?php print_string("auth_radiussecret","auth") ?>
</td>
</TR>
<TR valign="top">
<td align="right"><P><?php print_string("instructions", "auth")
?>:</td>
<td>
<textarea name="auth_instructions" cols="30" rows="10" wrap="virtual"><?php
p($config->auth_instructions) ?></textarea>
</td>
<td>
<?php print_string("authinstructions","auth") ?>
<?php helpbutton("text", get_string("helptext")) ?>
</td>
</TR>
-50
View File
@@ -1,50 +0,0 @@
<?PHP // $Id$
// Authentication by looking up a RADIUS server
// Contributed by Clive Gould <clive@ce.bromley.ac.uk>
function auth_user_login ($username, $password) {
// Returns true if the username and password work
// and false if they are wrong or don't exist.
require_once 'Auth/RADIUS.php';
global $CFG;
// Added by Clive on 7th May for test purposes
// printf("Username: $username <br>");
// printf("Password: $password <br>");
// printf("auth_radiushost: $CFG->auth_radiushost <br>");
// printf("auth_radiusnasport: $CFG->auth_radiusnasport <br>");
// printf("auth_radiussecret: $CFG->auth_radiussecret <br>");
$rauth = new Auth_RADIUS_PAP($username, $password);
$rauth->addServer($CFG->auth_radiushost, $CFG->auth_radiusnasport, $CFG->auth_radiussecret);
if (!$rauth->start()) {
printf("Radius start: %s<br>\n", $rauth->getError());
exit;
}
$result = $rauth->send();
if (PEAR::isError($result)) {
printf("Radius send failed: %s<br>\n", $result->getMessage());
exit;
} else if ($result === true) {
// printf("Radius Auth succeeded<br>\n");
return true;
} else {
// printf("Radius Auth rejected<br>\n");
return false;
}
// get attributes, even if auth failed
if (!$rauth->getAttributes()) {
printf("Radius getAttributes: %s<br>\n", $rauth->getError());
} else {
$rauth->dumpAttributes();
}
$rauth->close();
}
?>
+7
View File
@@ -0,0 +1,7 @@
# Requires a Shibboleth session
# Be sure to read moodle/auth/shibboleth/README.txt for instructions
# on how to configure Moodle for Shibboleth authentication
AuthType shibboleth
ShibRequireSession Off
require shibboleth
+46 -43
View File
@@ -2,6 +2,7 @@ Shibboleth Authentication for Moodle
-------------------------------------------------------------------------------
Requirements:
- Moodle 1.5 or later
- Shibboleth target 1.1 or later. See documentation for your Shibboleth
federation on how to set up Shibboleth.
@@ -11,20 +12,21 @@ Changes:
- 05. 2005: Various extensions and fixes by Lukas Haemmerle
- 06. 2005: Adaptions to new field locks and plugin config structures by Marting
Langhoff and Lukas Haemmerle
- 10. 2005: Added better error messages and moved text to language directories
- 02. 2006: Simplified authentication so that authorization works properly
Added instructions for IIS
Moodle Configuration with Dual login
-------------------------------------------------------------------------------
1. Protect the directory moodle/auth/shibboleth/ with Shibboleth.
The page index.php in that directory actually logs in a Shibboleth user.
For Apache you have to define a rule like the following in the Apache config:
1. Ensure that the .htaccess file in moodle/auth/shibboleth/ is active
It may be possible that you have to change the configuration of your web
server to allow .htaccess files to override certain settings. Alternatively,
you also could define the rules from the .htaccess file in the web server
configuration file.
2. Protect the file moodle/auth/shibboleth/shib-protected.php with Shibboleth.
This page just needs to redirect the users to moodle/auth/shibboleth/
For Apache you have to define a rule like the following:
--
<Location ~ "/auth/shibboleth">
<Location ~ "/auth/shibboleth/shib-protected.php">
AuthType shibboleth
ShibRequireSession On
require valid-user
@@ -34,14 +36,10 @@ Moodle Configuration with Dual login
To restrict access to Moodle, replace the access rule 'require valid-user'
with something that fits your needs, e.g. 'require affiliation student'.
For IIS you have protect the auth/shibboleth directory directly in the
RequestMap of the Shibboleth configuration file (shibboleth.xml). See
https://authdev.it.ohio-state.edu/twiki/bin/view/Shibboleth/xmlaccesscontrol?topic=XMLAccessControl
2. As Moodle admin, go to the 'Administrations >> Users >> Authentication
3. As Moodle admin, go to the 'Administrations >> Users >> Authentication
Options' and select the 'Shibboleth' authentication method from the pop-up.
3. Fill in the fields of the form. The fields 'Username', 'First name',
4. Fill in the fields of the form. The fields 'Username', 'First name',
'Surname', etc should contain the name of the environment variables of the
Shibboleth attributes that you want to map onto the corresponding Moodle
variable (e.g. 'HTTP_SHIB_PERSON_SURNAME' for the person's last name, refer
@@ -60,45 +58,47 @@ Moodle Configuration with Dual login
lengths for each field in the user profile.
#############################################################################
4. The large text field 'Instructions' must contain a link to the
moodle/auth/shibboleth/index.php file which is protected by
Shibboleth (see step 1) and causes the Shibboleth login procedure to start.
You could also use HTML code in that field, e.g. to create your own
5. The large text field 'Instructions' must contain a link to the
moodle/auth/shibboleth/shib-protected.php file which is protected by
Shibboleth (see step 2) and causes the Shibboleth login procedure to start.
You also coudl use HTML code in that field, e.g. to create your own
Shibboleth login button.
5. Save the changes for the Shibboleth authentication method.
6. Save the changes for the Shibboleth authentication method.
Moodle Configuration with Shibboleth only login
-------------------------------------------------------------------------------
If you want Shibboleth as your only authentication method, configure Moodle as
described in the dual login section above and do the following steps:
4.a On the Moodle Shibboleth settings page, set the 'Alternate Login URL' to
the URL of the file 'moodle/auth/shibboleth/index.php'
5.a On the Moodle Shibboleth settings page, set the 'Alternate Login URL' to
the URL of the file 'moodle/auth/shibboleth/shib-protected.php'
This will enforce Shibboleth login.
How the Shibboleth authentication works
--------------------------------------------------------------------------------
To get Shibboleth authenticated in Moodle a user basically must access the
Shibboleth-protected page /auth/shibboleth/index.php. If Shibboleth is the only
authentication method (see 4.a), this happens automatically when a user wants to
login in Moodle. Otherwise, the user has to click on the link on the login page
you provided in step 4.
For a user to get Shibboleth authenticated in Moodle he first must go to the
Shibboleth-protected page shib-protected.php. If Shibboleth authentication is
enabled this happens automatically when a user wants to login.
Otherwise the user has to click on the link on the login page you provided in
step 5.
If the user is successfully Shibboleth authenticated he is redirected to
moodle/auth/shibboleth where he also gets authenticated in Moodle.
Moodle basically checks whether the Shibboleth attribute that you mapped
as the username is present. This attribute should only be present if a user is
as the username is present. This attribute is only present if a user is
Shibboleth authenticated.
If the user's Moodle account has not existed yet, it gets automatically created.
Unless the user's firstname, last name and email address is provided, the user
is automatically redirected to the edit profile page by Moodle.
To prevent that every Shibboleth user can access your Moodle site you have to
adapt the 'require valid-user' line in your webserver's config (see step 1) to
allow only specific users. If you defined some authorization rules in step 1,
these are checked by Shibboleth itself. Only users who met these rules
actually can access /auth/shibboleth/index.php and get logged in.
adapt the 'require valid-user' line in your webserver's config (see step 2) to
allow only specific users.
You can use Shibboleth AND another authentication method (it was tested with
manual login). So, if there are a few users that don't have a Shibboleth
manual login only). So if there are a few users that don't have a Shibboleth
login, you could create manual accounts for them and they could use the manual
login. For other authentication methods you first have to configure them and
then set Shibboleth as your authentication method. Users can log in only via one
@@ -107,17 +107,18 @@ authentication method unless they have two accounts in Moodle.
Shibboleth dual login with custom login page
--------------------------------------------------------------------------------
Of course you can create a dual login page that better fits your needs. For this
to work, you have to set up the two authentication methods (e.g. 'Manual' and
'Shibboleth') and specify an alternate login link to your own dual login page.
On that page you basically need a link to the Shibboleth-protected page
('/auth/shibboleth/index.php') for the Shibboleth login and a
to work you have to set up the two authentication methods (e.g. 'Manual' and
'Shibboleth', Shibboleth has to be the current authentication method) and
specify an alternate login link to your own dual login page. On that page you
basically need a link to the Shibboleth-protected page
('moodle/auth/shibboleth/shib-protected.php') for the Shibboleth login and a
form that sends 'username' and 'password' to moodle/login/index.php.
Consult the Moodle documentation for further instructions and requirements.
How to customize the way the Shibboleth user data is used in Moodle
How to customize the way the Shibboleth user data is used in ILIAS
--------------------------------------------------------------------------------
Among the Shibboleth settings in Moodle there is a field that should contain a
path to a php file that can be used as data manipulation hook.
path to a php file that can be used as data manipulation API.
You can use this if you want to further process the way your Shibboleth
attributes are used in Moodle.
@@ -130,11 +131,11 @@ Example 2: The country, city and street are provided in one Shibboleth attribute
and you want these values to be used in the Moodle user profile. So
You have to parse the corresponding attribute to fill the user fields.
If you want to use this hook you have to be a skilled PHP programmer. It is
If you want to use this API you have to be a skilled PHP programmer. It is
strongly recommended that you take a look at the file
moodle/auth/shibboleth/lib.php, especially the function 'auth_get_userinfo'
where this file is included.
The context of the file is the same as within this login function. So you
where this API file is included.
The context of the API file is the same as within this login function. So you
can directly edit the object $result.
Example file:
@@ -150,6 +151,7 @@ Example file:
// institution, street, zipcode, city and country
$address = $_SERVER[$pluginconfig->field_map_address];
list($institution, $street, $zip_city) = split('\$', $address);
ereg(' (.+)',$zip_city, $regs);
$city = $regs[1];
@@ -166,7 +168,8 @@ Example file:
Bugs
--------------------------------------------------------------------------------
Please send bug reports concerning the Shibboleth part to
The current implementation has not yet been extensively tested. So there may be
bugs. Please send bug reports concerning the Shibboleth part to
Lukas Haemmerle <haemmerle@switch.ch>
--------------------------------------------------------------------------------
+10 -13
View File
@@ -1,17 +1,14 @@
<?php
// Set default values
$pluginconfig = get_config('auth/shibboleth');
// Set default values
$pluginconfig = get_config('auth/shibboleth');
if (!isset($config->auth_instructions) or empty($pluginconfig->shib_user_attribute)) {
$config->auth_instructions = get_string('auth_shib_instructions', 'auth', $CFG->wwwroot.'/auth/shibboleth/index.php');
}
if (!isset($config->auth_instructions) or empty($pluginconfig->shib_user_attribute)) {
$config->auth_instructions = get_string('auth_shib_instructions', 'auth', $CFG->wwwroot.'/auth/shibboleth/shib-protected.php');
}
optional_variable($pluginconfig->user_attribute, '');
optional_variable($pluginconfig->convert_data, '');
if (!isset ($pluginconfig->user_attribute)) {
$pluginconfig->user_attribute = '';
}
if (!isset ($pluginconfig->convert_data)) {
$pluginconfig->convert_data = '';
}
?>
<tr>
<td colspan="3" align="left">
@@ -37,7 +34,7 @@
<textarea name="auth_instructions" cols="30" rows="10" wrap="virtual"><?php p($config->auth_instructions) ?></textarea>
</td>
<td>
<?php print_string("auth_shib_instructions_help","auth", htmlspecialchars($CFG->wwwroot.'/auth/shibboleth/index.php')) ?>
<?php print_string("auth_shib_instructions_help","auth", htmlspecialchars($CFG->wwwroot.'/auth/shibboleth')) ?>
<?php helpbutton("text", get_string("helptext")) ?>
</td>
</tr>
@@ -45,7 +42,7 @@
<td align="right"><?php print_string("auth_shib_convert_data", "auth") ?>:</td>
<td>
<input name="pluginconfig_convert_data" type="text" size="30" value="<?php echo $pluginconfig->convert_data?>">
<?php
<?
if ($pluginconfig->convert_data && $pluginconfig->convert_data != '' && !is_readable($pluginconfig->convert_data)){
echo '<br><font color="red">';
print_string("auth_shib_convert_data_warning", "auth");
+8 -21
View File
@@ -4,25 +4,16 @@
require('../../config.php');
require('lib.php');
if (isloggedin() && $USER->username != 'guest') { // Nothing to do
if (isset($SESSION->wantsurl) and (strpos($SESSION->wantsurl, $CFG->wwwroot) === 0)){
$urltogo = $SESSION->wantsurl; /// Because it's an address in this site
unset($SESSION->wantsurl);
} else {
$urltogo = $CFG->wwwroot.'/'; /// Go to the standard home page
unset($SESSION->wantsurl); /// Just in case
}
redirect($urltogo);
if (isloggedin()) { // Nothing to do
redirect($CFG->wwwroot.'/index.php');
}
$pluginconfig = get_config('auth/shibboleth');
// Check whether Shibboleth is configured properly
if (empty($pluginconfig->shib_user_attribute)) {
error(get_string( 'shib_not_set_up_error', 'auth'));
}
error('Shibboleth authentication (\'shib_user_attribute\') is not set up correctly. You probably haven\'t yet configured the Shibboleth authentication. Please consult the README in moodle/auth/shibboleth for further instructions on how to set up Shibboleth authentication.');
}
/// If we can find the Shibboleth attribute, save it in session and return to main login page
if (!empty($_SERVER[$pluginconfig->shib_user_attribute])) { // Shibboleth auto-login
@@ -60,13 +51,9 @@
redirect($urltogo);
}
}
// If we can find any (user independent) Shibboleth attributes but no user
// attributes we probably didn't receive any user attributes
elseif (!empty($_SERVER['HTTP_SHIB_APPLICATION_ID'])){
error(get_string( 'shib_no_attributes_error', 'auth' , '\''.$pluginconfig->shib_user_attribute.'\', \''.$pluginconfig->field_map_firstname.'\', \''.$pluginconfig->field_map_lastname.'\' and \''.$pluginconfig->field_map_email.'\''));
} else {
error(get_string( 'shib_not_set_up_error', 'auth'));
}
$SESSION->shibboleth_checked = true; // This will stop us bouncing back here
redirect($CFG->wwwroot.'/login/index.php');
?>
+22 -32
View File
@@ -1,7 +1,6 @@
<?PHP // $Id$
//CHANGELOG:
//28.10.2004 SHIBBOLETH Authentication functions v.0.1
//2005-2006 Various extensions and fixes by Lukas Haemmerle
//Distributed under GPL (c)Markus Hagman 2004-
function auth_user_login($username, $password) {
@@ -9,20 +8,25 @@ function auth_user_login($username, $password) {
$pluginconfig = get_config('auth/shibboleth');
// If we are in the shibboleth directory then we trust the server var
/// If we are in the shibboleth directory then we trust the server var
if (!empty($_SERVER[$pluginconfig->shib_user_attribute])) {
return ($_SERVER[$pluginconfig->shib_user_attribute] == $username);
} else {
// If we are not, the user has used the manual login and the login name is
// unknown, so we return false.
return false;
}
}
/// If we are not, then the server is probably set to not be Shibboleth-only
/// and the user has used the normal login screen, so we redirect to the shibboleth
/// directory for a proper check
redirect($CFG->wwwroot.'/auth/shibboleth/index.php');
/// There's no point doing anything further here
exit;
}
function auth_get_userinfo($username) {
// reads user information from shibboleth attributes and return it in array()
global $CFG;
$config = (array)$CFG;
$pluginconfig = get_config('auth/shibboleth');
// Check whether we have got all the essential attributes
@@ -32,7 +36,7 @@ function auth_get_userinfo($username) {
|| empty($_SERVER[$pluginconfig->field_map_lastname])
|| empty($_SERVER[$pluginconfig->field_map_email])
) {
error(get_string( 'shib_not_all_attributes_error', 'auth' , "'".$pluginconfig->shib_user_attribute."' ('".$_SERVER[$pluginconfig->shib_user_attribute]."'), '".$pluginconfig->field_map_firstname."' ('".$_SERVER[$pluginconfig->field_map_firstname]."'), '".$pluginconfig->field_map_lastname."' ('".$_SERVER[$pluginconfig->field_map_lastname]."') and '".$pluginconfig->field_map_email."' ('".$_SERVER[$pluginconfig->field_map_email]."')"));
error("Moodle needs certain Shibboleth attributes which are not present in your case. The attributes are: '".$pluginconfig->shib_user_attribute."' ('".$_SERVER[$pluginconfig->shib_user_attribute]."'), '".$pluginconfig->field_map_firstname."' ('".$_SERVER[$pluginconfig->field_map_firstname]."'), '".$pluginconfig->field_map_lastname."' ('".$_SERVER[$pluginconfig->field_map_lastname]."') and '".$pluginconfig->field_map_email."' ('".$_SERVER[$pluginconfig->field_map_email]."')<br>Please contact your Identity Service Provider.");
}
$attrmap = auth_shib_attributes();
@@ -41,24 +45,20 @@ function auth_get_userinfo($username) {
$search_attribs = array();
foreach ($attrmap as $key=>$value) {
if (!empty($CFG->unicodedb)) {
$result[$key]=get_first_string($_SERVER[$value]);
} else {
$result[$key]=utf8_decode(get_first_string($_SERVER[$value]));
}
$result[$key]=utf8_decode($_SERVER[$value]);
}
// Provide an API to modify the information to fit the Moodle internal
// data representation
if (
$pluginconfig->convert_data
&& $pluginconfig->convert_data != ''
&& is_readable($pluginconfig->convert_data)
$config["shib_convert_data"]
&& $config["shib_convert_data"] != ''
&& is_readable($config["shib_convert_data"])
){
// Include a custom file outside the Moodle dir to
// modify the variable $moodleattributes
include($pluginconfig->convert_data);
include($config["shib_convert_data"]);
}
return $result;
@@ -66,8 +66,9 @@ function auth_get_userinfo($username) {
function auth_shib_attributes(){
//returns array containg attribute mappings between Moodle and shibboleth
global $CFG;
global $CFG;
$config = (array)$CFG;
$pluginconfig = get_config('auth/shibboleth');
$pluginconfig = (array) $pluginconfig;
@@ -81,19 +82,8 @@ function auth_shib_attributes(){
$moodleattributes[$field] = $pluginconfig["field_map_$field"];
}
}
$moodleattributes['username']=$pluginconfig["shib_user_attribute"];
$moodleattributes['username']=$config["shib_user_attribute"];
return $moodleattributes;
return $moodleattributes;
}
function get_first_string($string){
// Cleans and returns first of potential many values (multi-valued attributes)
$list = split( ';', $string);
$clean_string = rtrim($list[0]);
return $clean_string;
}
?>
+7
View File
@@ -0,0 +1,7 @@
<?php
// This file must be Shibboleth protected
// Consult the README for further instructions
require_once("../../config.php");
header("Location: ".$CFG->wwwroot."/auth/shibboleth/");
?>
+1 -1
View File
@@ -68,7 +68,7 @@ Now I show the specific detailed status of every item in the process:
41. DONE: Add support to forum_track_prefs table. Not necessary. MD. Skipped.
42. DONE: Add user->trackforums (MD did).
43. DONE: Add forum->trackingtype
44. DONE: Review SCORM module. Bug 3404 seems to break restore. Solved by Bobo.
44. TODO: Review SCORM module. Bug 3404 seems to break restore.
45. DONE: Modify QUIZ module restore for pre1.5 courses (Eloy)
46. TODO: Modify QUIZ module 1.5 <==> 1.5 backup & restore (Gustav's team)
47. DONE: Orphan categories thing in quiz module need final solution. Bug 2459 is 95% solved.
+14 -30
View File
@@ -8,16 +8,22 @@
require_once ("backuplib.php");
require_once ("$CFG->libdir/blocklib.php");
$id = optional_param( 'id' ); // course id
$to = optional_param( 'to' ); // id of course to import into afterwards.
$cancel = optional_param( 'cancel' );
$launch = optional_param( 'launch' );
optional_variable($id); // course id
optional_variable($to); // id of course to import into afterwards.
optional_variable($cancel);
optional_variable($launch);
require_login();
if (!empty($id)) {
if (!isteacheredit($id)) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
if (empty($to)) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
} else {
if (!isteacheredit($to)) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
}
}
} else {
if (!isadmin()) {
@@ -25,12 +31,6 @@
}
}
if (!empty($to)) {
if (!isteacheredit($to)) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
}
//Check site
if (!$site = get_site()) {
error("Site not found!");
@@ -56,20 +56,8 @@
}
$stradministration = get_string("administration");
//If cancel has been selected, go back to course main page (bug 2817)
if ($cancel) {
if ($id) {
$redirecto = $CFG->wwwroot . '/course/view.php?id=' . $id; //Course page
} else {
$redirecto = $CFG->wwwroot;
}
redirect ($redirecto, get_string('backupcancelled')); //Site page
exit;
}
//If no course has been selected, show a list of available courses
if (!$id) {
//If no course has been selected or cancel button pressed
if (!$id or $cancel) {
print_header("$site->shortname: $strcoursebackup", $site->fullname,
"<a href=\"$CFG->wwwroot/$CFG->admin/index.php\">$stradministration</a> -> $strcoursebackup");
@@ -116,10 +104,6 @@
//Call the form, depending the step we are
if (!$launch) {
// if we're at the start, clear the cache of prefs
if (isset($SESSION->backupprefs[$course->id])) {
unset($SESSION->backupprefs[$course->id]);
}
include_once("backup_form.html");
} else if ($launch == "check") {
include_once("backup_check.html");
@@ -128,7 +112,7 @@
}
print_simple_box_end();
//Print footer
//Print footer
print_footer();
?>
+128 -53
View File
@@ -20,16 +20,68 @@
}
}
$backupprefs = new StdClass;
$count = 0;
backup_fetch_prefs_from_request($backupprefs,$count,$course);
//Check site
if (!$site = get_site()) {
error("Site not found!");
}
//Checks for the required files/functions to backup every mod
//And check if there is data about it
$count = 0;
if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
$modbackup = $modname."_backup_mods";
$modcheckbackup = $modname."_check_backup_mods";
if (file_exists($modfile)) {
include_once($modfile);
if (function_exists($modbackup) and function_exists($modcheckbackup)) {
$var = "exists_".$modname;
$$var = true;
$count++;
}
}
//Check data
//Check module info
$var = "backup_".$modname;
if (!isset($$var)) {
$$var = 1;
}
//Check include user info
$var = "backup_user_info_".$modname;
if (!isset($$var)) {
$$var = 1;
}
}
}
//Check other parameters
if (!isset($backup_metacourse)) {
$backup_metacourse = 1;
}
if (!isset($backup_users)) {
$backup_users = 1;
}
if (!isset($backup_logs)) {
$backup_logs = 0;
}
if (!isset($backup_user_files)) {
$backup_user_files = 1;
}
if (!isset($backup_course_files)) {
$backup_course_files = 2;
}
if (!isset($backup_messages)) {
$backup_messages = 1;
}
if ($count == 0) {
notice("No backupable modules are installed!");
}
@@ -39,6 +91,46 @@
<table cellpadding="5">
<?php
//Calculate the backup string
//Calculate the backup word
//Take off some characters in the filename !!
$takeoff = array(" ", ":", "/", "\\", "|");
$backup_word = str_replace($takeoff,"_",strtolower(get_string("backupfilename")));
//If non-translated, use "backup"
if (substr($backup_word,0,1) == "[") {
$backup_word= "backup";
}
//Calculate the date format string
$backup_date_format = str_replace(" ","_",get_string("backupnameformat"));
//If non-translated, use "%Y%m%d-%H%M"
if (substr($backup_date_format,0,1) == "[") {
$backup_date_format = "%%Y%%m%%d-%%H%%M";
}
//Calculate the shortname
$backup_shortname = clean_filename($course->shortname);
if (empty($backup_shortname) or $backup_shortname == '_' ) {
$backup_shortname = $course->id;
}
//Calculate the final backup filename
//The backup word
$backup_name = $backup_word."-";
//The shortname
$backup_name .= strtolower($backup_shortname)."-";
//The date format
$backup_name .= userdate(time(),$backup_date_format,99,false);
//The extension
$backup_name .= ".zip";
//And finally, clean everything
$backup_name = clean_filename($backup_name);
//Calculate the backup unique code to allow simultaneus backups (to define
//the temp-directory name and records in backup temp tables
$backup_unique_code = time();
if (empty($to)) {
//Now print the Backup Name tr
echo "<tr>";
@@ -46,7 +138,7 @@
echo get_string("name").":";
echo "</b></td><td>";
//Add as text field
echo "<input type=\"text\" name=\"backup_name\" size=\"40\" value=\"".$backupprefs->backup_name."\" />";
echo "<input type=\"text\" name=\"backup_name\" size=\"40\" value=\"".$backup_name."\" />";
echo "</td></tr>";
//Line
@@ -56,30 +148,32 @@
echo "<tr>";
echo "<td colspan=\"2\" align=\"center\"><b>";
} else {
echo '<input type="hidden" name="backup_name" value="'.$backup_name.'" /></b>';
}
//Here we check if backup_users = None. Then, we switch off every module
//user info, user_files, logs and exercises, workshop and messages backups. A Warning is showed to
//inform the user.
if ($backupprefs->backup_users == 2) {
if ($backup_users == 2) {
if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$var = "backup_user_info_".$modname;
if (isset($backupprefs->$var)) {
$backupprefs->$var = 0;
if (isset($$var)) {
$$var = 0;
}
$var = "backup_".$modname;
if (isset($backupprefs->$var)) {
if (isset($$var)) {
if ($modname == "exercise" || $modname == "workshop") {
$backupprefs->$var = 0;
$$var = 0;
}
}
}
$backupprefs->backup_user_files = 0;
$backupprefs->backup_logs = 0;
$backupprefs->backup_messages = 0;
$backup_user_files = 0;
$backup_logs = 0;
$backup_messages = 0;
}
print_simple_box("<font color=\"red\">".get_string("backupnoneusersinfo")."</font>","center", "70%", '', "20", "noticebox");
echo "<hr />";
@@ -96,24 +190,21 @@
if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = $CFG->dirroot.'/mod/'.$modname.'/backuplib.php';
if (!file_exists($modfile)) {
continue;
}
require_once($modfile);
$modbackup = $modname."_backup_mods";
//If exists the lib & function
$var = "exists_".$modname;
if (isset($backupprefs->$var) && $backupprefs->$var) {
if (isset($$var) && $$var) {
$var = "backup_".$modname;
//Only if selected
if (!empty($backupprefs->$var) and ($backupprefs->$var == 1)) {
if ($$var == 1) {
//Print the full tr
echo "<tr>";
echo "<td colspan=\"2\">";
//Add hidden fields
$var = "backup_".$modname;
echo "<input type=\"hidden\" name=\"".$var."\" value=\"".$$var."\" />";
$var = "backup_user_info_".$modname;
echo "<input type=\"hidden\" name=\"".$var."\" value=\"".$$var."\" />";
//Print the mod name
echo "<b>".get_string("include")." ".get_string("modulenameplural",$modname)." ";
//Now look for user-data status
@@ -121,29 +212,10 @@
$backup_user_options[1] = get_string("withuserdata");
$var = "backup_user_info_".$modname;
//Print the user info
echo $backup_user_options[$backupprefs->$var]."</b>";
echo $backup_user_options[$$var]."</b>";
//Call the check function to show more info
$modcheckbackup = $modname."_check_backup_mods";
$var = $modname.'_instances';
$instancestopass = array();
if (!empty($backupprefs->$var) && is_array($backupprefs->$var) && count($backupprefs->$var)) {
$table->data = array();
$countinstances = 0;
foreach ($backupprefs->$var as $instance) {
$var1 = 'backup_'.$modname.'_instance_'.$instance->id;
$var2 = 'backup_user_info_'.$modname.'_instance_'.$instance->id;
if (!empty($backupprefs->$var1)) {
$obj = new StdClass;
$obj->name = $instance->name;
$obj->userdata = $backupprefs->$var2;
$obj->id = $instance->id;
$instancestopass[$instance->id]= $obj;
$countinstances++;
}
}
}
$table->data = $modcheckbackup($id,$backupprefs->$var,$backupprefs->backup_unique_code,$instancestopass);
$table->data = $modcheckbackup($id,$$var,$backup_unique_code);
print_table($table);
echo "</td></tr>";
}
@@ -161,16 +233,16 @@
$user_options[0] = get_string("includeallusers");
$user_options[1] = get_string("includecourseusers");
$user_options[2] = get_string("includenoneusers");
echo $user_options[$backupprefs->backup_users].'</b>';
echo $user_options[$backup_users].'</b>';
//Print info
$table->data = user_check_backup($id,$backupprefs->backup_unique_code,$backupprefs->backup_users,$backupprefs->backup_messages);
$table->data = user_check_backup($id,$backup_unique_code,$backup_users,$backup_messages);
print_table($table);
echo "</td></tr>";
}
//Now print the Logs tr conditionally
if ($backupprefs->backup_logs && empty($to)) {
if ($backup_logs && empty($to)) {
echo "<tr>";
echo "<td colspan=\"2\"><b>";
echo get_string("includelogentries").'</b>';
@@ -181,35 +253,38 @@
}
//Now print the User Files tr conditionally
if ($backupprefs->backup_user_files) {
if ($backup_user_files) {
echo "<tr>";
echo "<td colspan=\"2\"><b>";
echo get_string("includeuserfiles").'</b>';
//Print info
$table->data = user_files_check_backup($id,$backupprefs->backup_unique_code);
$table->data = user_files_check_backup($id,$backup_unique_code);
print_table($table);
echo "</td></tr>";
}
//Now print the Course Files tr conditionally
if ($backupprefs->backup_course_files) {
if ($backup_course_files) {
echo "<tr>";
echo "<td colspan=\"2\"><b>";
echo get_string("includecoursefiles").'</b>';
//Print info
$table->data = course_files_check_backup($id,$backupprefs->backup_unique_code);
$table->data = course_files_check_backup($id,$backup_unique_code);
print_table($table);
echo "</td></tr>";
}
}
// now keep it for next time.
$SESSION->backupprefs[$course->id] = $backupprefs;
?>
</table>
<br />
<center>
<input type="hidden" name="backup_unique_code" value="<?php p($backup_unique_code) ?>" />
<input type="hidden" name="backup_metacourse" value="<?php p($backup_metacourse) ?>" />
<input type="hidden" name="backup_users" value="<?php p($backup_users) ?>" />
<input type="hidden" name="backup_logs" value="<?php p($backup_logs) ?>" />
<input type="hidden" name="backup_user_files" value="<?php p($backup_user_files) ?>" />
<input type="hidden" name="backup_course_files" value="<?php p($backup_course_files) ?>" />
<input type="hidden" name="backup_messages" value="<?php p($backup_messages) ?>" />
<input type="hidden" name="to" value="<?php p($to) ?>" />
<input type="hidden" name="id" value="<?php p($id) ?>" />
<input type="hidden" name="launch" value="execute" />
+93 -12
View File
@@ -26,8 +26,92 @@
error("Site not found!");
}
$preferences = new StdClass;
backup_fetch_prefs_from_request($preferences,$count,$course);
//Checks for the required files/functions to backup every mod
//And check if there is data about it
$count = 0;
if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
$modbackup = $modname."_backup_mods";
$modcheckbackup = $modname."_check_backup_mods";
if (file_exists($modfile)) {
include_once($modfile);
if (function_exists($modbackup) and function_exists($modcheckbackup)) {
$var = "exists_".$modname;
$$var = true;
$count++;
}
}
//Check data
//Check module info
$var = "backup_".$modname;
if (!isset($$var)) {
//Every undefined backup_XXXX isn't exported
$$var = 0;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->backup = $$var;
//Check include user info
$var = "backup_user_info_".$modname;
if (!isset($$var)) {
$$var = 1;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->userinfo = $$var;
//And the name of the mod
$preferences->mods[$modname]->name = $modname;
}
}
//Check other parameters
if (!isset($backup_metacourse)) {
$backup_metacourse = 1;
}
$preferences->backup_metacourse = $backup_metacourse;
if (!isset($backup_users)) {
$backup_users = 1;
}
$preferences->backup_users = $backup_users;
if (!isset($backup_logs)) {
$backup_logs = 0;
}
$preferences->backup_logs = $backup_logs;
if (!isset($backup_user_files)) {
$backup_user_files = 1;
}
$preferences->backup_user_files = $backup_user_files;
if (!isset($backup_course_files)) {
$backup_course_files = 2;
}
$preferences->backup_course_files = $backup_course_files;
if (!isset($backup_messages)) {
$backup_messages = 1;
}
$preferences->backup_messages = $backup_messages;
if (!isset($id)) {
error ("Course not specified");
}
$preferences->backup_course = $id;
if (!isset($backup_name)) {
error ("Backup name not specified");
}
//We clean it again (to prevent diacritics entered manually)
$preferences->backup_name = clean_filename($backup_name);
if (!isset($backup_unique_code)) {
error ("Backup unique code not specified");
}
$preferences->backup_unique_code = $backup_unique_code;
//Another Info
$preferences->moodle_version = $CFG->version;
$preferences->moodle_release = $CFG->release;
@@ -61,10 +145,10 @@
//Check for temp and backup and backup_unique_code directory
//Create them as needed
echo "<li>".get_string("creatingtemporarystructures").'</li>';
$status = check_and_create_backup_dir($preferences->backup_unique_code);
$status = check_and_create_backup_dir($backup_unique_code);
//Empty dir
if ($status) {
$status = clear_backup_dir($preferences->backup_unique_code);
$status = clear_backup_dir($backup_unique_code);
}
//Delete old_entries from backup tables
@@ -81,7 +165,7 @@
echo "<ul>";
echo "<li>".get_string("writingheader").'</li>';
//Obtain the xml file (create and open) and print prolog information
$backup_file = backup_open_xml($preferences->backup_unique_code);
$backup_file = backup_open_xml($backup_unique_code);
echo "<li>".get_string("writinggeneralinfo").'</li>';
//Prints general info about backup to file
if ($backup_file) {
@@ -127,7 +211,7 @@
echo "</ul></li>";
//User info
if ($status) {
if ($status && $preferences->backup_users) {
echo "<li>".get_string("writinguserinfo").'</li>';
if (!$status = backup_user_info($backup_file,$preferences)) {
notify("An error occurred while backing up user info");
@@ -145,10 +229,9 @@
//If we have selected to backup quizzes, backup categories and
//questions structure (step 1). See notes on mod/quiz/backuplib.php
if ($status and !empty($preferences->mods['quiz']->backup)) {
if ($status and $preferences->mods['quiz']->backup) {
echo "<li>".get_string("writingcategoriesandquestions").'</li>';
require_once($CFG->dirroot.'/mod/quiz/backuplib.php');
if (!$status = backup_question_categories($backup_file,$preferences)) {
if (!$status = quiz_backup_question_categories($backup_file,$preferences)) {
notify("An error occurred while backing up quiz categories");
}
}
@@ -318,8 +401,6 @@
}
error_log($filename);
$SESSION->import_preferences = $preferences;
print_continue($CFG->wwwroot.'/course/import/activities/index.php?id='.$to.'&fromcourse='.$id.'&filename='.$filename);
print_continue($CFG->wwwroot.'/course/import.php?id='.$to.'&fromcourse='.$id.'&filename='.$filename);
}
$SESSION->backupprefs[$course->id] = null; // unset it so we're clear next time.
?>
+52 -165
View File
@@ -33,7 +33,6 @@
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
$modbackup = $modname."_backup_mods";
$modbackupone = $modname.'_backup_one_mod';
$modcheckbackup = $modname."_check_backup_mods";
if (file_exists($modfile)) {
include_once($modfile);
@@ -41,30 +40,46 @@
$var = "exists_".$modname;
$$var = true;
$count++;
// check that there are instances and we can back them up individually
if (count_records('course_modules','course',$course->id,'module',$mod->id) && function_exists($modbackupone)) {
$var = 'exists_one_'.$modname;
$$var = true;
}
}
}
//Check data
//Check module info
$var = "backup_".$modname;
$$var = optional_param( $var,1);
if (!isset($$var)) {
$$var = 1;
}
//Check include user info
$var = "backup_user_info_".$modname;
$$var = optional_param( $var,1);
if (!isset($$var)) {
$$var = 1;
}
}
}
//Check other parameters
$backup_metacourse = optional_param('backup_metacourse',1);
$backup_users = optional_param('backup_users',1);
$backup_logs = optional_param('backup_logs',0);
$backup_user_files = optional_param('backup_user_files',1);
$backup_course_files = optional_param('backup_course_files',1);
$backup_messages = optional_param('backup_messages',1);
if (!isset($backup_metacourse)) {
$backup_metacourse = 1;
}
if (!isset($backup_users)) {
$backup_users = 1;
}
if (!isset($backup_logs)) {
$backup_logs = 0;
}
if (!isset($backup_user_files)) {
$backup_user_files = 1;
}
if (!isset($backup_course_files)) {
$backup_course_files = 1;
}
if (!isset($backup_messages)) {
$backup_messages = 1;
}
if ($count == 0) {
notice("No backupable modules are installed!");
@@ -72,69 +87,10 @@
?>
<script language="JavaScript" type="text/javascript">
<!--
function selectItemInMenuByName(formId, menuName, selectIndex ) {
myForm = document.getElementById(formId)
for (i=0,n=myForm.elements.length;i<n;i++) {
myLen = menuName.length;
myName = myForm.elements[i].name;
myType = myForm.elements[i].type;
if (myName.substring(0,myLen) == menuName && myType == "select-one") {
myForm.elements[i].options[selectIndex].selected = true;
}
}
}
function selectItemInRadioByName(formId, radioName, selectIndex ) {
myForm = document.getElementById(formId)
for (i=0,n=myForm.elements.length;i<n;i++) {
myLen = radioName.length;
myName = myForm.elements[i].name;
myType = myForm.elements[i].type;
if (myName.substring(0,myLen) == radioName && myType == "radio") {
myRadioGroup = myForm.elements[myName];
myRadioGroup[selectIndex].checked = true;
}
}
}
function selectItemInCheckboxByName(formId, checkName, checked ) {
myForm = document.getElementById(formId);
for (i=0,n=myForm.elements.length;i<n;i++) {
myLen = checkName.length;
myName = myForm.elements[i].name;
myType = myForm.elements[i].type;
if (myName.substring(0,myLen) == checkName && myType == "checkbox") {
myForm.elements[i].checked = checked;
}
}
}
-->
</script>
<form name="form1" id="form1" method="post" action="backup.php">
<form name="form" method="post" action="backup.php">
<table cellpadding="5">
<?php
//Now, check modules and info and show posibilities
if ($allmods = get_records("modules") ) {
//Print option to select/deselect everything with 1 click.
echo "<tr>";
echo "<td align=\"right\">";
echo '<b>'.get_string("include").":</b>";
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_', false);\">". get_string("none")."</a>";
echo "</td>";
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', false);\">". get_string("none")."</a>";
echo "</td>";
echo "</tr>";
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
$currentrow = 0;
foreach ($allmods as $mod) {
$modname = $mod->name;
$modbackup = $modname."_backup_mods";
@@ -142,61 +98,35 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
$var = "exists_".$modname;
if (isset($$var) && $$var) {
//Print the full tr
echo "<tr class=\"r".$currentrow."\">";
echo " <td align=\"right\">&nbsp;";
echo "</td><td>\n";
echo "<tr>";
echo "<td align=\"right\"><b>";
echo get_string("include")." ". get_string("modulenameplural",$modname).":";
echo "</b></td><td>";
$backup_options[0] = get_string("no");
$backup_options[1] = get_string("yes");
$var = "backup_".$modname;
//choose_from_menu($backup_options, $var, $$var, "");
//Print the checkbox
print_checkbox($var, $$var, $$var, get_string("modulenameplural",$modname),'','selectItemInCheckboxByName(\'form1\',\'backup_'.$modname.'\',this.checked)');
echo "</td><td align=\"right\">&nbsp;";
echo "</td><td>";
choose_from_menu($backup_options, $var, $$var, "");
$var = "backup_user_info_".$modname;
if (empty($to)) {
$backup_user_options[0] = get_string("withoutuserdata");
$backup_user_options[1] = get_string("withuserdata");
//choose_from_menu($backup_user_options, $var, $$var, "");
print_checkbox($var, $$var, $$var, get_string("userdata"),'','selectItemInCheckboxByName(\'form1\',\'backup_user_info_'.$modname.'\',this.checked)');
} else {
choose_from_menu($backup_user_options, $var, $$var, "");
}
else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
}
echo "</td></tr>\n";
// if we have the backup_one_mod function, loop here.
$var = 'exists_one_'.$modname;
if (!empty($$var)) {
echo '<tr><td></td><td colspan="3"><table class="backup-form-instances">';
$instances = get_all_instances_in_course($modname,$course);
foreach ($instances as $instance) {
echo '<tr><td>';
$var = 'backup_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1);
print_checkbox($var,$$var,$$var,$instance->name,$instance->name,'this.form.elements[\'backup_'.$modname.'\'].checked=1;');
echo '</td><td align="right">&nbsp;';
$var = 'backup_user_info_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1);
if (empty($to)) {
print_checkbox($var,$$var,$$var,get_string('userdata'),'','this.form.elements[\'backup_user_info_'.$modname.'\'].checked=1;');
} else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
}
echo '</td></tr>';
}
echo '</table></td></tr>';
}
echo "</td></tr>";
}
}
//Line
echo "<tr><td colspan=\"4\"><hr /></td></tr>\n";
echo "<tr><td colspan=\"2\"><hr /></td></tr>";
if (empty($to)) {
//Now print the Metacourse tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string ("metacourse").":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$meta_options[0] = get_string("no");
$meta_options[1] = get_string("yes");
choose_from_menu($meta_options, "backup_metacourse", $backup_metacourse, "");
@@ -209,9 +139,9 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
if (empty($to)) {
//Now print the Users tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string("users").":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$user_options[0] = get_string("all");
$user_options[1] = get_string("course");
$user_options[2] = get_string("none");
@@ -225,9 +155,9 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
if (empty($to)) {
//Now print the Logs tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string("logs").":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$log_options[0] = get_string("no");
$log_options[1] = get_string("yes");
choose_from_menu($log_options, "backup_logs", $backup_logs, "");
@@ -240,9 +170,9 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
if (empty($to)) {
//Now print the User Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string ("userfiles").":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$user_file_options[0] = get_string("no");
$user_file_options[1] = get_string("yes");
choose_from_menu($user_file_options, "backup_user_files", $backup_user_files, "");
@@ -253,9 +183,9 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
}
//Now print the Course Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string ("coursefiles").":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$course_file_options[0] = get_string("no");
$course_file_options[1] = get_string("yes");
choose_from_menu($course_file_options, "backup_course_files", $backup_course_files, "");
@@ -264,9 +194,9 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
if (empty($to) && $course->id == SITEID) {
//If we are in a SITEID backup print the Messages tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo "<td align=\"right\"><b>";
echo get_string ('messages','message').":";
echo "</b></td><td colspan=\"2\">";
echo "</b></td><td>";
$mess_options[0] = get_string("no");
$mess_options[1] = get_string("yes");
choose_from_menu($mess_options, "backup_messages", $backup_messages, "");
@@ -276,55 +206,12 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo '<input type="hidden" name="backup_messages" value="0" />';
}
}
$backup_unique_code = time();
//Calculate the backup string
//Calculate the backup word
//Take off some characters in the filename !!
$takeoff = array(" ", ":", "/", "\\", "|");
$backup_word = str_replace($takeoff,"_",strtolower(get_string("backupfilename")));
//If non-translated, use "backup"
if (substr($backup_word,0,1) == "[") {
$backup_word= "backup";
}
//Calculate the date format string
$backup_date_format = str_replace(" ","_",get_string("backupnameformat"));
//If non-translated, use "%Y%m%d-%H%M"
if (substr($backup_date_format,0,1) == "[") {
$backup_date_format = "%%Y%%m%%d-%%H%%M";
}
//Calculate the shortname
$backup_shortname = clean_filename($course->shortname);
if (empty($backup_shortname) or $backup_shortname == '_' ) {
$backup_shortname = $course->id;
}
//Calculate the final backup filename
//The backup word
$backup_name = $backup_word."-";
//The shortname
$backup_name .= strtolower($backup_shortname)."-";
//The date format
$backup_name .= userdate(time(),$backup_date_format,99,false);
//The extension
$backup_name .= ".zip";
//And finally, clean everything
$backup_name = clean_filename($backup_name);
//Calculate the backup unique code to allow simultaneus backups (to define
//the temp-directory name and records in backup temp tables
?>
</table>
<br />
<center>
<input type="hidden" name="id" value="<?php p($id) ?>" />
<input type="hidden" name="to" value="<?php p($to) ?>" />
<input type="hidden" name="backup_unique_code" value="<?php p($backup_unique_code); ?>" />
<input type="hidden" name="backup_name" value="<?php p($backup_name); ?>" />
<input type="hidden" name="launch" value="check" />
<input type="submit" value="<?php print_string("continue") ?>" />
<input type="submit" name="cancel" value="<?php print_string("cancel") ?>" />
+23 -61
View File
@@ -98,17 +98,9 @@ function schedule_backup_cron() {
if (!$backup_course) {
mtrace(" ERROR (in backup_courses detection)");
$status = false;
continue;
}
// Skip backup of unavailable courses that have remained unmodified in a month
$skipped = false;
if (!$course->visible && ($now - $course->timemodified) > 31*24*60*60) { //Hidden + unmodified last month
mtrace(" SKIPPING - hidden+unmodified");
set_field("backup_courses","laststatus","3","courseid",$backup_course->courseid);
$skipped = true;
}
//Now we backup every non skipped course with nextstarttime < now
if (!$skipped && $backup_course->nextstarttime > 0 && $backup_course->nextstarttime < $now) {
//Now we backup every course with nextstarttime < now
if ($backup_course->nextstarttime > 0 && $backup_course->nextstarttime < $now) {
//We have to send a email because we have included at least one backup
$emailpending = true;
//Only make the backup if laststatus isn't 2-UNFINISHED (uncontrolled error)
@@ -162,7 +154,6 @@ function schedule_backup_cron() {
$count_ok = count_records('backup_courses','laststatus','1');
$count_error = count_records('backup_courses','laststatus','0');
$count_unfinished = count_records('backup_courses','laststatus','2');
$count_skipped = count_records('backup_courses','laststatus','3');
//Build the message text
//Summary
@@ -170,7 +161,6 @@ function schedule_backup_cron() {
$message .= "==================================================\n";
$message .= " ".get_string('courses').": ".$count_all."\n";
$message .= " ".get_string('ok').": ".$count_ok."\n";
$message .= " ".get_string('skipped').": ".$count_skipped."\n";
$message .= " ".get_string('error').": ".$count_error."\n";
$message .= " ".get_string('unfinished').": ".$count_unfinished."\n\n";
@@ -335,7 +325,7 @@ function schedule_backup_course_configure($course,$starttime = 0) {
$backup_config->backup_sche_coursefiles = 1;
}
if (!isset($backup_config->backup_sche_messages)) {
$backup_config->backup_sche_messages = 0;
$backup_config->backup_sche_messages = 1;
}
if (!isset($backup_config->backup_sche_active)) {
$backup_config->backup_sche_active = 0;
@@ -373,46 +363,26 @@ function schedule_backup_course_configure($course,$starttime = 0) {
$var = "exists_".$modname;
$$var = true;
$count++;
// PENNY NOTES: I have moved from here to the closing brace inside
// by two sets of ifs()
// to avoid the backup failing on a non existant backup.
// If the file/function/whatever doesn't exist, we don't want to set this
// this module in backup preferences at all.
//Check data
//Check module info
$var = "backup_".$modname;
if (!isset($$var)) {
$$var = $backup_config->backup_sche_modules;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->backup = $$var;
//Check include user info
$var = "backup_user_info_".$modname;
if (!isset($$var)) {
$$var = $backup_config->backup_sche_withuserdata;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->userinfo = $$var;
//And the name of the mod
$preferences->mods[$modname]->name = $modname;
}
}
}
}
// now set instances
if ($coursemods = get_course_mods($course->id)) {
foreach ($coursemods as $mod) {
if (array_key_exists($mod->modname,$preferences->mods)) { // we are to backup this module
if (empty($preferences->mods[$mod->modname]->instances)) {
$preferences->mods[$mod->modname]->instances = array(); // avoid warnings
}
$preferences->mods[$mod->modname]->instances[$mod->instance]->backup = $preferences->mods[$mod->modname]->backup;
$preferences->mods[$mod->modname]->instances[$mod->instance]->userinfo = $preferences->mods[$mod->modname]->userinfo;
// there isn't really a nice way to do this...
$preferences->mods[$mod->modname]->instances[$mod->instance]->name = get_field($mod->modname,'name','id',$mod->instance);
//Check data
//Check module info
$var = "backup_".$modname;
if (!isset($$var)) {
$$var = $backup_config->backup_sche_modules;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->backup = $$var;
//Check include user info
$var = "backup_user_info_".$modname;
if (!isset($$var)) {
$$var = $backup_config->backup_sche_withuserdata;
}
//Now stores all the mods preferences into an array into preferences
$preferences->mods[$modname]->userinfo = $$var;
//And the name of the mod
$preferences->mods[$modname]->name = $modname;
}
}
}
@@ -514,13 +484,7 @@ function schedule_backup_course_configure($course,$starttime = 0) {
//Now calculate the users
if ($status) {
schedule_backup_log($starttime,$course->id," calculating users");
//Decide about include users with messages, based on SITEID
if ($preferences->backup_messages && $preferences->backup_course == SITEID) {
$include_message_users = true;
} else {
$include_message_users = false;
}
user_check_backup($course->id,$backup_unique_code,$preferences->backup_users,$include_message_users);
user_check_backup($course->id,$backup_unique_code,$preferences->backup_users,$preferences->backup_messages);
}
//Now calculate the logs
@@ -641,7 +605,7 @@ function schedule_backup_course_execute($preferences,$starttime = 0) {
//questions structure (step 1). See notes on mod/quiz/backuplib.php
if ($status and $preferences->mods['quiz']->backup) {
schedule_backup_log($starttime,$preferences->backup_course," categories & questions");
$status = backup_question_categories($backup_file,$preferences);
$status = quiz_backup_question_categories($backup_file,$preferences);
}
//Print logs if selected
@@ -772,9 +736,7 @@ function schedule_backup_course_delete_old_files($preferences,$starttime=0) {
$dirtocheck = $CFG->dataroot."/".$preferences->backup_course."/backupdata";
}
schedule_backup_log($starttime,$preferences->backup_course," checking $dirtocheck");
if ($CFG->debug > 7) {
mtrace(" Keeping backup files in $dirtocheck");
}
mtrace(" Keeping backup files in $dirtocheck");
//Get all the files in $dirtocheck
$files = get_directory_list($dirtocheck,"",false);
+28 -223
View File
@@ -78,7 +78,7 @@
//Insert the record id. backup_users decide it.
//When all users
$status = insert_record('backup_ids', $backupids_rec, false);
$status = insert_record("backup_ids",$backupids_rec,false,"backup_code");
$count_users++;
}
//Do some output
@@ -271,7 +271,7 @@
$status = execute_sql("INSERT INTO {$CFG->prefix}backup_files
(backup_code, file_type, path, old_id)
VALUES
('$backup_unique_code','user','".addslashes($dir)."','$userid')",false);
('$backup_unique_code','user','$dir','$userid')",false);
}
//Do some output
backup_flush(30);
@@ -315,7 +315,7 @@
$status = execute_sql("INSERT INTO {$CFG->prefix}backup_files
(backup_code, file_type, path)
VALUES
('$backup_unique_code','course','".addslashes($dir)."')",false);
('$backup_unique_code','course','$dir')",false);
}
//Do some output
backup_flush(30);
@@ -414,20 +414,13 @@
}
//Return the xml start tag
function start_tag($tag,$level=0,$endline=false,$attributes=null) {
function start_tag($tag,$level=0,$endline=false) {
if ($endline) {
$endchar = "\n";
} else {
$endchar = "";
}
$attrstring = '';
if (!empty($attributes) && is_array($attributes)) {
foreach ($attributes as $key => $value) {
$attrstring .= " ".xml_tag_safe_content($key)."=\"".
xml_tag_safe_content($value)."\"";
}
}
return str_repeat(" ",$level*2)."<".strtoupper($tag).$attrstring.">".$endchar;
return str_repeat(" ",$level*2)."<".strtoupper($tag).">".$endchar;
}
//Return the xml end tag
@@ -441,38 +434,18 @@
}
//Return the start tag, the contents and the end tag
function full_tag($tag,$level=0,$endline=true,$content,$attributes=null) {
global $CFG;
function full_tag($tag,$level=0,$endline=true,$content,$to_utf=true) {
//Here we encode absolute links
$content = backup_encode_absolute_links($content);
$st = start_tag($tag,$level,$endline,$attributes);
$co = xml_tag_safe_content($content);
$et = end_tag($tag,0,true);
return $st.$co.$et;
}
function xml_tag_safe_content($content) {
global $CFG;
//If enabled, we strip all the control chars (\x0-\x1f) from the text but tabs (\x9),
//newlines (\xa) and returns (\xd). The delete control char (\x7f) is also included.
//because they are forbiden in XML 1.0 specs. The expression below seems to be
//UTF-8 safe too because it simply ignores the rest of characters.
$content = preg_replace("/[\x-\x8\xb-\xc\xe-\x1f\x7f]/is","",$content);
if (!empty($CFG->unicodedb)) {
// Don't perform the conversion. Contents are Unicode.
$content = preg_replace("/\r\n|\r/", "\n", htmlspecialchars($content));
$st = start_tag($tag,$level,$endline);
$co="";
if ($to_utf) {
$co = preg_replace("/\r\n|\r/", "\n", utf8_encode(htmlspecialchars($content)));
} else {
// Perform the conversion. Contents aren't Unicode.
$content = preg_replace("/\r\n|\r/", "\n", utf8_encode(htmlspecialchars($content)));
}
return $content;
$co = preg_replace("/\r\n|\r/", "\n", htmlspecialchars($content));
}
$et = end_tag($tag,0,true);
return $st.$co.$et;
}
//Prints General info about the course
@@ -513,40 +486,13 @@
$included = "true";
if ($element->userinfo) {
$userinfo = "true";
}
}
}
//Prints the mod start
fwrite ($bf,start_tag("MOD",3,true));
fwrite ($bf,full_tag("NAME",4,false,$element->name));
fwrite ($bf,full_tag("INCLUDED",4,false,$included));
fwrite ($bf,full_tag("USERINFO",4,false,$userinfo));
if (isset($preferences->mods[$element->name]->instances)
&& is_array($preferences->mods[$element->name]->instances)
&& count($preferences->mods[$element->name]->instances)) {
fwrite ($bf, start_tag("INSTANCES",4,true));
foreach ($preferences->mods[$element->name]->instances as $id => $object) {
if (!empty($object->backup)) {
//Calculate info
$included = "false";
$userinfo = "false";
if ($object->backup) {
$included = "true";
if ($object->userinfo) {
$userinfo = "true";
}
}
fwrite ($bf, start_tag("INSTANCE",5,true));
fwrite ($bf, full_tag("ID",5,false,$id));
fwrite ($bf, full_tag("NAME",5,false,$object->name));
fwrite ($bf, full_tag("INCLUDED",5,false,$included)) ;
fwrite ($bf, full_tag("USERINFO",5,false,$userinfo));
fwrite ($bf, end_tag("INSTANCE",5,true));
}
}
fwrite ($bf, end_tag("INSTANCES",4,true));
}
//Print the end
fwrite ($bf,end_tag("MOD",3,true));
@@ -651,7 +597,6 @@
fwrite ($bf,full_tag("LANG",3,false,$course->lang));
fwrite ($bf,full_tag("THEME",3,false,$course->theme));
fwrite ($bf,full_tag("COST",3,false,$course->cost));
fwrite ($bf,full_tag("CURRENCY",3,false,$course->currency));
fwrite ($bf,full_tag("MARKER",3,false,$course->marker));
fwrite ($bf,full_tag("VISIBLE",3,false,$course->visible));
fwrite ($bf,full_tag("HIDDENSECTIONS",3,false,$course->hiddensections));
@@ -988,14 +933,6 @@
fwrite ($bf,start_tag("MODS",4,true));
$first_record = false;
}
// if we're doing selected instances, check that too.
if (is_array($preferences->mods[$moduletype]->instances)
&& count($preferences->mods[$moduletype]->instances)
&& (!array_key_exists($course_module[$tok]->instance,$preferences->mods[$moduletype]->instances)
|| empty($preferences->mods[$moduletype]->instances[$course_module[$tok]->instance]->backup))) {
$tok = strtok(",");
continue;
}
//Print mod info from course_modules
fwrite ($bf,start_tag("MOD",5,true));
//Save neccesary info to backup_ids
@@ -1003,6 +940,7 @@
fwrite ($bf,full_tag("TYPE",6,false,$moduletype));
fwrite ($bf,full_tag("INSTANCE",6,false,$course_module[$tok]->instance));
fwrite ($bf,full_tag("ADDED",6,false,$course_module[$tok]->added));
fwrite ($bf,full_tag("DELETED",6,false,$course_module[$tok]->deleted));
fwrite ($bf,full_tag("SCORE",6,false,$course_module[$tok]->score));
fwrite ($bf,full_tag("INDENT",6,false,$course_module[$tok]->indent));
fwrite ($bf,full_tag("VISIBLE",6,false,$course_module[$tok]->visible));
@@ -1049,6 +987,7 @@
//Output all user data
fwrite ($bf,full_tag("ID",4,false,$user_data->id));
fwrite ($bf,full_tag("AUTH",4,false,$user_data->auth));
fwrite ($bf,full_tag("GUID",4,false,$user_data->guid));
fwrite ($bf,full_tag("CONFIRMED",4,false,$user_data->confirmed));
fwrite ($bf,full_tag("POLICYAGREED",4,false,$user_data->policyagreed));
fwrite ($bf,full_tag("DELETED",4,false,$user_data->deleted));
@@ -1078,7 +1017,7 @@
fwrite ($bf,full_tag("LASTACCESS",4,false,$user_data->lastaccess));
fwrite ($bf,full_tag("LASTLOGIN",4,false,$user_data->lastlogin));
fwrite ($bf,full_tag("CURRENTLOGIN",4,false,$user_data->currentlogin));
fwrite ($bf,full_tag("LASTIP",4,false,$user_data->lastip));
fwrite ($bf,full_tag("LASTIP",4,false,$user_data->lastIP));
fwrite ($bf,full_tag("SECRET",4,false,$user_data->secret));
fwrite ($bf,full_tag("PICTURE",4,false,$user_data->picture));
fwrite ($bf,full_tag("URL",4,false,$user_data->url));
@@ -1240,8 +1179,7 @@
//See if it is a valid module to backup
if ($log->module == "course" or
$log->module == "user" or
(array_key_exists($log->module, $preferences->mods) and $preferences->mods[$log->module]->backup == 1)) {
// logs with 'upload' in module field are ignored, there is no restore code anyway
$preferences->mods[$log->module]->backup == 1) {
//Begin log tag
fwrite ($bf,start_tag("LOG",3,true));
@@ -1661,30 +1599,14 @@
$status = true;
require_once($CFG->dirroot.'/mod/'.$module.'/backuplib.php');
if (isset($preferences->mods[$module]->instances)
&& is_array($preferences->mods[$module]->instances)) {
$onemodbackup = $module.'_backup_one_mod';
if (function_exists($onemodbackup)) {
foreach ($preferences->mods[$module]->instances as $instance => $object) {
if (!empty($object->backup)) {
$status = $onemodbackup($bf,$preferences,$instance);
}
}
} else {
$status = false;
}
} else { // whole module.
//First, re-check if necessary functions exists
$modbackup = $module."_backup_mods";
if (function_exists($modbackup)) {
//Call the function
$status = $modbackup($bf,$preferences);
} else {
//Something was wrong. Function should exist.
$status = false;
}
//First, re-check if necessary functions exists
$modbackup = $module."_backup_mods";
if (function_exists($modbackup)) {
//Call the function
$status = $modbackup($bf,$preferences);
} else {
//Something was wrong. Function should exist.
$status = false;
}
return $status;
@@ -1721,7 +1643,6 @@
foreach ($mypreferences->mods as $name => $info) {
//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);
@@ -1729,7 +1650,7 @@
}
if ($result != $content && $CFG->debug>7) { //Debug
echo '<br /><hr />'.s($content).'<br />changed to<br />'.s($result).'<hr /><br />'; //Debug
echo "<br /><hr />".$content."<br />changed to<br />".$result."<hr /><br />"; //Debug
} //Debug
return $result;
@@ -1923,120 +1844,4 @@
return $status;
}
/**
* compatibility function
* with new granular backup
* we need to know
*/
function backup_userdata_selected($preferences,$modname,$modid) {
return ((empty($preferences->mods[$modname]->instances)
&& !empty($preferences->mods[$modname]->userinfo))
|| (is_array($preferences->mods[$modname]->instances)
&& array_key_exists($modid,$preferences->mods[$modname]->instances)
&& !empty($preferences->mods[$modname]->instances[$modid]->userinfo)));
}
function backup_mod_selected($preferences,$modname,$modid) {
return ((empty($preferences->mods[$modname]->instances)
&& !empty($preferences->mods[$modname]->backup))
|| (is_array($preferences->mods[$modname]->instances)
&& array_key_exists($modid,$preferences->mods[$modname]->instances)
&& !empty($preferences->mods[$modname]->instances[$modid]->backup)));
}
/*
* Checks for the required files/functions to backup every mod
* And check if there is data about it
*/
function backup_fetch_prefs_from_request(&$preferences,&$count,$course) {
global $CFG,$SESSION;
// check to see if it's in the session already
if (!empty($SESSION->backupprefs) && array_key_exists($course->id,$SESSION->backupprefs) && !empty($SESSION->backupprefs[$course->id])) {
$sprefs = $SESSION->backupprefs[$course->id];
$preferences = $sprefs;
// refetch backup_name just in case.
$bn = optional_param('backup_name','',PARAM_FILE);
if (!empty($bn)) {
$preferences->backup_name = $bn;
}
$count = 1;
return true;
}
if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
$modbackup = $modname."_backup_mods";
$modbackupone = $modname."_backup_one_mod";
$modcheckbackup = $modname."_check_backup_mods";
if (!file_exists($modfile)) {
continue;
}
include_once($modfile);
if (!function_exists($modbackup) || !function_exists($modcheckbackup)) {
continue;
}
$var = "exists_".$modname;
$preferences->$var = true;
$count++;
// check that there are instances and we can back them up individually
if (!count_records('course_modules','course',$course->id,'module',$mod->id) || !function_exists($modbackupone)) {
continue;
}
$var = 'exists_one_'.$modname;
$preferences->$var = true;
$varname = $modname.'_instances';
$preferences->$varname = get_all_instances_in_course($modname,$course);
foreach ($preferences->$varname as $instance) {
$preferences->mods[$modname]->instances[$instance->id]->name = $instance->name;
$var = 'backup_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,0);
$preferences->$var = $$var;
$preferences->mods[$modname]->instances[$instance->id]->backup = $$var;
$var = 'backup_user_info_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,0);
$preferences->$var = $$var;
$preferences->mods[$modname]->instances[$instance->id]->userinfo = $$var;
$var = 'backup_'.$modname.'_instances';
$preferences->$var = 1; // we need this later to determine what to display in modcheckbackup.
}
//Check data
//Check module info
$preferences->mods[$modname]->name = $modname;
$var = "backup_".$modname;
$$var = optional_param( $var,0);
$preferences->$var = $$var;
$preferences->mods[$modname]->backup = $$var;
//Check include user info
$var = "backup_user_info_".$modname;
$$var = optional_param( $var,0);
$preferences->$var = $$var;
$preferences->mods[$modname]->userinfo = $$var;
}
}
//Check other parameters
$preferences->backup_metacourse = optional_param('backup_metacourse',1,PARAM_INT);
$preferences->backup_users = optional_param('backup_users',1,PARAM_INT);
$preferences->backup_logs = optional_param('backup_logs',0,PARAM_INT);
$preferences->backup_user_files = optional_param('backup_user_files',1,PARAM_INT);
$preferences->backup_course_files = optional_param('backup_course_files',1,PARAM_INT);
$preferences->backup_messages = optional_param('backup_messages',1,PARAM_INT);
$preferences->backup_course = $course->id;
$preferences->backup_name = required_param('backup_name',PARAM_FILE );
$preferences->backup_unique_code = required_param('backup_unique_code');
// put it (back) in the session
$SESSION->backupprefs[$course->id] = $preferences;
}
?>
+13 -10
View File
@@ -1,9 +1,10 @@
Ziba Scott <ziba@linuxbox.com> 06/23/05
Ziba Scott <ziba@linuxbox.com> 11/19/04
This is a utility to convert Blackboard Course export zip files into
Moodle course export zip files. It has been successfully tested with
Blackboard 5.5 and Moodle 1.4.1 and Moodle CVS. There is minimal
Blackboard 6 support. It will convert:
This is a beta demonstration of a utility to convert Blackboard
Course export zip files into Moodle course export zip files. It
has been successfully tested with Blackboard 5.5 and
Moodle 1.4.1 and Moodle CVS. There is minimal Blackboard 6 support.
It will convert:
* Course Name/Title
* Forum Topics
@@ -11,14 +12,17 @@ Blackboard 6 support. It will convert:
* Assignments
* External Links
The current status of this project is
exploration/proof-of-concept. We have successfully converted
basic Blackboard course information as well as course documents
and forum topics using the XSLT methods described above.
AUTOMATED OPERATION:
REQUIREMENTS FOR WEB INTERFACE:
*Moodle 1.4.1 or greater
*PHP 4.3 compiled with --enable-xslt --with-xslt-sablot options
*PHP compiled with --enable-xslt --with-xslt-sablot options
(Check php.net for instructions on enabling xslt for your platform)
*Alternatively, PHP 5 compiled with xml and xsl support (-with-xsl)
INSTALLATION:
*Unpack this file into the "backup" directory
@@ -32,11 +36,10 @@ MANUAL OPERATION:
*An XSLT 1.0 processor (like Sablotron)
*A zipping utility
REQUIREMENTS FOR COMMAND LINE INTERFACE:
REQUIREMENTS FOR WEB INTERFACE:
*Linux/Unix
*PHP 4 compiled with --enable-xslt --with-xslt-sablot options.
*PHP 5 compiled with -with-xsl and the default xml support left in.
*PHP compiled with --enable-xslt --with-xslt-sablot options.
*Apache with write access to /tmp
*A commandline zipping utility
+24 -91
View File
@@ -1,7 +1,6 @@
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" />
<xsl:template match="/">
<MOODLE_BACKUP>
<INFO>
@@ -55,8 +54,8 @@
</MOD>
<MOD>
<NAME>quiz</NAME>
<INCLUDED>false</INCLUDED>
<USERINFO>false</USERINFO>
<INCLUDED>true</INCLUDED>
<USERINFO>true</USERINFO>
</MOD>
<MOD>
<NAME>resource</NAME>
@@ -65,18 +64,18 @@
</MOD>
<MOD>
<NAME>scorm</NAME>
<INCLUDED>false</INCLUDED>
<USERINFO>false</USERINFO>
<INCLUDED>true</INCLUDED>
<USERINFO>true</USERINFO>
</MOD>
<MOD>
<NAME>survey</NAME>
<INCLUDED>false</INCLUDED>
<USERINFO>false</USERINFO>
<INCLUDED>true</INCLUDED>
<USERINFO>true</USERINFO>
</MOD>
<MOD>
<NAME>wiki</NAME>
<INCLUDED>false</INCLUDED>
<USERINFO>false</USERINFO>
<INCLUDED>true</INCLUDED>
<USERINFO>true</USERINFO>
</MOD>
<MOD>
<NAME>workshop</NAME>
@@ -85,7 +84,7 @@
</MOD>
<USERS>course</USERS>
<LOGS>false</LOGS>
<USERFILES>false</USERFILES>
<USERFILES>true</USERFILES>
<COURSEFILES>true</COURSEFILES>
</DETAILS>
</INFO>
@@ -149,13 +148,7 @@
<TEACHERS>Teachers</TEACHERS>
<STUDENT>Student</STUDENT>
<STUDENTS>Students</STUDENTS>
<GUEST>
<xsl:choose>
<xsl:when test="FLAGS/ALLOWGUESTS/@value = 'true' ">1</xsl:when>
<xsl:when test="FLAGS/ALLOWGUESTS/@value = 'false' ">0</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</GUEST>
<GUEST>0</GUEST>
<STARTDATE>1094270400</STARTDATE>
<ENROLPERIOD>0</ENROLPERIOD>
<NUMSECTIONS>10</NUMSECTIONS>
@@ -166,13 +159,7 @@
<LANG></LANG>
<COST></COST>
<MARKER>0</MARKER>
<VISIBLE>
<xsl:choose>
<xsl:when test="FLAGS/ISAVAILABLE/@value = 'true' ">1</xsl:when>
<xsl:when test="FLAGS/ISAVAILABLE/@value = 'false' ">0</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</VISIBLE>
<VISIBLE>1</VISIBLE>
<HIDDENSECTIONS>0</HIDDENSECTIONS>
<TIMECREATED>1094240775</TIMECREATED>
<TIMEMODIFIED>1094240775</TIMEMODIFIED>
@@ -210,8 +197,7 @@
<VISIBLE>1</VISIBLE>
<MODS>
<xsl:choose>
<xsl:when test="$recurse = 'true'">
<xsl:if test="$recurse = 'true'">
<xsl:variable name="mod_number" select="substring-after(@identifierref,'res')"/>
<xsl:call-template name="item_recurse_files" >
<xsl:with-param name="mod_number" select="$mod_number"/>
@@ -219,11 +205,12 @@
<xsl:with-param name="recurse" select="$recurse" />
</xsl:call-template>
</xsl:when>
</xsl:if>
<xsl:when test="$recurse = 'false'">
<xsl:if test="$recurse = 'false'">
<xsl:for-each select="item">
<xsl:variable name="mod_number" select="substring-after(@identifierref,'res')"/>
<xsl:if test="document(concat(@identifierref,'.dat'))/CONTENT/FLAGS/ISFOLDER/@value != 'true' or document(concat(@identifierref,'.dat'))/EXTERNALLINK/DESCRIPTION/FLAGS/ISHTML/@value ='true'">
<!-- Create one section-mod -->
<xsl:for-each select="document(concat(@identifierref,'.dat'))">
<xsl:call-template name="section_mod">
@@ -232,9 +219,10 @@
</xsl:call-template>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:if>
</MODS>
</SECTION>
@@ -276,6 +264,7 @@
<xsl:choose>
<!-- Detected one or more files -->
<xsl:when test="CONTENT/FILES/FILEREF/RELFILE/@value != ''">
<!-- Create a label -->
<xsl:call-template name="section_mod_generic">
<xsl:with-param name="mod_number" ><xsl:value-of select="$mod_number"/></xsl:with-param>
@@ -285,12 +274,12 @@
<!-- Create a resource for each file -->
<xsl:for-each select="CONTENT/FILES/FILEREF">
<xsl:call-template name="section_mod_generic">
<xsl:call-template name="section_mod_generic">
<xsl:with-param name="mod_number" ><xsl:value-of select="$mod_number"/>0<xsl:value-of select="position()"/></xsl:with-param>
<xsl:with-param name="indent" select="$indent + 1"/>
<xsl:with-param name="type" >resource</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:call-template>
</xsl:for-each>
</xsl:when>
@@ -331,16 +320,6 @@
<xsl:with-param name="type" >resource</xsl:with-param>
</xsl:call-template>
</xsl:when>
<!-- Detected staffinfo -->
<xsl:when test="STAFFINFO/COURSEID/@value != '' ">
<!-- Create a resource -->
<xsl:call-template name="section_mod_generic">
<xsl:with-param name="mod_number" select="$mod_number"/>
<xsl:with-param name="indent" select="$indent"/>
<xsl:with-param name="type" >resource</xsl:with-param>
</xsl:call-template> -->
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
@@ -409,7 +388,6 @@
<!-- Creates one module-file entry -->
<xsl:template name="module_file" >
<xsl:param name="mod_number">1. </xsl:param>
<xsl:param name="summary"/>
<MOD>
<ID><xsl:value-of select="$mod_number"/></ID>
<MODTYPE>resource</MODTYPE>
@@ -423,7 +401,8 @@
<xsl:value-of select="CONTENTID/@value"/>/<xsl:value-of select="RELFILE/@value"/>
</REFERENCE>
<SUMMARY>
<xsl:value-of select="$summary"/>
summary broken
<xsl:value-of select="MAINDATA/TEXT"/>
</SUMMARY>
<ALLTEXT></ALLTEXT>
<POPUP></POPUP>
@@ -432,36 +411,6 @@
</MOD>
</xsl:template>
<!-- Creates one module-text-staffinfo entry -->
<!-- TODO staff photo -->
<xsl:template name="module_text_staffinfo" >
<xsl:param name="mod_number">1. </xsl:param>
<MOD>
<ID><xsl:value-of select="$mod_number"/></ID>
<MODTYPE>resource</MODTYPE>
<NAME>
<xsl:value-of select="CONTACT/NAME/FORMALTITLE/@value"/><xsl:text> </xsl:text><xsl:value-of select="CONTACT/NAME/GIVEN/@value"/><xsl:text> </xsl:text><xsl:value-of select="CONTACT/NAME/FAMILY/@value"/>
</NAME>
<TYPE>text</TYPE>
<REFERENCE></REFERENCE>
<SUMMARY>
<xsl:value-of select="CONTACT/NAME/FORMALTITLE/@value"/><xsl:text> </xsl:text><xsl:value-of select="CONTACT/NAME/GIVEN/@value"/><xsl:text> </xsl:text><xsl:value-of select="CONTACT/NAME/FAMILY/@value"/>
</SUMMARY>
<ALLTEXT>
Title:<xsl:value-of select="CONTACT/NAME/FORMALTITLE/@value"/>
Given Name:<xsl:value-of select="CONTACT/NAME/GIVEN/@value"/>
Family Name:<xsl:value-of select="CONTACT/NAME/FAMILY/@value"/>
Phone:<xsl:value-of select="CONTACT/PHONE"/>
Office Hours:<xsl:value-of select="CONTACT/OFFICE/HOURS"/>
Office Address:<xsl:value-of select="CONTACT/OFFICE/ADDRESS"/>
Homepage:<xsl:value-of select="HOMEPAGE/@value"/>
</ALLTEXT>
<POPUP></POPUP>
<OPTIONS></OPTIONS>
<TIMEMODIFIED>1094240775</TIMEMODIFIED>
</MOD>
</xsl:template>
<!-- Creates one module-text entry -->
<xsl:template name="module_text" >
<xsl:param name="mod_number">1. </xsl:param>
@@ -538,9 +487,6 @@
<xsl:apply-templates select="//EXTERNALLINK">
<xsl:with-param name="mod_number" select="$mod_number"/>
</xsl:apply-templates>
<xsl:apply-templates select="//STAFFINFO">
<xsl:with-param name="mod_number" select="$mod_number"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
@@ -560,16 +506,6 @@
</xsl:template>
<!-- Create a STAFFINFO module entry -->
<xsl:template match="STAFFINFO">
<xsl:param name="mod_number">1. </xsl:param>
<!-- Every staffinfo module will have a label module describing it -->
<xsl:call-template name="module_text_staffinfo">
<xsl:with-param name="mod_number" select="$mod_number"/>
</xsl:call-template>
</xsl:template>
<!-- Create a CONTENT module entry -->
<xsl:template match="CONTENT">
<xsl:param name="mod_number">1. </xsl:param>
@@ -583,12 +519,9 @@
<xsl:with-param name="mod_number" select="$mod_number"/>
</xsl:call-template>
<xsl:variable name="summary" select="MAINDATA/TEXT"/>
<xsl:for-each select="FILES/FILEREF">
<xsl:call-template name="module_file">
<xsl:with-param name="mod_number" ><xsl:value-of select="$mod_number"/>0<xsl:value-of select="position()"/></xsl:with-param>
<xsl:with-param name="summary" ><xsl:value-of select="$summary"/></xsl:with-param>
</xsl:call-template>
</xsl:for-each>
+2 -2
View File
@@ -1,7 +1,7 @@
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<MOODLE_BACKUP>
<INFO>
+4 -7
View File
@@ -1,15 +1,12 @@
<?php // $Id$
<?php
// This file facilitates the conversion of a Blackboard course export
// into a Moodle course export. It assumes an unzipped directory and makes in-place alterations.
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
// Ziba Scott <ziba@linuxbox.com> 10-25-04
require_once($CFG->dirroot.'/backup/bb/xsl_emulate_xslt.inc');
function get_subdirs($directory){
$opendirectory = opendir( $directory );
while(false !== ($filename = readdir($opendirectory))) {
while($filename = readdir($opendirectory)) {
if (is_dir($directory.$filename) and $filename != ".." and $filename != "."){
$subdirs[] = $filename;
}
@@ -36,7 +33,7 @@ function blackboard_convert($dir){
// Check for a Blackboard manifest file
if (is_readable($dir.'/imsmanifest.xml') && !is_readable($dir.'/moodle.xml')){
if (is_readable($dir.'/imsmanifest.xml')){
if (!function_exists('xslt_create')) { // XSLT MUST be installed for this to work
notify('You need the XSLT library installed in PHP to open this Blackboard file');
-43
View File
@@ -1,43 +0,0 @@
<?php
// This file adds xslt_xxx emulation functions.
// It is intended for systems, e.g. those running PHP 5, where:
// 1) The XSLT library is not installed.
// 2) The XSL library is installed.
//
// Note that not everything is implemented.
// In particular, only the bare minimum to support the BB conversion is here.
// This silliness is required to prevent PHP from evaluating the function() blocks before processing the return;s
if(true) {
if(function_exists('xslt_create')) return; // xslt_create() already exists, so emulation isn't needed.
if(!class_exists('XSLTProcessor')) return; // There is no XSLTProcessor class, so emulation isn't possible.
if(!class_exists('DOMDocument')) return; // There is no DOMDocument class, so emulation isn't possible.
function xslt_create() {
return new XSLTProcessor();
}
// We don't support arguments or parameters because the Bb import doesn't use them
function xslt_process($proc, $xmlfile, $xslfile, $resultfile = null, $unsupported_args = null, $unsupported_params = null) {
$doc = new DOMDocument;
$doc->load($xmlfile);
$xsl = new DOMDocument;
$xsl->load($xslfile);
$proc->importStylesheet($xsl);
// Squash warnings here because xsl complains about COURSE_ACCESS tags which really are invalid XML (multiple root elements)
if($resultfile !== null) {
$fp = fopen($resultfile, 'w');
fwrite($fp, @$proc->transformToXML($doc));
fclose($fp);
return true;
} else {
return @$proc->transformToXML($doc);
}
}
} // end if(true)
-41
View File
@@ -1,41 +0,0 @@
<?php // $Id$
function migrate2utf8_backup_ids_info($recordid){
global $CFG, $globallang;
/// Some trivial checks
if (empty($recordid)) {
log_the_problem_somewhere();
return false;
}
if (!$backupids= get_record('backup_ids', 'id', $recordid)) {
log_the_problem_somewhere();
return false;
}
if ($globallang) {
$fromenc = $globallang;
} else {
$sitelang = $CFG->lang;
$courselang = null;
$userlang = null; //N.E.!!
$fromenc = get_original_encoding($sitelang, $courselang, $userlang);
}
/// We are going to use textlib facilities
/// Convert the text
if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
$result = utfconvert($backupids->info, $fromenc);
$newbackupids = new object;
$newbackupids->id = $recordid;
$newbackupids->info = $result;
migrate2utf8_update_record('backup_ids',$newbackupids);
}
/// And finally, just return the converted field
return $result;
}
?>

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