Merge branch 'wip-mdl-48192' of https://github.com/rajeshtaneja/moodle
authorSam Hemelryk <sam@moodle.com>
Sun, 30 Nov 2014 19:33:53 +0000 (08:33 +1300)
committerSam Hemelryk <sam@moodle.com>
Sun, 30 Nov 2014 19:33:53 +0000 (08:33 +1300)
217 files changed:
.csslintrc [new file with mode: 0644]
admin/roles/module.js
admin/settings/plugins.php
admin/tool/assignmentupgrade/module.js
admin/tool/messageinbound/classes/edit_handler_form.php
admin/tool/messageinbound/classes/manager.php
admin/tool/messageinbound/classes/message/inbound/invalid_recipient_handler.php
admin/tool/messageinbound/classes/task/cleanup_task.php
admin/tool/messageinbound/classes/task/pickup_task.php
admin/tool/messageinbound/db/messageinbound_handlers.php
admin/tool/messageinbound/db/messages.php
admin/tool/replace/cli/replace.php [new file with mode: 0644]
admin/tool/replace/lang/en/tool_replace.php
admin/tool/spamcleaner/module.js
auth/db/auth.php
auth/db/config.html
auth/db/lang/en/auth_db.php
auth/db/tests/db_test.php
auth/db/upgrade.txt [new file with mode: 0644]
auth/email/auth.php
auth/ldap/auth.php
auth/ldap/tests/plugin_test.php
auth/manual/auth.php
auth/mnet/auth.php
auth/upgrade.txt
availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js
availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js
availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js
availability/condition/completion/yui/src/form/js/form.js
availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-debug.js
availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-min.js
availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form.js
availability/condition/date/yui/src/form/js/form.js
availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-debug.js
availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-min.js
availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form.js
availability/condition/grade/yui/src/form/js/form.js
availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-debug.js
availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-min.js
availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form.js
availability/condition/group/yui/src/form/js/form.js
availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-debug.js
availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-min.js
availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form.js
availability/condition/grouping/yui/src/form/js/form.js
availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-debug.js
availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-min.js
availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form.js
availability/condition/profile/yui/src/form/js/form.js
availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-debug.js
availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-min.js
availability/yui/build/moodle-core_availability-form/moodle-core_availability-form.js
availability/yui/src/form/js/form.js
backup/moodle2/backup_stepslib.php
backup/moodle2/restore_stepslib.php
backup/moodle2/tests/moodle2_test.php
backup/util/dbops/backup_controller_dbops.class.php
backup/util/helper/backup_cron_helper.class.php
backup/util/helper/backup_general_helper.class.php
backup/util/helper/restore_prechecks_helper.class.php
backup/util/ui/backup_moodleform.class.php
backup/util/ui/backup_ui.class.php
backup/util/ui/backup_ui_setting.class.php
backup/util/ui/backup_ui_stage.class.php
backup/util/ui/base_moodleform.class.php
backup/util/ui/base_ui.class.php
backup/util/ui/base_ui_stage.class.php
backup/util/ui/import_extensions.php
backup/util/ui/renderer.php
backup/util/ui/restore_moodleform.class.php
backup/util/ui/restore_ui.class.php
backup/util/ui/restore_ui_components.php
backup/util/ui/restore_ui_stage.class.php
backup/util/ui/tests/behat/behat_backup.php
backup/util/ui/tests/ui_test.php
badges/tests/badgeslib_test.php
blocks/activity_modules/tests/behat/block_activity_modules.feature
blocks/community/styles.css
blocks/navigation/styles.css
blocks/navigation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-debug.js
blocks/navigation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-min.js
blocks/navigation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation.js
blocks/navigation/yui/src/navigation/js/navigation.js
cache/classes/definition.php
cache/classes/factory.php
cache/classes/helper.php
cache/classes/loaders.php
cache/disabledlib.php
cache/stores/memcache/lang/en/cachestore_memcache.php
cache/stores/memcached/lang/en/cachestore_memcached.php
cache/stores/mongodb/lang/en/cachestore_mongodb.php
cache/upgrade.txt
comment/comment.js
comment/lib.php
composer.json
course/completion.js
course/lib.php
course/style.css [deleted file]
course/tests/behat/category_role_assignment.feature [new file with mode: 0644]
course/tests/courserequest_test.php
enrol/manual/yui/quickenrolment/quickenrolment.js
enrol/self/lib.php
enrol/yui/otherusersmanager/otherusersmanager.js
enrol/yui/rolemanager/rolemanager.js
grade/edit/letter/index.php
grade/grading/form/guide/js/guideeditor.js
grade/grading/form/rubric/js/rubriceditor.js
grade/report/grader/module.js
grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-debug.js
grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-min.js
grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable.js
grade/report/grader/yui/src/gradereporttable/js/floatingheaders.js
grade/report/singleview/classes/local/screen/grade.php
grade/report/singleview/classes/local/screen/select.php
grade/tests/behat/grade_override_letter.feature [new file with mode: 0644]
group/group_form.php
group/lib.php
install/lang/ta/admin.php
lang/en/auth.php
lang/en/backup.php
lang/en/moodle.php
lib/accesslib.php
lib/behat/classes/util.php
lib/classes/session/manager.php
lib/classes/task/file_temp_cleanup_task.php
lib/classes/update/checker.php
lib/coursecatlib.php
lib/editor/atto/plugins/equation/yui/build/moodle-atto_equation-button/moodle-atto_equation-button-debug.js
lib/editor/atto/plugins/equation/yui/build/moodle-atto_equation-button/moodle-atto_equation-button-min.js
lib/editor/atto/plugins/equation/yui/build/moodle-atto_equation-button/moodle-atto_equation-button.js
lib/editor/atto/plugins/equation/yui/src/button/js/button.js
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor-debug.js
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor-min.js
lib/editor/atto/yui/build/moodle-editor_atto-editor/moodle-editor_atto-editor.js
lib/editor/atto/yui/src/editor/js/selection.js
lib/editor/tinymce/plugins/managefiles/module.js
lib/filelib.php
lib/form/dndupload.js
lib/form/filemanager.js
lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-debug.js
lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-min.js
lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced.js
lib/form/yui/src/showadvanced/js/showadvanced.js
lib/navigationlib.php
lib/phpunit/bootstrap.php
lib/phpunit/classes/util.php
lib/phpunit/tests/advanced_test.php
lib/questionlib.php
lib/testing/classes/util.php
lib/tests/accesslib_test.php
lib/tests/behat/behat_hooks.php
lib/tests/behat/behat_permissions.php
lib/tests/messagelib_test.php
lib/tests/moodlelib_test.php
lib/tests/scheduled_task_test.php
lib/tests/session_manager_test.php
lib/tests/weblib_test.php
lib/upgrade.txt
lib/weblib.php
lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js
lib/yui/build/moodle-core-dock/moodle-core-dock-min.js
lib/yui/build/moodle-core-dock/moodle-core-dock.js
lib/yui/build/moodle-core-maintenancemodetimer/moodle-core-maintenancemodetimer-debug.js
lib/yui/build/moodle-core-maintenancemodetimer/moodle-core-maintenancemodetimer-min.js
lib/yui/build/moodle-core-maintenancemodetimer/moodle-core-maintenancemodetimer.js
lib/yui/src/dock/js/block.js
lib/yui/src/dock/js/dock.js
lib/yui/src/dock/js/dockeditem.js
lib/yui/src/maintenancemodetimer/js/maintenancemodetimer.js
login/confirm.php
login/index.php
login/lib.php
login/signup.php
message/output/email/message_output_email.php
mod/assign/feedback/editpdf/lang/en/assignfeedback_editpdf.php
mod/assign/feedback/editpdf/testgs.php
mod/assign/locallib.php
mod/assign/tests/locallib_test.php
mod/book/tool/print/index.php
mod/book/tool/print/print.css
mod/chat/chatd.php
mod/chat/gui_ajax/module.js
mod/forum/classes/message/inbound/reply_handler.php
mod/forum/subscribe.php
mod/forum/subscribers.php
mod/forum/tests/behat/forum_subscriptions_management.feature [new file with mode: 0644]
mod/forum/tests/mail_test.php
mod/forum/tests/maildigest_test.php
mod/imscp/module.js
mod/lesson/continue.php
mod/lesson/tests/behat/lesson_navigation.feature
mod/lti/mod_form.js
mod/quiz/module.js
mod/quiz/yui/build/moodle-mod_quiz-dragdrop/moodle-mod_quiz-dragdrop-debug.js
mod/quiz/yui/build/moodle-mod_quiz-dragdrop/moodle-mod_quiz-dragdrop-min.js
mod/quiz/yui/build/moodle-mod_quiz-dragdrop/moodle-mod_quiz-dragdrop.js
mod/quiz/yui/src/dragdrop/js/resource.js
mod/resource/lib.php
mod/scorm/module.js
mod/scorm/styles.css
mod/scorm/view.js
mod/survey/survey.js
question/format/xhtml/format.php
question/format/xhtml/xhtml.css
question/upgrade.txt
repository/filepicker.js
tag/tag.js
theme/base/style/core.css
theme/base/style/course.css
theme/base/style/dock.css
theme/base/style/grade.css
theme/bootstrapbase/less/moodle/dock.less
theme/bootstrapbase/style/moodle.css
theme/canvas/config.php
theme/canvas/style/question.css [deleted file]
user/selector/module.js
version.php

