]> git.mjollnir.org Git - moodle.git/commitdiff
Implemented MDL-10558 - Also took this as an opportunity to create two new methods...
authormark-nielsen <mark-nielsen>
Tue, 24 Jul 2007 06:33:53 +0000 (06:33 +0000)
committermark-nielsen <mark-nielsen>
Tue, 24 Jul 2007 06:33:53 +0000 (06:33 +0000)
mod/lesson/lib.php
mod/lesson/mod_form.php
mod/lesson/view.php

index af2b983609a2f5638cc324bd4b023d125781e0ec..7b0e12f8def600f4db8ccc43b9ebdb2e42c68f62 100644 (file)
 
 define("LESSON_MAX_EVENT_LENGTH", "432000");   // 5 days maximum
 
-/*******************************************************************/
+/**
+ * Given an object containing all the necessary data,
+ * (defined by the form in mod_form.php) this function
+ * will create a new instance and return the id number
+ * of the new instance.
+ *
+ * @param object $lesson Lesson post data from the form
+ * @return int
+ **/
 function lesson_add_instance($lesson) {
-/// Given an object containing all the necessary data,
-/// (defined by the form in mod.html) this function
-/// will create a new instance and return the id number
-/// of the new instance.
     global $SESSION;
 
-    $lesson->timemodified = time();
-
-
-    if(empty($lesson->timespent) or !is_numeric($lesson->timespent) or $lesson->timespent < 0) {
-        $lesson->timespent = 0;
-    }
-    if(!isset($lesson->completed)) {
-        $lesson->completed = 0;
-    }
-    if(empty($lesson->gradebetterthan) or !is_numeric($lesson->gradebetterthan) or $lesson->gradebetterthan < 0) {
-        $lesson->gradebetterthan = 0;
-    } else if ($lesson->gradebetterthan > 100) {
-        $lesson->gradebetterthan = 100;
-    }
-    // conditions for dependency
-    $conditions = new stdClass;
-    $conditions->timespent = $lesson->timespent;
-    $conditions->completed = $lesson->completed;
-    $conditions->gradebetterthan = clean_param($lesson->gradebetterthan, PARAM_INT);
-    $lesson->conditions = addslashes(serialize($conditions));
-    unset($lesson->timespent);
-    unset($lesson->completed);
-    unset($lesson->gradebetterthan);
-
-    if (!empty($lesson->password)) {
-        $lesson->password = md5($lesson->password);
-    } else {
-        unset($lesson->password);
-    }
+    lesson_process_pre_save($lesson);
 
     if (!$lesson->id = insert_record("lesson", $lesson)) {
         return false; // bad
     }
 
-    if ($lesson->lessondefault) {
-        $default = new stdClass;
-        $default = clone($lesson);
-        unset($default->lessondefault);
-        unset($default->name);
-        unset($default->timemodified);
-        unset($default->available);
-        unset($default->deadline);
-        if ($default->id = get_field("lesson_default", "id", "course", $default->course)) {
-            update_record("lesson_default", $default);
-        } else {
-            insert_record("lesson_default", $default);
-        }
-    } else {
-        unset($lesson->lessondefault);
-    }
-
-    // got this code from quiz, thanks quiz!!!
-    delete_records('event', 'modulename', 'lesson', 'instance', $lesson->id);  // Just in case
-
-    $event = new stdClass;
-    $event->name        = $lesson->name;
-    $event->description = $lesson->name;
-    $event->courseid    = $lesson->course;
-    $event->groupid     = 0;
-    $event->userid      = 0;
-    $event->modulename  = 'lesson';
-    $event->instance    = $lesson->id;
-    $event->eventtype   = 'open';
-    $event->timestart   = $lesson->available;
-    $event->visible     = instance_is_visible('lesson', $lesson);
-    $event->timeduration = ($lesson->deadline - $lesson->available);
-
-    if ($event->timeduration > LESSON_MAX_EVENT_LENGTH) {  /// Long durations create two events
-        $event2 = $event;
-
-        $event->name         .= ' ('.get_string('lessonopens', 'lesson').')';
-        $event->timeduration  = 0;
-
-        $event2->timestart    = $lesson->deadline;
-        $event2->eventtype    = 'close';
-        $event2->timeduration = 0;
-        $event2->name        .= ' ('.get_string('lessoncloses', 'lesson').')';
-
-        add_event($event2);
-    }
-
-    add_event($event);
+    lesson_process_post_save($lesson);
 
     lesson_grade_item_update(stripslashes_recursive($lesson));
 
     return $lesson->id;
 }
 
