Index: mod_form.php
===================================================================
--- mod_form.php	(revision 11806)
+++ mod_form.php	(working copy)
@@ -51,29 +51,46 @@
 
 
         //enforced time delay between quiz attempts add-on
-        $timedelayoptions = array();
-        $timedelayoptions[0] = get_string('none');
-        $timedelayoptions[1800] = get_string('numminutes', '', 30);
-        $timedelayoptions[3600] = get_string('numminutes', '', 60);
-        for($i=2; $i<=23; $i++) {
-             $seconds  = $i*3600;
-             $timedelayoptions[$seconds] = get_string('numhours', '', $i);
-        }
-        $timedelayoptions[86400] = get_string('numhours', '', 24);
-        for($i=2; $i<=7; $i++) {
-             $seconds = $i*86400;
-             $timedelayoptions[$seconds] = get_string('numdays', '', $i);
-        }
-        $mform->addElement('select', 'delay1', get_string("delay1", "quiz"), $timedelayoptions);
-        $mform->setHelpButton('delay1', array("timedelay1", get_string("delay1", "quiz"), "quiz"));
-        $mform->setAdvanced('delay1', $CFG->quiz_fix_delay1);
-        $mform->setDefault('delay1', $CFG->quiz_delay1);
+     // Options for days, hours, minutes, or seconds
+        $timedelayopts[DAYSECS]     = get_string('numdays');
+        $timedelayopts[HOURSECS]    = get_string('numhours');
+        $timedelayopts[MINSECS]     = get_string('numminutes');
+        $timedelayopts['1']         = get_string('numseconds');
 
-        $mform->addElement('select', 'delay2', get_string("delay2", "quiz"), $timedelayoptions);
-        $mform->setHelpButton('delay2', array("timedelay2", get_string("delay2", "quiz"), "quiz"));
-        $mform->setAdvanced('delay2', $CFG->quiz_fix_delay2);
-        $mform->setDefault('delay2', $CFG->quiz_delay2);
+     // Add group of elements, containing enable checkbox, select of time types, and text for integer value
+        $delay1grp = array();
+        $delay1grp[] = &$mform->createElement('text', 'delay1value', '', array('size'  => '5'));
+        $delay1grp[] = &$mform->createElement('select', 'delay1type', '', $timedelayopts);
+        $delay1grp[] = &$mform->createElement('checkbox', 'delay1cb', '', get_string('enable'));
+        $mform->addGroup($delay1grp, 'delay1group', get_string('delay1', 'quiz'), null, false);
+     // Require the text field to be numeric
+        $delay1grprules = array();
+        $delay1grprules['delay1value'][] = array(null, 'numeric', null, 'client');
+        $mform->addGroupRule('delay1group', $delay1grprules);
+     // Select and text field are disabled if checkbox unchecked
+        $mform->disabledIf('delay1group', 'delay1cb');
+        $mform->setHelpButton('delay1group', array("timedelay1", get_string("delay1", "quiz"), "quiz"));
+        $mform->setAdvanced('delay1group', $CFG->quiz_fix_delay1);
+        $mform->setDefault('delay1value', $CFG->quiz_delay1);
+        $mform->setDefault('delay1type', MINSECS);
 
+     // Add group of elements, containing enable checkbox, select of time types, and text for integer value
+        $delay2grp = array();
+        $delay2grp[] = &$mform->createElement('text', 'delay2value', '', array('size' => '5'));
+        $delay2grp[] = &$mform->createElement('select', 'delay2type', '', $timedelayopts);
+        $delay2grp[] = &$mform->createElement('checkbox', 'delay2cb', '', get_string('enable'));
+        $mform->addGroup($delay2grp, 'delay2group', get_string('delay2', 'quiz'), null, false);
+     // Require the text field to be numeric
+        $delay2grprules = array();
+        $delay2grprules['delay2value'][] = array(null, 'numeric', null, 'client');
+        $mform->addGroupRule('delay2group', $delay2grprules);
+     // Select and text field are disabled if checkbox unchecked
+        $mform->disabledIf('delay2group', 'delay2cb');
+        $mform->setHelpButton('delay2group', array("timedelay2", get_string("delay2", "quiz"), "quiz"));
+        $mform->setAdvanced('delay2group', $CFG->quiz_fix_delay2);
+        $mform->setDefault('delay2value', $CFG->quiz_delay2);
+        $mform->setDefault('delay2type', MINSECS);
+
 //-------------------------------------------------------------------------------
         $mform->addElement('header', 'displayhdr', get_string('display', 'form'));
         $perpage = array();
@@ -330,6 +347,23 @@
             $default_values['quizpassword'] = $default_values['password'];
             unset($default_values['password']);
         }
+        
+        // Transform seconds value into appropriate unit
+        if (isset($default_values['delay1']) && !empty($default_values['delay1'])) {
+            $type1 = 1;
+            $delay1val = $this->convert_seconds($default_values['delay1'], $type1);
+            $default_values['delay1cb'] = '1';
+            $default_values['delay1type'] = $type1;
+            $default_values['delay1value'] = $delay1val;
+        }
+        // Transform seconds value into appropriate unit
+        if (isset($default_values['delay2']) && !empty($default_values['delay2'])) {
+            $type2 = 1;
+            $delay2val = $this->convert_seconds($default_values['delay2'], $type2);
+            $default_values['delay2cb'] = '1';
+            $default_values['delay2type'] = $type2;
+            $default_values['delay2value'] = $delay2val;
+        }
     }
 
     function validation($data, $files) {
@@ -384,5 +418,55 @@
         }
     }
 
+    /**
+     * Return submitted data if properly submitted or returns NULL if validation fails or
+     * if there is no submitted data.
+     *
+     * @param bool $slashed true means return data with addslashes applied
+     * @return object submitted data; NULL if not valid or not submitted
+     */
+    function get_data($slashed=true) {
+        if ($data = parent::get_data($slashed)) {           
+            // If value is set, save into correct db field
+            if (isset($data->delay1cb)) {
+                $data->delay1 = $data->delay1type * $data->delay1value;
+            } else {
+                $data->delay1 = 0;
+            }
+            // If value is set, save into correct db field
+            if (isset($data->delay2cb)) {
+                $data->delay2 = $data->delay2type * $data->delay2value;
+            } else {
+                $data->delay2 = 0;
+            }
+
+            return $data;     
+        }
+        return NULL;
+    }
+
+    /**
+     * Function accepts seconds and returns the most appropriate format type:
+     *   - Days
+     *   - Hours
+     *   - Minutes
+     *   - Seconds
+     *
+     * @param integer $seconds
+     * @param integer $type
+     * @return <type>
+     */
+    public function convert_seconds($seconds, &$type) {
+        $type = 1;
+        if (!($seconds % DAYSECS)) {
+            $type = DAYSECS;
+        } else if (!($seconds % HOURSECS)) {
+            $type = HOURSECS;
+        } else if (!($seconds % MINSECS)) {
+            $type = MINSECS;
+        }
+
+        return ($seconds / $type);
+    }
 }
 ?>
