]> git.mjollnir.org Git - moodle.git/commitdiff
added repeat_elements method to moodleform and used method for choice form
authorjamiesensei <jamiesensei>
Fri, 24 Nov 2006 12:20:26 +0000 (12:20 +0000)
committerjamiesensei <jamiesensei>
Fri, 24 Nov 2006 12:20:26 +0000 (12:20 +0000)
lang/en_utf8/form.php
lib/formslib.php
mod/choice/lib.php
mod/choice/mod.html [deleted file]
mod/choice/mod_form.php [new file with mode: 0644]

index d41afd043acf8663309bc84be64e5e4ebda255ff..022d26259b6fd5291785a75fe46bf39341205620 100644 (file)
@@ -18,4 +18,6 @@ $string['nonexistentformelements'] = 'Trying to add help buttons to nonexistent
 $string['requiredelement'] = 'Required field.';
 $string['general'] = 'General Settings';
 $string['modstandardels']='Common Module Settings';
-?>
+$string['miscellaneoussettings']='Miscellaneous Settings';
+$string['addfields']='Add $a fields to form';
+?>
\ No newline at end of file
index 1a1a0dbba3c7e8af0bf996c07b70226efbe7fe9e..89b59c4ab128de066a08fa381709ac9687cb1265 100644 (file)
@@ -63,6 +63,13 @@ class moodleform {
      */
     var $_upload_manager; //
 
+    /**
+     * Array of buttons that if pressed do not result in the processing of the form.
+     *
+     * @var array
+     */
+    var $_nosubmitbuttons=array();
+
     /**
      * The constructor function calls the abstract function definition() and it will then
      * process and clean and attempt to validate incoming data.
@@ -229,7 +236,7 @@ class moodleform {
      * Must be used BEFORE creating of file element!
      *
      * @param object $course
-     * @param object $modbytes - max size limit defined in module 
+     * @param object $modbytes - max size limit defined in module
      */
     function set_max_file_size($course=null, $modbytes=0) {
         global $CFG, $COURSE;
@@ -292,6 +299,11 @@ class moodleform {
      * @return object submitted data; NULL if not valid or not submitted
      */
     function data_submitted($slashed=true) {
+        foreach ($this->_nosubmitbuttons as $nosubmitbutton){
+            if (optional_param($nosubmitbutton, 0, PARAM_TEXT)){
+                return NULL;
+            }
+        }
         if ($this->is_submitted() and $this->is_validated()) {
             $data = $this->_form->exportValues(null, $slashed);
             unset($data['sesskey']); // we do not need to return sesskey
@@ -358,6 +370,71 @@ class moodleform {
     function validation($data) {
         return true;
     }
+
+    function _register_no_submit_button($addfieldsname){
+        $this->_nosubmitbuttons[]=$addfieldsname;
+    }
+
+    function repeat_elements($elementobjs, $repeats, $options, $repeathiddenname, $addfieldsname, $addfieldsno=5, $addstring=array('addfields', 'form')){
+        $repeats = optional_param($repeathiddenname, $repeats, PARAM_INT);
+        $addfields = optional_param($addfieldsname, '', PARAM_TEXT);
+        if (!empty($addfields)){
+            $repeats += $addfieldsno;
+        }
+        $this->_register_no_submit_button($addfieldsname);
+        $mform =& $this->_form;
+        $mform->addElement('hidden', $repeathiddenname, $repeats);
+        //value not to be overridden by submitted value
+        $mform->setConstants(array($repeathiddenname=>$repeats));
+        for ($i=0; $i<$repeats; $i++) {
+            foreach ($elementobjs as $elementobj){
+                $elementclone=clone($elementobj);
+                $name=$elementclone->getName();
+                $elementclone->setName($name."[$i]");
+                if (is_a($elementclone, 'HTML_QuickForm_header')){
+                    $value=$elementclone->_text;
+                    $elementclone->setValue($value.' '.($i+1));
+
+                }
+                $mform->addElement($elementclone);
+            }
+        }
+        for ($i=0; $i<$repeats; $i++) {
+            foreach ($options as $elementname => $elementoptions){
+                $pos=strpos($elementname, '[');
+                if ($pos!==FALSE){
+                    $realelementname = substr($elementname, 0, $pos+1)."[$i]";
+                    $realelementname .= substr($elementname, $pos+1);
+                }else {
+                    $realelementname = $elementname."[$i]";
+                }
+                foreach ($elementoptions as  $option => $params){
+
+                    switch ($option){
+                        case 'default' :
+                            $mform->setDefault($realelementname, $params);
+                            break;
+                        case 'type' :
+                            $mform->setType($realelementname, $params);
+                            break;
+                        case 'helpbutton' :
+                            $mform->setHelpButton($realelementname, $params);
+                            break;
+                        case 'disabledif' :
+                            $mform->disabledIf($realelementname, $params[0], $params[1], $params[2]);
+                            break;
+
+                    }
+                }
+            }
+        }
+        $mform->addElement('submit', $addfieldsname, get_string('addfields', 'form', $addfieldsno),
+                            array('onclick'=>'this.form.submit();'));//need this to bypass client validation
+
+               $renderer =& $mform->defaultRenderer();
+        $renderer->addStopFieldsetElements($addfieldsname);
+
+    }
 }
 
 /**
index ed4aa6cefee43c8f52e17a483a0973ee459d7ed7..65164e3c56bd40d95d032f762957d1a3771c089a 100644 (file)
@@ -48,38 +48,31 @@ function choice_user_complete($course, $user, $mod, $choice) {
 
 
 function choice_add_instance($choice) {
-// 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 
+// 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.
 
     $choice->timemodified = time();
 
-    if (!empty($choice->timerestrict) and $choice->timerestrict) {
-        $choice->timeopen = make_timestamp($choice->openyear, $choice->openmonth, $choice->openday,
-                                     $choice->openhour, $choice->openminute, 0);
-        $choice->timeclose = make_timestamp($choice->closeyear, $choice->closemonth, $choice->closeday,
-                                      $choice->closehour, $choice->closeminute, 0);
-    } else {
+    if (empty($choice->timerestrict)) {
         $choice->timeopen = 0;
         $choice->timeclose = 0;
     }
 
     //insert answers
     if ($choice->id = insert_record("choice", $choice)) {
-        foreach ($choice as $name => $value) {
-            if (strstr($name, "newoption")) {   /// New option
-                $value = trim($value);
-                if (isset($value) && $value <> '') {
-                    $option = NULL;
-                    $option->text = $value;
-                    $option->choiceid = $choice->id;
-                    if (isset($choice->{'newlimit'.substr($name, 9)})) {
-                        $option->maxanswers = $choice->{'newlimit'.substr($name, 9)};
-                    }
-                    $option->timemodified = time();
-                    insert_record("choice_options", $option);
+        foreach ($choice->option as $key => $value) {
+            $value = trim($value);
+            if (isset($value) && $value <> '') {
+                $option = new object();
+                $option->text = $value;
+                $option->choiceid = $choice->id;
+                if (isset($choice->limit[$key])) {
+                    $option->maxanswers = $choice->limit[$key];
                 }
+                $option->timemodified = time();
+                insert_record("choice_options", $option);
             }
         }
     }
@@ -88,52 +81,38 @@ function choice_add_instance($choice) {
 
 
 function choice_update_instance($choice) {
-// Given an object containing all the necessary data, 
-// (defined by the form in mod.html) this function 
+// 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.
 
     $choice->id = $choice->instance;
     $choice->timemodified = time();
 
 
-    if (!empty($choice->timerestrict) and $choice->timerestrict) {
-        $choice->timeopen = make_timestamp($choice->openyear, $choice->openmonth, $choice->openday,
-                                     $choice->openhour, $choice->openminute, 0);
-        $choice->timeclose = make_timestamp($choice->closeyear, $choice->closemonth, $choice->closeday,
-                                      $choice->closehour, $choice->closeminute, 0);
-    } else {
+    if (empty($choice->timerestrict)) {
         $choice->timeopen = 0;
         $choice->timeclose = 0;
     }
 
-    //update answers
-
-    foreach ($choice as $name => $value) {
+    //update, delete or insert answers
+    foreach ($choice->option as $key => $value) {
         $value = trim($value);
-
-        if (strstr($name, "oldoption")) {  // Old option
+        $option = new object();
+        $option->text = $value;
+        $option->choiceid = $choice->id;
+        if (isset($choice->limit[$key])) {
+            $option->maxanswers = $choice->limit[$key];
+        }
+        $option->timemodified = time();
+        if (isset($choice->optionid[$key])){//existing choice record
+            $option->id=$choice->optionid[$key];
             if (isset($value) && $value <> '') {
-                $option = NULL;
-                $option->id = substr($name, 9); // Get the ID of the answer that needs to be updated.
-                $option->text = $value;
-                $option->choiceid = $choice->id;
-                if (isset($choice->{'oldlimit'.substr($name, 9)})) {
-                    $option->maxanswers = $choice->{'oldlimit'.substr($name, 9)};
-                }
-                $option->timemodified = time();
                 update_record("choice_options", $option);
             } else { //empty old option - needs to be deleted.
-                delete_records("choice_options", "id", substr($name, 9));
+                delete_records("choice_options", "id", $option->id);
             }
-        } else if (strstr($name, "newoption")) {   /// New option
-            if (isset($value)&& $value <> '') {
-                $option = NULL;
-                $option->text = $value;
-                $option->choiceid = $choice->id;
-                if (isset($choice->{'newlimit'.substr($name, 9)})) {
-                    $option->maxanswers = $choice->{'newlimit'.substr($name, 9)};
-                }
-                $option->timemodified = time();
+        } else {
+            if (isset($value) && $value <> '') {
                 insert_record("choice_options", $option);
             }
         }
@@ -144,7 +123,7 @@ function choice_update_instance($choice) {
 }
 
 function choice_show_form($choice, $user, $cm) {
-    
+
 //$cdisplay is an array of the display info for a choice $cdisplay[$optionid]->text  - text name of option.
 //                                                                            ->maxanswers -maxanswers for this option
 //                                                                            ->full - whether this option is full or not. 0=not full, 1=full
@@ -154,7 +133,7 @@ function choice_show_form($choice, $user, $cm) {
     foreach ($choice->option as $optionid => $text) {
         if (isset($text)) { //make sure there are no dud entries in the db with blank text values.
             $countanswers = (get_records("choice_answers", "optionid", $optionid));
-            $countans = 0;           
+            $countans = 0;
             $context = get_context_instance(CONTEXT_MODULE, $cm->id);
             if (!empty($countanswers)) {
                 foreach ($countanswers as $ca) { //only return enrolled users.
@@ -183,7 +162,7 @@ function choice_show_form($choice, $user, $cm) {
             if ($choice->limitanswers && ($countans >= $maxans) && (empty($cdisplay[$aid]->checked)) ) {
                 $cdisplay[$aid]->disabled = ' disabled="disabled" ';
             } else {
-                $cdisplay[$aid]->disabled = ''; 
+                $cdisplay[$aid]->disabled = '';
             }
             $aid++;
         }
@@ -192,11 +171,11 @@ function choice_show_form($choice, $user, $cm) {
     switch ($choice->display) {
         case CHOICE_DISPLAY_HORIZONTAL:
             echo "<table cellpadding=\"20\" cellspacing=\"20\" align=\"center\"><tr>";
-                                    
-            foreach ($cdisplay as $cd) { 
+
+            foreach ($cdisplay as $cd) {
                 echo "<td align=\"center\" valign=\"top\">";
                 echo "<input type=\"radio\" name=\"answer\" value=\"".$cd->optionid."\" alt=\"".strip_tags(format_text($cd->text))."\"". $cd->checked.$cd->disabled." />";
-                if (!empty($cd->disabled)) {               
+                if (!empty($cd->disabled)) {
                     echo format_text($cd->text."<br /><strong>".get_string('full', 'choice')."</strong>");
                 } else {
                     echo format_text($cd->text);
@@ -272,7 +251,7 @@ function choice_user_submit_response($formanswer, $choice, $userid, $courseid, $
 
     if (!($choice->limitanswers && ($countanswers >= $maxans) )) {
         if ($current) {
-                    
+
             $newanswer = $current;
             $newanswer->optionid = $formanswer;
             $newanswer->timemodified = time();
@@ -293,7 +272,7 @@ function choice_user_submit_response($formanswer, $choice, $userid, $courseid, $
         }
     } else {
         if (!($current->optionid==$formanswer)) { //check to see if current choice already selected - if not display error
-            error("this choice is full!");    
+            error("this choice is full!");
         }
     }
 }
@@ -383,7 +362,7 @@ function choice_show_results($choice, $course, $cm, $forcepublish='') {
                 echo '<input type="hidden" name="mode" value="overview" />';
             }
 
-            echo "<table cellpadding=\"5\" cellspacing=\"10\" align=\"center\" class=\"results names\">";            
+            echo "<table cellpadding=\"5\" cellspacing=\"10\" align=\"center\" class=\"results names\">";
             echo "<tr>";
             $count = 0;
             foreach ($useranswer as $optionid => $userlist) {
@@ -442,8 +421,8 @@ function choice_show_results($choice, $course, $cm, $forcepublish='') {
                 }
                 echo "<td align=\"center\" class=\"count\">";
                 $countanswers = get_records("choice_answers", "optionid", $optionid);
-                $countans = 0;  
-                if (!empty($countanswers)) {              
+                $countans = 0;
+                if (!empty($countanswers)) {
                     foreach ($countanswers as $ca) { //only return enrolled users.
                         if (has_capability('mod/choice:choose', get_context_instance(CONTEXT_MODULE, $cm->id))) {
                            $countans = $countans+1;
@@ -461,7 +440,7 @@ function choice_show_results($choice, $course, $cm, $forcepublish='') {
                 echo "</td>";
                 $count++;
             }
-            
+
             /// Print "Select all" etc.
             if (has_capability('mod/choice:readresponses', $context)) {
                 echo '<tr><td><p>';
@@ -476,7 +455,7 @@ function choice_show_results($choice, $course, $cm, $forcepublish='') {
                 echo '<script type="text/javascript">'."\n<!--\n".'document.getElementById("noscriptmenuaction").style.display = "none";'."\n-->\n".'</script>';
                 echo '</p></td></tr>';
             }
-                   
+
             echo "</tr></table>";
             if (has_capability('mod/choice:readresponses', $context)) {
                 echo "</form></div>";
@@ -561,12 +540,12 @@ function choice_show_results($choice, $course, $cm, $forcepublish='') {
             echo "</tr></table>";
 
         break;
-    }   
+    }
 }
 
 
 function choice_delete_responses($attemptids) {
-    
+
     if(!is_array($attemptids) || empty($attemptids)) {
         return false;
     }
@@ -581,15 +560,15 @@ function choice_delete_responses($attemptids) {
         if ($todelete = get_record('choice_answers', 'id', $attemptid)) {
              delete_records('choice_answers', 'id', $attemptid);
         }
-    }    
+    }
     return true;
 }
 
 
 function choice_delete_instance($id) {
-// Given an ID of an instance of this module, 
-// this function will permanently delete the instance 
-// and any data that depends on it.  
+// Given an ID of an instance of this module,
+// this function will permanently delete the instance
+// and any data that depends on it.
 
     if (! $choice = get_record("choice", "id", "$id")) {
         return false;
@@ -607,7 +586,7 @@ function choice_delete_instance($id) {
 
     if (! delete_records("choice", "id", "$choice->id")) {
         $result = false;
-    }   
+    }
 
     return $result;
 }
@@ -645,7 +624,7 @@ function choice_get_choice($choiceid) {
     if ($choice = get_record("choice", "id", $choiceid)) {
         if ($options = get_records("choice_options", "choiceid", $choiceid, "id")) {
             foreach ($options as $option) {
-                $choice->option[$option->id] = $option->text; 
+                $choice->option[$option->id] = $option->text;
                 $choice->maxanswers[$option->id] = $option->maxanswers;
             }
             return $choice;
diff --git a/mod/choice/mod.html b/mod/choice/mod.html
deleted file mode 100644 (file)
index 59d8b6e..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-    if (empty($form->name)) {
-        $form->name = "";
-    }
-    if (empty($form->text)) {
-        $form->text = "";
-    }
-    if (empty($form->format)) {
-        $form->format = 0;
-    }
-    if (empty($form->display)) {
-        $form->display = 0;
-    }
-    if (empty($form->timeopen)) {
-        $form->timeopen = "";
-        $form->timerestrict = 0;
-    } else {
-        $form->timerestrict = 1;
-    }
-    if (empty($form->timeclose)) {
-        $form->timeclose = "";
-    }
-    if (empty($form->publish)) {
-        $form->publish = 0;
-    }
-    if (empty($form->showresults)) {
-        $form->showresults = 0;
-    }
-    if (empty($form->allowupdate)) {
-        $form->allowupdate = 0;
-    }
-    if (empty($form->showunanswered)) {
-        $form->showunanswered = 0;
-    }
-    if (empty($form->limitanswers)) {
-        $form->limitanswers = 0;
-    }
-
-?>
-<script type="text/javascript">
-function lockselects(form, master, subitems) {
-  // subitems is an array of names of sub items
-  // requires that each item in subitems has a
-  // companion hidden item in the form with the
-  // same name but prefixed by "h"
-  // master is the name of the selct
-  // x is the option that is selcted to enforce the lock.
-  if (eval("document."+form+"."+master+".selected")) {   
-    for (i=0; i<subitems.length; i++) {   
-      lockoption(form, subitems[i]);
-    }
-  } else {
-    for (i=0; i<subitems.length; i++) {    
-      unlockoption(form, subitems[i]);
-    }
-  }
-  return(true);
-}
-
-</script>
-<form name="form" method="post" action="mod.php">
-
-<table cellpadding="5">
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("choicename","choice") ?>:</strong></td>
-    <td colspan="2">
-        <input type="text" name="name" size="30" alt="<?php print_string("choicename","choice") ?>" value="<?php p($form->name) ?>" />
-    </td>
-</tr>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("choicetext","choice") ?>:</strong><br /><br />
-     <?php
-        helpbutton("writing", get_string("helpwriting"), "moodle", true, true);
-        echo "<br />";
-        helpbutton("questions", get_string("helpquestions"), "moodle", true, true);
-        echo "<br />";
-        if ($usehtmleditor) {
-           helpbutton("richtext", get_string("helprichtext"), "moodle", true, true);
-        } else {
-           emoticonhelpbutton("form", "text");
-        }
-        echo "<br />";
-      ?>
-    </td>
-    <td colspan="2">
-    <?php
-       print_textarea($usehtmleditor, 20, 60, 680, 400, "text", $form->text);
-
-       if ($usehtmleditor) {
-           echo '<input type="hidden" name="format" value="'.FORMAT_HTML.'" />';
-       } else {
-           echo "<div align=\"right\">";
-           helpbutton("textformat", get_string("formattexttype"));
-           print_string("formattexttype");
-           echo ":&nbsp;";
-           if (!$form->format) {
-               $form->format = $defaultformat;
-           }
-           choose_from_menu(format_text_menu(), "format", $form->format, "");
-           echo "</div>";
-       }
-    ?>
-    </td>
-</tr>
-
-<?php
-$standardblanks = 10;
-$count = 0;
-$limitfieldlist = '';
-if (!empty($form->instance) && ($options = get_records_menu('choice_options','choiceid', $form->instance, 'id', 'id,text')) && ($options2 = get_records_menu('choice_options','choiceid', $form->instance, 'id', 'id,maxanswers')) ) {
-    foreach ($options as $id => $text) { 
-        $count++;
-    ?>
-    <tr valign=top>
-        <td align="right"><strong><?php echo get_string("choice","choice").' '.$count; ?>:</strong></td>
-        <td>
-            <input type="text" name="oldoption<?php p($id) ?>" size="60" value="<?php p($text) ?>" id="oldoption<?php p($id) ?>" />
-            <?php helpbutton("options", get_string("modulenameplural", "choice"), "choice") ?>
-        </td>
-        <td align="right"><strong><?php p(get_string("limit","choice")) ?>:</strong>
-            <input type="text" name="oldlimit<?php p($id) ?>" size="4" value="<?php p($options2[$id]) ?>" id="oldlimit<?php p($id) ?>" />
-            <input type="hidden" name="holdlimit<?php p($id) ?>" value="0"/>
-        </td>
-    </tr>
-    <?php
-    $limitfieldlist .= "'oldlimit".$id."',";              
-    } 
-    $standardblanks = 2;
-}
-for ($i=1; $i<=$standardblanks; $i++) {
-        $count++;
-    ?>
-    <tr valign=top>
-        <td align="right"><strong><?php echo get_string("choice","choice").' '.$count; ?>:</strong></td>
-        <td>
-            <input type="text" name="newoption<?php p($i) ?>" size="60" value="" id="newoption<?php p($i) ?>">
-            <?php helpbutton("options", get_string("modulenameplural", "choice"), "choice") ?>
-        </td>
-        <td align="right"><strong><?php p(get_string("limit","choice")) ?>:</strong>
-            <input type="text" name="newlimit<?php p($i)?>" size="4" value="0" id="newlimit<?php p($i) ?>" />
-            <input type="hidden" name="hnewlimit<?php p($i) ?>" value="0" />
-        </td>
-    </tr>
-    <?php
-    $limitfieldlist .= "'newlimit".$i."',";    
-}
-$limitfieldlist = trim($limitfieldlist, ",");
-?>
-<script type="text/javascript">
-    limititems = [<?php p($limitfieldlist); ?>];
-</script>
-
-<tr valign="top">
-    <td align="right" colspan="2"><strong><?php print_string("limitanswers", "choice") ?>:</strong></td>
-    <td align="right">
-        <?php
-        $menuoptions[0] = get_string("disable");
-        $menuoptions[1] = get_string("enable");
-        helpbutton("limit", get_string("limit", "choice"), "choice");
-        echo '&nbsp;';
-        choose_from_menu($menuoptions, "limitanswers", "$form->limitanswers", "", "return lockselects('form','limitanswers.options[0]', limititems)");
-        ?>
-    </td>
-</tr>
-
-<?php if ($form->limitanswers == 0) { //lock the limit fields if limit isn't used.
-?>
-<script type="text/javascript">
-    lockoptions('form','limitanswers', limititems);
-</script>
-<?php }?>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("timerestrict", "choice") ?>:</strong></td>
-    <td colspan="2">
-        <script type="text/javascript">
-            var timeitems = ['openday','openmonth','openyear','openhour', 'openminute', 'closeday','closemonth','closeyear','closehour','closeminute'];
-        </script>
-
-        <input name="timerestrict" type="checkbox" value="1" alt="<?php print_string("timerestrict", "choice") ?>" onclick="return lockoptions('form','timerestrict', timeitems)" <?php if ($form->timerestrict) echo 'checked="checked"'; ?> />
-    <?php
-        helpbutton("timerestrict", get_string("timerestrict","choice"), "choice");
-     ?>
-    </td>
-</tr>
-<tr valign="top">
-    <td>&nbsp;</td>
-    <td colspan="2">
-        <table>
-            <tr>
-                <td align="right"><strong><?php print_string("choiceopen", "choice") ?>:</strong></td>
-                <td>
-
-    <?php
-        if (!$form->timeopen and $course->format == "weeks") {
-            $form->timeopen  = $course->startdate + (($form->section - 1) * 608400);
-        }
-        print_date_selector("openday", "openmonth", "openyear", $form->timeopen);
-        print_time_selector("openhour", "openminute", $form->timeopen);
-     ?>
-
-                    <input type="hidden" name="hopenday" value="0" />
-                    <input type="hidden" name="hopenmonth" value="0" />
-                    <input type="hidden" name="hopenyear" value="0" />
-                    <input type="hidden" name="hopenhour" value="0" />
-                    <input type="hidden" name="hopenminute" value="0" />
-                </td>
-            </tr>
-            <tr>
-                <td align="right"><strong><?php print_string("choiceclose", "choice") ?>:</strong></td>
-                <td>
-
-    <?php
-        if (!$form->timeclose and $course->format == "weeks") {
-            $form->timeclose  = $course->startdate + (($form->section) * 608400);
-        }
-        print_date_selector("closeday", "closemonth", "closeyear", $form->timeclose);
-        print_time_selector("closehour", "closeminute", $form->timeclose);
-     ?>
-
-                    <input type="hidden" name="hcloseday" value="0" />
-                    <input type="hidden" name="hclosemonth" value="0" />
-                    <input type="hidden" name="hcloseyear" value="0" />
-                    <input type="hidden" name="hclosehour" value="0" />
-                    <input type="hidden" name="hcloseminute" value="0" />
-
-    <?php
-        if (! $form->timerestrict) {
-            echo "<script type=\"text/javascript\">";
-            echo "lockoptions('form','timerestrict', timeitems);";
-            echo "</script>\n";
-        }
-    ?>
-
-                </td>
-            </tr>
-        </table>
-
-    </td>
-</tr>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("displaymode","choice") ?>:</strong></td>
-    <td colspan="2">
-        <?php
-        require_once("$CFG->dirroot/mod/choice/lib.php");
-        choose_from_menu($CHOICE_DISPLAY, "display", "$form->display", "");
-        ?>
-        <br />
-    </td>
-</tr>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("publish","choice") ?>:</strong></td>
-    <td colspan="2">
-        <?php
-        require_once("$CFG->dirroot/mod/choice/lib.php");
-        choose_from_menu($CHOICE_SHOWRESULTS, "showresults", "$form->showresults", "", "return lockselects('form','showresults.options[0]',['publish'])");                                                                            
-        ?>
-        <br />
-    </td>
-</tr>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("privacy","choice") ?>:</strong></td>
-    <td colspan="2">
-        <?php
-        require_once("$CFG->dirroot/mod/choice/lib.php");
-        choose_from_menu($CHOICE_PUBLISH, "publish", "$form->publish", "");
-        ?>
-        <br />
-        <input type="hidden" name="hpublish" value="0" />
-    </td>
-</tr>
-<script type="text/javascript">
-    lockselects('form','showresults.options[0]',['publish']);
-</script>
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("allowupdate","choice") ?>:</strong></td>
-    <td colspan="2">
-        <?php
-        $menuoptions[0] = get_string("no");
-        $menuoptions[1] = get_string("yes");
-        choose_from_menu($menuoptions, "allowupdate", "$form->allowupdate", "");
-        ?>
-        <br />
-    </td>
-</tr>
-
-
-<tr valign="top">
-    <td align="right"><strong><?php print_string("showunanswered","choice") ?>:</strong></td>
-    <td colspan="2">
-        <?php
-        $menuoptions[0] = get_string("no");
-        $menuoptions[1] = get_string("yes");
-        choose_from_menu($menuoptions, "showunanswered", "$form->showunanswered", "");
-        ?>
-        <br />
-    </td>
-</tr>
-<?php print_standard_coursemodule_settings($form); ?>
-</table>
-
-<center>
-<input type="hidden" name="course"     value="<?php p($form->course) ?>" />
-<input type="hidden" name="sesskey"    value="<?php p($form->sesskey) ?>" />
-<input type="hidden" name="coursemodule"  value="<?php p($form->coursemodule) ?>" />
-<input type="hidden" name="section"    value="<?php p($form->section) ?>" />
-<input type="hidden" name="module"     value="<?php p($form->module) ?>" />
-<input type="hidden" name="modulename" value="<?php p($form->modulename) ?>" />
-<input type="hidden" name="instance"   value="<?php p($form->instance) ?>" />
-<input type="hidden" name="mode"       value="<?php p($form->mode) ?>" />
-<input type="submit" value="<?php print_string("savechanges") ?>" />
-<input type="submit" name="cancel" value="<?php print_string("cancel") ?>" />
-</center>
-</form>
diff --git a/mod/choice/mod_form.php b/mod/choice/mod_form.php
new file mode 100644 (file)
index 0000000..ba5ae70
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+require_once ('moodleform_mod.php');
+
+class choice_mod_form extends moodleform_mod {
+
+       function definition() {
+           global $CHOICE_SHOWRESULTS, $CHOICE_PUBLISH, $CHOICE_DISPLAY;
+
+               $mform    =& $this->_form;
+               $renderer =& $mform->defaultRenderer();
+
+//-------------------------------------------------------------------------------
+        $mform->addElement('header', 'general', get_string('general', 'form'));
+
+        $mform->addElement('text', 'name', get_string('choicename', 'choice'));
+               $mform->setType('name', PARAM_TEXT);
+               $mform->addRule('name', null, 'required', null, 'client');
+
+        $mform->addElement('htmleditor', 'text', get_string('choicetext', 'choice'));
+               $mform->setType('text', PARAM_RAW);
+               $mform->addRule('text', null, 'required', null, 'client');
+
+        $mform->addElement('format', 'format', get_string('format'));
+
+        $repeatarray=array();
+        $repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('choice','choice'));
+        $repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('choice','choice'));
+        $repeatarray[] = &MoodleQuickForm::createElement('text', 'limit', get_string('limit','choice'));
+        $repeatarray[] = &MoodleQuickForm::createElement('hidden', 'optionid', 0);
+
+        if ($this->_instance){
+            $repeatno=count_records('choice_options', 'choiceid', $this->_instance);
+            $repeatno+=2;
+        } else {
+            $repeatno=10;
+        }
+
+        $this->repeat_elements($repeatarray, $repeatno,
+                    array('limit'=>array('default'=>0,
+                                        'type'=>PARAM_INT,
+                                        'disabledif'=>array('limitanswers', 'eq', 0)),
+
+                         'option' =>array('type'=>PARAM_TEXT,
+                                        'helpbutton'=>array('options', get_string('modulenameplural', 'choice'), 'choice')),
+                         'optionid' =>array('type'=>PARAM_INT)),
+                    'option_repeats', 'option_add_fields');
+
+
+
+        $menuoptions=array();
+        $menuoptions[0] = get_string('disable');
+        $menuoptions[1] = get_string('enable');
+        $mform->addElement('select', 'limitanswers', get_string('limitanswers', 'choice'), $menuoptions);
+               $mform->setHelpButton('limitanswers', array('limit', get_string('limit', 'choice'), 'choice'));
+
+//-------------------------------------------------------------------------------
+        $mform->addElement('header', 'timerestricthdr', get_string('timerestrict', 'choice'));
+        $mform->addElement('checkbox', 'timerestrict', get_string('timerestrict', 'choice'));
+               $mform->setHelpButton('timerestrict', array("timerestrict", get_string("timerestrict","choice"), "choice"));
+
+
+               $mform->addElement('date_time_selector', 'timeopen', get_string("choiceopen", "choice"));
+        $mform->disabledIf('timeopen', 'timerestrict');
+
+        $mform->addElement('date_time_selector', 'timeclose', get_string("choiceclose", "choice"));
+        $mform->disabledIf('timeclose', 'timerestrict');
+
+//-------------------------------------------------------------------------------
+        $mform->addElement('header', 'miscellaneoussettingshdr', get_string('miscellaneoussettings', 'form'));
+
+        $mform->addElement('select', 'display', get_string("displaymode","choice"), $CHOICE_DISPLAY);
+
+        $mform->addElement('select', 'showresults', get_string("publish", "choice"), $CHOICE_SHOWRESULTS);
+
+        $mform->addElement('select', 'publish', get_string("privacy", "choice"), $CHOICE_PUBLISH);
+        $mform->disabledIf('publish', 'showresults', 'eq', 0);
+
+        $mform->addElement('selectyesno', 'allowupdate', get_string("allowupdate", "choice"));
+
+        $mform->addElement('selectyesno', 'showunanswered', get_string("showunanswered", "choice"));
+
+//-------------------------------------------------------------------------------
+               $this->standard_coursemodule_elements();
+//-------------------------------------------------------------------------------
+
+        $buttonarray=array();
+        $buttonarray[] = &MoodleQuickForm::createElement('submit', 'submit', get_string('savechanges'));
+        $buttonarray[] = &MoodleQuickForm::createElement('submit', 'cancel', get_string('cancel'));
+        $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
+               $renderer->addStopFieldsetElements('buttonar');
+       }
+
+       function defaults_preprocessing(&$default_values){
+        if (!empty($this->_instance) && ($options = get_records_menu('choice_options','choiceid', $this->_instance, 'id', 'id,text'))
+                  && ($options2 = get_records_menu('choice_options','choiceid', $this->_instance, 'id', 'id,maxanswers')) ) {
+            $choiceids=array_keys($options);
+            $options=array_values($options);
+            $options2=array_values($options2);
+
+            foreach (array_keys($options) as $key){
+                $default_values['option['.$key.']'] = $options[$key];
+                $default_values['limit['.$key.']'] = $options2[$key];
+                $default_values['optionid['.$key.']'] = $choiceids[$key];
+            }
+
+        }
+        if (empty($default_values['timeopen'])) {
+            $default_values['timerestrict'] = 0;
+        } else {
+            $default_values['timerestrict'] = 1;
+        }
+
+       }
+
+}
+?>
\ No newline at end of file