-
-/*******************************************************************/
+/**
+ * Given an object containing all the necessary data,
+ * (defined by the form in mod_form.php) this function
+ * will update an existing instance with new data.
+ *
+ * @param object $lesson Lesson post data from the form
+ * @return boolean
+ **/
 function lesson_update_instance($lesson) {
-/// Given an object containing all the necessary data,
-/// (defined by the form in mod.html) this function
-/// will update an existing instance with new data.
 
-    $lesson->timemodified = time();
     $lesson->id = $lesson->instance;
 
-    if(empty($lesson->timespent) or !is_numeric($lesson->timespent) or $lesson->timespent < 0) {
-        $lesson->timespent = 0;
-    }
-    if(!isset($lesson->completed)) {
-        $lesson->completed = 0;
-    }
-    if(empty($lesson->gradebetterthan) or !is_numeric($lesson->gradebetterthan) or $lesson->gradebetterthan < 0) {
-        $lesson->gradebetterthan = 0;
-    } else if ($lesson->gradebetterthan > 100) {
-        $lesson->gradebetterthan = 100;
-    }
-    // conditions for dependency
-    $conditions = new stdClass;
-    $conditions->timespent = $lesson->timespent;
-    $conditions->completed = $lesson->completed;
-    $conditions->gradebetterthan = $lesson->gradebetterthan;
-    $lesson->conditions = addslashes(serialize($conditions));
-    unset($lesson->timespent);
-    unset($lesson->completed);
-    unset($lesson->gradebetterthan);
-
-    if (!empty($lesson->password)) {
-        $lesson->password = md5($lesson->password);
-    } else {
-        unset($lesson->password);
-    }
-
-    if ($lesson->lessondefault) {
-        $default = new stdClass;
-        $default = clone($lesson);
-        unset($default->lessondefault);
-        unset($default->name);
-        unset($default->timemodified);
-        unset($default->available);
-        unset($default->deadline);
-        if ($default->id = get_field("lesson_default", "id", "course", $default->course)) {
-            update_record("lesson_default", $default);
-        } else {
-            insert_record("lesson_default", $default);
-        }
-    } else {
-        unset($lesson->lessondefault);
-    }
-
-    // update the calendar events (credit goes to quiz module)
-    if ($events = get_records_select('event', "modulename = 'lesson' and instance = '$lesson->id'")) {
-        foreach($events as $event) {
-            delete_event($event->id);
-        }
-    }
-
-    $event = new stdClass;
-    $event->name        = $lesson->name;
-    $event->description = $lesson->name;
-    $event->courseid    = $lesson->course;
-    $event->groupid     = 0;
-    $event->userid      = 0;
-    $event->modulename  = 'lesson';
-    $event->instance    = $lesson->id;
-    $event->eventtype   = 'open';
-    $event->timestart   = $lesson->available;
-    $event->visible     = instance_is_visible('lesson', $lesson);
-    $event->timeduration = ($lesson->deadline - $lesson->available);
-
-    if ($event->timeduration > LESSON_MAX_EVENT_LENGTH) {  /// Long durations create two events
-        $event2 = $event;
-
-        $event->name         .= ' ('.get_string('lessonopens', 'lesson').')';
-        $event->timeduration  = 0;
-
-        $event2->timestart    = $lesson->deadline;
-        $event2->eventtype    = 'close';
-        $event2->timeduration = 0;
-        $event2->name        .= ' ('.get_string('lessoncloses', 'lesson').')';
+    lesson_process_pre_save($lesson);
 
-        add_event($event2);
+    if (!$result = update_record("lesson", $lesson)) {
+        return false; // Awe man!
     }
 
-    add_event($event);
-
-    $result = update_record("lesson", $lesson);
+    lesson_process_post_save($lesson);
 
     // update grade item definition
     lesson_grade_item_update(stripslashes_recursive($lesson));
@@ -622,4 +479,105 @@ function lesson_get_post_actions() {
     return array('end','start', 'update grade attempt');
 }
 
+/**
+ * Runs any processes that must run before
+ * a lesson insert/update
+ *
+ * @param object $lesson Lesson form data
+ * @return void
+ **/
+function lesson_process_pre_save(&$lesson) {
+    $lesson->timemodified = time();
+
+    if (empty($lesson->timespent) or !is_numeric($lesson->timespent) or $lesson->timespent < 0) {
+        $lesson->timespent = 0;
+    }
+    if (!isset($lesson->completed)) {
+        $lesson->completed = 0;
+    }
+    if (empty($lesson->gradebetterthan) or !is_numeric($lesson->gradebetterthan) or $lesson->gradebetterthan < 0) {
+        $lesson->gradebetterthan = 0;
+    } else if ($lesson->gradebetterthan > 100) {
+        $lesson->gradebetterthan = 100;
+    }
+
+    // Conditions for dependency
+    $conditions = new stdClass;
+    $conditions->timespent = $lesson->timespent;
+    $conditions->completed = $lesson->completed;
+    $conditions->gradebetterthan = $lesson->gradebetterthan;
+    $lesson->conditions = addslashes(serialize($conditions));
+    unset($lesson->timespent);
+    unset($lesson->completed);
+    unset($lesson->gradebetterthan);
+
+    if (!empty($lesson->password)) {
+        $lesson->password = md5($lesson->password);
+    } else {
+        unset($lesson->password);
+    }
+
+    if ($lesson->lessondefault) {
+        $default = new stdClass;
+        $default = clone($lesson);
+        unset($default->name);
+        unset($default->timemodified);
+        unset($default->available);
+        unset($default->deadline);
+        if ($default->id = get_field('lesson_default', 'id', 'course', $default->course)) {
+            update_record('lesson_default', $default);
+        } else {
+            insert_record('lesson_default', $default);
+        }
+    }
+    unset($lesson->lessondefault);
+}
+
+/**
+ * Runs any processes that must be run
+ * after a lesson insert/update
+ *
+ * @param object $lesson Lesson form data
+ * @return void
+ **/
+function lesson_process_post_save(&$lesson) {
+    if ($events = get_records_select('event', "modulename = 'lesson' and instance = '$lesson->id'")) {
+        foreach($events as $event) {
+            delete_event($event->id);
+        }
+    }
+
+    $event = new stdClass;
+    $event->description = $lesson->name;
+    $event->courseid    = $lesson->course;
+    $event->groupid     = 0;
+    $event->userid      = 0;
+    $event->modulename  = 'lesson';
+    $event->instance    = $lesson->id;
+    $event->eventtype   = 'open';
+    $event->timestart   = $lesson->available;
+    $event->visible     = instance_is_visible('lesson', $lesson);
+    $event->timeduration = ($lesson->deadline - $lesson->available);
+
+    if ($lesson->deadline and $lesson->available and $event->timeduration <= LESSON_MAX_EVENT_LENGTH) {
+        // Single event for the whole lesson.
+        $event->name = $lesson->name;
+        add_event($event);
+    } else {
+        // Separate start and end events.
+        $event->timeduration  = 0;
+        if ($lesson->available) {
+            $event->name = $lesson->name.' ('.get_string('lessonopens', 'lesson').')';
+            add_event($event);
+            unset($event->id); // So we can use the same object for the close event.
+        }
+        if ($lesson->deadline) {
+            $event->name      = $lesson->name.' ('.get_string('lessoncloses', 'lesson').')';
+            $event->timestart = $lesson->deadline;
+            $event->eventtype = 'close';
+            add_event($event);
+        }
+    }
+}
+
 ?>
index 6cda0a961c04c33fecebb6ee1436d066e795f990..ebb222884735bd91042139c28cd2401dbd10716c 100644 (file)
@@ -176,10 +176,10 @@ class mod_lesson_mod_form extends moodleform_mod {
         //never displayed converted to md5
         $mform->setType('password', PARAM_RAW);
 
-        $mform->addElement('date_time_selector', 'available', get_string('available', 'lesson'));
+        $mform->addElement('date_time_selector', 'available', get_string('available', 'lesson'), array('optional'=>true));
         $mform->setDefault('available', 0);
 
-        $mform->addElement('date_time_selector', 'deadline', get_string('deadline', 'lesson'));
+        $mform->addElement('date_time_selector', 'deadline', get_string('deadline', 'lesson'), array('optional'=>true));
         $mform->setDefault('deadline', 0);
 
 //-------------------------------------------------------------------------------
index c56ab0d86b07a3b61d254e6713dce59e93251d8d..347b73852f82e9f71369914c4195c4c892505f58 100644 (file)
@@ -30,8 +30,9 @@
 ///     Check for high scores
     if (!has_capability('mod/lesson:manage', $context)) {
 
-        if (time() < $lesson->available or time() > $lesson->deadline) {  // Deadline restrictions
-            if (time() > $lesson->deadline) {
+        if (($lesson->available != 0 and time() < $lesson->available) or
+            ($lesson->deadline != 0 and time() > $lesson->deadline)) {  // Deadline restrictions
+            if ($lesson->deadline != 0 and time() > $lesson->deadline) {
                 $message = get_string('lessonclosed', 'lesson', userdate($lesson->deadline));
             } else {
                 $message = get_string('lessonopen', 'lesson', userdate($lesson->available));