diff --git a/.csslintrc b/.csslintrc
new file mode 100644 (file)
index 0000000..5b01fd1
--- /dev/null
@@ -0,0 +1,3 @@
+--errors=errors,duplicate-properties
+--warnings=known-properties,display-property-grouping,empty-rules,important
+--exclude-list=vendor/,lib/editor/tinymce/,lib/yuilib/,theme/bootstrapbase/style/
index 0cac01a..9c331f1 100644 (file)
@@ -53,9 +53,9 @@ M.core_role.init_cap_table_filter = function(Y, tableid, contextid) {
             // Create the capability search input.
             this.input = Y.Node.create('<input type="text" id="'+this.table.get('id')+'capabilitysearch" value="'+Y.Escape.html(filtervalue)+'" />');
             // Create a label for the search input.
-            this.label = Y.Node.create('<label for="'+this.input.get('id')+'">'+M.str.moodle.filter+' </label>');
+            this.label = Y.Node.create('<label for="'+this.input.get('id')+'">'+M.util.get_string('filter', 'moodle')+' </label>');
             // Create a clear button to clear the input.
-            this.button = Y.Node.create('<input type="button" value="'+M.str.moodle.clear+'" />').set('disabled', filtervalue=='');
+            this.button = Y.Node.create('<input type="button" value="'+M.util.get_string('clear', 'moodle')+'" />').set('disabled', filtervalue=='');
 
             // Tie it all together
             this.div.append(this.label).append(this.input).append(this.button);
index bee9753..7a1551a 100644 (file)
@@ -77,6 +77,10 @@ if ($hassiteconfig) {
     $temp->add(new admin_setting_configcheckbox('loginpageautofocus', new lang_string('loginpageautofocus', 'admin'), new lang_string('loginpageautofocus_help', 'admin'), 0));
     $temp->add(new admin_setting_configselect('guestloginbutton', new lang_string('guestloginbutton', 'auth'),
                                               new lang_string('showguestlogin', 'auth'), '1', array('0'=>new lang_string('hide'), '1'=>new lang_string('show'))));
+    $options = array(0 => get_string('no'), 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 10 => 10, 20 => 20, 50 => 50);
+    $temp->add(new admin_setting_configselect('limitconcurrentlogins',
+        new lang_string('limitconcurrentlogins', 'core_auth'),
+        new lang_string('limitconcurrentlogins_desc', 'core_auth'), 0, $options));
     $temp->add(new admin_setting_configtext('alternateloginurl', new lang_string('alternateloginurl', 'auth'),
                                             new lang_string('alternatelogin', 'auth', htmlspecialchars(get_login_url())), ''));
     $temp->add(new admin_setting_configtext('forgottenpasswordurl', new lang_string('forgottenpasswordurl', 'auth'),
index 933408a..ab7f670 100644 (file)
@@ -55,7 +55,7 @@ M.tool_assignmentupgrade = {
             assignmentsinput = Y.one('input.selectedassignments');
             assignmentsinput.set('value', selectedassignments.join(','));
             if (selectedassignments.length == 0) {
-                alert(M.str.tool_assignmentupgrade.noassignmentsselected);
+                alert(M.util.get_string('noassignmentsselected', 'tool_assignmentupgrade'));
                 e.preventDefault();
             }
         });
index a3c36ac..a0bea75 100644 (file)
@@ -33,6 +33,10 @@ require_once($CFG->libdir . '/formslib.php');
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class tool_messageinbound_edit_handler_form extends moodleform {
+
+    /**
+     * The form definition
+     */
     public function definition() {
         $mform = $this->_form;
 
index e9f0108..dcb4e7b 100644 (file)
@@ -60,7 +60,7 @@ class manager {
     const MESSAGE_DELETED = '\deleted';
 
     /**
-     * @var Horde_Imap_Client_Socket A reference to the IMAP client.
+     * @var \Horde_Imap_Client_Socket A reference to the IMAP client.
      */
     protected $client = null;
 
@@ -70,7 +70,7 @@ class manager {
     protected $addressmanager = null;
 
     /**
-     * @var stdClass The data for the current message being processed.
+     * @var \stdClass The data for the current message being processed.
      */
     protected $currentmessagedata = null;
 
@@ -126,6 +126,7 @@ class manager {
      * Get the current mailbox information.
      *
      * @return \Horde_Imap_Client_Mailbox
+     * @throws \core\message\inbound\processing_failed_exception if the mailbox could not be opened.
      */
     protected function get_mailbox() {
         // Get the current mailbox.
@@ -140,6 +141,8 @@ class manager {
 
     /**
      * Execute the main Inbound Message pickup task.
+     *
+     * @return bool
      */
     public function pickup_messages() {
         if (!$this->get_imap_client()) {
@@ -176,8 +179,9 @@ class manager {
     /**
      * Process a message received and validated by the Inbound Message processor.
      *
-     * @param stdClass $maildata The data retrieved from the database for the current record.
+     * @param \stdClass $maildata The data retrieved from the database for the current record.
      * @return bool Whether the message was successfully processed.
+     * @throws \core\message\inbound\processing_failed_exception if the message cannot be found.
      */
     public function process_existing_message(\stdClass $maildata) {
         // Grab the new IMAP client.
@@ -273,9 +277,9 @@ class manager {
     /**
      * Process a message and pass it through the Inbound Message handling systems.
      *
-     * @param Horde_Imap_Client_Data_Fetch $message The message to process
+     * @param \Horde_Imap_Client_Data_Fetch $message The message to process
      * @param bool $viewreadmessages Whether to also look at messages which have been marked as read
-     * @param bool $skipsenderverification Whether to skip the sender verificiation stage
+     * @param bool $skipsenderverification Whether to skip the sender verification stage
      */
     public function process_message(
             \Horde_Imap_Client_Data_Fetch $message,
@@ -437,9 +441,9 @@ class manager {
     /**
      * Process a message to retrieve it's header data without body and attachemnts.
      *
-     * @param Horde_Imap_Client_Data_Envelope $envelope The Envelope of the message
-     * @param Horde_Imap_Client_Data_Fetch $messagedata The structure and part of the message body
-     * @param string|Horde_Imap_Client_Ids $messageid The Hore message Uid
+     * @param \Horde_Imap_Client_Data_Envelope $envelope The Envelope of the message
+     * @param \Horde_Imap_Client_Data_Fetch $basemessagedata The structure and part of the message body
+     * @param string|\Horde_Imap_Client_Ids $messageid The Hore message Uid
      * @return \stdClass The current value of the messagedata
      */
     private function process_message_data(
@@ -496,7 +500,6 @@ class manager {
     /**
      * Process a message again to add body and attachment data.
      *
-     * @param Horde_Imap_Client_Data_Envelope $envelope The Envelope of the message
      * @param Horde_Imap_Client_Data_Fetch $basemessagedata The structure and part of the message body
      * @param string|Horde_Imap_Client_Ids $messageid The Hore message Uid
      * @return \stdClass The current value of the messagedata
@@ -578,9 +581,9 @@ class manager {
     /**
      * Process the messagedata and part data to extract the content of this part.
      *
-     * @param $messagedata The structure and part of the message body
-     * @param $partdata The part data
-     * @param $part The part ID
+     * @param \Horde_Imap_Client_Data_Fetch $messagedata The structure and part of the message body
+     * @param \Horde_Mime_Part $partdata The part data
+     * @param string $part The part ID
      * @return string
      */
     private function process_message_part_body($messagedata, $partdata, $part) {
@@ -608,10 +611,12 @@ class manager {
     /**
      * Process a message again to add body and attachment data.
      *
-     * @param $messagedata The structure and part of the message body
-     * @param $partdata The part data
-     * @param $filename The filename of the attachment
+     * @param \Horde_Imap_Client_Data_Fetch $messagedata The structure and part of the message body
+     * @param \Horde_Mime_Part $partdata The part data
+     * @param string $part The part ID.
+     * @param string $filename The filename of the attachment
      * @return \stdClass
+     * @throws \core\message\inbound\processing_failed_exception If the attachment can't be saved to disk.
      */
     private function process_message_part_attachment($messagedata, $partdata, $part, $filename) {
         global $CFG;
@@ -660,8 +665,8 @@ class manager {
     /**
      * Check whether the key provided is valid.
      *
-     * @param $status The Message to process
-     * @param $messageid The Hore message Uid
+     * @param bool $status
+     * @param mixed $messageid The Hore message Uid
      * @return bool
      */
     private function passes_key_validation($status, $messageid) {
@@ -682,7 +687,7 @@ class manager {
     /**
      * Add the specified flag to the message.
      *
-     * @param $messageid
+     * @param mixed $messageid
      * @param string $flag The flag to add
      */
     private function add_flag_to_message($messageid, $flag) {
@@ -699,7 +704,7 @@ class manager {
     /**
      * Remove the specified flag from the message.
      *
-     * @param $messageid
+     * @param mixed $messageid
      * @param string $flag The flag to remove
      */
     private function remove_flag_from_message($messageid, $flag) {
@@ -716,7 +721,7 @@ class manager {
     /**
      * Check whether the message has the specified flag
      *
-     * @param $messageid
+     * @param mixed $messageid
      * @param string $flag The flag to check
      * @return bool
      */
@@ -739,6 +744,8 @@ class manager {
     /**
      * Send the message to the appropriate handler.
      *
+     * @return bool
+     * @throws \core\message\inbound\processing_failed_exception if anything goes wrong.
      */
     private function send_to_handler() {
         try {
@@ -785,7 +792,9 @@ class manager {
      * stored. The message includes a verification link and reply-to address which is handled by the
      * invalid_recipient_handler.
      *
-     * @param $recipient The message recipient
+     * @param \Horde_Imap_Client_Ids $messageids
+     * @param string $recipient The message recipient
+     * @return bool
      */
     private function handle_verification_failure(
             \Horde_Imap_Client_Ids $messageids,
@@ -889,8 +898,9 @@ class manager {
     /**
      * Inform the identified sender that message processing was successful.
      *
-     * @param stdClass $messagedata The data for the current message being processed.
+     * @param \stdClass $messagedata The data for the current message being processed.
      * @param mixed $handlerresult The result returned by the handler.
+     * @return bool
      */
     private function inform_user_of_success(\stdClass $messagedata, $handlerresult) {
         global $USER;
@@ -948,7 +958,7 @@ class manager {
     /**
      * Return a formatted subject line for replies.
      *
-     * @param $subject string The subject string
+     * @param string $subject The subject string
      * @return string The formatted reply subject
      */
     private function get_reply_subject($subject) {
index 7ff3a69..df51bf0 100644 (file)
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * A Handler to re-process messages which previously failed sender
- * verification.
+ * A Handler to re-process messages which previously failed sender verification.
  *
- * @package    task_messageinbound
+ * @package    tool_messageinbound
+ * @category   message
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -30,14 +30,12 @@ defined('MOODLE_INTERNAL') || die();
 require_once($CFG->dirroot . '/repository/lib.php');
 
 /**
- * A Handler to re-process messages which previously failed sender
- * verification.
+ * A Handler to re-process messages which previously failed sender verification.
  *
  * This may happen if the user did not use their registerd e-mail address,
  * the verification hash used had expired, or if some erroneous content was
  * introduced into the content hash.
  *
- * @package    task
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -72,9 +70,10 @@ class invalid_recipient_handler extends \core\message\inbound\handler {
     /**
      * Process a message received and validated by the Inbound Message processor.
      *
-     * @param $messagedata The Inbound Message record
-     * @param $messagedata The message data packet.
+     * @param \stdClass $record The Inbound Message record
+     * @param \stdClass $data The message data packet.
      * @return bool Whether the message was successfully processed.
+     * @throws \core\message\inbound\processing_failed_exception when the message can not be found.
      */
     public function process_message(\stdClass $record, \stdClass $data) {
         global $DB;
index e507597..e8b1c7a 100644 (file)
@@ -18,6 +18,7 @@
  * A scheduled task to handle cleanup of old, unconfirmed e-mails.
  *
  * @package    tool_messageinbound
+ * @category   task
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index d10fb8c..1342b6f 100644 (file)
@@ -18,6 +18,7 @@
  * A scheduled task to handle Inbound Message e-mail pickup.
  *
  * @package    tool_messageinbound
+ * @category   task
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 50cb34a..1ec8ed2 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Handlers for tool_messageinbound.
  *
- * @package    task
- * @category   tool_messageinbound
+ * @package    tool_messageinbound
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index c425c48..38d35ca 100644 (file)
@@ -17,8 +17,7 @@
 /**
  * Message Providers for task_messageinbound.
  *
- * @package    task
- * @category   messageinbound
+ * @package    tool_messageinbound
  * @copyright  2014 Andrew Nicols
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
diff --git a/admin/tool/replace/cli/replace.php b/admin/tool/replace/cli/replace.php
new file mode 100644 (file)
index 0000000..1f9e74b
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Search and replace strings throughout all texts in the whole database.
+ *
+ * @package    tool_replace
+ * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+define('CLI_SCRIPT', true);
+
+require(__DIR__.'/../../../../config.php');
+require_once($CFG->libdir.'/clilib.php');
+require_once($CFG->libdir.'/adminlib.php');
+
+$help =
+    "Search and replace text throughout the whole database.
+
+Options:
+--search=STRING       String to search for.
+--replace=STRING      String to replace with.
+--shorten             Shorten result if necessary.
+--non-interactive     Perform the replacement without confirming.
+-h, --help            Print out this help.
+
+Example:
+\$ sudo -u www-data /usr/bin/php admin/tool/replace/cli/replace.php --search=//oldsitehost --replace=//newsitehost
+";
+
+list($options, $unrecognized) = cli_get_params(
+    array(
+        'search'  => null,
+        'replace' => null,
+        'shorten' => false,
+        'non-interactive' => false,
+        'help'    => false,
+    ),
+    array(
+        'h' => 'help',
+    )
+);
+
+if ($options['help'] || $options['search'] === null || $options['replace'] === null) {
+    echo $help;
+    exit(0);
+}
+
+if (!$DB->replace_all_text_supported()) {
+    cli_error(get_string('notimplemented', 'tool_replace'));
+}
+
+if (empty($options['shorten']) && core_text::strlen($options['search']) < core_text::strlen($options['replace'])) {
+    cli_error(get_string('cannotfit', 'tool_replace'));
+}
+
+try {
+    $search = validate_param($options['search'], PARAM_RAW);
+    $replace = validate_param($options['replace'], PARAM_RAW);
+} catch (invalid_parameter_exception $e) {
+    cli_error(get_string('invalidcharacter', 'tool_replace'));
+}
+
+if (!$options['non-interactive']) {
+    echo get_string('excludedtables', 'tool_replace') . "\n\n";
+    echo get_string('notsupported', 'tool_replace') . "\n\n";
+    $prompt = get_string('cliyesnoprompt', 'admin');
+    $input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin')));
+    if ($input == get_string('clianswerno', 'admin')) {
+        exit(1);
+    }
+}
+
+if (!db_replace($search, $replace)) {
+    cli_heading(get_string('error'));
+    exit(1);
+}
+
+cli_heading(get_string('success'));
+exit(0);
index 919ed67..481fd06 100644 (file)
@@ -27,11 +27,12 @@ $string['cannotfit'] = 'The replacement is longer than original and shortening i
 $string['disclaimer'] = 'I understand the risks of this operation';
 $string['doit'] = 'Yes, do it!';
 $string['excludedtables'] = 'Several tables are not updated as part of the text replacement. This include configuration, log, events, and session tables.';
-$string['pageheader'] = 'Search and replace text throughout the whole database';
+$string['invalidcharacter'] = 'Invalid characters were found in the search or replacement text.';
 $string['notifyfinished'] = '...finished';
 $string['notifyrebuilding'] = 'Rebuilding course cache...';
 $string['notimplemented'] = 'Sorry, this feature is not implemented in your database driver.';
-$string['notsupported'] ='This script is not supported, always make complete backup before proceeding!<br />This operation can not be reverted!';
+$string['notsupported'] = 'This script should be considered experimental and the changes it makes can not be reverted. Please make a complete backup for running this script!';
+$string['pageheader'] = 'Search and replace text throughout the whole database';
 $string['pluginname'] = 'DB search and replace';
 $string['replacewith'] = 'Replace with this string';
 $string['replacewithhelp'] = 'usually new server URL';
index d7cd018..166d5cd 100644 (file)
@@ -6,7 +6,7 @@ M.tool_spamcleaner = {
     del_all: function() {
         var context = M.tool_spamcleaner;
 
-        var yes = confirm(M.str.tool_spamcleaner.spamdeleteallconfirm);
+        var yes = confirm(M.util.get_string('spamdeleteallconfirm', 'tool_spamcleaner'));
         if (yes) {
             var cfg = {
                 method: "POST",
@@ -15,7 +15,7 @@ M.tool_spamcleaner = {
                         try {
                             var resp = context.Y.JSON.parse(o.responseText);
                         } catch(e) {
-                            alert(M.str.tool_spamcleaner.spaminvalidresult);
+                            alert(M.util.get_string('spaminvalidresult', 'tool_spamcleaner'));
                             return;
                         }
                         if (resp == true) {
@@ -36,7 +36,7 @@ M.tool_spamcleaner = {
             return;
         }
 
-        var yes = confirm(M.str.tool_spamcleaner.spamdeleteconfirm);
+        var yes = confirm(M.util.get_string('spamdeleteconfirm', 'tool_spamcleaner'));
         if (yes) {
             context.row = obj;
             var cfg = {
@@ -46,7 +46,7 @@ M.tool_spamcleaner = {
                         try {
                             var resp = context.Y.JSON.parse(o.responseText);
                         } catch(e) {
-                            alert(M.str.tool_spamcleaner.spaminvalidresult);
+                            alert(M.util.get_string('spaminvalidresult', 'tool_spamcleaner'));
                             return;
                         }
                         if (context.row) {
@@ -57,7 +57,7 @@ M.tool_spamcleaner = {
                                 context.row.parentNode.removeChild(context.row);
                                 context.row = null;
                             } else {
-                                alert(M.str.tool_spamcleaner.spamcannotdelete);
+                                alert(M.util.get_string('spamcannotdelete', 'tool_spamcleaner'));
                             }
                         }
                     }
@@ -83,7 +83,7 @@ M.tool_spamcleaner = {
                     try {
                         var resp = context.Y.JSON.parse(o.responseText);
                     } catch(e) {
-                        alert(M.str.tool_spamcleaner.spaminvalidresult);
+                        alert(M.util.get_string('spaminvalidresult', 'tool_spamcleaner'));
                         return;
                     }
                     if (context.row) {
index faccb6d..3feed3e 100644 (file)
@@ -105,29 +105,35 @@ class auth_plugin_db extends auth_plugin_base {
 
             $authdb = $this->db_init();
 
-            if ($this->config->passtype === 'md5') {   // Re-format password accordingly.
-                $extpassword = md5($extpassword);
-            } else if ($this->config->passtype === 'sha1') {
-                $extpassword = sha1($extpassword);
-            }
-
-            $rs = $authdb->Execute("SELECT *
+            $rs = $authdb->Execute("SELECT {$this->config->fieldpass} AS userpass
                                       FROM {$this->config->table}
-                                     WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'
-                                           AND {$this->config->fieldpass} = '".$this->ext_addslashes($extpassword)."'");
+                                     WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'");
             if (!$rs) {
                 $authdb->Close();
                 debugging(get_string('auth_dbcantconnect','auth_db'));
                 return false;
             }
 
-            if (!$rs->EOF) {
-                $rs->Close();
+            if ($rs->EOF) {
                 $authdb->Close();
-                return true;
+                return false;
+            }
+
+            $fields = array_change_key_case($rs->fields, CASE_LOWER);
+            $fromdb = $fields['userpass'];
+            $rs->Close();
+            $authdb->Close();
+
+            if ($this->config->passtype === 'plaintext') {
+                return ($fromdb == $extpassword);
+            } else if ($this->config->passtype === 'md5') {
+                return (strtolower($fromdb) == md5($extpassword));
+            } else if ($this->config->passtype === 'sha1') {
+                return (strtolower($fromdb) == sha1($extpassword));
+            } else if ($this->config->passtype === 'saltedcrypt') {
+                require_once($CFG->libdir.'/password_compat/lib/password.php');
+                return password_verify($extpassword, $fromdb);
             } else {
-                $rs->Close();
-                $authdb->Close();
                 return false;
             }
 
index 9366967..331ad04 100644 (file)
         $passtype["plaintext"] = get_string("plaintext", "auth");
         $passtype["md5"]       = get_string("md5", "auth");
         $passtype["sha1"]      = get_string("sha1", "auth");
+        $passtype["saltedcrypt"]      = get_string("auth_dbsaltedcrypt", "auth_db");
         $passtype["internal"]  = get_string("internal", "auth");
         echo html_writer::select($passtype, "passtype", $config->passtype, false);
 
index 678f11b..ac3e645 100644 (file)
@@ -49,6 +49,7 @@ $string['auth_dbpasstype'] = '<p>Specify the format that the password field is u
 $string['auth_dbpasstype_key'] = 'Password format';
 $string['auth_dbreviveduser'] = 'Revived user {$a->name} id {$a->id}';
 $string['auth_dbrevivedusererror'] = 'Error reviving user {$a}';
+$string['auth_dbsaltedcrypt'] = 'Crypt one-way string hashing';
 $string['auth_dbsetupsql'] = 'SQL setup command';
 $string['auth_dbsetupsqlhelp'] = 'SQL command for special database setup, often used to setup communication encoding - example for MySQL and PostgreSQL: <em>SET NAMES \'utf8\'</em>';
 $string['auth_dbsuspenduser'] = 'Suspended user {$a->name} id {$a->id}';
index 3931ea9..e619df6 100644 (file)
@@ -306,6 +306,13 @@ class auth_db_testcase extends advanced_testcase {
         $DB->update_record('auth_db_users', $user3);
         $this->assertTrue($auth->user_login('u3', 'heslo'));
 
+        require_once($CFG->libdir.'/password_compat/lib/password.php');
+        set_config('passtype', 'saltedcrypt', 'auth/db');
+        $auth->config->passtype = 'saltedcrypt';
+        $user3->pass = password_hash('heslo', PASSWORD_BCRYPT, array('salt' => 'best_salt_ever_moodle_rocks_dont_tell'));
+        $DB->update_record('auth_db_users', $user3);
+        $this->assertTrue($auth->user_login('u3', 'heslo'));
+
         set_config('passtype', 'internal', 'auth/db');
         $auth->config->passtype = 'internal';
         create_user_record('u3', 'heslo', 'db');
diff --git a/auth/db/upgrade.txt b/auth/db/upgrade.txt
new file mode 100644 (file)
index 0000000..45258e7
--- /dev/null
@@ -0,0 +1,10 @@
+This files describes API changes in /auth/db/*,
+information provided here is intended especially for developers.
+
+=== 2.9 ===
+
+Some alterations have been made to the handling of case sensitity handling of passwords
+and password hashes which previously varied depending on database configuration:
+
+* Plain text password matching is now always case sensitive
+* sha1/md5 hash comparisons are now enforced case insensitive (as underlying they are hexidecimal values)
index 2c36eab..8ab97ae 100644 (file)
@@ -147,9 +147,6 @@ class auth_plugin_email extends auth_plugin_base {
 
             } else if ($user->secret == $confirmsecret) {   // They have provided the secret key to get in
                 $DB->set_field("user", "confirmed", 1, array("id"=>$user->id));
-                if ($user->firstaccess == 0) {
-                    $DB->set_field("user", "firstaccess", time(), array("id"=>$user->id));
-                }
                 return AUTH_CONFIRM_OK;
             }
         } else {
index b77c305..f80ab19 100644 (file)
@@ -615,9 +615,6 @@ class auth_plugin_ldap extends auth_plugin_base {
                     return AUTH_CONFIRM_FAIL;
                 }
                 $user->confirmed = 1;
-                if ($user->firstaccess == 0) {
-                    $user->firstaccess = time();
-                }
                 user_update_user($user, false);
                 return AUTH_CONFIRM_OK;
             }
index 7f0855e..ebb6f31 100644 (file)
@@ -386,8 +386,9 @@ class auth_ldap_plugin_testcase extends advanced_testcase {
         $auth = get_auth_plugin('ldap');
 
         $sink = $this->redirectEvents();
+        $mailsink = $this->redirectEmails();
         $auth->user_signup((object)$user, false);
-        $this->assertDebuggingCalled('Not sending email due to $CFG->noemailever config setting');
+        $this->assertEquals(1, $mailsink->count());
         $events = $sink->get_events();
         $sink->close();
 
index 0b014bb..938aae8 100644 (file)
@@ -233,9 +233,6 @@ class auth_plugin_manual extends auth_plugin_base {
                 return AUTH_CONFIRM_ALREADY;
             } else {
                 $DB->set_field("user", "confirmed", 1, array("id"=>$user->id));
-                if ($user->firstaccess == 0) {
-                    $DB->set_field("user", "firstaccess", time(), array("id"=>$user->id));
-                }
                 return AUTH_CONFIRM_OK;
             }
         } else  {
index ef3d1fc..f061539 100644 (file)
@@ -289,7 +289,7 @@ class auth_plugin_mnet extends auth_plugin_base {
             } See MDL-21327   for why this is commented out
             */
             $remoteuser->mnethostid = $remotehost->id;
-            $remoteuser->firstaccess = time(); // First time user in this server, grab it here
+            $remoteuser->firstaccess = 0;
             $remoteuser->confirmed = 1;
 
             $remoteuser->id = $DB->insert_record('user', $remoteuser);
@@ -359,9 +359,6 @@ class auth_plugin_mnet extends auth_plugin_base {
         }
 
         $localuser->mnethostid = $remotepeer->id;
-        if (empty($localuser->firstaccess)) { // Now firstaccess, grab it here
-            $localuser->firstaccess = time();
-        }
         user_update_user($localuser, false);
 
         if (!$firsttime) {
index 5308808..0c6d453 100644 (file)
@@ -1,6 +1,10 @@
 This files describes API changes in /auth/* - plugins,
 information provided here is intended especially for developers.
 
+=== 2.9 ===
+
+* Do not update user->firstaccess from any auth plugin, the complete_user_login() does it automatically.
+
 === 2.8 ===
 
 * \core\session\manager::session_exists() now verifies the session is active
index 27350c4..803f565 100644 (file)
Binary files a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js and b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-debug.js differ
index eb98c96..17f1813 100644 (file)
Binary files a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js and b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form-min.js differ
index 27350c4..803f565 100644 (file)
Binary files a/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js and b/availability/condition/completion/yui/build/moodle-availability_completion-form/moodle-availability_completion-form.js differ
index 926a9e4..1416260 100644 (file)
@@ -23,22 +23,21 @@ M.availability_completion.form.initInner = function(cms) {
 
 M.availability_completion.form.getNode = function(json) {
     // Create HTML structure.
-    var strings = M.str.availability_completion;
-    var html = strings.title + ' <span class="availability-group"><label>' +
-            '<span class="accesshide">' + strings.label_cm + ' </span>' +
-            '<select name="cm" title="' + strings.label_cm + '">' +
-            '<option value="0">' + M.str.moodle.choosedots + '</option>';
+    var html = M.util.get_string('title', 'availability_completion') + ' <span class="availability-group"><label>' +
+            '<span class="accesshide">' + M.util.get_string('label_cm', 'availability_completion') + ' </span>' +
+            '<select name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
+            '<option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
     for (var i = 0; i < this.cms.length; i++) {
         var cm = this.cms[i];
         // String has already been escaped using format_string.
         html += '<option value="' + cm.id + '">' + cm.name + '</option>';
     }
-    html += '</select></label> <label><span class="accesshide">' + strings.label_completion +
-            ' </span><select name="e" title="' + strings.label_completion + '">' +
-            '<option value="1">' + strings.option_complete + '</option>' +
-            '<option value="0">' + strings.option_incomplete + '</option>' +
-            '<option value="2">' + strings.option_pass + '</option>' +
-            '<option value="3">' + strings.option_fail + '</option>' +
+    html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_completion', 'availability_completion') +
+            ' </span><select name="e" title="' + M.util.get_string('label_completion', 'availability_completion') + '">' +
+            '<option value="1">' + M.util.get_string('option_complete', 'availability_completion') + '</option>' +
+            '<option value="0">' + M.util.get_string('option_incomplete', 'availability_completion') + '</option>' +
+            '<option value="2">' + M.util.get_string('option_pass', 'availability_completion') + '</option>' +
+            '<option value="3">' + M.util.get_string('option_fail', 'availability_completion') + '</option>' +
             '</select></label></span>';
     var node = Y.Node.create('<span>' + html + '</span>');
 
index d84da8c..684d208 100644 (file)
Binary files a/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-debug.js and b/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-debug.js differ
index 7447c99..eeb12a3 100644 (file)
Binary files a/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-min.js and b/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form-min.js differ
index d84da8c..684d208 100644 (file)
Binary files a/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form.js and b/availability/condition/date/yui/build/moodle-availability_date-form/moodle-availability_date-form.js differ
index 580c6eb..ca45ffc 100644 (file)
@@ -27,12 +27,11 @@ M.availability_date.form.initInner = function(html, defaultTime) {
 };
 
 M.availability_date.form.getNode = function(json) {
-    var strings = M.str.availability_date;
-    var html = strings.direction_before + ' <span class="availability-group">' +
-            '<label><span class="accesshide">' + strings.direction_label + ' </span>' +
+    var html = M.util.get_string('direction_before', 'availability_date') + ' <span class="availability-group">' +
+            '<label><span class="accesshide">' + M.util.get_string('direction_label', 'availability_date') + ' </span>' +
             '<select name="direction">' +
-            '<option value="&gt;=">' + strings.direction_from + '</option>' +
-            '<option value="&lt;">' + strings.direction_until + '</option>' +
+            '<option value="&gt;=">' + M.util.get_string('direction_from', 'availability_date') + '</option>' +
+            '<option value="&lt;">' + M.util.get_string('direction_until', 'availability_date') + '</option>' +
             '</select></label></span> ' + this.html;
     var node = Y.Node.create('<span>' + html + '</span>');
 
@@ -56,7 +55,7 @@ M.availability_date.form.getNode = function(json) {
                 }
             },
             failure : function() {
-                window.alert(M.str.availability_date.ajaxerror);
+                window.alert(M.util.get_string('ajaxerror', 'availability_date'));
             }
         }});
     } else {
@@ -130,7 +129,7 @@ M.availability_date.form.updateTime = function(node) {
             M.core_availability.form.update();
         },
         failure : function() {
-            window.alert(M.str.availability_date.ajaxerror);
+            window.alert(M.util.get_string('ajaxerror', 'availability_date'));
         }
     }});
 };
index 28f5f81..ad24176 100644 (file)
Binary files a/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-debug.js and b/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-debug.js differ
index 83c5e5a..57654e4 100644 (file)
Binary files a/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-min.js and b/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form-min.js differ
index 28f5f81..ad24176 100644 (file)
Binary files a/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form.js and b/availability/condition/grade/yui/build/moodle-availability_grade-form/moodle-availability_grade-form.js differ
index e0b0fe9..92108aa 100644 (file)
@@ -35,24 +35,23 @@ M.availability_grade.form.getNode = function(json) {
     this.nodesSoFar++;
 
     // Create HTML structure.
-    var strings = M.str.availability_grade;
-    var html = '<label>' + strings.title + ' <span class="availability-group">' +
-            '<select name="id"><option value="0">' + M.str.moodle.choosedots + '</option>';
+    var html = '<label>' + M.util.get_string('title', 'availability_grade') + ' <span class="availability-group">' +
+            '<select name="id"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
     for (var i = 0; i < this.grades.length; i++) {
         var grade = this.grades[i];
         // String has already been escaped using format_string.
         html += '<option value="' + grade.id + '">' + grade.name + '</option>';
     }
     html += '</select></span></label> <span class="availability-group">' +
-            '<label><input type="checkbox" name="min"/>' + strings.option_min +
-            '</label> <label><span class="accesshide">' + strings.label_min +
+            '<label><input type="checkbox" name="min"/>' + M.util.get_string('option_min', 'availability_grade') +
+            '</label> <label><span class="accesshide">' + M.util.get_string('label_min', 'availability_grade') +
             '</span><input type="text" name="minval" title="' +
-            strings.label_min + '"/></label>%</span>' +
+            M.util.get_string('label_min', 'availability_grade') + '"/></label>%</span>' +
             '<span class="availability-group">' +
-            '<label><input type="checkbox" name="max"/>' + strings.option_max +
-            '</label> <label><span class="accesshide">' + strings.label_max +
+            '<label><input type="checkbox" name="max"/>' + M.util.get_string('option_max', 'availability_grade') +
+            '</label> <label><span class="accesshide">' + M.util.get_string('label_max', 'availability_grade') +
             '</span><input type="text" name="maxval" title="' +
-            strings.label_max + '"/></label>%</span>';
+            M.util.get_string('label_max', 'availability_grade') + '"/></label>%</span>';
     var node = Y.Node.create('<span>' + html + '</span>');
 
     // Set initial values.
index a968d4e..a1b8a65 100644 (file)
Binary files a/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-debug.js and b/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-debug.js differ
index a5fe42f..3949118 100644 (file)
Binary files a/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-min.js and b/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form-min.js differ
index a968d4e..a1b8a65 100644 (file)
Binary files a/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form.js and b/availability/condition/group/yui/build/moodle-availability_group-form/moodle-availability_group-form.js differ
index e68a703..f9ec44f 100644 (file)
@@ -31,11 +31,10 @@ M.availability_group.form.initInner = function(groups) {
 
 M.availability_group.form.getNode = function(json) {
     // Create HTML structure.
-    var strings = M.str.availability_group;
-    var html = '<label>' + strings.title + ' <span class="availability-group">' +
+    var html = '<label>' + M.util.get_string('title', 'availability_group') + ' <span class="availability-group">' +
             '<select name="id">' +
-            '<option value="choose">' + M.str.moodle.choosedots + '</option>' +
-            '<option value="any">' + strings.anygroup + '</option>';
+            '<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>' +
+            '<option value="any">' + M.util.get_string('anygroup', 'availability_group') + '</option>';
     for (var i = 0; i < this.groups.length; i++) {
         var group = this.groups[i];
         // String has already been escaped using format_string.
index 4c0a4ab..f3d616a 100644 (file)
Binary files a/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-debug.js and b/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-debug.js differ
index 305d8d5..34c9759 100644 (file)
Binary files a/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-min.js and b/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form-min.js differ
index 4c0a4ab..f3d616a 100644 (file)
Binary files a/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form.js and b/availability/condition/grouping/yui/build/moodle-availability_grouping-form/moodle-availability_grouping-form.js differ
index dc09e83..b0fd7c9 100644 (file)
@@ -31,10 +31,9 @@ M.availability_grouping.form.initInner = function(groupings) {
 
 M.availability_grouping.form.getNode = function(json) {
     // Create HTML structure.
-    var strings = M.str.availability_grouping;
-    var html = '<label>' + strings.title + ' <span class="availability-group">' +
+    var html = '<label>' + M.util.get_string('title', 'availability_grouping') + ' <span class="availability-group">' +
             '<select name="id">' +
-            '<option value="choose">' + M.str.moodle.choosedots + '</option>';
+            '<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
     for (var i = 0; i < this.groupings.length; i++) {
         var grouping = this.groupings[i];
         // String has already been escaped using format_string.
index c4b906d..be46a7e 100644 (file)
Binary files a/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-debug.js and b/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-debug.js differ
index 6251004..63a87d3 100644 (file)
Binary files a/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-min.js and b/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form-min.js differ
index c4b906d..be46a7e 100644 (file)
Binary files a/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form.js and b/availability/condition/profile/yui/build/moodle-availability_profile-form/moodle-availability_profile-form.js differ
index aa01d6a..5336589 100644 (file)
@@ -33,10 +33,9 @@ M.availability_profile.form.initInner = function(standardFields, customFields) {
 
 M.availability_profile.form.getNode = function(json) {
     // Create HTML structure.
-    var strings = M.str.availability_profile;
-    var html = '<span class="availability-group"><label>' + strings.conditiontitle + ' ' +
+    var html = '<span class="availability-group"><label>' + M.util.get_string('conditiontitle', 'availability_profile') + ' ' +
             '<select name="field">' +
-            '<option value="choose">' + M.str.moodle.choosedots + '</option>';
+            '<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
     var fieldInfo;
     for (var i = 0; i < this.standardFields.length; i++) {
         fieldInfo = this.standardFields[i];
@@ -48,17 +47,17 @@ M.availability_profile.form.getNode = function(json) {
         // String has already been escaped using format_string.
         html += '<option value="cf_' + fieldInfo.field + '">' + fieldInfo.display + '</option>';
     }
-    html += '</select></label> <label><span class="accesshide">' + strings.label_operator +
-            ' </span><select name="op" title="' + strings.label_operator + '">';
+    html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_operator', 'availability_profile') +
+            ' </span><select name="op" title="' + M.util.get_string('label_operator', 'availability_profile') + '">';
     var operators = ['isequalto', 'contains', 'doesnotcontain', 'startswith', 'endswith',
             'isempty', 'isnotempty'];
     for (i = 0; i < operators.length; i++) {
         html += '<option value="' + operators[i] + '">' +
-                strings['op_' + operators[i]] + '</option>';
+                M.util.get_string('op_' + operators[i], 'availability_profile') + '</option>';
     }
-    html += '</select></label> <label><span class="accesshide">' + strings.label_value +
+    html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_value', 'availability_profile') +
             '</span><input name="value" type="text" style="width: 10em" title="' +
-            strings.label_value + '"/></label></span>';
+            M.util.get_string('label_value', 'availability_profile') + '"/></label></span>';
     var node = Y.Node.create('<span>' + html + '</span>');
 
     // Set initial values if specified.
index 185800c..1af7df2 100644 (file)
Binary files a/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-debug.js and b/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-debug.js differ
index 9c578a0..4733ed5 100644 (file)
Binary files a/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-min.js and b/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form-min.js differ
index 185800c..1af7df2 100644 (file)
Binary files a/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form.js and b/availability/yui/build/moodle-core_availability-form/moodle-core_availability-form.js differ
index 099fe5e..f0012e4 100644 (file)
@@ -258,24 +258,23 @@ M.core_availability.List = function(json, root, parentRoot) {
     if (root !== undefined) {
         this.root = root;
     }
-    var strings = M.str.availability;
     // Create DIV structure (without kids).
     this.node = Y.Node.create('<div class="availability-list"><h3 class="accesshide"></h3>' +
             '<div class="availability-inner">' +
-            '<div class="availability-header">' + strings.listheader_sign_before +
-            ' <label><span class="accesshide">' + strings.label_sign +
-            ' </span><select class="availability-neg" title="' + strings.label_sign + '">' +
-            '<option value="">' + strings.listheader_sign_pos + '</option>' +
-            '<option value="!">' + strings.listheader_sign_neg + '</option></select></label> ' +
-            '<span class="availability-single">' + strings.listheader_single + '</span>' +
-            '<span class="availability-multi">' + strings.listheader_multi_before +
-            ' <label><span class="accesshide">' + strings.label_multi + ' </span>' +
-            '<select class="availability-op" title="' + strings.label_multi + '"><option value="&">' +
-            strings.listheader_multi_and + '</option>' +
-            '<option value="|">' + strings.listheader_multi_or + '</option></select></label> ' +
-            strings.listheader_multi_after + '</span></div>' +
+            '<div class="availability-header">' + M.util.get_string('listheader_sign_before', 'availability') +
+            ' <label><span class="accesshide">' + M.util.get_string('label_sign', 'availability') +
+            ' </span><select class="availability-neg" title="' + M.util.get_string('label_sign', 'availability') + '">' +
+            '<option value="">' + M.util.get_string('listheader_sign_pos', 'availability') + '</option>' +
+            '<option value="!">' + M.util.get_string('listheader_sign_neg', 'availability') + '</option></select></label> ' +
+            '<span class="availability-single">' + M.util.get_string('listheader_single', 'availability') + '</span>' +
+            '<span class="availability-multi">' + M.util.get_string('listheader_multi_before', 'availability') +
+            ' <label><span class="accesshide">' + M.util.get_string('label_multi', 'availability') + ' </span>' +
+            '<select class="availability-op" title="' + M.util.get_string('label_multi', 'availability') + '"><option value="&">' +
+            M.util.get_string('listheader_multi_and', 'availability') + '</option>' +
+            '<option value="|">' + M.util.get_string('listheader_multi_or', 'availability') + '</option></select></label> ' +
+            M.util.get_string('listheader_multi_after', 'availability') + '</span></div>' +
             '<div class="availability-children"></div>' +
-            '<div class="availability-none">' + M.str.moodle.none + '</div>' +
+            '<div class="availability-none">' + M.util.get_string('none', 'moodle') + '</div>' +
             '<div class="availability-button"></div></div></div>');
     if (!root) {
         this.node.addClass('availability-childlist');
@@ -311,12 +310,12 @@ M.core_availability.List = function(json, root, parentRoot) {
 
         // Also if it's not the root, none is actually invalid, so add a label.
         noneNode.appendChild(Y.Node.create('<span class="label label-warning">' +
-                M.str.availability.invalid + '</span>'));
+                M.util.get_string('invalid', 'availability') + '</span>'));
     }
 
     // Create the button and add it.
     var button = Y.Node.create('<button type="button" class="btn btn-default">' +
-            M.str.availability.addrestriction + '</button>');
+            M.util.get_string('addrestriction', 'availability') + '</button>');
     button.on("click", function() { this.clickAdd(); }, this);
     this.node.one('div.availability-button').appendChild(button);
 
@@ -507,9 +506,9 @@ M.core_availability.List.prototype.updateHtml = function() {
     // Update connector text.
     var connectorText;
     if (this.inner.one('.availability-op').get('value') === '&') {
-        connectorText = M.str.availability.and;
+        connectorText = M.util.get_string('and', 'availability');
     } else {
-        connectorText = M.str.availability.or;
+        connectorText = M.util.get_string('or', 'availability');
     }
     this.inner.all('> .availability-children > .availability-connector span.label').each(function(span) {
         span.set('innerHTML', connectorText);
@@ -571,7 +570,7 @@ M.core_availability.List.prototype.clickAdd = function() {
     var content = Y.Node.create('<div>' +
             '<ul class="list-unstyled"></ul>' +
             '<div class="availability-buttons mdl-align">' +
-            '<button type="button" class="btn btn-default">' + M.str.moodle.cancel +
+            '<button type="button" class="btn btn-default">' + M.util.get_string('cancel', 'moodle') +
             '</button></div></div>');
     var cancel = content.one('button');
 
@@ -587,13 +586,12 @@ M.core_availability.List.prototype.clickAdd = function() {
         // Add entry for plugin.
         li = Y.Node.create('<li class="clearfix"></li>');
         id = 'availability_addrestriction_' + type;
-        var pluginStrings = M.str['availability_' + type];
         button = Y.Node.create('<button type="button" class="btn btn-default"' +
-                'id="' + id + '">' + pluginStrings.title + '</button>');
+                'id="' + id + '">' + M.util.get_string('title', 'availability_' + type) + '</button>');
         button.on('click', this.getAddHandler(type, dialogRef), this);
         li.appendChild(button);
         label = Y.Node.create('<label for="' + id + '">' +
-                pluginStrings.description + '</label>');
+                M.util.get_string('description', 'availability_' + type) + '</label>');
         li.appendChild(label);
         ul.appendChild(li);
     }
@@ -601,16 +599,16 @@ M.core_availability.List.prototype.clickAdd = function() {
     li = Y.Node.create('<li class="clearfix"></li>');
     id = 'availability_addrestriction_list_';
     button = Y.Node.create('<button type="button" class="btn btn-default"' +
-            'id="' + id + '">' + M.str.availability.condition_group + '</button>');
+            'id="' + id + '">' + M.util.get_string('condition_group', 'availability') + '</button>');
     button.on('click', this.getAddHandler(null, dialogRef), this);
     li.appendChild(button);
     label = Y.Node.create('<label for="' + id + '">' +
-            M.str.availability.condition_group_info + '</label>');
+            M.util.get_string('condition_group_info', 'availability') + '</label>');
     li.appendChild(label);
     ul.appendChild(li);
 
     var config = {
-        headerContent : M.str.availability.addrestriction,
+        headerContent : M.util.get_string('addrestriction', 'availability'),
         bodyContent : content,
         additionalBaseClass : 'availability-dialogue',
         draggable : true,
@@ -764,7 +762,7 @@ M.core_availability.Item = function(json, root) {
         // Handle undefined plugins.
         this.plugin = null;
         this.pluginNode = Y.Node.create('<div class="availability-warning">' +
-                M.str.availability.missingplugin + '</div>');
+                M.util.get_string('missingplugin', 'availability') + '</div>');
     } else {
         // Plugin is known.
         this.plugin = M.core_availability.form.plugins[json.type];
@@ -835,7 +833,7 @@ M.core_availability.Item.prototype.fillErrors = function(errors) {
     // If any errors were added, add the marker to this item.
     var errorLabel = this.node.one('> .label-warning');
     if (errors.length !== before && !errorLabel.get('firstChild')) {
-        errorLabel.appendChild(document.createTextNode(M.str.availability.invalid));
+        errorLabel.appendChild(document.createTextNode(M.util.get_string('invalid', 'availability')));
     } else if (errors.length === before && errorLabel.get('firstChild')) {
         errorLabel.get('firstChild').remove();
     }
@@ -851,7 +849,7 @@ M.core_availability.Item.prototype.renumber = function(number) {
     // Update heading for item.
     var headingParams = { number: number };
     if (this.plugin) {
-        headingParams.type = M.str['availability_' + this.pluginType].title;
+        headingParams.type = M.util.get_string('title', 'availability_' + this.pluginType);
     } else {
         headingParams.type = '[' + this.pluginType + ']';
     }
@@ -930,19 +928,21 @@ M.core_availability.EyeIcon = function(individual, shown) {
     this.span.appendChild(icon);
 
     // Set up button text and icon.
-    var suffix = individual ? '_individual' : '_all';
-    var setHidden = function() {
-        icon.set('src', M.util.image_url('i/show', 'core'));
-        icon.set('alt', M.str.availability['hidden' + suffix]);
-        this.span.set('title', M.str.availability['hidden' + suffix] + ' \u2022 ' +
-                M.str.availability.show_verb);
-    };
-    var setShown = function() {
-        icon.set('src', M.util.image_url('i/hide', 'core'));
-        icon.set('alt', M.str.availability['shown' + suffix]);
-        this.span.set('title', M.str.availability['shown' + suffix] + ' \u2022 ' +
-                M.str.availability.hide_verb);
-    };
+    var suffix = individual ? '_individual' : '_all',
+        setHidden = function() {
+            var hiddenStr = M.util.get_string('hidden' + suffix, 'availability');
+            icon.set('src', M.util.image_url('i/show', 'core'));
+            icon.set('alt', hiddenStr);
+            this.span.set('title', hiddenStr + ' \u2022 ' +
+                    M.util.get_string('show_verb', 'availability'));
+        },
+        setShown = function() {
+            var shownStr = M.util.get_string('shown' + suffix, 'availability');
+            icon.set('src', M.util.image_url('i/hide', 'core'));
+            icon.set('alt', shownStr);
+            this.span.set('title', shownStr + ' \u2022 ' +
+                    M.util.get_string('hide_verb', 'availability'));
+        };
     if(shown) {
         setShown.call(this);
     } else {
@@ -987,8 +987,8 @@ M.core_availability.EyeIcon.prototype.span = null;
  * @return {Boolean} True if this icon is set to 'hidden'
  */
 M.core_availability.EyeIcon.prototype.isHidden = function() {
-    var suffix = this.individual ? '_individual' : '_all';
-    var compare = M.str.availability['hidden' + suffix];
+    var suffix = this.individual ? '_individual' : '_all',
+        compare = M.util.get_string('hidden' + suffix, 'availability');
     return this.span.one('img').get('alt') === compare;
 };
 
@@ -1002,9 +1002,9 @@ M.core_availability.EyeIcon.prototype.isHidden = function() {
  */
 M.core_availability.DeleteIcon = function(toDelete) {
     this.span = Y.Node.create('<a class="availability-delete" href="#" title="' +
-            M.str.moodle['delete'] + '" role="button">');
+            M.util.get_string('delete', 'moodle') + '" role="button">');
     var img = Y.Node.create('<img src="' + M.util.image_url('t/delete', 'core') +
-            '" alt="' + M.str.moodle['delete'] + '" />');
+            '" alt="' + M.util.get_string('delete', 'moodle') + '" />');
     this.span.appendChild(img);
     var click = function(e) {
         e.preventDefault();
index 84cf4de..de35cc3 100644 (file)
@@ -503,6 +503,14 @@ class backup_course_structure_step extends backup_structure_step {
  */
 class backup_enrolments_structure_step extends backup_structure_step {
 
+    /**
+     * Skip enrolments on the front page.
+     * @return bool
+     */
+    protected function execute_condition() {
+        return ($this->get_courseid() != SITEID);
+    }
+
     protected function define_structure() {
 
         // To know if we are including users
@@ -921,7 +929,12 @@ class backup_gradebook_structure_step extends backup_structure_step {
      * the module gradeitems have been already included in backup
      */
     protected function execute_condition() {
-        return backup_plan_dbops::require_gradebook_backup($this->get_courseid(), $this->get_backupid());
+        $courseid = $this->get_courseid();
+        if ($courseid == SITEID) {
+            return false;
+        }
+
+        return backup_plan_dbops::require_gradebook_backup($courseid, $this->get_backupid());
     }
 
     protected function define_structure() {
@@ -1035,7 +1048,12 @@ class backup_grade_history_structure_step extends backup_structure_step {
      * because we do not want to save the history of items which are not backed up. At least for now.
      */
     protected function execute_condition() {
-        return backup_plan_dbops::require_gradebook_backup($this->get_courseid(), $this->get_backupid());
+        $courseid = $this->get_courseid();
+        if ($courseid == SITEID) {
+            return false;
+        }
+
+        return backup_plan_dbops::require_gradebook_backup($courseid, $this->get_backupid());
     }
 
     protected function define_structure() {
@@ -1088,6 +1106,14 @@ class backup_grade_history_structure_step extends backup_structure_step {
  */
 class backup_userscompletion_structure_step extends backup_structure_step {
 
+    /**
+     * Skip completion on the front page.
+     * @return bool
+     */
+    protected function execute_condition() {
+        return ($this->get_courseid() != SITEID);
+    }
+
     protected function define_structure() {
 
         // Define each element separated
@@ -1617,6 +1643,7 @@ class backup_main_structure_step extends backup_structure_step {
         $info['original_site_identifier_hash'] = md5(get_site_identifier());
         $info['original_course_id'] = $this->get_courseid();
         $originalcourseinfo = backup_controller_dbops::backup_get_original_course_info($this->get_courseid());
+        $info['original_course_format'] = $originalcourseinfo->format;
         $info['original_course_fullname']  = $originalcourseinfo->fullname;
         $info['original_course_shortname'] = $originalcourseinfo->shortname;
         $info['original_course_startdate'] = $originalcourseinfo->startdate;
@@ -1634,7 +1661,7 @@ class backup_main_structure_step extends backup_structure_step {
         $information = new backup_nested_element('information', null, array(
             'name', 'moodle_version', 'moodle_release', 'backup_version',
             'backup_release', 'backup_date', 'mnet_remoteusers', 'include_files', 'include_file_references_to_external_content', 'original_wwwroot',
-            'original_site_identifier_hash', 'original_course_id',
+            'original_site_identifier_hash', 'original_course_id', 'original_course_format',
             'original_course_fullname', 'original_course_shortname', 'original_course_startdate',
             'original_course_contextid', 'original_system_contextid'));
 
@@ -2102,6 +2129,12 @@ class backup_activity_grading_structure_step extends backup_structure_step {
      * Include the grading.xml only if the module supports advanced grading
      */
     protected function execute_condition() {
+
+        // No grades on the front page.
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         return plugin_supports('mod', $this->get_task()->get_modulename(), FEATURE_ADVANCED_GRADING, false);
     }
 
@@ -2175,6 +2208,14 @@ class backup_activity_grading_structure_step extends backup_structure_step {
  */
 class backup_activity_grades_structure_step extends backup_structure_step {
 
+    /**
+     * No grades on the front page.
+     * @return bool
+     */
+    protected function execute_condition() {
+        return ($this->get_courseid() != SITEID);
+    }
+
     protected function define_structure() {
 
         // To know if we are including userinfo
@@ -2259,6 +2300,14 @@ class backup_activity_grades_structure_step extends backup_structure_step {
  */
 class backup_activity_grade_history_structure_step extends backup_structure_step {
 
+    /**
+     * No grades on the front page.
+     * @return bool
+     */
+    protected function execute_condition() {
+        return ($this->get_courseid() != SITEID);
+    }
+
     protected function define_structure() {
 
         // Settings to use.
@@ -2306,6 +2355,12 @@ class backup_activity_grade_history_structure_step extends backup_structure_step
 class backup_course_completion_structure_step extends backup_structure_step {
 
     protected function execute_condition() {
+
+        // No completion on front page.
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         // Check that all activities have been included
         if ($this->task->is_excluding_activities()) {
             return false;
index fc4fe15..ee4fa9d 100644 (file)
@@ -89,6 +89,10 @@ class restore_gradebook_structure_step extends restore_structure_step {
      protected function execute_condition() {
         global $CFG, $DB;
 
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         // No gradebook info found, don't execute
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
@@ -464,6 +468,10 @@ class restore_grade_history_structure_step extends restore_structure_step {
      protected function execute_condition() {
         global $CFG, $DB;
 
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         // No gradebook info found, don't execute.
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
@@ -1814,9 +1822,15 @@ class restore_ras_and_caps_structure_step extends restore_structure_step {
  * If no instances yet add default enrol methods the same way as when creating new course in UI.
  */
 class restore_default_enrolments_step extends restore_execution_step {
+
     public function define_execution() {
         global $DB;
 
+        // No enrolments in front page.
+        if ($this->get_courseid() == SITEID) {
+            return;
+        }
+
         $course = $DB->get_record('course', array('id'=>$this->get_courseid()), '*', MUST_EXIST);
 
         if ($DB->record_exists('enrol', array('courseid'=>$this->get_courseid(), 'enrol'=>'manual'))) {
@@ -1853,6 +1867,10 @@ class restore_enrolments_structure_step extends restore_structure_step {
      */
     protected function execute_condition() {
 
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         // Check it is included in the backup
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
@@ -2444,6 +2462,11 @@ class restore_course_completion_structure_step extends restore_structure_step {
             return false;
         }
 
+        // No course completion on the front page.
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         // Check it is included in the backup
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
@@ -2791,6 +2814,10 @@ class restore_activity_grading_structure_step extends restore_structure_step {
      */
      protected function execute_condition() {
 
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
         if (!file_exists($fullpath)) {
@@ -2925,6 +2952,14 @@ class restore_activity_grading_structure_step extends restore_structure_step {
  */
 class restore_activity_grades_structure_step extends restore_structure_step {
 
+    /**
+     * No grades in front page.
+     * @return bool
+     */
+    protected function execute_condition() {
+        return ($this->get_courseid() != SITEID);
+    }
+
     protected function define_structure() {
 
         $paths = array();
@@ -3061,6 +3096,11 @@ class restore_activity_grade_history_structure_step extends restore_structure_st
      * This step is executed only if the grade history file is present.
      */
      protected function execute_condition() {
+
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
         if (!file_exists($fullpath)) {
@@ -3447,6 +3487,11 @@ class restore_userscompletion_structure_step extends restore_structure_step {
              return false;
          }
 
+        // No completion on the front page.
+        if ($this->get_courseid() == SITEID) {
+            return false;
+        }
+
          // No user completion info found, don't execute
         $fullpath = $this->task->get_taskbasepath();
         $fullpath = rtrim($fullpath, '/') . '/' . $this->filename;
index 960c9ec..4842d4a 100644 (file)
@@ -391,6 +391,81 @@ class core_backup_moodle2_testcase extends advanced_testcase {
                 'assign', 'allowsubmissionsfromdate', array('id' => $newassign->instance)));
     }
 
+    /**
+     * Test front page backup/restore and duplicate activities
+     * @return void
+     */
+    public function test_restore_frontpage() {
+        global $DB, $CFG, $USER;
+
+        $this->resetAfterTest(true);
+        $this->setAdminUser();
+        $generator = $this->getDataGenerator();
+
+        $frontpage = $DB->get_record('course', array('id' => SITEID));
+        $forum = $generator->create_module('forum', array('course' => $frontpage->id));
+
+        // Activities can be duplicated.
+        $this->duplicate($frontpage, $forum->cmid);
+
+        $modinfo = get_fast_modinfo($frontpage);
+        $this->assertEquals(2, count($modinfo->get_instances_of('forum')));
+
+        // Front page backup.
+        $frontpagebc = new backup_controller(backup::TYPE_1COURSE, $frontpage->id,
+                backup::FORMAT_MOODLE, backup::INTERACTIVE_NO, backup::MODE_IMPORT,
+                $USER->id);
+        $frontpagebackupid = $frontpagebc->get_backupid();
+        $frontpagebc->execute_plan();
+        $frontpagebc->destroy();
+
+        $course = $generator->create_course();
+        $newcourseid = restore_dbops::create_new_course(
+                $course->fullname . ' 2', $course->shortname . '_2', $course->category);
+
+        // Other course backup.
+        $bc = new backup_controller(backup::TYPE_1COURSE, $course->id,
+                backup::FORMAT_MOODLE, backup::INTERACTIVE_NO, backup::MODE_IMPORT,
+                $USER->id);
+        $otherbackupid = $bc->get_backupid();
+        $bc->execute_plan();
+        $bc->destroy();
+
+        // We can only restore a front page over the front page.
+        $rc = new restore_controller($frontpagebackupid, $course->id,
+                backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id,
+                backup::TARGET_CURRENT_ADDING);
+        $this->assertFalse($rc->execute_precheck());
+        $rc->destroy();
+
+        $rc = new restore_controller($frontpagebackupid, $newcourseid,
+                backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id,
+                backup::TARGET_NEW_COURSE);
+        $this->assertFalse($rc->execute_precheck());
+        $rc->destroy();
+
+        $rc = new restore_controller($frontpagebackupid, $frontpage->id,
+                backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id,
+                backup::TARGET_CURRENT_ADDING);
+        $this->assertTrue($rc->execute_precheck());
+        $rc->execute_plan();
+        $rc->destroy();
+
+        // We can't restore a non-front page course on the front page course.
+        $rc = new restore_controller($otherbackupid, $frontpage->id,
+                backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id,
+                backup::TARGET_CURRENT_ADDING);
+        $this->assertFalse($rc->execute_precheck());
+        $rc->destroy();
+
+        $rc = new restore_controller($otherbackupid, $newcourseid,
+                backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id,
+                backup::TARGET_NEW_COURSE);
+        $this->assertTrue($rc->execute_precheck());
+        $rc->execute_plan();
+        $rc->destroy();
+    }
+
     /**
      * Backs a course up and restores it.
      *
index 41ff9d3..e7456ce 100644 (file)
@@ -524,7 +524,7 @@ abstract class backup_controller_dbops extends backup_dbops {
      */
     public static function backup_get_original_course_info($courseid) {
         global $DB;
-        return $DB->get_record('course', array('id' => $courseid), 'fullname, shortname, startdate');
+        return $DB->get_record('course', array('id' => $courseid), 'fullname, shortname, startdate, format');
     }
 
     /**
index 434059b..7f76cff 100644 (file)
@@ -556,9 +556,6 @@ abstract class backup_cron_automated_helper {
             return true;
         }
 
-        $backupword = str_replace(' ', '_', core_text::strtolower(get_string('backupfilename')));
-        $backupword = trim(clean_filename($backupword), '_');
-
         if (!file_exists($dir) || !is_dir($dir) || !is_writable($dir)) {
             $dir = null;
         }
@@ -573,9 +570,6 @@ abstract class backup_cron_automated_helper {
             $files = array();
             // Store all the matching files into timemodified => stored_file array.
             foreach ($fs->get_area_files($context->id, $component, $filearea, $itemid) as $file) {
-                if (strpos($file->get_filename(), $backupword) !== 0) {
-                    continue;
-                }
                 $files[$file->get_timemodified()] = $file;
             }
             if (count($files) <= $keep) {
@@ -595,8 +589,8 @@ abstract class backup_cron_automated_helper {
         if (!empty($dir) && ($storage == 1 || $storage == 2)) {
             // Calculate backup filename regex, ignoring the date/time/info parts that can be
             // variable, depending of languages, formats and automated backup settings.
-            $filename = $backupword . '-' . backup::FORMAT_MOODLE . '-' . backup::TYPE_1COURSE . '-' . $course->id . '-';
-            $regex = '#^'.preg_quote($filename, '#').'.*\.mbz$#';
+            $filename = backup::FORMAT_MOODLE . '-' . backup::TYPE_1COURSE . '-' . $course->id . '-';
+            $regex = '#' . preg_quote($filename, '#') . '.*\.mbz$#';
 
             // Store all the matching files into filename => timemodified array.
             $files = array();
index d9ad80d..b0425a3 100644 (file)
@@ -155,6 +155,11 @@ abstract class backup_general_helper extends backup_helper {
         } else {
             $info->include_file_references_to_external_content = 0;
         }
+        // Introduced in Moodle 2.9.
+        $info->original_course_format = '';
+        if (!empty($infoarr['original_course_format'])) {
+            $info->original_course_format = $infoarr['original_course_format'];
+        }
         // include_files is a new setting in 2.6.
         if (isset($infoarr['include_files'])) {
             $info->include_files = $infoarr['include_files'];
index a80a80b..803cd77 100644 (file)
@@ -105,10 +105,24 @@ abstract class restore_prechecks_helper {
             $warnings[] = get_string('noticenewerbackup','',$message);
         }
 
-        // Error if restoring over frontpage
-        // TODO: Review the whole restore process in order to transform this into one warning (see 1.9)
-        if ($controller->get_courseid() == SITEID) {
-            $errors[] = get_string('errorrestorefrontpage', 'backup');
+        // The original_course_format var was introduced in Moodle 2.9.
+        $originalcourseformat = null;
+        if (!empty($controller->get_info()->original_course_format)) {
+            $originalcourseformat = $controller->get_info()->original_course_format;
+        }
+
+        // We can't restore other course's backups on the front page.
+        if ($controller->get_courseid() == SITEID &&
+                $originalcourseformat != 'site' &&
+                $controller->get_type() == backup::TYPE_1COURSE) {
+            $errors[] = get_string('errorrestorefrontpagebackup', 'backup');
+        }
+
+        // We can't restore front pages over other courses.
+        if ($controller->get_courseid() != SITEID &&
+                $originalcourseformat == 'site' &&
+                $controller->get_type() == backup::TYPE_1COURSE) {
+            $errors[] = get_string('errorrestorefrontpagebackup', 'backup');
         }
 
         // If restoring to different site and restoring users and backup has mnet users warn/error
index 3b66dc5..f586d40 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -20,7 +19,7 @@
  * as well as the individual forms that relate to the different stages the user
  * interface can exist within.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -34,6 +33,7 @@ defined('MOODLE_INTERNAL') || die();
  * grown african swallows all of whom have been carring coconuts for several days.
  * EWWWWW!!!!!!!!!!!!!!!!!!!!!!!!
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -41,6 +41,8 @@ abstract class backup_moodleform extends base_moodleform {
     /**
      * Creates the form
      *
+     * Overridden for type hinting on the first arg.
+     *
      * @param backup_ui_stage $uistage
      * @param moodle_url|string $action
      * @param mixed $customdata
@@ -49,38 +51,71 @@ abstract class backup_moodleform extends base_moodleform {
      * @param array $attributes
      * @param bool $editable
      */
-    public function __construct(backup_ui_stage $uistage, $action = null, $customdata = null, $method = 'post', $target = '', $attributes = null, $editable = true) {
+    public function __construct(backup_ui_stage $uistage, $action = null, $customdata = null, $method = 'post',
+                                $target = '', $attributes = null, $editable = true) {
         parent::__construct($uistage, $action, $customdata, $method, $target, $attributes, $editable);
     }
 }
+
 /**
  * Initial backup user interface stage moodleform.
  *
  * Nothing to override we only need it defined so that moodleform doesn't get confused
  * between stages.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_initial_form extends backup_moodleform {}
+
 /**
  * Schema backup user interface stage moodleform.
  *
  * Nothing to override we only need it defined so that moodleform doesn't get confused
  * between stages.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_schema_form extends backup_moodleform {}
+
 /**
  * Confirmation backup user interface stage moodleform.
  *
  * Nothing to override we only need it defined so that moodleform doesn't get confused
  * between stages.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_confirmation_form extends backup_moodleform {
 
+    /**
+     * Adds the last elements, rules, settings etc to the form after data has been set.
+     *
+     * We override this to add a rule and type to the filename setting.
+     *
+     * @throws coding_exception
+     */
     public function definition_after_data() {
         parent::definition_after_data();
         $this->_form->addRule('setting_root_filename', get_string('errorfilenamerequired', 'backup'), 'required');
         $this->_form->setType('setting_root_filename', PARAM_FILE);
     }
 
+    /**
+     * Validates the form.
+     *
+     * Relies on the parent::validation for the bulk of the work.
+     *
+     * @param array $data
+     * @param array $files
+     * @return array
+     * @throws coding_exception
+     */
     public function validation($data, $files) {
         $errors = parent::validation($data, $files);
 
@@ -94,5 +129,4 @@ class backup_confirmation_form extends backup_moodleform {
 
         return $errors;
     }
-
 }
index d906d7c..02b71db 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -18,7 +17,7 @@
 /**
  * This file contains the backup user interface class
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 /**
  * This is the backup user interface class
  *
- * The backup user interface class manages the user interface and backup for
- * Moodle.
+ * The backup user interface class manages the user interface and backup for Moodle.
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui extends base_ui {
     /**
      * The stages of the backup user interface.
+     * The initial stage of the backup - settings are here.
      */
     const STAGE_INITIAL = 1;
+
+    /**
+     * The stages of the backup user interface.
+     * The schema stage of the backup - here you choose the bits you include.
+     */
     const STAGE_SCHEMA = 2;
+
+    /**
+     * The stages of the backup user interface.
+     * The confirmation stage of the backup.
+     */
     const STAGE_CONFIRMATION = 4;
+
+    /**
+     * The stages of the backup user interface.
+     * The final stage of the backup - where it is being processed.
+     */
     const STAGE_FINAL = 8;
+
+    /**
+     * The stages of the backup user interface.
+     * The backup is now complete.
+     */
     const STAGE_COMPLETE = 16;
 
     /**
@@ -52,10 +72,11 @@ class backup_ui extends base_ui {
      * Intialises what ever stage is requested. If none are requested we check
      * params for 'stage' and default to initial
      *
-     * @param int|null $stage The desired stage to intialise or null for the default
+     * @param int $stage The desired stage to intialise or null for the default
+     * @param array $params
      * @return backup_ui_stage_initial|backup_ui_stage_schema|backup_ui_stage_confirmation|backup_ui_stage_final
      */
-    protected function initialise_stage($stage = null, array $params=null) {
+    protected function initialise_stage($stage = null, array $params = null) {
         if ($stage == null) {
             $stage = optional_param('stage', self::STAGE_INITIAL, PARAM_INT);
         }
@@ -81,6 +102,7 @@ class backup_ui extends base_ui {
         }
         return $stage;
     }
+
     /**
      * Returns the backup id
      * @return string
@@ -88,6 +110,7 @@ class backup_ui extends base_ui {
     public function get_uniqueid() {
         return $this->get_backupid();
     }
+
     /**
      * Gets the backup id from the controller
      * @return string
@@ -95,8 +118,10 @@ class backup_ui extends base_ui {
     public function get_backupid() {
         return $this->controller->get_backupid();
     }
+
     /**
      * Executes the backup plan
+     * @throws backup_ui_exception when the steps are wrong.
      * @return bool
      */
     public function execute() {
@@ -112,16 +137,18 @@ class backup_ui extends base_ui {
         $this->stage = new backup_ui_stage_complete($this, $this->stage->get_params(), $this->controller->get_results());
         return true;
     }
+
     /**
      * Loads the backup controller if we are tracking one
+     * @param string $backupid
      * @return backup_controller|false
      */
-    final public static function load_controller($backupid=false) {
-        // Get the backup id optional param
+    final public static function load_controller($backupid = false) {
+        // Get the backup id optional param.
         if ($backupid) {
             try {
                 // Try to load the controller with it.
-                // If it fails at this point it is likely because this is the first load
+                // If it fails at this point it is likely because this is the first load.
                 $controller = backup_controller::load_controller($backupid);
                 return $controller;
             } catch (Exception $e) {
@@ -143,24 +170,24 @@ class backup_ui extends base_ui {
         $items = array();
         while ($stage > 0) {
             $classes = array('backup_stage');
-            if (floor($stage/2) == $currentstage) {
+            if (floor($stage / 2) == $currentstage) {
                 $classes[] = 'backup_stage_next';
             } else if ($stage == $currentstage) {
                 $classes[] = 'backup_stage_current';
             } else if ($stage < $currentstage) {
                 $classes[] = 'backup_stage_complete';
             }
-            $item = array('text' => strlen(decbin($stage)).'. '.get_string('currentstage'.$stage, 'backup'),'class' => join(' ', $classes));
-            if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && (!self::$skipcurrentstage || ($stage*2) != $currentstage)) {
+            $item = array('text' => strlen(decbin($stage)).'. '.get_string('currentstage'.$stage, 'backup'), 'class' => join(' ', $classes));
+            if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && (!self::$skipcurrentstage || ($stage * 2) != $currentstage)) {
                 $params = $this->stage->get_params();
                 if (empty($params)) {
                     $params = array();
                 }
-                $params = array_merge($params, array('backup'=>$this->get_backupid(), 'stage'=>$stage));
+                $params = array_merge($params, array('backup' => $this->get_backupid(), 'stage' => $stage));
                 $item['link'] = new moodle_url($PAGE->url, $params);
             }
             array_unshift($items, $item);
-            $stage = floor($stage/2);
+            $stage = floor($stage / 2);
         }
         return $items;
     }
@@ -181,13 +208,18 @@ class backup_ui extends base_ui {
     /**
      * If called with default arg the current stage gets skipped.
      * @static
+     * @param bool $setting Set to true (default) if you want to skip this stage, false otherwise.
      */
-    public static function skip_current_stage($setting=true) {
+    public static function skip_current_stage($setting = true) {
         self::$skipcurrentstage = $setting;
     }
 }
 
 /**
  * Backup user interface exception. Modelled off the backup_exception class
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui_exception extends base_ui_exception {}
index 1712a73..37d6e75 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -19,7 +18,7 @@
  * This file contains the setting user interface classes that all backup/restore
  * settings use to represent the UI they have.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -28,6 +27,7 @@
  * Abstract class used to represent the user interface that a setting has.
  *
  * @todo extend as required for restore
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -66,6 +66,7 @@ class base_setting_ui {
      * @var base_setting|backup_setting
      */
     protected $setting;
+
     /**
      * Constructors are sooooo cool
      * @param base_setting $setting
@@ -78,7 +79,7 @@ class base_setting_ui {
      * Destroy all circular references. It helps PHP 5.2 a lot!
      */
     public function destroy() {
-        // No need to destroy anything recursively here, direct reset
+        // No need to destroy anything recursively here, direct reset.
         $this->setting = null;
     }
 
@@ -89,6 +90,7 @@ class base_setting_ui {
     public function get_name() {
         return self::NAME_PREFIX.$this->name;
     }
+
     /**
      * Gets the name of this item including its prefix
      * @return string
@@ -96,6 +98,7 @@ class base_setting_ui {
     public function get_label() {
         return $this->label;
     }
+
     /**
      * Gets the type of this element
      * @return int
@@ -103,6 +106,7 @@ class base_setting_ui {
     public function get_type() {
         return $this->type;
     }
+
     /**
      * Gets the HTML attributes for this item
      * @return array
@@ -110,6 +114,7 @@ class base_setting_ui {
     public function get_attributes() {
         return $this->attributes;
     }
+
     /**
      * Gets the value of this setting
      * @return mixed
@@ -117,6 +122,7 @@ class base_setting_ui {
     public function get_value() {
         return $this->setting->get_value();
     }
+
     /**
      * Gets the value to display in a static quickforms element
      * @return mixed
@@ -135,7 +141,9 @@ class base_setting_ui {
     }
 
     /**
-     * Sets the label
+     * Sets the label.
+     *
+     * @throws base_setting_ui_exception when the label is not valid.
      * @param string $label
      */
     public function set_label($label) {
@@ -145,11 +153,12 @@ class base_setting_ui {
         }
         $this->label = $label;
     }
+
     /**
      * Disables the UI for this element
      */
     public function disable() {
-       $this->attributes['disabled'] = 'disabled';
+        $this->attributes['disabled'] = 'disabled';
     }
 
     /**
@@ -177,6 +186,7 @@ class base_setting_ui {
 /**
  * Abstract class to represent the user interface backup settings have
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -191,13 +201,13 @@ abstract class backup_setting_ui extends base_setting_ui {
      * JAC... Just Another Constructor
      *
      * @param backup_setting $setting
-     * @param string|null $label The label to display with the setting ui
-     * @param array|null $attributes Array of HTML attributes to apply to the element
-     * @param array|null $options Array of options to apply to the setting ui object
+     * @param string $label The label to display with the setting ui
+     * @param array $attributes Array of HTML attributes to apply to the element
+     * @param array $options Array of options to apply to the setting ui object
      */
     public function __construct(backup_setting $setting, $label = null, array $attributes = null, array $options = null) {
         parent::__construct($setting);
-        // Improve the inputs name by appending the level to the name
+        // Improve the inputs name by appending the level to the name.
         switch ($setting->get_level()) {
             case backup_setting::ROOT_LEVEL :
                 $this->name = 'root_'.$setting->get_name();
@@ -220,21 +230,20 @@ abstract class backup_setting_ui extends base_setting_ui {
             $this->options = $options;
         }
     }
+
     /**
      * Creates a new backup setting ui based on the setting it is given
      *
-     * Throws an exception if an invalid type is provided.
-     *
+     * @throws backup_setting_ui_exception if the setting type is not supported,
      * @param backup_setting $setting
      * @param int $type The backup_setting UI type. One of backup_setting::UI_*;
      * @param string $label The label to display with the setting ui
      * @param array $attributes Array of HTML attributes to apply to the element
      * @param array $options Array of options to apply to the setting ui object
-     *
      * @return backup_setting_ui_text|backup_setting_ui_checkbox|backup_setting_ui_select|backup_setting_ui_radio
      */
-    final public static function make(backup_setting $setting, $type, $label, array $attributes = null, array $options=null) {
-        // Base the decision we make on the type that was sent
+    final public static function make(backup_setting $setting, $type, $label, array $attributes = null, array $options = null) {
+        // Base the decision we make on the type that was sent.
         switch ($type) {
             case backup_setting::UI_HTML_CHECKBOX :
                 return new backup_setting_ui_checkbox($setting, $label, null, (array)$attributes, (array)$options);
@@ -248,11 +257,16 @@ abstract class backup_setting_ui extends base_setting_ui {
                 throw new backup_setting_ui_exception('setting_invalid_ui_type');
         }
     }
+
     /**
      * Get element properties that can be used to make a quickform element
+     *
+     * @param base_task $task
+     * @param renderer_base $output
      * @return array
      */
-    abstract public function get_element_properties(base_task $task=null, renderer_base $output=null);
+    abstract public function get_element_properties(base_task $task = null, renderer_base $output = null);
+
     /**
      * Applies config options to a given properties array and then returns it
      * @param array $properties
@@ -264,16 +278,17 @@ abstract class backup_setting_ui extends base_setting_ui {
         }
         return $properties;
     }
+
     /**
      * Gets the label for this item
-     * @param backup_task|null $task Optional, if provided and the setting is an include
+     * @param base_task $task Optional, if provided and the setting is an include
      *          $task is used to set the setting label
      * @return string
      */
-    public function get_label(base_task $task=null) {
-        // If a task has been provided and the label is not already set meaniningfully
+    public function get_label(base_task $task = null) {
+        // If a task has been provided and the label is not already set meaningfully
         // we will attempt to improve it.
-        if (!is_null($task) && $this->label == $this->setting->get_name() && strpos($this->setting->get_name(), '_include')!==false) {
+        if (!is_null($task) && $this->label == $this->setting->get_name() && strpos($this->setting->get_name(), '_include') !== false) {
             if ($this->setting->get_level() == backup_setting::SECTION_LEVEL) {
                 $this->label = get_string('includesection', 'backup', $task->get_name());
             } else if ($this->setting->get_level() == backup_setting::ACTIVITY_LEVEL) {
@@ -282,6 +297,7 @@ abstract class backup_setting_ui extends base_setting_ui {
         }
         return $this->label;
     }
+
     /**
      * Returns true if the setting is changeable.
      *
@@ -296,24 +312,23 @@ abstract class backup_setting_ui extends base_setting_ui {
      */
     public function is_changeable() {
         if ($this->setting->get_status() === backup_setting::NOT_LOCKED) {
-            // Its not locked so its chanegable
+            // Its not locked so its chanegable.
             return true;
         } else if ($this->setting->get_status() !== backup_setting::LOCKED_BY_HIERARCHY) {
-            // Its not changeable because its locked by permission or config
+            // Its not changeable because its locked by permission or config.
             return false;
         } else if ($this->setting->has_dependencies_on_settings()) {
             foreach ($this->setting->get_settings_depended_on() as $dependency) {
                 if ($dependency->is_locked() && $dependency->get_setting()->get_level() !== $this->setting->get_level()) {
-                    // Its not changeable because one or more dependancies arn't
-                    // changeable.
-                   return false;
+                    // Its not changeable because one or more dependancies arn't changeable.
+                    return false;
                 }
             }
             // Its changeable because all dependencies are changeable.
             return true;
         }
         // We should never get here but if we do return false to be safe.
-        // The setting would need to be locked by hierarchy and not have any deps
+        // The setting would need to be locked by hierarchy and not have any deps.
         return false;
     }
 
@@ -322,6 +337,7 @@ abstract class backup_setting_ui extends base_setting_ui {
 /**
  * A text input user interface element for backup settings
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -330,20 +346,26 @@ class backup_setting_ui_text extends backup_setting_ui {
      * @var int
      */
     protected $type = backup_setting::UI_HTML_TEXTFIELD;
+
     /**
      * Returns an array of properties suitable for generating a quickforms element
-     * @param backup_task|null $task
+     * @param base_task $task
+     * @param renderer_base $output
      * @return array (element, name, label, attributes)
      */
-    public function get_element_properties(base_task $task=null, renderer_base $output=null) {
-        // name, label, text, attributes
+    public function get_element_properties(base_task $task = null, renderer_base $output = null) {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
             $label .= $output->render($icon);
         }
-        // name, label, attributes
-        return $this->apply_options(array('element'=>'text','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'attributes'=>$this->attributes));
+        // Name, label, attributes.
+        return $this->apply_options(array(
+            'element' => 'text',
+            'name' => self::NAME_PREFIX.$this->name,
+            'label' => $label,
+            'attributes' => $this->attributes)
+        );
     }
 
 }
@@ -351,50 +373,64 @@ class backup_setting_ui_text extends backup_setting_ui {
 /**
  * A checkbox user interface element for backup settings (default)
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_setting_ui_checkbox extends backup_setting_ui {
+
     /**
      * @var int
      */
     protected $type = backup_setting::UI_HTML_CHECKBOX;
+
     /**
      * @var bool
      */
     protected $changeable = true;
+
     /**
      * The text to show next to the checkbox
      * @var string
      */
     protected $text;
+
     /**
      * Overridden constructor so we can take text argument
+     *
      * @param backup_setting $setting
      * @param string $label
      * @param string $text
      * @param array $attributes
      * @param array $options
      */
-    public function __construct(backup_setting $setting, $label = null, $text=null, array $attributes = array(), array $options = array()) {
+    public function __construct(backup_setting $setting, $label = null, $text = null, array $attributes = array(), array $options = array()) {
         parent::__construct($setting, $label, $attributes, $options);
         $this->text = $text;
     }
+
     /**
      * Returns an array of properties suitable for generating a quickforms element
-     * @param backup_task|null $task
+     * @param base_task $task
+     * @param renderer_base $output
      * @return array (element, name, label, text, attributes);
      */
-    public function get_element_properties(base_task $task=null, renderer_base $output=null) {
-        // name, label, text, attributes
-
+    public function get_element_properties(base_task $task = null, renderer_base $output = null) {
+        // Name, label, text, attributes.
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
             $label .= $output->render($icon);
         }
-        return $this->apply_options(array('element'=>'checkbox','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'text'=>$this->text, 'attributes'=>$this->attributes));
+        return $this->apply_options(array(
+            'element' => 'checkbox',
+            'name' => self::NAME_PREFIX.$this->name,
+            'label' => $label,
+            'text' => $this->text,
+            'attributes' => $this->attributes
+        ));
     }
+
     /**
      * Sets the text for the element
      * @param string $text
@@ -402,6 +438,7 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
     public function set_text($text) {
         $this->text = $text;
     }
+
     /**
      * Gets the static value for the element
      * @global core_renderer $OUTPUT
@@ -409,7 +446,7 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
      */
     public function get_static_value() {
         global $OUTPUT;
-        // Checkboxes are always yes or no
+        // Checkboxes are always yes or no.
         if ($this->get_value()) {
             return $OUTPUT->pix_icon('i/valid', get_string('yes'));
         } else {
@@ -422,7 +459,7 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
      * @return bool
      */
     public function is_changeable() {
-        if ($this->changeable===false) {
+        if ($this->changeable === false) {
             return false;
         } else {
             return parent::is_changeable();
@@ -442,6 +479,7 @@ class backup_setting_ui_checkbox extends backup_setting_ui {
 /**
  * Radio button user interface element for backup settings
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -450,17 +488,21 @@ class backup_setting_ui_radio extends backup_setting_ui {
      * @var int
      */
     protected $type = backup_setting::UI_HTML_RADIOBUTTON;
+
     /**
      * The string shown next to the input
      * @var string
      */
     protected $text;
+
     /**
      * The value for the radio input
      * @var string
      */
     protected $value;
+
     /**
+     * Constructor
      *
      * @param backup_setting $setting
      * @param string $label
@@ -469,25 +511,33 @@ class backup_setting_ui_radio extends backup_setting_ui {
      * @param array $attributes
      * @param array $options
      */
-    public function __construct(backup_setting $setting, $label = null, $text=null, $value=null, array $attributes = array(), array $options = array()) {
+    public function __construct(backup_setting $setting, $label = null, $text = null, $value = null, array $attributes = array(), array $options = array()) {
         parent::__construct($setting, $label, $attributes, $options);
         $this->text = $text;
         $this->value = (string)$value;
     }
+
     /**
      * Returns an array of properties suitable for generating a quickforms element
-     * @param backup_task|null $task
+     * @param base_task $task
+     * @param renderer_base $output
      * @return array (element, name, label, text, value, attributes)
      */
-    public function get_element_properties(base_task $task=null, renderer_base $output=null) {
-        // name, label, text, attributes
+    public function get_element_properties(base_task $task = null, renderer_base $output = null) {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
             $label .= $output->render($icon);
         }
-        // name, label, text, value, attributes
-        return $this->apply_options(array('element'=>'radio','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'text'=>$this->text, 'value'=>$this->value, 'attributes'=>$this->attributes));
+        // Name, label, text, value, attributes.
+        return $this->apply_options(array(
+            'element' => 'radio',
+            'name' => self::NAME_PREFIX.$this->name,
+            'label' => $label,
+            'text' => $this->text,
+            'value' => $this->value,
+            'attributes' => $this->attributes
+        ));
     }
     /**
      * Sets the text next to this input
@@ -514,6 +564,7 @@ class backup_setting_ui_radio extends backup_setting_ui {
 /**
  * A select box, drop down user interface for backup settings
  *
+ * @package core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -522,12 +573,15 @@ class backup_setting_ui_select extends backup_setting_ui {
      * @var int
      */
     protected $type = backup_setting::UI_HTML_DROPDOWN;
+
     /**
      * An array of options to display in the select
      * @var array
      */
     protected $values;
+
     /**
+     * Constructor
      *
      * @param backup_setting $setting
      * @param string $label
@@ -535,32 +589,41 @@ class backup_setting_ui_select extends backup_setting_ui {
      * @param array $attributes
      * @param array $options
      */
-    public function __construct(backup_setting $setting, $label = null, $values=null, array $attributes = array(), array $options = array()) {
+    public function __construct(backup_setting $setting, $label = null, $values = null, array $attributes = array(), array $options = array()) {
         parent::__construct($setting, $label, $attributes, $options);
         $this->values = $values;
     }
+
     /**
      * Returns an array of properties suitable for generating a quickforms element
-     * @param backup_task|null $task
+     * @param base_task $task
+     * @param renderer_base $output
      * @return array (element, name, label, options, attributes)
      */
-    public function get_element_properties(base_task $task = null, renderer_base $output=null) {
-        // name, label, text, attributes
+    public function get_element_properties(base_task $task = null, renderer_base $output = null) {
         $icon = $this->get_icon();
         $label = $this->get_label($task);
         if (!empty($icon)) {
             $label .= $output->render($icon);
         }
-        // name, label, options, attributes
-        return $this->apply_options(array('element'=>'select','name'=>self::NAME_PREFIX.$this->name, 'label'=>$label, 'options'=>$this->values, 'attributes'=>$this->attributes));
+        // Name, label, options, attributes.
+        return $this->apply_options(array(
+            'element' => 'select',
+            'name' => self::NAME_PREFIX.$this->name,
+            'label' => $label,
+            'options' => $this->values,
+            'attributes' => $this->attributes
+        ));
     }
+
     /**
      * Sets the options for the select box
-     * @param array $values Associative array of value=>text options
+     * @param array $values Associative array of value => text options
      */
     public function set_values(array $values) {
         $this->values = $values;
     }
+
     /**
      * Gets the static value for this select element
      * @return string
@@ -568,6 +631,7 @@ class backup_setting_ui_select extends backup_setting_ui {
     public function get_static_value() {
         return $this->values[$this->get_value()];
     }
+
     /**
      * Returns true if the setting is changeable, false otherwise
      *
@@ -582,8 +646,22 @@ class backup_setting_ui_select extends backup_setting_ui {
     }
 }
 
+/**
+ * A date selector user interface widget for backup settings.
+ *
+ * @package core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class backup_setting_ui_dateselector extends backup_setting_ui_text {
-    public function get_element_properties(base_task $task = null, renderer_base $output=null) {
+
+    /**
+     * Returns an array of properties suitable for generating a quickforms element
+     * @param base_task $task
+     * @param renderer_base $output
+     * @return array (element, name, label, options, attributes)
+     */
+    public function get_element_properties(base_task $task = null, renderer_base $output = null) {
         if (!array_key_exists('optional', $this->attributes)) {
             $this->attributes['optional'] = false;
         }
@@ -591,6 +669,11 @@ class backup_setting_ui_dateselector extends backup_setting_ui_text {
         $properties['element'] = 'date_selector';
         return $properties;
     }
+
+    /**
+     * Gets the static value for this select element
+     * @return string
+     */
     public function get_static_value() {
         $value = $this->get_value();
         if (!empty($value)) {
@@ -600,5 +683,20 @@ class backup_setting_ui_dateselector extends backup_setting_ui_text {
     }
 }
 
+/**
+ * Base setting UI exception class.
+ *
+ * @package core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class base_setting_ui_exception extends base_setting_exception {}
+
+/**
+ * Backup setting UI exception class.
+ *
+ * @package core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class backup_setting_ui_exception extends base_setting_ui_exception {};
index cde79ff..ec1b3b1 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -20,9 +19,9 @@
  *
  * This file contains the classes required to manage the stages that make up the
  * backup user interface.
- * These will be primarily operated a {@see backup_ui} instance.
+ * These will be primarily operated a {@link backup_ui} instance.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
  *  - process : To process the stage
  *  - initialise_stage_form : To get a backup_moodleform instance for the stage
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 abstract class backup_ui_stage extends base_ui_stage {
 
+    /**
+     * Constructor.
+     *
+     * @param backup_ui $ui
+     * @param array $params
+     */
     public function __construct(backup_ui $ui, array $params = null) {
-       parent::__construct($ui, $params);
+        parent::__construct($ui, $params);
     }
+
     /**
      * The backup id from the backup controller
      * @return string
@@ -57,6 +64,7 @@ abstract class backup_ui_stage extends base_ui_stage {
  *
  * In this stage the user is required to set the root level settings.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -71,15 +79,16 @@ class backup_ui_stage_initial extends backup_ui_stage {
     /**
      * Initial backup stage constructor
      * @param backup_ui $ui
+     * @param array $params
      */
-    public function __construct(backup_ui $ui, array $params=null) {
+    public function __construct(backup_ui $ui, array $params = null) {
         $this->stage = backup_ui::STAGE_INITIAL;
         parent::__construct($ui, $params);
     }
 
     /**
      * Processes the initial backup stage
-     * @param backup_moodleform $form
+     * @param base_moodleform $m
      * @return int The number of changes
      */
     public function process(base_moodleform $m = null) {
@@ -98,9 +107,9 @@ class backup_ui_stage_initial extends backup_ui_stage {
             $tasks = $this->ui->get_tasks();
             $changes = 0;
             foreach ($tasks as &$task) {
-                // We are only interesting in the backup root task for this stage
+                // We are only interesting in the backup root task for this stage.
                 if ($task instanceof backup_root_task) {
-                    // Get all settings into a var so we can iterate by reference
+                    // Get all settings into a var so we can iterate by reference.
                     $settings = $task->get_settings();
                     foreach ($settings as &$setting) {
                         $name = $setting->get_ui_name();
@@ -114,7 +123,7 @@ class backup_ui_stage_initial extends backup_ui_stage {
                     }
                 }
             }
-            // Return the number of changes the user made
+            // Return the number of changes the user made.
             return $changes;
         } else {
             return false;
@@ -166,24 +175,24 @@ class backup_ui_stage_initial extends backup_ui_stage {
         global $PAGE;
         if ($this->stageform === null) {
             $form = new backup_initial_form($this, $PAGE->url);
-            // Store as a variable so we can iterate by reference
+            // Store as a variable so we can iterate by reference.
             $tasks = $this->ui->get_tasks();
-            // Iterate all tasks by reference
+            // Iterate all tasks by reference.
             $add_settings = array();
             $dependencies = array();
             foreach ($tasks as &$task) {
-                // For the initial stage we are only interested in the root settings
+                // For the initial stage we are only interested in the root settings.
                 if ($task instanceof backup_root_task) {
                     $form->add_heading('rootsettings', get_string('rootsettings', 'backup'));
                     $settings = $task->get_settings();
-                    // First add all settings except the filename setting
+                    // First add all settings except the filename setting.
                     foreach ($settings as &$setting) {
                         if ($setting->get_name() == 'filename') {
                             continue;
                         }
                         $add_settings[] = array($setting, $task);
                     }
-                    // Then add all dependencies
+                    // Then add all dependencies.
                     foreach ($settings as &$setting) {
                         if ($setting->get_name() == 'filename') {
                             continue;
@@ -200,7 +209,7 @@ class backup_ui_stage_initial extends backup_ui_stage {
             }
             $this->stageform = $form;
         }
-        // Return the form
+        // Return the form.
         return $this->stageform;
     }
 }
@@ -211,10 +220,12 @@ class backup_ui_stage_initial extends backup_ui_stage {
  * During the schema stage the user is required to set the settings that relate
  * to the area that they are backing up as well as its children.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui_stage_schema extends backup_ui_stage {
+
     /**
      * @var int Maximum number of settings to add to form at once
      */
@@ -222,38 +233,40 @@ class backup_ui_stage_schema extends backup_ui_stage {
 
     /**
      * Schema stage constructor
-     * @param backup_moodleform $ui
+     * @param backup_ui $ui
+     * @param array $params
      */
-    public function __construct(backup_ui $ui, array $params=null) {
+    public function __construct(backup_ui $ui, array $params = null) {
         $this->stage = backup_ui::STAGE_SCHEMA;
         parent::__construct($ui, $params);
     }
+
     /**
      * Processes the schema stage
      *
-     * @param backup_moodleform|null $form
+     * @param base_moodleform $form
      * @return int The number of changes the user made
      */
     public function process(base_moodleform $form = null) {
         $form = $this->initialise_stage_form();
-        // Check it wasn't cancelled
+        // Check it wasn't cancelled.
         if ($form->is_cancelled()) {
             $this->ui->cancel_process();
         }
 
-        // Check it has been submit
+        // Check it has been submit.
         $data = $form->get_data();
         if ($data && confirm_sesskey()) {
-            // Get the tasks into a var so we can iterate by reference
+            // Get the tasks into a var so we can iterate by reference.
             $tasks = $this->ui->get_tasks();
             $changes = 0;
-            // Iterate all tasks by reference
+            // Iterate all tasks by reference.
             foreach ($tasks as &$task) {
-                // We are only interested in schema settings
+                // We are only interested in schema settings.
                 if (!($task instanceof backup_root_task)) {
-                    // Store as a variable so we can iterate by reference
+                    // Store as a variable so we can iterate by reference.
                     $settings = $task->get_settings();
-                    // Iterate by reference
+                    // Iterate by reference.
                     foreach ($settings as &$setting) {
                         $name = $setting->get_ui_name();
                         if (isset($data->$name) &&  $data->$name != $setting->get_value()) {
@@ -266,12 +279,13 @@ class backup_ui_stage_schema extends backup_ui_stage {
                     }
                 }
             }
-            // Return the number of changes the user made
+            // Return the number of changes the user made.
             return $changes;
         } else {
             return false;
         }
     }
+
     /**
      * Creates the backup_schema_form instance for this stage
      *
@@ -297,24 +311,24 @@ class backup_ui_stage_schema extends backup_ui_stage {
             foreach ($tasks as $task) {
                 if (!($task instanceof backup_root_task)) {
                     if (!$courseheading) {
-                        // If we havn't already display a course heading to group nicely
+                        // If we haven't already display a course heading to group nicely.
                         $form->add_heading('coursesettings', get_string('includeactivities', 'backup'));
                         $courseheading = true;
                     }
-                    // First add each setting
+                    // First add each setting.
                     foreach ($task->get_settings() as $setting) {
                         $add_settings[] = array($setting, $task);
                     }
-                    // The add all the dependencies
+                    // The add all the dependencies.
                     foreach ($task->get_settings() as $setting) {
                         $dependencies[] = $setting;
                     }
                 } else if ($this->ui->enforce_changed_dependencies()) {
                     // Only show these settings if dependencies changed them.
-                    // Add a root settings heading to group nicely
+                    // Add a root settings heading to group nicely.
                     $form->add_heading('rootsettings', get_string('rootsettings', 'backup'));
                     // Iterate all settings and add them to the form as a fixed
-                    // setting. We only want schema settings to be editable
+                    // setting. We only want schema settings to be editable.
                     foreach ($task->get_settings() as $setting) {
                         if ($setting->get_name() != 'filename') {
                             $form->add_fixed_setting($setting, $task);
@@ -328,13 +342,13 @@ class backup_ui_stage_schema extends backup_ui_stage {
 
             // Add settings for tasks in batches of up to 1000. Adding settings
             // in larger batches improves performance, but if it takes too long,
-            // we won't be able to update the progress bar so the backup might
+            // we won't be able to update the progress bar so the backup might.
             // time out. 1000 is chosen to balance this.
             $numsettings = count($add_settings);
             $progress->start_progress('', ceil($numsettings / self::MAX_SETTINGS_BATCH));
             $start = 0;
             $done = 1;
-            while($start < $numsettings) {
+            while ($start < $numsettings) {
                 $length = min(self::MAX_SETTINGS_BATCH, $numsettings - $start);
                 $form->add_settings(array_slice($add_settings, $start, $length));
                 $start += $length;
@@ -364,40 +378,44 @@ class backup_ui_stage_schema extends backup_ui_stage {
  * On this stage the user reviews the setting for the backup and can change the filename
  * of the file that will be generated.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui_stage_confirmation extends backup_ui_stage {
+
     /**
      * Constructs the stage
      * @param backup_ui $ui
+     * @param array $params
      */
-    public function __construct($ui, array $params=null) {
+    public function __construct($ui, array $params = null) {
         $this->stage = backup_ui::STAGE_CONFIRMATION;
         parent::__construct($ui, $params);
     }
+
     /**
      * Processes the confirmation stage
      *
-     * @param backup_moodleform $form
+     * @param base_moodleform $form
      * @return int The number of changes the user made
      */
     public function process(base_moodleform $form = null) {
         $form = $this->initialise_stage_form();
-        // Check it hasn't been cancelled
+        // Check it hasn't been cancelled.
         if ($form->is_cancelled()) {
             $this->ui->cancel_process();
         }
 
         $data = $form->get_data();
         if ($data && confirm_sesskey()) {
-            // Collect into a variable so we can iterate by reference
+            // Collect into a variable so we can iterate by reference.
             $tasks = $this->ui->get_tasks();
             $changes = 0;
-            // Iterate each task by reference
+            // Iterate each task by reference.
             foreach ($tasks as &$task) {
                 if ($task instanceof backup_root_task) {
-                    // At this stage all we are interested in is the filename setting
+                    // At this stage all we are interested in is the filename setting.
                     $setting = $task->get_setting('filename');
                     $name = $setting->get_ui_name();
                     if (isset($data->$name) &&  $data->$name != $setting->get_value()) {
@@ -406,12 +424,13 @@ class backup_ui_stage_confirmation extends backup_ui_stage {
                     }
                 }
             }
-            // Return the number of changes the user made
+            // Return the number of changes the user made.
             return $changes;
         } else {
             return false;
         }
     }
+
     /**
      * Creates the backup_confirmation_form instance this stage requires
      *
@@ -420,7 +439,7 @@ class backup_ui_stage_confirmation extends backup_ui_stage {
     protected function initialise_stage_form() {
         global $PAGE;
         if ($this->stageform === null) {
-            // Get the form
+            // Get the form.
             $form = new backup_confirmation_form($this, $PAGE->url);
             $content = '';
             $courseheading = false;
@@ -449,16 +468,16 @@ class backup_ui_stage_confirmation extends backup_ui_stage {
 
             foreach ($tasks as $task) {
                 if ($task instanceof backup_root_task) {
-                    // If its a backup root add a root settings heading to group nicely
+                    // If its a backup root add a root settings heading to group nicely.
                     $form->add_heading('rootsettings', get_string('rootsettings', 'backup'));
                 } else if (!$courseheading) {
-                    // we havn't already add a course heading
+                    // We haven't already add a course heading.
                     $form->add_heading('coursesettings', get_string('includeditems', 'backup'));
                     $courseheading = true;
                 }
-                // Iterate all settings, doesnt need to happen by reference
+                // Iterate all settings, doesnt need to happen by reference.
                 foreach ($task->get_settings() as $setting) {
-                    // For this stage only the filename setting should be editable
+                    // For this stage only the filename setting should be editable.
                     if ($setting->get_name() != 'filename') {
                         $form->add_fixed_setting($setting, $task);
                     }
@@ -488,34 +507,47 @@ class backup_ui_stage_confirmation extends backup_ui_stage {
  * This highlights that we neither need a form nor a display method for this stage
  * we simply need to process.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui_stage_final extends backup_ui_stage {
+
     /**
      * Constructs the final stage
      * @param backup_ui $ui
+     * @param array $params
      */
-    public function __construct(backup_ui $ui, array $params=null) {
+    public function __construct(backup_ui $ui, array $params = null) {
         $this->stage = backup_ui::STAGE_FINAL;
         parent::__construct($ui, $params);
     }
+
     /**
      * Processes the final stage.
      *
      * In this case it ALWAYS passes processing to the previous stage (confirmation)
+     *
+     * @param base_moodleform $form
+     * @return bool
      */
-    public function process(base_moodleform $form=null) {
+    public function process(base_moodleform $form = null) {
         return true;
     }
+
     /**
      * should NEVER be called... throws an exception
      */
     protected function initialise_stage_form() {
         throw new backup_ui_exception('backup_ui_must_execute_first');
     }
+
     /**
      * should NEVER be called... throws an exception
+     *
+     * @throws backup_ui_exception always
+     * @param core_backup_renderer $renderer
+     * @return void
      */
     public function display(core_backup_renderer $renderer) {
         throw new backup_ui_exception('backup_ui_must_execute_first');
@@ -528,26 +560,31 @@ class backup_ui_stage_final extends backup_ui_stage {
  * At this stage everything is done and the user will be redirected to view the
  * backup file in the file browser.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class backup_ui_stage_complete extends backup_ui_stage_final {
+
     /**
      * The results of the backup execution
      * @var array
      */
     protected $results;
+
     /**
      * Constructs the complete backup stage
+     *
      * @param backup_ui $ui
-     * @param array|null $params
+     * @param array $params
      * @param array $results
      */
-    public function __construct(backup_ui $ui, array $params=null, array $results=null) {
+    public function __construct(backup_ui $ui, array $params = null, array $results = null) {
         $this->results = $results;
         parent::__construct($ui, $params);
         $this->stage = backup_ui::STAGE_COMPLETE;
     }
+
     /**
      * Displays the completed backup stage.
      *
@@ -559,20 +596,20 @@ class backup_ui_stage_complete extends backup_ui_stage_final {
      */
     public function display(core_backup_renderer $renderer) {
 
-        // Get the resulting stored_file record
+        // Get the resulting stored_file record.
         $type = $this->get_ui()->get_controller()->get_type();
         $courseid = $this->get_ui()->get_controller()->get_courseid();
         switch ($type) {
-        case 'activity':
-            $cmid = $this->get_ui()->get_controller()->get_id();
-            $cm = get_coursemodule_from_id(null, $cmid, $courseid);
-            $modcontext = context_module::instance($cm->id);
-            $restorerul = new moodle_url('/backup/restorefile.php', array('contextid'=>$modcontext->id));
-            break;
-        case 'course':
-        default:
-            $coursecontext = context_course::instance($courseid);
-            $restorerul = new moodle_url('/backup/restorefile.php', array('contextid'=>$coursecontext->id));
+            case 'activity':
+                $cmid = $this->get_ui()->get_controller()->get_id();
+                $cm = get_coursemodule_from_id(null, $cmid, $courseid);
+                $modcontext = context_module::instance($cm->id);
+                $restorerul = new moodle_url('/backup/restorefile.php', array('contextid' => $modcontext->id));
+                break;
+            case 'course':
+            default:
+                $coursecontext = context_course::instance($courseid);
+                $restorerul = new moodle_url('/backup/restorefile.php', array('contextid' => $coursecontext->id));
         }
 
         $output = '';
index 6f03ee4..b5c8159 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -20,7 +19,7 @@
  * as well as the individual forms that relate to the different stages the user
  * interface can exist within.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
@@ -30,40 +29,46 @@ defined('MOODLE_INTERNAL') || die();
 require_once($CFG->libdir . '/formslib.php');
 
 /**
- * Backup moodleform bridge
+ * Base moodleform bridge
  *
  * Ahhh the mighty moodleform bridge! Strong enough to take the weight of 682 full
  * grown african swallows all of whom have been carring coconuts for several days.
  * EWWWWW!!!!!!!!!!!!!!!!!!!!!!!!
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 abstract class base_moodleform extends moodleform {
+
     /**
      * The stage this form belongs to
      * @var base_ui_stage
      */
     protected $uistage = null;
+
     /**
      * True if we have a course div open, false otherwise
      * @var bool
      */
     protected $coursediv = false;
+
     /**
      * True if we have a section div open, false otherwise
      * @var bool
      */
     protected $sectiondiv = false;
+
     /**
      * True if we have an activity div open, false otherwise
      * @var bool
      */
     protected $activitydiv = false;
+
     /**
      * Creates the form
      *
-     * @param backup_ui_stage $uistage
+     * @param base_ui_stage $uistage
      * @param moodle_url|string $action
      * @param mixed $customdata
      * @param string $method get|post
@@ -71,7 +76,8 @@ abstract class base_moodleform extends moodleform {
      * @param array $attributes
      * @param bool $editable
      */
-    function __construct(base_ui_stage $uistage, $action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true) {
+    public function __construct(base_ui_stage $uistage, $action = null, $customdata = null, $method = 'post',
+                                $target = '', $attributes = null, $editable = true) {
         $this->uistage = $uistage;
         // Add a class to the attributes to prevent the default collapsible behaviour.
         if (!$attributes) {
@@ -83,10 +89,11 @@ abstract class base_moodleform extends moodleform {
         }
         parent::__construct($action, $customdata, $method, $target, $attributes, $editable);
     }
+
     /**
      * The standard form definition... obviously not much here
      */
-    function definition() {
+    public function definition() {
         $ui = $this->uistage->get_ui();
         $mform = $this->_form;
         $mform->setDisableShortforms();
@@ -96,7 +103,7 @@ abstract class base_moodleform extends moodleform {
         $mform->setType($ui->get_name(), PARAM_ALPHANUM);
         $params = $this->uistage->get_params();
         if (is_array($params) && count($params) > 0) {
-            foreach ($params as $name=>$value) {
+            foreach ($params as $name => $value) {
                 // TODO: Horrible hack, but current backup ui structure does not allow
                 // to make this easy (only changing params to objects that would be
                 // possible. MDL-38735.
@@ -118,17 +125,22 @@ abstract class base_moodleform extends moodleform {
      * to add elements on the fly.
      * @global moodle_page $PAGE
      */
-    function definition_after_data() {
-        $buttonarray=array();
-        $buttonarray[] = $this->_form->createElement('submit', 'submitbutton', get_string($this->uistage->get_ui()->get_name().'stage'.$this->uistage->get_stage().'action', 'backup'), array('class'=>'proceedbutton'));
+    public function definition_after_data() {
+        $buttonarray = array();
+        $buttonarray[] = $this->_form->createElement(
+            'submit',
+            'submitbutton',
+            get_string($this->uistage->get_ui()->get_name().'stage'.$this->uistage->get_stage().'action', 'backup'),
+            array('class' => 'proceedbutton')
+        );
         if (!$this->uistage->is_first_stage()) {
-            $buttonarray[] = $this->_form->createElement('submit', 'previous', get_string('previousstage','backup'));
+            $buttonarray[] = $this->_form->createElement('submit', 'previous', get_string('previousstage', 'backup'));
         } else if ($this->uistage instanceof backup_ui_stage) {
             // Only display the button on the first stage of backup, they only place where it has an effect.
             $buttonarray[] = $this->_form->createElement('submit', 'oneclickbackup', get_string('jumptofinalstep', 'backup'),
                 array('class' => 'oneclickbackup'));
         }
-        $buttonarray[] = $this->_form->createElement('cancel', 'cancel', get_string('cancel'), array('class'=>'confirmcancel'));
+        $buttonarray[] = $this->_form->createElement('cancel', 'cancel', get_string('cancel'), array('class' => 'confirmcancel'));
         $this->_form->addGroup($buttonarray, 'buttonar', '', array(' '), false);
         $this->_form->closeHeaderBefore('buttonar');
 
@@ -138,7 +150,7 @@ abstract class base_moodleform extends moodleform {
     /**
      * Closes any open divs
      */
-    function close_task_divs() {
+    public function close_task_divs() {
         if ($this->activitydiv) {
             $this->_form->addElement('html', html_writer::end_tag('div'));
             $this->activitydiv = false;
@@ -152,14 +164,17 @@ abstract class base_moodleform extends moodleform {
             $this->coursediv = false;
         }
     }
+
     /**
      * Adds the backup_setting as a element to the form
      * @param backup_setting $setting
+     * @param base_task $task
      * @return bool
      */
-    function add_setting(backup_setting $setting, base_task $task=null) {
+    public function add_setting(backup_setting $setting, base_task $task = null) {
         return $this->add_settings(array(array($setting, $task)));
     }
+
     /**
      * Adds multiple backup_settings as elements to the form
      * @param array $settingstasks Consists of array($setting, $task) elements
@@ -177,10 +192,10 @@ abstract class base_moodleform extends moodleform {
                 continue;
             }
 
-            // First add the formatting for this setting
+            // First add the formatting for this setting.
             $this->add_html_formatting($setting);
 
-            // Then call the add method with the get_element_properties array
+            // Then call the add method with the get_element_properties array.
             call_user_func_array(array($this->_form, 'addElement'), $setting->get_ui()->get_element_properties($task, $OUTPUT));
             $this->_form->setType($setting->get_ui_name(), $setting->get_param_validation());
             $defaults[$setting->get_ui_name()] = $setting->get_value();
@@ -193,14 +208,16 @@ abstract class base_moodleform extends moodleform {
         $this->_form->setDefaults($defaults);
         return true;
     }
+
     /**
      * Adds a heading to the form
      * @param string $name
      * @param string $text
      */
-    function add_heading($name , $text) {
+    public function add_heading($name , $text) {
         $this->_form->addElement('header', $name, $text);
     }
+
     /**
      * Adds HTML formatting for the given backup setting, needed to group/segment
      * correctly.
@@ -208,8 +225,8 @@ abstract class base_moodleform extends moodleform {
      */
     protected function add_html_formatting(backup_setting $setting) {
         $mform = $this->_form;
-        $isincludesetting = (strpos($setting->get_name(), '_include')!==false);
-        if ($isincludesetting && $setting->get_level() != backup_setting::ROOT_LEVEL)  {
+        $isincludesetting = (strpos($setting->get_name(), '_include') !== false);
+        if ($isincludesetting && $setting->get_level() != backup_setting::ROOT_LEVEL) {
             switch ($setting->get_level()) {
                 case backup_setting::COURSE_LEVEL:
                     if ($this->activitydiv) {
@@ -223,8 +240,8 @@ abstract class base_moodleform extends moodleform {
                     if ($this->coursediv) {
                         $this->_form->addElement('html', html_writer::end_tag('div'));
                     }
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'grouped_settings course_level')));
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'include_setting course_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'grouped_settings course_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'include_setting course_level')));
                     $this->coursediv = true;
                     break;
                 case backup_setting::SECTION_LEVEL:
@@ -235,46 +252,51 @@ abstract class base_moodleform extends moodleform {
                     if ($this->sectiondiv) {
                         $this->_form->addElement('html', html_writer::end_tag('div'));
                     }
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'grouped_settings section_level')));
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'include_setting section_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'grouped_settings section_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'include_setting section_level')));
                     $this->sectiondiv = true;
                     break;
                 case backup_setting::ACTIVITY_LEVEL:
                     if ($this->activitydiv) {
                         $this->_form->addElement('html', html_writer::end_tag('div'));
                     }
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'grouped_settings activity_level')));
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'include_setting activity_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'grouped_settings activity_level')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'include_setting activity_level')));
                     $this->activitydiv = true;
                     break;
                 default:
-                    $mform->addElement('html', html_writer::start_tag('div', array('class'=>'normal_setting')));
+                    $mform->addElement('html', html_writer::start_tag('div', array('class' => 'normal_setting')));
                     break;
             }
         } else if ($setting->get_level() == backup_setting::ROOT_LEVEL) {
-            $mform->addElement('html', html_writer::start_tag('div', array('class'=>'root_setting')));
+            $mform->addElement('html', html_writer::start_tag('div', array('class' => 'root_setting')));
         } else {
-            $mform->addElement('html', html_writer::start_tag('div', array('class'=>'normal_setting')));
+            $mform->addElement('html', html_writer::start_tag('div', array('class' => 'normal_setting')));
         }
     }
+
     /**
      * Adds a fixed or static setting to the form
      * @param backup_setting $setting
+     * @param base_task $task
      */
-    function add_fixed_setting(backup_setting $setting, base_task $task) {
+    public function add_fixed_setting(backup_setting $setting, base_task $task) {
         global $OUTPUT;
         $settingui = $setting->get_ui();
         if ($setting->get_visibility() == backup_setting::VISIBLE) {
             $this->add_html_formatting($setting);
             switch ($setting->get_status()) {
                 case backup_setting::LOCKED_BY_PERMISSION:
-                    $icon = ' '.$OUTPUT->pix_icon('i/permissionlock', get_string('lockedbypermission', 'backup'), 'moodle', array('class'=>'smallicon lockedicon permissionlock'));
+                    $icon = ' '.$OUTPUT->pix_icon('i/permissionlock', get_string('lockedbypermission', 'backup'), 'moodle',
+                            array('class' => 'smallicon lockedicon permissionlock'));
                     break;
                 case backup_setting::LOCKED_BY_CONFIG:
-                    $icon = ' '.$OUTPUT->pix_icon('i/configlock', get_string('lockedbyconfig', 'backup'), 'moodle', array('class'=>'smallicon lockedicon configlock'));
+                    $icon = ' '.$OUTPUT->pix_icon('i/configlock', get_string('lockedbyconfig', 'backup'), 'moodle',
+                            array('class' => 'smallicon lockedicon configlock'));
                     break;
                 case backup_setting::LOCKED_BY_HIERARCHY:
-                    $icon = ' '.$OUTPUT->pix_icon('i/hierarchylock', get_string('lockedbyhierarchy', 'backup'), 'moodle', array('class'=>'smallicon lockedicon configlock'));
+                    $icon = ' '.$OUTPUT->pix_icon('i/hierarchylock', get_string('lockedbyhierarchy', 'backup'), 'moodle',
+                            array('class' => 'smallicon lockedicon configlock'));
                     break;
                 default:
                     $icon = '';
@@ -291,18 +313,20 @@ abstract class base_moodleform extends moodleform {
         $this->_form->addElement('hidden', $settingui->get_name(), $settingui->get_value());
         $this->_form->setType($settingui->get_name(), $settingui->get_param_validation());
     }
+
     /**
      * Adds dependencies to the form recursively
      *
      * @param backup_setting $setting
      */
-    function add_dependencies(backup_setting $setting) {
+    public function add_dependencies(backup_setting $setting) {
         $mform = $this->_form;
-        // Apply all dependencies for backup
-        foreach ($setting->get_my_dependency_properties() as $key=>$dependency) {
+        // Apply all dependencies for backup.
+        foreach ($setting->get_my_dependency_properties() as $key => $dependency) {
             call_user_func_array(array($this->_form, 'disabledIf'), $dependency);
         }
     }
+
     /**
      * Returns true if the form was cancelled, false otherwise
      * @return bool
@@ -352,7 +376,11 @@ abstract class base_moodleform extends moodleform {
         $config->yesLabel = get_string('confirmcancelyes', 'backup');
         $config->noLabel = get_string('confirmcancelno', 'backup');
         $config->closeButtonTitle = get_string('close', 'editor');
-        $PAGE->requires->yui_module('moodle-backup-confirmcancel', 'M.core_backup.confirmcancel.watch_cancel_buttons', array($config));
+        $PAGE->requires->yui_module(
+            'moodle-backup-confirmcancel',
+            'M.core_backup.confirmcancel.watch_cancel_buttons',
+            array($config)
+        );
 
         // Get list of module types on course.
         $modinfo = get_fast_modinfo($COURSE);
index efd74a2..abdd018 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -18,7 +17,7 @@
 /**
  * This file contains the backup user interface class
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
  * The backup user interface class manages the user interface and backup for
  * Moodle.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 abstract class base_ui {
     /**
      * The progress of this instance of the backup ui class
+     * It is in the initial stage.
      */
     const PROGRESS_INTIAL = 0;
+
+    /**
+     * The progress of this instance of the backup ui class
+     * It is processed.
+     */
     const PROGRESS_PROCESSED = 1;
+
+    /**
+     * The progress of this instance of the backup ui class
+     * It is saved.
+     */
     const PROGRESS_SAVED = 2;
+
+    /**
+     * The progress of this instance of the backup ui class
+     * It has been executed.
+     */
     const PROGRESS_EXECUTED = 3;
+
     /**
      * The controller
      * @var backup_controller|restore_controller
      */
     protected $controller;
+
     /**
      * The current stage
      * @var base_ui_stage
      */
     protected $stage;
+
     /**
      * The current progress of the UI
      * @var int One of self::PROGRESS_*
      */
     protected $progress;
+
     /**
      * The number of changes made by dependency enforcement
      * @var int
@@ -64,14 +84,16 @@ abstract class base_ui {
     /**
      * Yay for constructors
      * @param backup_controller $controller
+     * @param array $params
      */
-    public function __construct($controller, array $params=null) {
+    public function __construct($controller, array $params = null) {
         $this->controller = $controller;
         $this->progress = self::PROGRESS_INTIAL;
         $this->stage = $this->initialise_stage(null, $params);
-        // Process UI event before to be safe
+        // Process UI event before to be safe.
         $this->controller->process_ui_event();
     }
+
     /**
      * Destorys the backup controller and the loaded stage.
      */
@@ -83,16 +105,20 @@ abstract class base_ui {
         unset($this->stage);
 
     }
+
     /**
      * Intialises what ever stage is requested. If none are requested we check
      * params for 'stage' and default to initial
      *
      * @param int|null $stage The desired stage to intialise or null for the default
+     * @param array $params
      * @return base_ui_stage
      */
-    abstract protected function initialise_stage($stage = null, array $params=null);
+    abstract protected function initialise_stage($stage = null, array $params = null);
+
     /**
      * This processes the current stage of the backup
+     * @throws backup_ui_exception
      * @return bool
      */
     public function process() {
@@ -106,22 +132,24 @@ abstract class base_ui {
             return false;
         }
 
-        // Process the stage
+        // Process the stage.
         $processoutcome = $this->stage->process();
 
         if ($processoutcome !== false) {
             $this->stage = $this->initialise_stage($this->stage->get_next_stage(), $this->stage->get_params());
         }
 
-        // Process UI event after to check changes are valid
+        // Process UI event after to check changes are valid.
         $this->controller->process_ui_event();
         return $processoutcome;
     }
+
     /**
      * Saves the backup controller.
      *
      * Once this has been called nothing else can be changed in the controller.
      *
+     * @throws base_ui_exception
      * @return bool
      */
     public function save_controller() {
@@ -129,17 +157,19 @@ abstract class base_ui {
             throw new base_ui_exception('backupuialreadysaved');
         }
         $this->progress = self::PROGRESS_SAVED;
-        // First enforce dependencies
+        // First enforce dependencies.
         $this->enforce_dependencies();
-        // Process UI event after to check any changes are valid
+        // Process UI event after to check any changes are valid.
         $this->controller->process_ui_event();
-        // Save the controller
+        // Save the controller.
         $this->controller->save_controller();
         return true;
     }
+
     /**
      * Displays the UI for the backup!
      *
+     * @throws base_ui_exception
      * @param core_backup_renderer $renderer
      * @return string HTML code to echo
      */
@@ -149,6 +179,7 @@ abstract class base_ui {
         }
         return $this->stage->display($renderer);
     }
+
     /**
      * Gets all backup tasks from the controller
      * @return array Array of backup_task
@@ -158,6 +189,7 @@ abstract class base_ui {
         $tasks = $plan->get_tasks();
         return $tasks;
     }
+
     /**
      * Gets the stage we are on
      * @return int
@@ -165,6 +197,7 @@ abstract class base_ui {
     public function get_stage() {
         return $this->stage->get_stage();
     }
+
     /**
      * Gets the name of the stage we are on
      * @return string
@@ -172,44 +205,48 @@ abstract class base_ui {
     public function get_stage_name() {
         return $this->stage->get_name();
     }
+
     /**
      * Gets the backup id from the controller
      * @return string
      */
     abstract public function get_uniqueid();
+
     /**
      * Executes the backup plan
      * @return bool
      */
     abstract public function execute();
+
     /**
      * Enforces dependencies on all settings. Call before save
      * @return bool True if dependencies were enforced and changes were made
      */
     protected function enforce_dependencies() {
-        // Get the plan
+        // Get the plan.
         $plan = $this->controller->get_plan();
-        // Get the tasks as a var so we can iterate by reference
+        // Get the tasks as a var so we can iterate by reference.
         $tasks = $plan->get_tasks();
         $changes = 0;
         foreach ($tasks as &$task) {
-            // Store as a var so we can iterate by reference
+            // Store as a var so we can iterate by reference.
             $settings = $task->get_settings();
             foreach ($settings as &$setting) {
-                // Get all dependencies for iteration by reference
+                // Get all dependencies for iteration by reference.
                 $dependencies = $setting->get_dependencies();
                 foreach ($dependencies as &$dependency) {
-                    // Enforce each dependency
+                    // Enforce each dependency.
                     if ($dependency->enforce()) {
                         $changes++;
                     }
                 }
             }
         }
-        // Store the number of settings that changed through enforcement
+        // Store the number of settings that changed through enforcement.
         $this->dependencychanges = $changes;
-        return ($changes>0);
+        return ($changes > 0);
     }
+
     /**
      * Returns true if enforce_dependencies changed any settings
      * @return bool
@@ -217,11 +254,14 @@ abstract class base_ui {
     public function enforce_changed_dependencies() {
         return ($this->dependencychanges > 0);
     }
+
     /**
      * Loads the backup controller if we are tracking one
+     * @throws coding_exception
+     * @param string|bool $uniqueid
      * @return backup_controller|false
      */
-    public static function load_controller($uniqueid=false) {
+    public static function load_controller($uniqueid = false) {
         throw new coding_exception('load_controller() method needs to be overridden in each subclass of base_ui');
     }
 
@@ -230,11 +270,11 @@ abstract class base_ui {
      */
     public function cancel_process() {
         global $PAGE;
-        // Determine the appropriate URL to redirect the user to
+        // Determine the appropriate URL to redirect the user to.
         if ($PAGE->context->contextlevel == CONTEXT_MODULE && $PAGE->cm !== null) {
-            $relevanturl = new moodle_url('/mod/'.$PAGE->cm->modname.'/view.php', array('id'=>$PAGE->cm->id));
+            $relevanturl = new moodle_url('/mod/'.$PAGE->cm->modname.'/view.php', array('id' => $PAGE->cm->id));
         } else {
-            $relevanturl = new moodle_url('/course/view.php', array('id'=>$PAGE->course->id));
+            $relevanturl = new moodle_url('/course/view.php', array('id' => $PAGE->course->id));
         }
         redirect($relevanturl);
     }
@@ -258,6 +298,11 @@ abstract class base_ui {
     public function get_type() {
         return $this->controller->get_type();
     }
+
+    /**
+     * Returns the controller object.
+     * @return backup_controller|restore_controller
+     */
     public function get_controller() {
         return $this->controller;
     }
@@ -271,6 +316,7 @@ abstract class base_ui {
     /**
      * Gets the requested setting
      * @param string $name
+     * @param bool $default
      * @return mixed
      */
     public function get_setting($name, $default = false) {
@@ -285,6 +331,7 @@ abstract class base_ui {
      * Gets the value for the requested setting
      *
      * @param string $name
+     * @param bool $default
      * @return mixed
      */
     public function get_setting_value($name, $default = false) {
@@ -296,12 +343,24 @@ abstract class base_ui {
         }
     }
 
+    /**
+     * Returns the name of this stage.
+     * @return mixed
+     */
     abstract public function get_name();
 
+    /**
+     * Returns the first stage ID.
+     * @return mixed
+     */
     abstract public function get_first_stage_id();
 }
 
 /**
  * Backup user interface exception. Modelled off the backup_exception class
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class base_ui_exception extends backup_exception {}
index 85f99a2..6cd368a 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -20,9 +19,9 @@
  *
  * This file contains the classes required to manage the stages that make up the
  * backup user interface.
- * These will be primarily operated a {@see backup_ui} instance.
+ * These will be primarily operated a {@link base_ui} instance.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
  *  - process : To process the stage
  *  - initialise_stage_form : To get a backup_moodleform instance for the stage
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 abstract class base_ui_stage {
+
     /**
      * The current stage
      * @var int
      */
     protected $stage = 1;
+
     /**
      * The backuck UI object
      * @var base_ui
      */
     protected $ui;
+
     /**
      * The moodleform for this stage
      * @var base_moodleform
      */
     protected $stageform = null;
+
     /**
      * Custom form params that will be added as hidden inputs
+     * @var array
      */
     protected $params = null;
+
     /**
+     * Constructor
      *
      * @param base_ui $ui
+     * @param array $params
      */
-    public function __construct(base_ui $ui, array $params=null) {
+    public function __construct(base_ui $ui, array $params = null) {
         $this->ui = $ui;
         $this->params = $params;
     }
+
     /**
      * Returns the custom params for this stage
      * @return array|null
@@ -73,6 +82,7 @@ abstract class base_ui_stage {
     final public function get_params() {
         return $this->params;
     }
+
     /**
      * The current stage
      * @return int
@@ -80,27 +90,31 @@ abstract class base_ui_stage {
     final public function get_stage() {
         return $this->stage;
     }
+
     /**
      * The next stage
      * @return int
      */
     public function get_next_stage() {
-        return floor($this->stage*2);
+        return floor($this->stage * 2);
     }
+
     /**
      * The previous stage
      * @return int
      */
     final public function get_prev_stage() {
-        return floor($this->stage/2);
+        return floor($this->stage / 2);
     }
+
     /**
      * The name of this stage
      * @return string
      */
     public function get_name() {
-        return get_string('currentstage'.$this->stage,'backup');
+        return get_string('currentstage' . $this->stage, 'backup');
     }
+
     /**
      * The backup id from the backup controller
      * @return string
@@ -121,8 +135,8 @@ abstract class base_ui_stage {
     public function display(core_backup_renderer $renderer) {
 
         $form = $this->initialise_stage_form();
-        // a nasty hack follows to work around the sad fact that moodle quickforms
-        // do not allow to actually return the HTML content, just to echo it
+        // A nasty hack follows to work around the sad fact that moodle quickforms
+        // do not allow to actually return the HTML content, just to echo it.
         flush();
         ob_start();
         $form->display();
@@ -138,9 +152,10 @@ abstract class base_ui_stage {
      * This must be overridden by every stage as it will be different for every stage
      *
      * @abstract
-     * @param backup_moodleform|null $form
+     * @param base_moodleform $form
      */
-    abstract public function process(base_moodleform $form=null);
+    abstract public function process(base_moodleform $form = null);
+
     /**
      * Creates an instance of the correct moodleform properly populated and all
      * dependencies instantiated
@@ -150,10 +165,18 @@ abstract class base_ui_stage {
      */
     abstract protected function initialise_stage_form();
 
+    /**
+     * Returns the base UI class
+     * @return base_ui
+     */
     final public function get_ui() {
         return $this->ui;
     }
 
+    /**
+     * Returns true if this stage is the first stage.
+     * @return bool
+     */
     public function is_first_stage() {
         return $this->stage == 1;
     }
index 7edcc2e..18384c6 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
  * and functionality in order to customise the backup UI for the purposes of
  * import.
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 /**
  * Import UI class
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_ui extends backup_ui {
+
     /**
      * Customises the backup progress bar
      *
      * @global moodle_page $PAGE
-     * @return array
+     * @return array[] An array of arrays
      */
     public function get_progress_bar() {
         global $PAGE;
@@ -42,19 +46,25 @@ class import_ui extends backup_ui {
         $items = array();
         while ($stage > 0) {
             $classes = array('backup_stage');
-            if (floor($stage/2) == $currentstage) {
+            if (floor($stage / 2) == $currentstage) {
                 $classes[] = 'backup_stage_next';
             } else if ($stage == $currentstage) {
                 $classes[] = 'backup_stage_current';
             } else if ($stage < $currentstage) {
                 $classes[] = 'backup_stage_complete';
             }
-            $item = array('text' => strlen(decbin($stage*2)).'. '.get_string('importcurrentstage'.$stage, 'backup'),'class' => join(' ', $classes));
-            if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && (!self::$skipcurrentstage || $stage*2 != $currentstage)) {
-                $item['link'] = new moodle_url($PAGE->url, $this->stage->get_params() + array('backup'=>$this->get_backupid(), 'stage'=>$stage));
+            $item = array(
+                'text' => strlen(decbin($stage * 2)).'. '.get_string('importcurrentstage'.$stage, 'backup'),
+                'class' => join(' ', $classes)
+            );
+            if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && (!self::$skipcurrentstage || $stage * 2 != $currentstage)) {
+                $item['link'] = new moodle_url(
+                    $PAGE->url,
+                    $this->stage->get_params() + array('backup' => $this->get_backupid(), 'stage' => $stage)
+                );
             }
             array_unshift($items, $item);
-            $stage = floor($stage/2);
+            $stage = floor($stage / 2);
         }
         $selectorlink = new moodle_url($PAGE->url, $this->stage->get_params());
         $selectorlink->remove_params('importid');
@@ -70,9 +80,10 @@ class import_ui extends backup_ui {
      * params for 'stage' and default to initial
      *
      * @param int|null $stage The desired stage to intialise or null for the default
+     * @param array $params
      * @return backup_ui_stage_initial|backup_ui_stage_schema|backup_ui_stage_confirmation|backup_ui_stage_final
      */
-    protected function initialise_stage($stage = null, array $params=null) {
+    protected function initialise_stage($stage = null, array $params = null) {
         if ($stage == null) {
             $stage = optional_param('stage', self::STAGE_INITIAL, PARAM_INT);
         }
@@ -102,11 +113,19 @@ class import_ui extends backup_ui {
 
 /**
  * Extends the initial stage
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_ui_stage_inital extends backup_ui_stage_initial {}
 
 /**
  * Extends the schema stage
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_ui_stage_schema extends backup_ui_stage_schema {}
 
@@ -115,6 +134,10 @@ class import_ui_stage_schema extends backup_ui_stage_schema {}
  *
  * This overides the initialise stage form to remove the filenamesetting heading
  * as it is always hidden.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_ui_stage_confirmation extends backup_ui_stage_confirmation {
 
@@ -145,14 +168,16 @@ class import_ui_stage_confirmation extends backup_ui_stage_confirmation {
         } else {
             $elements = $form->get_element('buttonar')->getElements();
             foreach ($elements as &$element) {
-                if ($element->getName()=='submitbutton') {
-                    $element->setValue(get_string('import'.$this->get_ui()->get_name().'stage'.$this->get_stage().'action', 'backup'));
+                if ($element->getName() == 'submitbutton') {
+                    $element->setValue(
+                        get_string('import'.$this->get_ui()->get_name().'stage'.$this->get_stage().'action', 'backup')
+                    );
                 }
             }
         }
 
-        // a nasty hack follows to work around the sad fact that moodle quickforms
-        // do not allow to actually return the HTML content, just to echo it
+        // A nasty hack follows to work around the sad fact that moodle quickforms
+        // do not allow to actually return the HTML content, just to echo it.
         flush();
         ob_start();
         $form->display();
@@ -164,11 +189,19 @@ class import_ui_stage_confirmation extends backup_ui_stage_confirmation {
 }
 /**
  * Overrides the final stage.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_ui_stage_final extends backup_ui_stage_final {}
 
 /**
  * Extends the restore course search to search for import courses.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class import_course_search extends restore_course_search {
     /**
index e705270..a3901e5 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -18,7 +17,7 @@
 /**
  * This file contains backup and restore output renderers
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
  *
  * Can be retrieved with the following code:
  * <?php
- * $renderer = $PAGE->get_renderer('core','backup');
+ * $renderer = $PAGE->get_renderer('core', 'backup');
  * ?>
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class core_backup_renderer extends plugin_renderer_base {
+
     /**
-     * Renderers a progress bar for the backup or restore given the items that
-     * make it up.
+     * Renderers a progress bar for the backup or restore given the items that make it up.
+     *
      * @param array $items An array of items
      * @return string
      */
@@ -53,7 +54,7 @@ class core_backup_renderer extends plugin_renderer_base {
                 $item = html_writer::tag('span', $text, $item);
             }
         }
-        return html_writer::tag('div', join(get_separator(), $items), array('class'=>'backup_progress clearfix'));
+        return html_writer::tag('div', join(get_separator(), $items), array('class' => 'backup_progress clearfix'));
     }
 
     /**
@@ -75,11 +76,12 @@ class core_backup_renderer extends plugin_renderer_base {
 
     /**
      * Prints a dependency notification
+     *
      * @param string $message
      * @return string
      */
     public function dependency_notification($message) {
-        return html_writer::tag('div', $message, array('class'=>'notification dependencies_enforced'));
+        return html_writer::tag('div', $message, array('class' => 'notification dependencies_enforced'));
     }
 
     /**
@@ -93,23 +95,23 @@ class core_backup_renderer extends plugin_renderer_base {
         $yestick = $this->output->pix_icon('i/valid', get_string('yes'));
         $notick = $this->output->pix_icon('i/invalid', get_string('no'));
 
-        $html  = html_writer::start_tag('div', array('class'=>'backup-restore'));
+        $html  = html_writer::start_tag('div', array('class' => 'backup-restore'));
 
-        $html .= html_writer::start_tag('div', array('class'=>'backup-section'));
-        $html .= $this->output->heading(get_string('backupdetails', 'backup'), 2, array('class'=>'header'));
+        $html .= html_writer::start_tag('div', array('class' => 'backup-section'));
+        $html .= $this->output->heading(get_string('backupdetails', 'backup'), 2, array('class' => 'header'));
         $html .= $this->backup_detail_pair(get_string('backuptype', 'backup'), get_string('backuptype'.$details->type, 'backup'));
         $html .= $this->backup_detail_pair(get_string('backupformat', 'backup'), get_string('backupformat'.$details->format, 'backup'));
         $html .= $this->backup_detail_pair(get_string('backupmode', 'backup'), get_string('backupmode'.$details->mode, 'backup'));
         $html .= $this->backup_detail_pair(get_string('backupdate', 'backup'), userdate($details->backup_date));
         $html .= $this->backup_detail_pair(get_string('moodleversion', 'backup'),
-                html_writer::tag('span', $details->moodle_release, array('class'=>'moodle_release')).
-                html_writer::tag('span', '['.$details->moodle_version.']', array('class'=>'moodle_version sub-detail')));
+                html_writer::tag('span', $details->moodle_release, array('class' => 'moodle_release')).
+                html_writer::tag('span', '['.$details->moodle_version.']', array('class' => 'moodle_version sub-detail')));
         $html .= $this->backup_detail_pair(get_string('backupversion', 'backup'),
-                html_writer::tag('span', $details->backup_release, array('class'=>'moodle_release')).
-                html_writer::tag('span', '['.$details->backup_version.']', array('class'=>'moodle_version sub-detail')));
+                html_writer::tag('span', $details->backup_release, array('class' => 'moodle_release')).
+                html_writer::tag('span', '['.$details->backup_version.']', array('class' => 'moodle_version sub-detail')));
         $html .= $this->backup_detail_pair(get_string('originalwwwroot', 'backup'),
-                html_writer::tag('span', $details->original_wwwroot, array('class'=>'originalwwwroot')).
-                html_writer::tag('span', '['.$details->original_site_identifier_hash.']', array('class'=>'sitehash sub-detail')));
+                html_writer::tag('span', $details->original_wwwroot, array('class' => 'originalwwwroot')).
+                html_writer::tag('span', '['.$details->original_site_identifier_hash.']', array('class' => 'sitehash sub-detail')));
         if (!empty($details->include_file_references_to_external_content)) {
             $message = '';
             if (backup_general_helper::backup_is_samesite($details)) {
@@ -122,46 +124,50 @@ class core_backup_renderer extends plugin_renderer_base {
 
         $html .= html_writer::end_tag('div');
 
-        $html .= html_writer::start_tag('div', array('class'=>'backup-section settings-section'));
-        $html .= $this->output->heading(get_string('backupsettings', 'backup'), 2, array('class'=>'header'));
-        foreach ($details->root_settings as $label=>$value) {
+        $html .= html_writer::start_tag('div', array('class' => 'backup-section settings-section'));
+        $html .= $this->output->heading(get_string('backupsettings', 'backup'), 2, array('class' => 'header'));
+        foreach ($details->root_settings as $label => $value) {
             if ($label == 'filename' or $label == 'user_files') {
                 continue;
             }
-            $html .= $this->backup_detail_pair(get_string('rootsetting'.str_replace('_','',$label), 'backup'), $value?$yestick:$notick);
+            $html .= $this->backup_detail_pair(get_string('rootsetting'.str_replace('_', '', $label), 'backup'), $value ? $yestick : $notick);
         }
         $html .= html_writer::end_tag('div');
 
         if ($details->type === 'course') {
-            $html .= html_writer::start_tag('div', array('class'=>'backup-section'));
-            $html .= $this->output->heading(get_string('backupcoursedetails', 'backup'), 2, array('class'=>'header'));
+            $html .= html_writer::start_tag('div', array('class' => 'backup-section'));
+            $html .= $this->output->heading(get_string('backupcoursedetails', 'backup'), 2, array('class' => 'header'));
             $html .= $this->backup_detail_pair(get_string('coursetitle', 'backup'), $details->course->title);
             $html .= $this->backup_detail_pair(get_string('courseid', 'backup'), $details->course->courseid);
 
-            $html .= html_writer::start_tag('div', array('class'=>'backup-sub-section'));
-            $html .= $this->output->heading(get_string('backupcoursesections', 'backup'), 3, array('class'=>'subheader'));
-            foreach ($details->sections as $key=>$section) {
+            // Warning users about front page backups.
+            if ($details->original_course_format === 'site') {
+                $html .= $this->backup_detail_pair(get_string('type_format', 'plugin'), get_string('sitecourseformatwarning', 'backup'));
+            }
+            $html .= html_writer::start_tag('div', array('class' => 'backup-sub-section'));
+            $html .= $this->output->heading(get_string('backupcoursesections', 'backup'), 3, array('class' => 'subheader'));
+            foreach ($details->sections as $key => $section) {
                 $included = $key.'_included';
                 $userinfo = $key.'_userinfo';
                 if ($section->settings[$included] && $section->settings[$userinfo]) {
-                    $value = get_string('sectionincanduser','backup');
+                    $value = get_string('sectionincanduser', 'backup');
                 } else if ($section->settings[$included]) {
-                    $value = get_string('sectioninc','backup');
+                    $value = get_string('sectioninc', 'backup');
                 } else {
                     continue;
                 }
                 $html .= $this->backup_detail_pair(get_string('backupcoursesection', 'backup', $section->title), $value);
                 $table = null;
-                foreach ($details->activities as $activitykey=>$activity) {
+                foreach ($details->activities as $activitykey => $activity) {
                     if ($activity->sectionid != $section->sectionid) {
                         continue;
                     }
                     if (empty($table)) {
                         $table = new html_table();
-                        $table->head = array(get_string('module','backup'), get_string('title','backup'), get_string('userinfo','backup'));
+                        $table->head = array(get_string('module', 'backup'), get_string('title', 'backup'), get_string('userinfo', 'backup'));
                         $table->colclasses = array('modulename', 'moduletitle', 'userinfoincluded');
-                        $table->align = array('left','left', 'center');
-                        $table->attributes = array('class'=>'activitytable generaltable');
+                        $table->align = array('left', 'left', 'center');
+                        $table->attributes = array('class' => 'activitytable generaltable');
                         $table->data = array();
                     }
                     $name = get_string('pluginname', $activity->modulename);
@@ -169,11 +175,11 @@ class core_backup_renderer extends plugin_renderer_base {
                     $table->data[] = array(
                         $this->output->render($icon).$name,
                         $activity->title,
-                        ($activity->settings[$activitykey.'_userinfo'])?$yestick:$notick,
+                        ($activity->settings[$activitykey.'_userinfo']) ? $yestick : $notick,
                     );
                 }
                 if (!empty($table)) {
-                    $html .= $this->backup_detail_pair(get_string('sectionactivities','backup'), html_writer::table($table));
+                    $html .= $this->backup_detail_pair(get_string('sectionactivities', 'backup'), html_writer::table($table));
                 }
 
             }
@@ -240,7 +246,8 @@ class core_backup_renderer extends plugin_renderer_base {
      * @param int $currentcourse
      * @return string
      */
-    public function course_selector(moodle_url $nextstageurl, $wholecourse = true, restore_category_search $categories = null, restore_course_search $courses=null, $currentcourse = null) {
+    public function course_selector(moodle_url $nextstageurl, $wholecourse = true, restore_category_search $categories = null,
+                                    restore_course_search $courses = null, $currentcourse = null) {
         global $CFG, $PAGE;
         require_once($CFG->dirroot.'/course/lib.php');
 
@@ -258,20 +265,21 @@ class core_backup_renderer extends plugin_renderer_base {
 
         $form = html_writer::start_tag('form', array('method' => 'post', 'action' => $nextstageurl->out_omit_querystring(),
             'class' => 'mform'));
-        foreach ($nextstageurl->params() as $key=>$value) {
-            $form .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>$key, 'value'=>$value));
+        foreach ($nextstageurl->params() as $key => $value) {
+            $form .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => $key, 'value' => $value));
         }
 
         $hasrestoreoption = false;
 
-        $html  = html_writer::start_tag('div', array('class'=>'backup-course-selector backup-restore'));
+        $html  = html_writer::start_tag('div', array('class' => 'backup-course-selector backup-restore'));
         if ($wholecourse && !empty($categories) && ($categories->get_count() > 0 || $categories->get_search())) {
-            // New course
+            // New course.
             $hasrestoreoption = true;
             $html .= $form;
-            $html .= html_writer::start_tag('div', array('class'=>'bcs-new-course backup-section'));
-            $html .= $this->output->heading(get_string('restoretonewcourse', 'backup'), 2, array('class'=>'header'));
-            $html .= $this->backup_detail_input(get_string('restoretonewcourse', 'backup'), 'radio', 'target', backup::TARGET_NEW_COURSE, array('checked'=>'checked'));
+            $html .= html_writer::start_tag('div', array('class' => 'bcs-new-course backup-section'));
+            $html .= $this->output->heading(get_string('restoretonewcourse', 'backup'), 2, array('class' => 'header'));
+            $html .= $this->backup_detail_input(get_string('restoretonewcourse', 'backup'), 'radio', 'target',
+                backup::TARGET_NEW_COURSE, array('checked' => 'checked'));
             $selectacategoryhtml = $this->backup_detail_pair(get_string('selectacategory', 'backup'), $this->render($categories));
             // Display the category selection as required if the form was submitted but this data was not supplied.
             if ($missingdata && $target == backup::TARGET_NEW_COURSE) {
@@ -282,39 +290,45 @@ class core_backup_renderer extends plugin_renderer_base {
             } else {
                 $html .= $selectacategoryhtml;
             }
-            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))));
+            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('continue'))));
             $html .= html_writer::end_tag('div');
             $html .= html_writer::end_tag('form');
         }
 
         if ($wholecourse && !empty($currentcourse)) {
-            // Current course
+            // Current course.
             $hasrestoreoption = true;
             $html .= $form;
-            $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'targetid', 'value'=>$currentcourse));
-            $html .= html_writer::start_tag('div', array('class'=>'bcs-current-course backup-section'));
-            $html .= $this->output->heading(get_string('restoretocurrentcourse', 'backup'), 2, array('class'=>'header'));
-            $html .= $this->backup_detail_input(get_string('restoretocurrentcourseadding', 'backup'), 'radio', 'target', backup::TARGET_CURRENT_ADDING, array('checked'=>'checked'));
-            $html .= $this->backup_detail_input(get_string('restoretocurrentcoursedeleting', 'backup'), 'radio', 'target', backup::TARGET_CURRENT_DELETING);
-            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))));
+            $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'targetid', 'value' => $currentcourse));
+            $html .= html_writer::start_tag('div', array('class' => 'bcs-current-course backup-section'));
+            $html .= $this->output->heading(get_string('restoretocurrentcourse', 'backup'), 2, array('class' => 'header'));
+            $html .= $this->backup_detail_input(get_string('restoretocurrentcourseadding', 'backup'), 'radio', 'target',
+                backup::TARGET_CURRENT_ADDING, array('checked' => 'checked'));
+            $html .= $this->backup_detail_input(get_string('restoretocurrentcoursedeleting', 'backup'), 'radio', 'target',
+                backup::TARGET_CURRENT_DELETING);
+            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('continue'))));
             $html .= html_writer::end_tag('div');
             $html .= html_writer::end_tag('form');
         }
 
+        // If we are restoring an activity, then include the current course.
+        if (!$wholecourse) {
+            $courses->invalidate_results(); // Clean list of courses.
+            $courses->set_include_currentcourse();
+        }
         if (!empty($courses) && ($courses->get_count() > 0 || $courses->get_search())) {
-            // Existing course
+            // Existing course.
             $hasrestoreoption = true;
             $html .= $form;
-            $html .= html_writer::start_tag('div', array('class'=>'bcs-existing-course backup-section'));
-            $html .= $this->output->heading(get_string('restoretoexistingcourse', 'backup'), 2, array('class'=>'header'));
+            $html .= html_writer::start_tag('div', array('class' => 'bcs-existing-course backup-section'));
+            $html .= $this->output->heading(get_string('restoretoexistingcourse', 'backup'), 2, array('class' => 'header'));
             if ($wholecourse) {
-                $html .= $this->backup_detail_input(get_string('restoretoexistingcourseadding', 'backup'), 'radio', 'target', backup::TARGET_EXISTING_ADDING, array('checked'=>'checked'));
-                $html .= $this->backup_detail_input(get_string('restoretoexistingcoursedeleting', 'backup'), 'radio', 'target', backup::TARGET_EXISTING_DELETING);
+                $html .= $this->backup_detail_input(get_string('restoretoexistingcourseadding', 'backup'), 'radio', 'target',
+                    backup::TARGET_EXISTING_ADDING, array('checked' => 'checked'));
+                $html .= $this->backup_detail_input(get_string('restoretoexistingcoursedeleting', 'backup'), 'radio', 'target',
+                    backup::TARGET_EXISTING_DELETING);
             } else {
-                // We only allow restore adding to existing for now. Enforce it here.
-                $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'target', 'value'=>backup::TARGET_EXISTING_ADDING));
-                $courses->invalidate_results(); // Clean list of courses
-                $courses->set_include_currentcourse(); // Show current course in the list
+                $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'target', 'value' => backup::TARGET_EXISTING_ADDING));
             }
             $selectacoursehtml = $this->backup_detail_pair(get_string('selectacourse', 'backup'), $this->render($courses));
             // Display the course selection as required if the form was submitted but this data was not supplied.
@@ -326,13 +340,13 @@ class core_backup_renderer extends plugin_renderer_base {
             } else {
                 $html .= $selectacoursehtml;
             }
-            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))));
+            $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('continue'))));
             $html .= html_writer::end_tag('div');
             $html .= html_writer::end_tag('form');
         }
 
         if (!$hasrestoreoption) {
-            echo $this->output->notification(get_string('norestoreoptions','backup'));
+            echo $this->output->notification(get_string('norestoreoptions', 'backup'));
         }
 
         $html .= html_writer::end_tag('div');
@@ -346,18 +360,18 @@ class core_backup_renderer extends plugin_renderer_base {
      * @param import_course_search $courses
      * @return string
      */
-    public function import_course_selector(moodle_url $nextstageurl, import_course_search $courses=null) {
-        $html  = html_writer::start_tag('div', array('class'=>'import-course-selector backup-restore'));
-        $html .= html_writer::start_tag('form', array('method'=>'post', 'action'=>$nextstageurl->out_omit_querystring()));
-        foreach ($nextstageurl->params() as $key=>$value) {
-            $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>$key, 'value'=>$value));
+    public function import_course_selector(moodle_url $nextstageurl, import_course_search $courses = null) {
+        $html  = html_writer::start_tag('div', array('class' => 'import-course-selector backup-restore'));
+        $html .= html_writer::start_tag('form', array('method' => 'post', 'action' => $nextstageurl->out_omit_querystring()));
+        foreach ($nextstageurl->params() as $key => $value) {
+            $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => $key, 'value' => $value));
         }
         // We only allow import adding for now. Enforce it here.
-        $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'target', 'value'=>backup::TARGET_CURRENT_ADDING));
-        $html .= html_writer::start_tag('div', array('class'=>'ics-existing-course backup-section'));
-        $html .= $this->output->heading(get_string('importdatafrom'), 2, array('class'=>'header'));
+        $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'target', 'value' => backup::TARGET_CURRENT_ADDING));
+        $html .= html_writer::start_tag('div', array('class' => 'ics-existing-course backup-section'));
+        $html .= $this->output->heading(get_string('importdatafrom'), 2, array('class' => 'header'));
         $html .= $this->backup_detail_pair(get_string('selectacourse', 'backup'), $this->render($courses));
-        $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))));
+        $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('continue'))));
         $html .= html_writer::end_tag('div');
         $html .= html_writer::end_tag('form');
         $html .= html_writer::end_tag('div');
@@ -373,11 +387,11 @@ class core_backup_renderer extends plugin_renderer_base {
      * @return string
      */
     protected function backup_detail_pair($label, $value) {
-        static $count= 0;
-        $count++;
-        $html  = html_writer::start_tag('div', array('class'=>'detail-pair'));
-        $html .= html_writer::tag('label', $label, array('class'=>'detail-pair-label', 'for'=>'detail-pair-value-'.$count));
-        $html .= html_writer::tag('div', $value, array('class'=>'detail-pair-value', 'name'=>'detail-pair-value-'.$count));
+        static $count = 0;
+        $count ++;
+        $html  = html_writer::start_tag('div', array('class' => 'detail-pair'));
+        $html .= html_writer::tag('label', $label, array('class' => 'detail-pair-label', 'for' => 'detail-pair-value-'.$count));
+        $html .= html_writer::tag('div', $value, array('class' => 'detail-pair-value', 'name' => 'detail-pair-value-'.$count));
         $html .= html_writer::end_tag('div');
         return $html;
     }
@@ -393,13 +407,16 @@ class core_backup_renderer extends plugin_renderer_base {
      * @param string|null $description
      * @return string
      */
-    protected function backup_detail_input($label, $type, $name, $value, array $attributes=array(), $description=null) {
-        if (!empty ($description)) {
-            $description = html_writer::tag('span', $description, array('class'=>'description'));
+    protected function backup_detail_input($label, $type, $name, $value, array $attributes = array(), $description = null) {
+        if (!empty($description)) {
+            $description = html_writer::tag('span', $description, array('class' => 'description'));
         } else {
             $description = '';
         }
-        return $this->backup_detail_pair($label, html_writer::empty_tag('input', $attributes+array('name'=>$name, 'type'=>$type, 'value'=>$value)).$description);
+        return $this->backup_detail_pair(
+            $label,
+            html_writer::empty_tag('input', $attributes + array('name' => $name, 'type' => $type, 'value' => $value)) . $description
+        );
     }
 
     /**
@@ -414,9 +431,9 @@ class core_backup_renderer extends plugin_renderer_base {
      * @param string|null $description
      * @return string
      */
-    protected function backup_detail_select($label, $name, $options, $selected='', $nothing=false, array $attributes=array(), $description=null) {
+    protected function backup_detail_select($label, $name, $options, $selected = '', $nothing = false, array $attributes = array(), $description = null) {
         if (!empty ($description)) {
-            $description = html_writer::tag('span', $description, array('class'=>'description'));
+            $description = html_writer::tag('span', $description, array('class' => 'description'));
         } else {
             $description = '';
         }
@@ -430,7 +447,7 @@ class core_backup_renderer extends plugin_renderer_base {
      * @return string
      */
     public function precheck_notices($results) {
-        $output = html_writer::start_tag('div', array('class'=>'restore-precheck-notices'));
+        $output = html_writer::start_tag('div', array('class' => 'restore-precheck-notices'));
         if (array_key_exists('errors', $results)) {
             foreach ($results['errors'] as $error) {
                 $output .= $this->output->notification($error);
@@ -453,9 +470,9 @@ class core_backup_renderer extends plugin_renderer_base {
     public function substage_buttons($haserrors) {
         $output  = html_writer::start_tag('div', array('continuebutton'));
         if (!$haserrors) {
-            $output .= html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue')));
+            $output .= html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('continue')));
         }
-        $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel')));
+        $output .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'cancel', 'value' => get_string('cancel')));
         $output .= html_writer::end_tag('div');
         return $output;
     }
@@ -469,9 +486,9 @@ class core_backup_renderer extends plugin_renderer_base {
      */
     public function role_mappings($rolemappings, $roles) {
         $roles[0] = get_string('none');
-        $output  = html_writer::start_tag('div', array('class'=>'restore-rolemappings'));
+        $output  = html_writer::start_tag('div', array('class' => 'restore-rolemappings'));
         $output .= $this->output->heading(get_string('restorerolemappings', 'backup'), 2);
-        foreach ($rolemappings as $id=>$mapping) {
+        foreach ($rolemappings as $id => $mapping) {
             $label = $mapping->name;
             $name = 'mapping'.$id;
             $selected = $mapping->targetroleid;
@@ -488,7 +505,7 @@ class core_backup_renderer extends plugin_renderer_base {
      * @param string $method
      * @return string
      */
-    public function continue_button($url, $method='post') {
+    public function continue_button($url, $method = 'post') {
         if (!($url instanceof moodle_url)) {
             $url = new moodle_url($url);
         }
@@ -514,7 +531,7 @@ class core_backup_renderer extends plugin_renderer_base {
      * Displays a backup files viewer
      *
      * @global stdClass $USER
-     * @param backup_files_viewer $tree
+     * @param backup_files_viewer $viewer
      * @return string
      */
     public function render_backup_files_viewer(backup_files_viewer $viewer) {
@@ -531,7 +548,15 @@ class core_backup_renderer extends plugin_renderer_base {
             if ($file->is_directory()) {
                 continue;
             }
-            $fileurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), $file->get_filearea(), null, $file->get_filepath(), $file->get_filename(), true);
+            $fileurl = moodle_url::make_pluginfile_url(
+                $file->get_contextid(),
+                $file->get_component(),
+                $file->get_filearea(),
+                null,
+                $file->get_filepath(),
+                $file->get_filename(),
+                true
+            );
             $params = array();
             $params['action'] = 'choosebackupfile';
             $params['filename'] = $file->get_filename();
@@ -552,7 +577,17 @@ class core_backup_renderer extends plugin_renderer_base {
         }
 
         $html = html_writer::table($table);
-        $html .= $this->output->single_button(new moodle_url('/backup/backupfilesedit.php', array('currentcontext'=>$viewer->currentcontext->id, 'contextid'=>$viewer->filecontext->id, 'filearea'=>$viewer->filearea, 'component'=>$viewer->component, 'returnurl'=>$this->page->url->out())), get_string('managefiles', 'backup'), 'post');
+        $html .= $this->output->single_button(
+            new moodle_url('/backup/backupfilesedit.php', array(
+                'currentcontext' => $viewer->currentcontext->id,
+                'contextid' => $viewer->filecontext->id,
+                'filearea' => $viewer->filearea,
+                'component' => $viewer->component,
+                'returnurl' => $this->page->url->out())
+            ),
+            get_string('managefiles', 'backup'),
+            'post'
+        );
 
         return $html;
     }
@@ -580,7 +615,7 @@ class core_backup_renderer extends plugin_renderer_base {
                     $row->attributes['class'] .= ' dimmed';
                 }
                 $row->cells = array(
-                    html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'targetid', 'value'=>$course->id)),
+                    html_writer::empty_tag('input', array('type' => 'radio', 'name' => 'targetid', 'value' => $course->id)),
                     format_string($course->shortname, true, array('context' => context_course::instance($course->id))),
                     format_string($course->fullname, true, array('context' => context_course::instance($course->id)))
                 );
@@ -605,9 +640,9 @@ class core_backup_renderer extends plugin_renderer_base {
         $output .= html_writer::table($table);
         $output .= html_writer::end_tag('div');
 
-        $output .= html_writer::start_tag('div', array('class'=>'rcs-search'));
-        $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search()));
-        $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search')));
+        $output .= html_writer::start_tag('div', array('class' => 'rcs-search'));
+        $output .= html_writer::empty_tag('input', array('type' => 'text', 'name' => restore_course_search::$VAR_SEARCH, 'value' => $component->get_search()));
+        $output .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'searchcourses', 'value' => get_string('search')));
         $output .= html_writer::end_tag('div');
 
         $output .= html_writer::end_tag('div');
@@ -627,9 +662,9 @@ class core_backup_renderer extends plugin_renderer_base {
         if ($component->get_count() === 0) {
             $output .= $this->output->notification(get_string('nomatchingcourses', 'backup'));
 
-            $output .= html_writer::start_tag('div', array('class'=>'ics-search'));
-            $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search()));
-            $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search')));
+            $output .= html_writer::start_tag('div', array('class' => 'ics-search'));
+            $output .= html_writer::empty_tag('input', array('type' => 'text', 'name' => restore_course_search::$VAR_SEARCH, 'value' => $component->get_search()));
+            $output .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'searchcourses', 'value' => get_string('search')));
             $output .= html_writer::end_tag('div');
 
             $output .= html_writer::end_tag('div');
@@ -643,7 +678,7 @@ class core_backup_renderer extends plugin_renderer_base {
             $countstr = get_string('totalcoursesearchresults', 'backup', $component->get_count());
         }
 
-        $output .= html_writer::tag('div', $countstr, array('class'=>'ics-totalresults'));
+        $output .= html_writer::tag('div', $countstr, array('class' => 'ics-totalresults'));
         $output .= html_writer::start_tag('div', array('class' => 'ics-results'));
 
         $table = new html_table();
@@ -656,7 +691,7 @@ class core_backup_renderer extends plugin_renderer_base {
                 $row->attributes['class'] .= ' dimmed';
             }
             $row->cells = array(
-                html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'importid', 'value'=>$course->id)),
+                html_writer::empty_tag('input', array('type' => 'radio', 'name' => 'importid', 'value' => $course->id)),
                 format_string($course->shortname, true, array('context' => context_course::instance($course->id))),
                 format_string($course->fullname, true, array('context' => context_course::instance($course->id)))
             );
@@ -673,9 +708,9 @@ class core_backup_renderer extends plugin_renderer_base {
         $output .= html_writer::table($table);
         $output .= html_writer::end_tag('div');
 
-        $output .= html_writer::start_tag('div', array('class'=>'ics-search'));
-        $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search()));
-        $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search')));
+        $output .= html_writer::start_tag('div', array('class' => 'ics-search'));
+        $output .= html_writer::empty_tag('input', array('type' => 'text', 'name' => restore_course_search::$VAR_SEARCH, 'value' => $component->get_search()));
+        $output .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'searchcourses', 'value' => get_string('search')));
         $output .= html_writer::end_tag('div');
 
         $output .= html_writer::end_tag('div');
@@ -706,9 +741,9 @@ class core_backup_renderer extends plugin_renderer_base {
                     $row->attributes['class'] .= ' dimmed';
                 }
                 $row->cells = array(
-                    html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'targetid', 'value'=>$category->id)),
+                    html_writer::empty_tag('input', array('type' => 'radio', 'name' => 'targetid', 'value' => $category->id)),
                     format_string($category->name, true, array('context' => context_coursecat::instance($category->id))),
-                    format_text($category->description, $category->descriptionformat, array('overflowdiv'=>true))
+                    format_text($category->description, $category->descriptionformat, array('overflowdiv' => true))
                 );
                 $table->data[] = $row;
             }
@@ -731,9 +766,9 @@ class core_backup_renderer extends plugin_renderer_base {
         $output .= html_writer::table($table);
         $output .= html_writer::end_tag('div');
 
-        $output .= html_writer::start_tag('div', array('class'=>'rcs-search'));
-        $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_category_search::$VAR_SEARCH, 'value'=>$component->get_search()));
-        $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search')));
+        $output .= html_writer::start_tag('div', array('class' => 'rcs-search'));
+        $output .= html_writer::empty_tag('input', array('type' => 'text', 'name' => restore_category_search::$VAR_SEARCH, 'value' => $component->get_search()));
+        $output .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'searchcourses', 'value' => get_string('search')));
         $output .= html_writer::end_tag('div');
 
         $output .= html_writer::end_tag('div');
@@ -749,10 +784,30 @@ class core_backup_renderer extends plugin_renderer_base {
  * @since     Moodle 2.0
  */
 class backup_files_viewer implements renderable {
+
+    /**
+     * @var array
+     */
     public $files;
+
+    /**
+     * @var context
+     */
     public $filecontext;
+
+    /**
+     * @var string
+     */
     public $component;
+
+    /**
+     * @var string
+     */
     public $filearea;
+
+    /**
+     * @var context
+     */
     public $currentcontext;
 
     /**
index c8a1ed7..3ac1551 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
 /**
  * This file contains the forms used by the restore stages
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+/**
+ * An abstract moodleform class specially designed for the restore forms.
+ *
+ * @abstract Marked abstract here because some idiot forgot to mark it abstract in code!
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class restore_moodleform extends base_moodleform {
-    public function __construct(restore_ui_stage $uistage, $action = null, $customdata = null, $method = 'post', $target = '', $attributes = null, $editable = true) {
+    /**
+     * Constructor.
+     *
+     * Overridden just for the purpose of typehinting the first arg.
+     *
+     * @param restore_ui_stage $uistage
+     * @param null $action
+     * @param null $customdata
+     * @param string $method
+     * @param string $target
+     * @param null $attributes
+     * @param bool $editable
+     */
+    public function __construct(restore_ui_stage $uistage, $action = null, $customdata = null, $method = 'post',
+                                $target = '', $attributes = null, $editable = true) {
         parent::__construct($uistage, $action, $customdata, $method, $target, $attributes, $editable);
     }
 }
 
+/**
+ * Restore settings form.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class restore_settings_form extends restore_moodleform {}
+
+/**
+ * Restore schema review form.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class restore_schema_form extends restore_moodleform {}
+
+/**
+ * Restore complete process review form.
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class restore_review_form extends restore_moodleform {};
\ No newline at end of file
index cd74972..0bb8323 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
@@ -18,7 +17,7 @@
 /**
  * This file contains the restore user interface class
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
  * The restore user interface class manages the user interface and restore for
  * Moodle.
  *
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class restore_ui extends base_ui {
     /**
      * The stages of the restore user interface.
+     * Confirm the backup you are going to restore.
      */
     const STAGE_CONFIRM = 1;
+
+    /**
+     * The stages of the restore user interface.
+     * Select the destination for the restore.
+     */
     const STAGE_DESTINATION = 2;
+
+    /**
+     * The stages of the restore user interface.
+     * Alter the setting for the restore.
+     */
     const STAGE_SETTINGS = 4;
+
+    /**
+     * The stages of the restore user interface.
+     * Alter and review the schema that you are going to restore.
+     */
     const STAGE_SCHEMA = 8;
+
+    /**
+     * The stages of the restore user interface.
+     * The final review before the restore is run.
+     */
     const STAGE_REVIEW = 16;
+
+    /**
+     * The stages of the restore user interface.
+     * The restore is in process right now.
+     */
     const STAGE_PROCESS = 32;
+
+    /**
+     * The stages of the restore user interface.
+     * The process is complete.
+     */
     const STAGE_COMPLETE = 64;
 
     /**
-     *
+     * The current UI stage.
      * @var restore_ui_stage
      */
     protected $stage = null;
@@ -68,14 +99,17 @@ class restore_ui extends base_ui {
         restore_ui::STAGE_PROCESS       => 'process',
         restore_ui::STAGE_COMPLETE      => 'complete'
     );
+
     /**
      * Intialises what ever stage is requested. If none are requested we check
      * params for 'stage' and default to initial
      *
+     * @throws restore_ui_exception for an invalid stage
      * @param int|null $stage The desired stage to intialise or null for the default
+     * @param array $params
      * @return restore_ui_stage_initial|restore_ui_stage_schema|restore_ui_stage_confirmation|restore_ui_stage_final
      */
-    protected function initialise_stage($stage = null, array $params=null) {
+    protected function initialise_stage($stage = null, array $params = null) {
         if ($stage == null) {
             $stage = optional_param('stage', self::STAGE_CONFIRM, PARAM_INT);
         }
@@ -86,8 +120,10 @@ class restore_ui extends base_ui {
         $stage = new $class($this, $params);
         return $stage;
     }
+
     /**
      * This processes the current stage of the restore
+     * @throws restore_ui_exception if the progress is wrong.
      * @return bool
      */
     public function process() {
@@ -101,16 +137,17 @@ class restore_ui extends base_ui {
             return false;
         }
 
-        // Process the stage
+        // Process the stage.
         $processoutcome = $this->stage->process();
-        if ($processoutcome !== false && !($this->get_stage()==self::STAGE_PROCESS && optional_param('substage', false, PARAM_BOOL))) {
+        if ($processoutcome !== false && !($this->get_stage() == self::STAGE_PROCESS && optional_param('substage', false, PARAM_BOOL))) {
             $this->stage = $this->initialise_stage($this->stage->get_next_stage(), $this->stage->get_params());
         }
 
-        // Process UI event after to check changes are valid
+        // Process UI event after to check changes are valid.
         $this->controller->process_ui_event();
         return $processoutcome;
     }
+
     /**
      * Returns true if the stage is independent (not requiring a restore controller)
      * @return bool
@@ -118,6 +155,7 @@ class restore_ui extends base_ui {
     public function is_independent() {
         return false;
     }
+
     /**
      * Gets the unique ID associated with this UI
      * @return string
@@ -125,6 +163,7 @@ class restore_ui extends base_ui {
     public function get_uniqueid() {
         return $this->get_restoreid();
     }
+
     /**
      * Gets the restore id from the controller
      * @return string
@@ -158,7 +197,7 @@ class restore_ui extends base_ui {
     /**
      * Sets the progress reporter that will be returned by get_progress_reporter.
      *
-     * @param c\core\progress\base$progressreporter Progress reporter
+     * @param \core\progress\base $progressreporter Progress reporter
      */
     public function set_progress_reporter(\core\progress\base $progressreporter) {
         $this->progressreporter = $progressreporter;
@@ -166,6 +205,7 @@ class restore_ui extends base_ui {
 
     /**
      * Executes the restore plan
+     * @throws restore_ui_exception if the progress or stage is wrong.
      * @return bool
      */
     public function execute() {
@@ -204,7 +244,7 @@ class restore_ui extends base_ui {
      */
     protected function is_temporary_course_created($courseid) {
         global $DB;
-        //Check if current controller instance has created new course.
+        // Check if current controller instance has created new course.
         if ($this->controller->get_target() == backup::TARGET_NEW_COURSE) {
             $results = $DB->record_exists_sql("SELECT bc.itemid
                                                FROM {backup_controllers} bc, {course} c
@@ -226,16 +266,18 @@ class restore_ui extends base_ui {
     public function enforce_changed_dependencies() {
         return ($this->dependencychanges > 0);
     }
+
     /**
      * Loads the restore controller if we are tracking one
-     * @return restore_controller|false
+     * @param string|bool $restoreid
+     * @return string
      */
-    final public static function load_controller($restoreid=false) {
-        // Get the restore id optional param
+    final public static function load_controller($restoreid = false) {
+        // Get the restore id optional param.
         if ($restoreid) {
             try {
                 // Try to load the controller with it.
-                // If it fails at this point it is likely because this is the first load
+                // If it fails at this point it is likely because this is the first load.
                 $controller = restore_controller::load_controller($restoreid);
                 return $controller;
             } catch (Exception $e) {
@@ -244,9 +286,11 @@ class restore_ui extends base_ui {
         }
         return $restoreid;
     }
+
     /**
      * Initialised the requested independent stage
      *
+     * @throws restore_ui_exception
      * @param int $stage One of self::STAGE_*
      * @param int $contextid
      * @return restore_ui_stage_confirm|restore_ui_stage_destination
@@ -261,16 +305,18 @@ class restore_ui extends base_ui {
         }
         return new $class($contextid);
     }
+
     /**
      * Cancels the current restore and redirects the user back to the relevant place
      */
     public function cancel_process() {
-        //Delete temporary restore course if exists.
+        // Delete temporary restore course if exists.
         if ($this->controller->get_target() == backup::TARGET_NEW_COURSE) {
             $this->cleanup();
         }
         parent::cancel_process();
     }
+
     /**
      * Gets an array of progress bar items that can be displayed through the restore renderer.
      * @return array Array of items for the progress bar
@@ -283,22 +329,23 @@ class restore_ui extends base_ui {
         $items = array();
         while ($stage > 0) {
             $classes = array('backup_stage');
-            if (floor($stage/2) == $currentstage) {
+            if (floor($stage / 2) == $currentstage) {
                 $classes[] = 'backup_stage_next';
             } else if ($stage == $currentstage) {
                 $classes[] = 'backup_stage_current';
             } else if ($stage < $currentstage) {
                 $classes[] = 'backup_stage_complete';
             }
-            $item = array('text' => strlen(decbin($stage)).'. '.get_string('restorestage'.$stage, 'backup'),'class' => join(' ', $classes));
+            $item = array('text' => strlen(decbin($stage)).'. '.get_string('restorestage'.$stage, 'backup'), 'class' => join(' ', $classes));
             if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && $stage > self::STAGE_DESTINATION) {
-                $item['link'] = new moodle_url($PAGE->url, array('restore'=>$this->get_restoreid(), 'stage'=>$stage));
+                $item['link'] = new moodle_url($PAGE->url, array('restore' => $this->get_restoreid(), 'stage' => $stage));
             }
             array_unshift($items, $item);
-            $stage = floor($stage/2);
+            $stage = floor($stage / 2);
         }
         return $items;
     }
+
     /**
      * Gets the name of this UI
      * @return string
@@ -306,6 +353,7 @@ class restore_ui extends base_ui {
     public function get_name() {
         return 'restore';
     }
+
     /**
      * Gets the first stage for this UI
      * @return int STAGE_CONFIRM
@@ -313,6 +361,7 @@ class restore_ui extends base_ui {
     public function get_first_stage_id() {
         return self::STAGE_CONFIRM;
     }
+
     /**
      * Returns true if this stage has substages of which at least one needs to be displayed
      * @return bool
@@ -320,9 +369,11 @@ class restore_ui extends base_ui {
     public function requires_substage() {
         return ($this->stage->has_sub_stages() && !$this->stage->process());
     }
+
     /**
      * Displays this stage
      *
+     * @throws base_ui_exception if the progress is wrong.
      * @param core_backup_renderer $renderer
      * @return string HTML code to echo
      */
@@ -335,6 +386,10 @@ class restore_ui extends base_ui {
 }
 
 /**
- * restore user interface exception. Modelled off the restore_exception class
+ * Restore user interface exception. Modelled off the restore_exception class
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class restore_ui_exception extends base_ui_exception {}
index f892b8c..875b511 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
 /**
  * This file contains components used by the restore UI
  *
- * @package   moodlecore
+ * @package   core_backup
  * @copyright 2010 Sam Hemelryk
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 /**
  * A base class that can be used to build a specific search upon
+ *
+ * @package   core_backup
+ * @copyright 2010 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 abstract class restore_search_base implements renderable {
 
@@ -79,18 +82,19 @@ abstract class restore_search_base implements renderable {
      * Constructor
      * @param array $config Config options
      */
-    public function __construct(array $config=array()) {
+    public function __construct(array $config = array()) {
 
         $this->search = optional_param($this->get_varsearch(), self::DEFAULT_SEARCH, PARAM_NOTAGS);
         $this->maxresults = get_config('backup', 'import_general_maxresults');
 
-        foreach ($config as $name=>$value) {
+        foreach ($config as $name => $value) {
             $method = 'set_'.$name;
             if (method_exists($this, $method)) {
                 $this->$method($value);
             }
         }
     }
+
     /**
      * The URL for this search
      * @global moodle_page $PAGE
@@ -101,15 +105,17 @@ abstract class restore_search_base implements renderable {
         $params = array(
             $this->get_varsearch()    => $this->get_search()
         );
-        return ($this->url !== null)?new moodle_url($this->url, $params):new moodle_url($PAGE->url, $params);
+        return ($this->url !== null) ? new moodle_url($this->url, $params) : new moodle_url($PAGE->url, $params);
     }
+
     /**
      * The current search string
      * @return string
      */
     final public function get_search() {
-        return ($this->search !== null)?$this->search:self::DEFAULT_SEARCH;
+        return ($this->search !== null) ? $this->search : self::DEFAULT_SEARCH;
     }
+
     /**
      * The total number of results
      * @return int
@@ -120,6 +126,7 @@ abstract class restore_search_base implements renderable {
         }
         return $this->totalcount;
     }
+
     /**
      * Returns an array of resu