]> git.mjollnir.org Git - moodle.git/commitdiff
merge the items dropdown, radio and check to multiplechoice item
authoragrabs <agrabs>
Mon, 28 Apr 2008 09:58:09 +0000 (09:58 +0000)
committeragrabs <agrabs>
Mon, 28 Apr 2008 09:58:09 +0000 (09:58 +0000)
merge the items dropdownrated, radiorated to multiplechoicerated item
the creating or editing of an item now use the formslib

25 files changed:
mod/feedback/db/upgrade.php
mod/feedback/edit_item.php
mod/feedback/item/captcha/captcha_form.php [new file with mode: 0644]
mod/feedback/item/captcha/default.ttf [deleted file]
mod/feedback/item/captcha/lib.php
mod/feedback/item/captcha/print_captcha.php
mod/feedback/item/check/lib.php [deleted file]
mod/feedback/item/dropdown/lib.php [deleted file]
mod/feedback/item/dropdownrated/lib.php [deleted file]
mod/feedback/item/label/label_form.php [new file with mode: 0644]
mod/feedback/item/label/lib.php
mod/feedback/item/multichoice/lib.php [new file with mode: 0644]
mod/feedback/item/multichoice/multichoice_form.php [new file with mode: 0644]
mod/feedback/item/multichoicerated/lib.php [new file with mode: 0644]
mod/feedback/item/multichoicerated/multichoicerated_form.php [new file with mode: 0644]
mod/feedback/item/numeric/lib.php
mod/feedback/item/numeric/numeric_form.php [new file with mode: 0644]
mod/feedback/item/radio/lib.php [deleted file]
mod/feedback/item/radiorated/lib.php [deleted file]
mod/feedback/item/textarea/lib.php
mod/feedback/item/textarea/textarea_form.php [new file with mode: 0644]
mod/feedback/item/textfield/lib.php
mod/feedback/item/textfield/textfield_form.php [new file with mode: 0644]
mod/feedback/restorelib.php
mod/feedback/version.php

index e8c2c8b0d5813ee9470953193147da4eddc763f5..83a12af9de73874d17c777f2bce82d755152536d 100644 (file)
@@ -141,6 +141,32 @@ function xmldb_feedback_upgrade($oldversion=0) {
         }
     }
 
+    if ($result && $oldversion < 2008042400) { //New version in version.php
+        if($all_nonanonymous_feedbacks = get_records('feedback', 'anonymous', 2)) {
+            $update_sql = 'UPDATE '.$CFG->prefix.'feedback_completed SET anonymous_response = 2 WHERE feedback = ';
+            foreach ($all_nonanonymous_feedbacks as $fb) {
+                $result = $result && execute_sql($update_sql.$fb->id);
+            }
+        }
+    }
+
+    if ($result && $oldversion < 2008042401) { //New version in version.php
+        if($result) {
+            $update_sql1 = "UPDATE ".$CFG->prefix."feedback_item SET presentation = CONCAT('r>>>>>',presentation) WHERE typ IN('radio','radiorated')";
+            $update_sql2 = "UPDATE ".$CFG->prefix."feedback_item SET presentation = CONCAT('d>>>>>',presentation) WHERE typ IN('dropdown','dropdownrated')";
+            $update_sql3 = "UPDATE ".$CFG->prefix."feedback_item SET presentation = CONCAT('c>>>>>',presentation) WHERE typ = 'check'";
+            $result = $result && execute_sql($update_sql1);
+            $result = $result && execute_sql($update_sql2);
+            $result = $result && execute_sql($update_sql3);
+        }
+        if($result) {
+            $update_sql1 = "UPDATE ".$CFG->prefix."feedback_item SET typ = 'multichoice' WHERE typ IN('radio','check','dropdown')";
+            $update_sql2 = "UPDATE ".$CFG->prefix."feedback_item SET typ = 'multichoicerated' WHERE typ IN('radiorated','dropdownrated')";
+            $result = $result && execute_sql($update_sql1);            
+            $result = $result && execute_sql($update_sql2);            
+        }
+    }
+
 
 /// And upgrade begins here. For each one, you'll need one 
 /// block of code similar to the next one. Please, delete 
index 70f3c4780af79a53f8ef6eb560b884a4c7b65f85..2f584bd67fcb371a06a80249eb478b35e0850b4f 100644 (file)
     // set up some general variables
     $usehtmleditor = can_use_html_editor(); 
 
+
     if(($formdata = data_submitted('nomatch')) AND !confirm_sesskey()) {
         error('no sesskey defined');
     }
+
     if ($id) {
         if (! $cm = get_coursemodule_from_id('feedback', $id)) {
             error("Course Module ID was incorrect");
@@ -69,7 +70,7 @@
     if(isset($formdata->cancel)){
         redirect(htmlspecialchars('edit.php?id=' . $id));
     }
-    
+
     // if(isset($formdata->editcancel) AND $formdata->editcancel == 1){
         // redirect(htmlspecialchars('edit.php?id=' . $id));
     // }
     if(isset($error)){echo $error;}
 
     feedback_print_errors();
-            
+    
+    //new formdefinition
+    require_once('blank_form.php');
+    $itemclass = 'feedback_item_'.$typ;
+    $itemobj = new $itemclass();
+    $item_form = &$itemobj->show_edit($item);
+    
+    // $item_form = new feedback_blank_form();
+
+    $i_form = &$item_form->_form;
+    // $i_form->addElement('header', 'general', 'Titel');
+    $i_form->addElement('hidden', 'id', $id);
+    $i_form->addElement('hidden', 'itemid', isset($item->id)?$item->id:'');
+    $i_form->addElement('hidden', 'typ', $typ);
+    $i_form->addElement('hidden', 'feedbackid', $feedback->id);
+    
+
+    $lastposition = count_records('feedback_item', 'feedback', $feedback->id);    
+    if($position == -1){
+        $i_formselect_last = $lastposition + 1;
+        $i_formselect_value = $lastposition + 1;
+    }else {
+        $i_formselect_last = $lastposition;
+        $i_formselect_value = $item->position;
+    }
+    $i_formselect = $i_form->addElement('select',
+                                        'position', 
+                                        get_string('position', 'feedback').'&nbsp;', 
+                                        array_slice(range(0,$i_formselect_last),1,$i_formselect_last,true));
+    $i_formselect->setValue($i_formselect_value);
+    if(!empty($item->id)){
+        $i_form->addElement('hidden', 'updateitem', '1');
+        $i_form->addElement('submit', 'update_item', get_string('update_item', 'feedback'));
+            // echo '<input type="hidden" id="updateitem" name="updateitem" value="1" />';
+            // echo '<input type="submit" value ="'.get_string('update_item', 'feedback').'" />';
+    }else{
+        $i_form->addElement('hidden', 'saveitem', '1');
+        $i_form->addElement('submit', 'save_item', get_string('save_item', 'feedback'));
+            // echo '<input type="hidden" id="saveitem" name="saveitem" value="1" />';
+            // echo '<input type="submit" value="'.get_string('save_item', 'feedback').'" />';
+    }
+    $i_form->addElement('cancel');
+    $item_form->display();
+
+/*            
     // print_simple_box_start('center');
     print_box_start('generalbox boxwidthwide boxaligncenter');
-    echo '<form action="'.$ME.'" method="post">';
-    echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '" />';
+        echo '<form action="'.$ME.'" method="post">';
+        echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '" />';
     
     //this div makes the buttons stand side by side
     echo '<div>';
     $itemobj = new $itemclass();
     $itemobj->show_edit($item, $usehtmleditor);
     echo '</div>';        
-    echo '<input type="hidden" name="id" value="'.$id.'" />';
-    echo '<input type="hidden" name="itemid" value="'.(isset($item->id)?$item->id:'').'" />';
-    echo '<input type="hidden" name="typ" value="'.$typ.'" />';
-    echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />';
+        echo '<input type="hidden" name="id" value="'.$id.'" />';
+        echo '<input type="hidden" name="itemid" value="'.(isset($item->id)?$item->id:'').'" />';
+        echo '<input type="hidden" name="typ" value="'.$typ.'" />';
+        echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />';
     
     //choose the position
     $lastposition = count_records('feedback_item', 'feedback', $feedback->id);
     echo '</form>';
     //////////////////////////////////////////////////////////////////////////////////////        
     //////////////////////////////////////////////////////////////////////////////////////
-
+*/
     // print_simple_box_end();
     print_box_end();
   
diff --git a/mod/feedback/item/captcha/captcha_form.php b/mod/feedback/item/captcha/captcha_form.php
new file mode 100644 (file)
index 0000000..d212342
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_captcha_form extends moodleform {
+    var $type = "captcha";
+    var $requiredcheck;
+    var $itemname;
+    var $select;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+        
+        $this->select = $mform->addElement('select',
+                                            'count_of_nums', 
+                                            get_string('count_of_nums', 'feedback').'&nbsp;', 
+                                            array_slice(range(0,10),3,10,true));
+        
+    }
+}
+?>
diff --git a/mod/feedback/item/captcha/default.ttf b/mod/feedback/item/captcha/default.ttf
deleted file mode 100644 (file)
index 754a9b7..0000000
Binary files a/mod/feedback/item/captcha/default.ttf and /dev/null differ
index 0aec717184a181699d672688f960ec9d9e883085..ab1ff6718ddfcc79041f0d22f1905899b55659b1 100644 (file)
@@ -8,36 +8,25 @@ class feedback_item_captcha extends feedback_item_base {
     
     }
     
-    function show_edit($item, $usehtmleditor = false) {
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('captcha_form.php');
+        
+        $item_form = new feedback_captcha_form();
 
-        $item->presentation=empty($item->presentation)? 3 : $item->presentation;
+        $item->presentation = empty($item->presentation) ? 3 : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+        
+        $item->required = isset($item->required) ? $item->required : 1;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
 
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('numeric', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                $item->required = isset($item->required) ? $item->required : 1;
-                echo ($item->required == 1?'checked="checked"':'');
-                ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td><?php print_string('count_of_nums', 'feedback');?></td>
-                <td>
-                    <select name="count_of_nums">
-                    <?php
-                        feedback_print_numeric_option_list(3, 10, $item->presentation);
-                    ?>
-                    </select>
-                </td>
-            </tr>
-        </table>
-    <?php
+        $item_form->itemname->setValue($item->name);
+        
+        $item_form->select->setValue($item->presentation);
+        return $item_form;
     }
 
     //liefert eine Struktur ->name, ->data = array(mit Antworten)
index 2723286b880a3b4e157c69cc386a0a44e080f14d..8a3111a5285c78539cd2f02325943f8e632f2f72 100644 (file)
@@ -23,7 +23,8 @@
 
     $height = 40;
     $charcount = $SESSION->feedback->item->captcha->charcount;
-    $fontfile = $CFG->dirroot.'/mod/feedback/item/captcha/default.ttf';
+    // $fontfile = $CFG->dirroot.'/mod/feedback/item/captcha/default.ttf';
+    $fontfile = $CFG->libdir.'/default.ttf';
 
     $ttfbox = imagettfbbox ( 30, 0, $fontfile, 'H' );//the text to measure
     $charwidth = $ttfbox[2];
diff --git a/mod/feedback/item/check/lib.php b/mod/feedback/item/check/lib.php
deleted file mode 100644 (file)
index 65b7f78..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<?PHP  // $Id$
-defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
-require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
-
-define('FEEDBACK_CHECK_LINE_SEP', '|');
-define('FEEDBACK_CHECK_ADJUST_SEP', '<<<<<');
-class feedback_item_check extends feedback_item_base {
-    var $type = "check";
-    function init() {
-    
-    }
-    
-    function show_edit($item, $usehtmleditor = false) {
-
-        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
-       
-        //check, whether the buttons are vertical or horizontal
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_CHECK_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-        
-    ?>
-        <table>
-            <tr><th colspan="2">
-                <?php print_string('check', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                    $item->required=isset($item->required) ? $item->required : 0;
-                    echo ($item->required == 1?'checked="checked"':'');
-                    ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td colspan="2">
-                    <?php print_string('adjustment', 'feedback');?>:
-                    &nbsp;<?php print_string('vertical', 'feedback');?><input type="radio" name="horizontal" value="0" <?php echo $horizontal ? '' : 'checked="checked"';?> />
-                    &nbsp;<?php print_string('horizontal', 'feedback');?><input type="radio" name="horizontal" value="1" <?php echo $horizontal ? 'checked="checked"' : '';?> />
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td>
-                    <?php print_string('check_values', 'feedback');?>
-                    <?php print_string('use_one_line_for_each_value', 'feedback');?>
-                </td>
-                <td>
-        <?php
-                    $itemvalues = str_replace(FEEDBACK_CHECK_LINE_SEP, "\n", stripslashes_safe($presentation));
-        ?>
-                    <textarea name="itemvalues" cols="30" rows="5"><?php echo $itemvalues;?></textarea>
-                </td>
-            </tr>
-        </table>
-        <?php
-    }
-
-    //liefert ein Array mit drei Werten(typ, name, XXX)
-    //XXX ist ein Array (anzahl der Antworten bei Typ checkbox) Jedes Element ist eine Struktur (answertext, answercount)
-    function get_analysed($item, $groupid = false, $courseid = false) {
-        $analysedItem = array();
-        $analysedItem[] = $item->typ;
-        $analysedItem[] = $item->name;
-        //die moeglichen Antworten extrahieren
-        $answers = null;
-        $presentation = '';
-        @list($presentation) = explode(FEEDBACK_CHECK_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-       
-        $answers = explode (FEEDBACK_CHECK_LINE_SEP, stripslashes_safe($presentation));
-        if(!is_array($answers)) return null;
-
-        //die Werte holen
-        $values = feedback_get_group_values($item, $groupid, $courseid);
-        if(!$values) return null;
-        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
-       
-        $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($answers); $i++) {
-            $ans = null;
-            $ans->answertext = $answers[$i-1];
-            $ans->answercount = 0;
-            foreach($values as $value) {
-                //ist die Antwort gleich dem index der Antworten + 1?
-                $vallist = explode(FEEDBACK_CHECK_LINE_SEP, $value->value);
-                foreach($vallist as $val) {
-                    if ($val == $i) {
-                       $ans->answercount++;
-                    }
-                }
-            }
-            $ans->quotient = $ans->answercount / sizeof($values);
-            $analysedAnswer[] = $ans;
-        }
-        $analysedItem[] = $analysedAnswer;
-        return $analysedItem;
-    }
-
-    function get_printval($item, $value) {
-        $printval = '';
-        
-        if(!isset($value->value)) return $printval;
-
-        @list($presentation) = explode(FEEDBACK_CHECK_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-
-        $presentation = array_values(explode (FEEDBACK_CHECK_LINE_SEP, stripslashes_safe($presentation)));
-        $vallist = array_values(explode (FEEDBACK_CHECK_LINE_SEP, $value->value));
-        for($i = 0; $i < sizeof($vallist); $i++) {
-            for($k = 0; $k < sizeof($presentation); $k++) {
-                if($vallist[$i] == ($k + 1)) {//Die Werte beginnen bei 1, das Array aber mit 0
-                    $printval .= trim($presentation[$k]) . chr(10);
-                    break;
-                }
-            }
-        }
-        return $printval;
-    }
-
-    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
-        $sep_dec = get_string('separator_decimal', 'feedback');
-        if(substr($sep_dec, 0, 2) == '[['){
-            $sep_dec = FEEDBACK_DECIMAL;
-        }
-
-        $sep_thous = get_string('separator_thousand', 'feedback');
-        if(substr($sep_thous, 0, 2) == '[['){
-            $sep_thous = FEEDBACK_THOUSAND;
-        }
-       
-        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
-        if($analysedItem) {
-            $itemnr++;
-            $itemname = stripslashes($analysedItem[1]);
-            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . $itemname .'</th></tr>';
-            $analysedVals = $analysedItem[2];
-            $pixnr = 0;
-            foreach($analysedVals as $val) {
-                if( function_exists("bcmod")) {
-                    $intvalue = bcmod($pixnr, 10);
-                }else {
-                    $intvalue = 0;
-                }
-                $pix = "pics/$intvalue.gif";
-                $pixnr++;
-                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
-                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
-                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ':</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />&nbsp;' . $val->answercount . (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'').'</td></tr>';
-            }
-        }
-        return $itemnr;
-    }
-
-    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
-        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
-
-
-        $data = $analysed_item[2];
-
-        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
-        //frage schreiben
-        $worksheet->write_string($rowOffset, 0, stripslashes($analysed_item[1]));
-        if(is_array($data)) {
-            for($i = 0; $i < sizeof($data); $i++) {
-                $aData = $data[$i];
-             
-                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
-                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext));
-             
-                $worksheet->setFormat("<l><vo>");
-                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
-                $worksheet->setFormat("<l><f><vo><pr>");
-                $worksheet->write_number($rowOffset + 2, $i + 1, $aData->quotient);
-            }
-        }
-        $rowOffset +=3 ;
-        return $rowOffset;
-    }
-
-    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
-       
-        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
-        
-        //extract the adjustment-info
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_CHECK_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-       
-        $presentation = explode (FEEDBACK_CHECK_LINE_SEP, stripslashes_safe($presentation));
-        if (is_array($value)) {
-            $values = $value;
-        }else {
-            $values = explode(FEEDBACK_CHECK_LINE_SEP, $value);
-        }
-        if($highlightrequire AND $item->required AND $values[0] == '') {
-            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
-        }else {
-            $highlight = '';
-        }
-        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
-        
-        echo '<td '.$highlight.' valign="top" align="'.$align.'">'.format_text(stripslashes_safe($item->name).$requiredmark, true, false, false).'</td>';
-        echo '<td valign="top" align="'.$align.'">';
-
-        $index = 1;
-        $checked = '';
-        if($readonly){
-            // print_simple_box_start($align);
-            print_box_start('generalbox boxalign'.$align);
-            foreach($presentation as $check){
-                foreach($values as $val) {
-                    if($val == $index){
-                        echo text_to_html($check . '<br />', true, false, false);
-                        break;
-                    }
-                }
-                $index++;
-            }
-            // print_simple_box_end();
-            print_box_end();
-        } else {
-            if($horizontal) {
-                echo '<table><tr>';
-            }
-            foreach($presentation as $check){
-                foreach($values as $val) {
-                    if($val == $index){
-                        $checked = 'checked="checked"';
-                        break;
-                    }else{
-                        $checked = '';
-                    }
-                }
-                $inputname = $item->typ. '_' . $item->id;
-                $inputid = $item->typ. '_' . $item->id.'_'.$index;
-                if($horizontal) {
-    ?>
-                    <td valign="top" align="<?php echo $align;?>"><input type="checkbox"
-                        name="<?php echo $inputname;?>[]"
-                        id="<?php echo $inputid;?>"
-                        value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($check, true, false, false);?>&nbsp;</label>
-                    </td>
-    <?php         
-                }else {
-    ?>
-                    <table><tr>
-                    <td valign="top" align="<?php echo $align;?>"><input type="checkbox"
-                        name="<?php echo $inputname;?>[]"
-                        id="<?php echo $inputid;?>"
-                        value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($check, true, false, false);?>&nbsp;</label>
-                    </td></tr></table>
-    <?php
-                }
-                $index++;
-            }
-            if($horizontal) {
-                echo '</tr></table>';
-            }
-        }
-    ?>
-            <input type="hidden" name="<?php echo $item->typ. '_' . $item->id?>[]" value="" />
-        </td>
-    <?php
-    }
-
-    function check_value($value, $item) {
-       //if the item is not required, so the check is true if no value is given
-        if((!isset($value) OR !is_array($value) OR $value[0] == '' OR $value[0] == 0) AND $item->required != 1) return true;
-        if($value[0] == "")return false;
-        return true;
-    }
-
-    function create_value($data) {
-        $vallist = $data;
-        return trim($this->item_arrayToString($vallist));
-    }
-
-    function get_presentation($data) {
-        $present = str_replace("\n", FEEDBACK_CHECK_LINE_SEP, trim($data->itemvalues));
-        if($data->horizontal == 1) {
-            $present .= FEEDBACK_CHECK_ADJUST_SEP.'1';
-        }
-        return $present;
-    }
-
-    function get_hasvalue() {
-        return 1;
-    }
-
-    function item_arrayToString($arr) {
-        if(!is_array($arr)) {
-            return '';
-        }
-        $retval = '';
-        $arrvals = array_values($arr);
-        $arrvals = clean_param($arrvals, PARAM_INT);  //prevent sql-injection
-        $retval = $arrvals[0];
-        for($i = 1; $i < sizeof($arrvals) - 1; $i++) {
-            $retval .= FEEDBACK_CHECK_LINE_SEP.$arrvals[$i];
-        }
-        return $retval;
-    }
-}
-?>
diff --git a/mod/feedback/item/dropdown/lib.php b/mod/feedback/item/dropdown/lib.php
deleted file mode 100644 (file)
index c92b6ec..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-<?PHP  // $Id$
-defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
-require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
-
-class feedback_item_dropdown extends feedback_item_base {
-    var $type = "dropdown";
-    function init() {
-    
-    }
-    
-    function show_edit($item, $usehtmleditor = false) {
-
-        $item->presentation=empty($item->presentation)?'':$item->presentation;
-
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('dropdown', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                $item->required=isset($item->required)?$item->required:0;
-                echo ($item->required == 1?'checked="checked"':'');
-                ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td>
-                    <?php print_string('dropdown_values', 'feedback');?>
-                    <?php print_string('use_one_line_for_each_value', 'feedback');?>
-                </td>
-                <td>
-    <?php
-                    $itemvalues = str_replace('|', "\n", stripslashes_safe($item->presentation));
-    ?>
-                    <textarea name="itemvalues" cols="30" rows="5"><?php echo $itemvalues;?></textarea>
-                </td>
-            </tr>
-        </table>
-    <?php
-    }
-
-    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
-    //XXX ist ein eindimensionales Array (anzahl der Antworten bei Typ DropDown) Jedes Element ist eine Struktur (answertext, answercount)
-    function get_analysed($item, $groupid = false, $courseid = false) {
-        $analysedItem = array();
-        $analysedItem[] = $item->typ;
-        $analysedItem[] = $item->name;
-        //die moeglichen Antworten extrahieren
-        $answers = null;
-        $answers = explode ("|", stripslashes_safe($item->presentation));
-        if(!is_array($answers)) return null;
-
-        //die Werte holen
-        //$values = get_records('feedback_value', 'item', $item->id);
-        $values = feedback_get_group_values($item, $groupid, $courseid);
-        if(!$values) return null;
-        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
-        
-        $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($answers); $i++) {
-            $ans = null;
-            $ans->answertext = $answers[$i-1];
-            $ans->answercount = 0;
-            foreach($values as $value) {
-                //ist die Antwort gleich dem index der Antworten + 1?
-                if ($value->value == $i) {
-                    $ans->answercount++;
-                }
-            }
-            $ans->quotient = $ans->answercount / sizeof($values);
-            $analysedAnswer[] = $ans;
-        }
-        $analysedItem[] = $analysedAnswer;
-        return $analysedItem;
-    }
-
-    function get_printval($item, $value) {
-        $printval = '';
-        
-        if(!isset($value->value)) return $printval;
-
-        $presentation = explode ("|", stripslashes_safe($item->presentation));
-        $index = 1;
-        foreach($presentation as $pres){
-            if($value->value == $index){
-                $printval = $pres;
-                break;
-            }
-            $index++;
-        }
-        return $printval;
-    }
-
-    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
-        $sep_dec = get_string('separator_decimal', 'feedback');
-        if(substr($sep_dec, 0, 2) == '[['){
-            $sep_dec = FEEDBACK_DECIMAL;
-        }
-        
-        $sep_thous = get_string('separator_thousand', 'feedback');
-        if(substr($sep_thous, 0, 2) == '[['){
-            $sep_thous = FEEDBACK_THOUSAND;
-        }
-        
-        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
-        if($analysedItem) {
-            //echo '<table>';
-            $itemnr++;
-            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . stripslashes($analysedItem[1]) .'</th></tr>';
-            $analysedVals = $analysedItem[2];
-            $pixnr = 0;
-            foreach($analysedVals as $val) {
-                if( function_exists("bcmod")) {
-                    $intvalue = bcmod($pixnr, 10);
-                }else {
-                    $intvalue = 0;
-                }
-                $pix = "pics/$intvalue.gif";
-                $pixnr++;
-                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
-                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
-                echo '<tr><td valign="top" align="left">-&nbsp;&nbsp;' . trim($val->answertext) . ':</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />&nbsp;' . $val->answercount . (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'').'</td></tr>';
-            }
-            //echo '</table>';
-        }
-        return $itemnr;
-    }
-
-    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
-        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
-
-
-        $data = $analysed_item[2];
-
-        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
-        //frage schreiben
-        $worksheet->write_string($rowOffset, 0, stripslashes($analysed_item[1]));
-        if(is_array($data)) {
-            for($i = 0; $i < sizeof($data); $i++) {
-                $aData = $data[$i];
-                
-                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
-                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext));
-                
-                $worksheet->setFormat("<l><vo>");
-                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
-                $worksheet->setFormat("<l><f><vo><pr>");
-                $worksheet->write_number($rowOffset + 2, $i + 1, $aData->quotient);
-            }
-        }
-        $rowOffset +=3 ;
-        return $rowOffset;
-    }
-
-    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
-        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
-        
-        $presentation = explode ("|", stripslashes_safe($item->presentation));
-        if($highlightrequire AND $item->required AND intval($value) <= 0) {
-            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
-        }else {
-            $highlight = '';
-        }
-        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
-    ?>
-        <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
-        <td valign="top" align="<?php echo $align;?>">
-    <?php
-        $index = 1;
-        $selected = '';
-        if($readonly){
-            foreach($presentation as $dropdown){
-                if($value == $index){
-                    // print_simple_box_start($align);
-                    print_box_start('generalbox boxalign'.$align);
-                    echo text_to_html($dropdown, true, false, false);
-                    // print_simple_box_end();
-                    print_box_end();
-                    break;
-                }
-                $index++;
-            }
-        } else {
-    ?>
-            <select name="<?php echo $item->typ .'_' . $item->id;?>" size="1">
-                <option value="0">&nbsp;</option>
-    <?php
-            foreach($presentation as $dropdown){
-                if($value == $index){
-                    $selected = 'selected="selected"';
-                }else{
-                    $selected = '';
-                }
-    ?>
-                <option value="<?php echo $index;?>" <?php echo $selected;?>><?php echo text_to_html($dropdown, true, false, false);?></option>
-    <?php
-                $index++;
-            }
-    ?>
-            </select>
-    <?php
-        }
-    ?>
-        </td>
-    <?php
-    }
-
-    function check_value($value, $item) {
-        //if the item is not required, so the check is true if no value is given
-        if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
-        if($value == 0)return false;
-        return true;
-    }
-
-    function create_value($data) {
-        $data = clean_param($data, PARAM_INT);
-        return $data;
-    }
-
-    function get_presentation($data) {
-        $present = str_replace("\n", '|', trim($data->itemvalues));
-        return $present;
-    }
-
-    function get_hasvalue() {
-        return 1;
-    }
-}
-?>
diff --git a/mod/feedback/item/dropdownrated/lib.php b/mod/feedback/item/dropdownrated/lib.php
deleted file mode 100644 (file)
index 223a6d2..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-<?PHP  // $Id$
-defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
-require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
-
-define('FEEDBACK_DROPDOWNRATED_MAXCOUNT', 10); //count of possible items
-define('FEEDBACK_DROPDOWN_LINE_SEP', '|');
-define('FEEDBACK_DROPDOWN_VALUE_SEP', '####');
-
-
-class feedback_item_dropdownrated extends feedback_item_base {
-    var $type = "dropdownrated";
-    function init() {
-
-    }
-
-    function show_edit($item, $usehtmleditor = false) {
-
-         $item->presentation=empty($item->presentation)?'':$item->presentation;
-
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('dropdownrated', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php
-                         $item->required=isset($item->required)?$item->required:0;
-                         echo ($item->required == 1?'checked="checked"':'');
-                         ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td>
-                    <?php print_string('dropdown_values', 'feedback');?>
-                </td>
-                <td>
-    <?php
-                    //$itemvalues = str_replace('|', "\n", stripslashes_safe($item->presentation));
-                    if($itemvalues = explode(FEEDBACK_DROPDOWN_LINE_SEP, stripslashes_safe($item->presentation), FEEDBACK_DROPDOWNRATED_MAXCOUNT)){
-                        echo '<table>';
-                        echo '<tr>';
-                        echo '<td><b>'.get_string('line_values', 'feedback').'</b></td><td><b>'.get_string('line_labels', 'feedback').'</b></td>';
-                        echo '</tr>';
-                        for ($i = 0; $i < FEEDBACK_DROPDOWNRATED_MAXCOUNT; $i++) {
-                            if(count($itemvalues) > $i) { 
-                                $value = explode(FEEDBACK_DROPDOWN_VALUE_SEP, $itemvalues[$i]);
-                                if(count($value) <= 1) {
-                                    $value[0] = ''; $value[1] = '';
-                                }
-                            }else {
-                                $value[0] = ''; $value[1] = '';
-                            }
-                            echo '<tr>';
-                            echo '<td><input type="text" name="fr_val[]" size="4" maxlength="4" value="'.$value[0].'" /></td>';
-                            echo '<td><input type="text" name="fr_label[]" size="40" maxlength="255" value="'.$value[1].'" /></td>';
-                            echo '</tr>';
-                        }
-                        echo '</table>';
-                    }
-                    
-    ?>
-                </td>
-            </tr>
-        </table>
-    <?php
-    }
-
-    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
-    //XXX ist ein eindimensionales Array (Mittelwert der Werte der Antworten bei Typ dropdown_rated) Jedes Element ist eine Struktur (answertext, avg)
-    function get_analysed($item, $groupid = false, $courseid = false) {
-        $analysedItem = array();
-        $analysedItem[] = $item->typ;
-        $analysedItem[] = $item->name;
-        //die moeglichen Antworten extrahieren
-        $lines = null;
-        $lines = explode (FEEDBACK_DROPDOWN_LINE_SEP, stripslashes_safe($item->presentation));
-        if(!is_array($lines)) return null;
-
-        //die Werte holen
-        //$values = get_records('feedback_value', 'item', $item->id);
-        $values = feedback_get_group_values($item, $groupid, $courseid);
-        if(!$values) return null;
-        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
-        
-        $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($lines); $i++) {
-            $item_values = explode(FEEDBACK_DROPDOWN_VALUE_SEP, $lines[$i-1]);
-            $ans = null;
-            $ans->answertext = $item_values[1];
-            $avg = 0.0;
-            $anscount = 0;
-            foreach($values as $value) {
-                //ist die Antwort gleich dem index der Antworten + 1?
-                if ($value->value == $i) {
-                    $avg += $item_values[0]; //erst alle Werte aufsummieren
-                    $anscount++;
-                }
-            }
-            $ans->answercount = $anscount;
-            $ans->avg = doubleval($avg) / doubleval(sizeof($values));
-            $ans->value = $item_values[0];
-            $ans->quotient = $ans->answercount / sizeof($values);
-            $analysedAnswer[] = $ans;
-        }
-        $analysedItem[] = $analysedAnswer;
-        return $analysedItem;
-    }
-
-    function get_printval($item, $value) {
-        $printval = '';
-        
-        if(!isset($value->value)) return $printval;
-        
-        $presentation = explode (FEEDBACK_DROPDOWN_LINE_SEP, stripslashes_safe($item->presentation));
-        $index = 1;
-        foreach($presentation as $pres){
-            if($value->value == $index){
-                $dropdown_label = explode(FEEDBACK_DROPDOWN_VALUE_SEP, $pres);
-                $printval = $dropdown_label[1];
-                break;
-            }
-            $index++;
-        }
-        return $printval;
-    }
-
-    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
-        $sep_dec = get_string('separator_decimal', 'feedback');
-        if(substr($sep_dec, 0, 2) == '[['){
-            $sep_dec = FEEDBACK_DECIMAL;
-        }
-        
-        $sep_thous = get_string('separator_thousand', 'feedback');
-        if(substr($sep_thous, 0, 2) == '[['){
-            $sep_thous = FEEDBACK_THOUSAND;
-        }
-            
-        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
-        if($analysedItem) {
-            //echo '<table>';
-            $itemnr++;
-            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . stripslashes($analysedItem[1]) .'</th></tr>';
-            $analysedVals = $analysedItem[2];
-            $pixnr = 0;
-            $avg = 0.0;
-            foreach($analysedVals as $val) {
-                if( function_exists("bcmod")) {
-                    $intvalue = bcmod($pixnr, 10);
-                }else {
-                    $intvalue = 0;
-                }
-                $pix = "pics/$intvalue.gif";
-                $pixnr++;
-                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
-                
-                $avg += $val->avg;
-                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
-                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ' ('.$val->value.'):</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />' . $val->answercount. (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'') . '</td></tr>';
-            }
-            $avg = number_format(($avg), 2, $sep_dec, $sep_thous);
-            echo '<tr><td align="left" colspan="2"><b>'.get_string('average', 'feedback').': '.$avg.'</b></td></tr>';
-            //echo '</table>';
-        }
-        return $itemnr;
-    }
-
-    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
-        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
-
-
-        $data = $analysed_item[2];
-
-        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
-        //frage schreiben
-        $worksheet->write_string($rowOffset, 0, stripslashes($analysed_item[1]));
-        if(is_array($data)) {
-            $avg = 0.0;
-            for($i = 0; $i < sizeof($data); $i++) {
-                $aData = $data[$i];
-                
-                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
-                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext).' ('.$aData->value.')');
-                
-                $worksheet->setFormat("<l><vo>");
-                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
-                //$worksheet->setFormat("<l><f><vo>");
-                //$worksheet->write_number($rowOffset + 2, $i + 1, $aData->avg);
-                $avg += $aData->avg;
-            }
-            //mittelwert anzeigen
-            $worksheet->setFormat("<l><f><ro2><vo><c:red>");
-            $worksheet->write_string($rowOffset, sizeof($data) + 1, get_string('average', 'feedback'));
-            
-            $worksheet->setFormat("<l><f><vo>");
-            $worksheet->write_number($rowOffset + 1, sizeof($data) + 1, $avg);
-        }
-        $rowOffset +=2 ;
-        return $rowOffset;
-    }
-
-    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
-        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
-        
-        $lines = explode (FEEDBACK_DROPDOWN_LINE_SEP, stripslashes_safe($item->presentation));
-        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
-        if($highlightrequire AND $item->required AND intval($value) <= 0) {
-            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
-        }else {
-            $highlight = '';
-        }
-    ?>
-        <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
-        <td valign="top" align="<?php echo $align;?>">
-    <?php
-        $index = 1;
-        $selected = '';
-        if($readonly){
-            foreach($lines as $line){
-                if($value == $index){
-                    $dropdown_value = explode(FEEDBACK_DROPDOWN_VALUE_SEP, $line);
-                    // print_simple_box_start($align);
-                    print_box_start('generalbox boxalign'.$align);
-                    echo text_to_html($dropdown_value[1], true, false, false);
-                    // print_simple_box_end();
-                    print_box_end();
-                    break;
-                }
-                $index++;
-            }
-        } else {
-            echo '<select name="'. $item->typ . '_' . $item->id . '">';
-            echo '<option value="0">&nbsp;</option>';
-            foreach($lines as $line){
-                if($value == $index){
-                    $selected = 'selected="selected"';
-                }else{
-                    $selected = '';
-                }
-                $dropdown_value = explode(FEEDBACK_DROPDOWN_VALUE_SEP, $line);
-                if($edit) {
-                    echo '<option value="'. $index.'" '. $selected.'>'. clean_text('('.$dropdown_value[0].') '.$dropdown_value[1]).'</option>';
-                }else {
-                    echo '<option value="'. $index.'" '. $selected.'>'. clean_text($dropdown_value[1]).'</option>';
-                }
-                $index++;
-            }
-            echo '</select>';
-            /*
-            if($item->required == 1) {
-                echo '<input type="hidden" name="'.$item->typ . '_' . $item->id.'" value="1" />';
-            }
-            */
-        }
-    ?>
-        </td>
-    <?php
-    }
-
-    function check_value($value, $item) {
-        //if the item is not required, so the check is true if no value is given
-        if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
-        if(intval($value) > 0)return true;
-        return false;
-    }
-
-    function create_value($data) {
-        $data = clean_param($data, PARAM_INT);
-        return $data;
-    }
-
-    function get_presentation($data) {
-        $valuelines = $data->fr_val;
-        $labellines = $data->fr_label;
-        $present = '';
-        if(!is_array($valuelines) AND !is_array($labellines)) {
-            return $present;
-        }
-        
-        //if( trim($valuelines[0]) != ''){
-            $value = intval($valuelines[0]);
-            $label = $labellines[0];
-            $present .= $value.FEEDBACK_DROPDOWN_VALUE_SEP.$label;
-        //}
-        
-        for($i = 1; $i < FEEDBACK_DROPDOWNRATED_MAXCOUNT; $i++) {
-            if( (trim($valuelines[$i]) == '') AND (trim($labellines[$i]) == ''))continue;
-            
-            $value = intval($valuelines[$i]);
-            $label = $labellines[$i];
-            $present .= FEEDBACK_DROPDOWN_LINE_SEP.$value.FEEDBACK_DROPDOWN_VALUE_SEP.$label;
-        }
-        //$present = str_replace("\n", '|', trim($data->itemvalues));
-        return $present;
-    }
-
-    function get_hasvalue() {
-        return 1;
-    }
-}
-?>
diff --git a/mod/feedback/item/label/label_form.php b/mod/feedback/item/label/label_form.php
new file mode 100644 (file)
index 0000000..3ebbc22
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_label_form extends moodleform {
+    var $type = "label";
+    var $area;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        
+        $mform->addElement('hidden', 'itemname', $this->type);
+        $this->area = $mform->addElement('htmleditor', 'presentation', '', array('rows'=>20));
+    }
+}
+?>
index 7a9d76b8b8359dc634557aec156622f44042d00c..e998e498cc480b2bd1109aff456b6a2ea8bf357a 100644 (file)
@@ -8,16 +8,17 @@ class feedback_item_label extends feedback_item_base {
     
     }
     
-    function show_edit($item, $usehtmleditor = false) {
-        $item->presentation=isset($item->presentation)?$item->presentation:'';
-        print_string('label', 'feedback');
-        echo '<br />';
-        print_textarea($usehtmleditor, 20, 0, 0, 0, "presentation", $item->presentation);
-        echo '<input type="hidden" id="itemname" name="itemname" value="label" />';
-
-        if ($usehtmleditor) {
-            use_html_editor();
-        }
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('label_form.php');
+        
+        $item_form = new feedback_label_form();
+        
+        $item->presentation = isset($item->presentation) ? $item->presentation : '';
+        
+        $item_form->area->setValue($item->presentation);
+        return $item_form;
     }
     function print_item($item){
     ?>
diff --git a/mod/feedback/item/multichoice/lib.php b/mod/feedback/item/multichoice/lib.php
new file mode 100644 (file)
index 0000000..b342a0d
--- /dev/null
@@ -0,0 +1,499 @@
+<?php  // $Id$
+defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
+require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
+
+define('FEEDBACK_MULTICHOICE_TYPE_SEP', '>>>>>');
+define('FEEDBACK_MULTICHOICE_LINE_SEP', '|');
+define('FEEDBACK_MULTICHOICE_ADJUST_SEP', '<<<<<');
+
+class feedback_item_multichoice extends feedback_item_base {
+    var $type = "multichoice";
+    function init() {
+        
+    }
+    
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('multichoice_form.php');
+        
+        $item_form = new feedback_multichoice_form();
+        
+        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+
+        $info = $this->get_info($item);
+
+        $item->required = isset($item->required) ? $item->required : 0;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
+        
+        $item_form->itemname->setValue($item->name);
+        
+        $item_form->selectadjust->setValue($info->horizontal);
+        
+        $item_form->selecttype->setValue($info->subtype);
+
+        $itemvalues = str_replace(FEEDBACK_MULTICHOICE_LINE_SEP, "\n", stripslashes_safe($info->presentation));
+        $itemvalues = str_replace("\n\n", "\n", $itemvalues);
+        $item_form->values->setValue($itemvalues);
+        return $item_form;
+    }
+
+    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
+    //XXX ist ein eindimensionales Array (anzahl der Antworten bei Typ Radio) Jedes Element ist eine Struktur (answertext, answercount)
+    function get_analysed($item, $groupid = false, $courseid = false) {
+        $info = $this->get_info($item);
+        
+        $analysedItem = array();
+        $analysedItem[] = $item->typ;
+        $analysedItem[] = $item->name;
+        //die moeglichen Antworten extrahieren
+        $answers = null;
+        // $presentation = '';
+        // @list($presentation) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation); //remove the adjustment-info
+        
+        $answers = explode (FEEDBACK_MULTICHOICE_LINE_SEP, stripslashes_safe($info->presentation));
+        if(!is_array($answers)) return null;
+
+        //die Werte holen
+        $values = feedback_get_group_values($item, $groupid, $courseid);
+        if(!$values) return null;
+        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
+        
+        $analysedAnswer = array();
+        if($info->subtype == 'c') {
+            for($i = 1; $i <= sizeof($answers); $i++) {
+                $ans = null;
+                $ans->answertext = $answers[$i-1];
+                $ans->answercount = 0;
+                foreach($values as $value) {
+                    //ist die Antwort gleich dem index der Antworten + 1?
+                    $vallist = explode(FEEDBACK_MULTICHOICE_LINE_SEP, $value->value);
+                    foreach($vallist as $val) {
+                        if ($val == $i) {
+                           $ans->answercount++;
+                        }
+                    }
+                }
+                $ans->quotient = $ans->answercount / sizeof($values);
+                $analysedAnswer[] = $ans;
+            }
+        }else {
+            for($i = 1; $i <= sizeof($answers); $i++) {
+                $ans = null;
+                $ans->answertext = $answers[$i-1];
+                $ans->answercount = 0;
+                foreach($values as $value) {
+                    //ist die Antwort gleich dem index der Antworten + 1?
+                    if ($value->value == $i) {
+                        $ans->answercount++;
+                    }
+                }
+                $ans->quotient = $ans->answercount / sizeof($values);
+                $analysedAnswer[] = $ans;
+            }
+        }
+        $analysedItem[] = $analysedAnswer;
+        return $analysedItem;
+    }
+
+    function get_printval($item, $value) {
+        $info = $this->get_info($item);
+        
+        $printval = '';
+        
+        if(!isset($value->value)) return $printval;
+                
+        // @list($presentation) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation); //remove the adjustment-info
+        
+        $presentation = explode (FEEDBACK_MULTICHOICE_LINE_SEP, stripslashes_safe($info->presentation));
+        
+        if($info->subtype == 'c') {
+            $vallist = array_values(explode (FEEDBACK_MULTICHOICE_LINE_SEP, $value->value));
+            for($i = 0; $i < sizeof($vallist); $i++) {
+                for($k = 0; $k < sizeof($presentation); $k++) {
+                    if($vallist[$i] == ($k + 1)) {//Die Werte beginnen bei 1, das Array aber mit 0
+                        $printval .= trim($presentation[$k]) . chr(10);
+                        break;
+                    }
+                }
+            }
+        }else {
+            $index = 1;
+            foreach($presentation as $pres){
+                if($value->value == $index){
+                    $printval = $pres;
+                    break;
+                }
+                $index++;
+            }
+        }
+        return $printval;
+    }
+
+    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
+        $sep_dec = get_string('separator_decimal', 'feedback');
+        if(substr($sep_dec, 0, 2) == '[['){
+            $sep_dec = FEEDBACK_DECIMAL;
+        }
+        
+        $sep_thous = get_string('separator_thousand', 'feedback');
+        if(substr($sep_thous, 0, 2) == '[['){
+            $sep_thous = FEEDBACK_THOUSAND;
+        }
+            
+        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
+        if($analysedItem) {
+            $itemnr++;
+            $itemname = stripslashes($analysedItem[1]);
+            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . $itemname .'</th></tr>';
+            $analysedVals = $analysedItem[2];
+            $pixnr = 0;
+            foreach($analysedVals as $val) {
+                if( function_exists("bcmod")) {
+                    $intvalue = bcmod($pixnr, 10);
+                }else {
+                    $intvalue = 0;
+                }
+                $pix = "pics/$intvalue.gif";
+                $pixnr++;
+                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
+                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
+                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ':</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />&nbsp;' . $val->answercount . (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'').'</td></tr>';
+            }
+        }
+        return $itemnr;
+    }
+
+    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
+        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
+
+
+        $data = $analysed_item[2];
+
+        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
+        //frage schreiben
+        $worksheet->write_string($rowOffset, 0, stripslashes($analysed_item[1]));
+        if(is_array($data)) {
+            for($i = 0; $i < sizeof($data); $i++) {
+                $aData = $data[$i];
+                
+                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
+                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext));
+                
+                $worksheet->setFormat("<l><vo>");
+                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
+                $worksheet->setFormat("<l><f><vo><pr>");
+                $worksheet->write_number($rowOffset + 2, $i + 1, $aData->quotient);
+            }
+        }
+        $rowOffset +=3 ;
+        return $rowOffset;
+    }
+
+    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
+        $info = $this->get_info($item);
+        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
+        
+        $presentation = explode (FEEDBACK_MULTICHOICE_LINE_SEP, stripslashes_safe($info->presentation));
+        
+        
+        //test if required and no value is set so we have to mark this item
+        //we have to differ check and the other subtypes
+        if($info->subtype == 'c') {
+            if (is_array($value)) {
+                $values = $value;
+            }else {
+                $values = explode(FEEDBACK_MULTICHOICE_LINE_SEP, $value);
+            }
+            if($highlightrequire AND $item->required AND $values[0] == '') {
+                $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
+            }else {
+                $highlight = '';
+            }
+            $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
+            
+            echo '<td '.$highlight.' valign="top" align="'.$align.'">'.format_text(stripslashes_safe($item->name).$requiredmark, true, false, false).'</td>';
+            echo '<td valign="top" align="'.$align.'">';
+        }else {
+            if($highlightrequire AND $item->required AND intval($value) <= 0) {
+                $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
+            }else {
+                $highlight = '';
+            }
+            $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
+            ?>
+                <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
+                <td valign="top" align="<?php echo $align;?>">
+            <?php
+        }
+        $index = 1;
+        $checked = '';
+        if($readonly){
+            if($info->subtype == 'c') {
+                print_box_start('generalbox boxalign'.$align);
+                foreach($presentation as $pres){
+                    foreach($values as $val) {
+                        if($val == $index){
+                            echo text_to_html($pres . '<br />', true, false, false);
+                            break;
+                        }
+                    }
+                    $index++;
+                }
+                // print_simple_box_end();
+                print_box_end();
+            }else {
+                foreach($presentation as $pres){
+                    if($value == $index){
+                        // print_simple_box_start($align);
+                        print_box_start('generalbox boxalign'.$align);
+                        echo text_to_html($pres, true, false, false);
+                        // print_simple_box_end();
+                        print_box_end();
+                        break;
+                    }
+                    $index++;
+                }
+            }
+        } else {
+            //print the "not_selected" item on radiobuttons
+            if($info->subtype == 'r') {
+    ?>
+                <table><tr>
+                <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                        name="<?php echo $item->typ . '_' . $item->id ;?>"
+                        id="<?php echo $item->typ . '_' . $item->id.'_xxx';?>"
+                        value="" <?php echo $value ? '' : 'checked="checked"';?> />
+                </td>
+                <td align="<?php echo $align;?>">
+                    <label for="<?php echo $item->typ . '_' . $item->id.'_xxx';?>"><?php print_string('not_selected', 'feedback');?>&nbsp;</label>
+                </td>
+                </tr></table>
+    <?php
+            }
+            if($info->subtype != 'd') {
+                if($info->horizontal) {
+                    echo '<table><tr>';
+                }
+            }
+            
+            switch($info->subtype) {
+                case 'r':
+                    $this->print_item_radio($presentation, $item, $value, $info, $align);
+                    break;
+                case 'c':
+                    $this->print_item_check($presentation, $item, $value, $info, $align);
+                    break;
+                case 'd':
+                    $this->print_item_dropdown($presentation, $item, $value, $info, $align);
+                    break;
+            }
+            
+            if($info->subtype != 'd') {
+                if($info->horizontal) {
+                    echo '</tr></table>';
+                }
+            }
+            /*
+            if($item->required == 1) {
+                echo '<input type="hidden" name="'.$item->typ . '_' . $item->id.'" value="1" />';
+            }
+            */
+        }
+    ?>
+        </td>
+    <?php
+    }
+
+    function check_value($value, $item) {
+        $info = $this->get_info($item);
+        
+        if($info->subtype == 'c') {
+            if((!isset($value) OR !is_array($value) OR $value[0] == '' OR $value[0] == 0) AND $item->required != 1){
+                return true;
+            }
+            if($value[0] == ""){
+                return false;
+            }
+            return true;
+        }else {
+            //if the item is not required, so the check is true if no value is given
+            if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
+            if(intval($value) > 0)return true;
+        }
+        return false;
+    }
+
+    function create_value($data) {
+        $vallist = $data;
+        return trim($this->item_arrayToString($vallist));
+    }
+
+    function get_presentation($data) {
+        $present = str_replace("\n", FEEDBACK_MULTICHOICE_LINE_SEP, trim($data->itemvalues));
+        if(!isset($data->subtype)) {
+            $subtype = 'r';
+        }else {
+            $subtype = substr($data->subtype, 0, 1);
+        }
+        if(isset($data->horizontal) AND $data->horizontal == 1 AND $subtype != 'd') {
+            $present .= FEEDBACK_MULTICHOICE_ADJUST_SEP.'1';
+        }
+        return $subtype.FEEDBACK_MULTICHOICE_TYPE_SEP.$present;
+    }
+
+    function get_hasvalue() {
+        return 1;
+    }
+    
+    function get_info($item) {
+        $presentation = empty($item->presentation) ? '' : $item->presentation;
+        
+        $info = new object();
+        //check the subtype of the multichoice
+        //it can be check(c), radio(r) or dropdown(d)
+        $info->subtype = '';
+        $info->presentation = '';
+        $info->horizontal = false;
+        
+        @list($info->subtype, $info->presentation) = explode(FEEDBACK_MULTICHOICE_TYPE_SEP, $item->presentation);
+        if(!isset($info->subtype)) {
+            $info->subtype = 'r';
+        }
+
+        if($info->subtype != 'd') {
+            @list($info->presentation, $info->horizontal) = explode(FEEDBACK_MULTICHOICE_ADJUST_SEP, $info->presentation);
+            if(isset($info->horizontal) AND $info->horizontal == 1) {
+                $info->horizontal = true;
+            }else {
+                $info->horizontal = false;
+            }
+        }
+        return $info;
+    }
+    
+    function item_arrayToString($value) {
+        if(!is_array($value)) {
+            return $value;
+        }
+        $retval = '';
+        $arrvals = array_values($value);
+        $arrvals = clean_param($arrvals, PARAM_INT);  //prevent sql-injection
+        $retval = $arrvals[0];
+        for($i = 1; $i < sizeof($arrvals) - 1; $i++) {
+            $retval .= FEEDBACK_MULTICHOICE_LINE_SEP.$arrvals[$i];
+        }
+        return $retval;
+    }
+    
+    function print_item_radio($presentation, $item, $value, $info, $align) {
+        $index = 1;
+        $checked = '';
+        foreach($presentation as $radio){
+            if($value == $index){
+                $checked = 'checked="checked"';
+            }else{
+                $checked = '';
+            }
+            $inputname = $item->typ . '_' . $item->id;
+            $inputid = $inputname.'_'.$index;
+            if($info->horizontal) {
+        ?>
+                <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                    name="<?php echo $inputname;?>"
+                    id="<?php echo $inputid;?>"
+                    value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td>
+                <td align="<?php echo $align;?>">
+                    <label for="<?php echo $inputid;?>"><?php echo text_to_html($radio, true, false, false);?>&nbsp;</label>
+                </td>
+        <?php
+            }else {
+        ?>
+                <table><tr>
+                <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                        name="<?php echo $inputname;?>"
+                        id="<?php echo $inputid;?>"
+                        value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($radio, true, false, false);?>&nbsp;</label>
+                </td></tr></table>
+        <?php
+            }
+            $index++;
+        }
+    }
+
+    function print_item_check($presentation, $item, $value, $info, $align) {
+       
+        if (is_array($value)) {
+            $values = $value;
+        }else {
+            $values = explode(FEEDBACK_MULTICHOICE_LINE_SEP, $value);
+        }
+        
+        $index = 1;
+        $checked = '';
+        foreach($presentation as $check){
+            foreach($values as $val) {
+                if($val == $index){
+                    $checked = 'checked="checked"';
+                    break;
+                }else{
+                    $checked = '';
+                }
+            }
+            $inputname = $item->typ. '_' . $item->id;
+            $inputid = $item->typ. '_' . $item->id.'_'.$index;
+            if($info->horizontal) {
+        ?>
+                <td valign="top" align="<?php echo $align;?>"><input type="checkbox"
+                    name="<?php echo $inputname;?>[]"
+                    id="<?php echo $inputid;?>"
+                    value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($check, true, false, false);?>&nbsp;</label>
+                </td>
+        <?php         
+            }else {
+        ?>
+                <table><tr>
+                <td valign="top" align="<?php echo $align;?>"><input type="checkbox"
+                    name="<?php echo $inputname;?>[]"
+                    id="<?php echo $inputid;?>"
+                    value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($check, true, false, false);?>&nbsp;</label>
+                </td></tr></table>
+        <?php
+            }
+            $index++;
+        }
+    }
+    
+    function print_item_dropdown($presentation, $item, $value, $info, $align) {
+        ?>
+        <select name="<?php echo $item->typ .'_' . $item->id;?>" size="1">
+            <option value="0">&nbsp;</option>
+        <?php
+        $index = 1;
+        $checked = '';
+        foreach($presentation as $dropdown){
+            if($value == $index){
+                $selected = 'selected="selected"';
+            }else{
+                $selected = '';
+            }
+        ?>
+            <option value="<?php echo $index;?>" <?php echo $selected;?>><?php echo text_to_html($dropdown, true, false, false);?></option>
+        <?php
+            $index++;
+        }
+        ?>
+        </select>
+        <?php
+    }
+    
+}
+    
+?>
diff --git a/mod/feedback/item/multichoice/multichoice_form.php b/mod/feedback/item/multichoice/multichoice_form.php
new file mode 100644 (file)
index 0000000..d0f54ae
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_multichoice_form extends moodleform {
+    var $type = "multichoice";
+    var $requiredcheck;
+    var $itemname;
+    var $selectadjust;
+    var $selecttype;
+    var $values;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+
+        $this->selectadjust = $mform->addElement('select',
+                                            'horizontal', 
+                                            get_string('adjustment', 'feedback').'&nbsp;', 
+                                            array(0 => get_string('vertical', 'feedback'), 1 => get_string('horizontal', 'feedback')));
+        
+        $this->selecttype = $mform->addElement('select',
+                                            'subtype', 
+                                            get_string('multichoicetype', 'feedback').'&nbsp;', 
+                                            array('r'=>get_string('radio', 'feedback'),
+                                                  'c'=>get_string('check', 'feedback'),
+                                                  'd'=>get_string('dropdown', 'feedback')));
+
+        $mform->addElement('static', 'hint', get_string('multichoice_values', 'feedback'), get_string('use_one_line_for_each_value', 'feedback'));
+        
+        $this->values = $mform->addElement('textarea', 'itemvalues', '', 'wrap="virtual" rows="10" cols="30"');
+
+    }
+}
+?>
diff --git a/mod/feedback/item/multichoicerated/lib.php b/mod/feedback/item/multichoicerated/lib.php
new file mode 100644 (file)
index 0000000..f896956
--- /dev/null
@@ -0,0 +1,419 @@
+<?php  // $Id$
+defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
+require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
+
+define('FEEDBACK_RADIORATED_ADJUST_SEP', '<<<<<');
+
+define('FEEDBACK_MULTICHOICERATED_MAXCOUNT', 10); //count of possible items
+define('FEEDBACK_MULTICHOICERATED_VALUE_SEP', '####');
+define('FEEDBACK_MULTICHOICERATED_VALUE_SEP2', '/');
+define('FEEDBACK_MULTICHOICERATED_TYPE_SEP', '>>>>>');
+define('FEEDBACK_MULTICHOICERATED_LINE_SEP', '|');
+define('FEEDBACK_MULTICHOICERATED_ADJUST_SEP', '<<<<<');
+
+class feedback_item_multichoicerated extends feedback_item_base {
+    var $type = "multichoicerated";
+    function init() {
+    
+    }
+    
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('multichoicerated_form.php');
+        
+        $item_form = new feedback_multichoicerated_form();
+        
+        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+
+        $info = $this->get_info($item);
+
+        $item->required = isset($item->required) ? $item->required : 0;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
+        
+        $item_form->itemname->setValue($item->name);
+        
+        $item_form->selectadjust->setValue($info->horizontal);
+        
+        $item_form->selecttype->setValue($info->subtype);
+
+        $itemvalues = $this->prepare_presentation_values_print($info->presentation, FEEDBACK_MULTICHOICERATED_VALUE_SEP, FEEDBACK_MULTICHOICERATED_VALUE_SEP2);
+        $item_form->values->setValue($itemvalues);
+        
+        return $item_form;
+    }
+
+    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
+    //XXX ist ein eindimensionales Array (Mittelwert der Werte der Antworten bei Typ Radio_rated) Jedes Element ist eine Struktur (answertext, avg)
+    function get_analysed($item, $groupid = false, $courseid = false) {
+        $analysedItem = array();
+        $analysedItem[] = $item->typ;
+        $analysedItem[] = $item->name;
+        
+        //die moeglichen Antworten extrahieren
+        $info = $this->get_info($item);
+        $lines = null;
+        $lines = explode (FEEDBACK_MULTICHOICERATED_LINE_SEP, stripslashes_safe($info->presentation));
+        if(!is_array($lines)) return null;
+
+        //die Werte holen
+        $values = feedback_get_group_values($item, $groupid, $courseid);
+        if(!$values) return null;
+        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
+        
+        $analysedAnswer = array();
+
+        for($i = 1; $i <= sizeof($lines); $i++) {
+            $item_values = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $lines[$i-1]);
+            $ans = null;
+            $ans->answertext = $item_values[1];
+            $avg = 0.0;
+            $anscount = 0;
+            foreach($values as $value) {
+                //ist die Antwort gleich dem index der Antworten + 1?
+                if ($value->value == $i) {
+                    $avg += $item_values[0]; //erst alle Werte aufsummieren
+                    $anscount++;
+                }
+            }
+            $ans->answercount = $anscount;
+            $ans->avg = doubleval($avg) / doubleval(sizeof($values));
+            $ans->value = $item_values[0];
+            $ans->quotient = $ans->answercount / sizeof($values);
+            $analysedAnswer[] = $ans;
+        }
+        $analysedItem[] = $analysedAnswer;
+        return $analysedItem;
+    }
+
+    function get_printval($item, $value) {
+        $printval = '';
+        
+        if(!isset($value->value)) return $printval;
+        
+        $info = $this->get_info($item);
+                
+        $presentation = explode (FEEDBACK_MULTICHOICERATED_LINE_SEP, stripslashes_safe($info->presentation));
+        $index = 1;
+        foreach($presentation as $pres){
+            if($value->value == $index){
+                $item_label = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $pres);
+                $printval = $item_label[1];
+                break;
+            }
+            $index++;
+        }
+        return $printval;
+    }
+
+    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
+        $sep_dec = get_string('separator_decimal', 'feedback');
+        if(substr($sep_dec, 0, 2) == '[['){
+            $sep_dec = FEEDBACK_DECIMAL;
+        }
+        
+        $sep_thous = get_string('separator_thousand', 'feedback');
+        if(substr($sep_thous, 0, 2) == '[['){
+            $sep_thous = FEEDBACK_THOUSAND;
+        }
+            
+        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
+        if($analysedItem) {
+            //echo '<table>';
+            $itemnr++;
+            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . stripslashes($analysedItem[1]) .'</th></tr>';
+            $analysedVals = $analysedItem[2];
+            $pixnr = 0;
+            $avg = 0.0;
+            foreach($analysedVals as $val) {
+                if( function_exists("bcmod")) {
+                    $intvalue = bcmod($pixnr, 10);
+                }else {
+                    $intvalue = 0;
+                }
+                $pix = "pics/$intvalue.gif";
+                $pixnr++;
+                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
+                
+                $avg += $val->avg;
+                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
+                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ' ('.$val->value.'):</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />' . $val->answercount. (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'') . '</td></tr>';
+            }
+            $avg = number_format(($avg), 2, $sep_dec, $sep_thous);
+            echo '<tr><td align="left" colspan="2"><b>'.get_string('average', 'feedback').': '.$avg.'</b></td></tr>';
+            //echo '</table>';
+        }
+        return $itemnr;
+    }
+
+    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
+        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
+
+
+        $data = $analysed_item[2];
+
+        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
+        //frage schreiben
+        $worksheet->write_string($rowOffset, 0, stripslashes($analysed_item[1]));
+        if(is_array($data)) {
+            $avg = 0.0;
+            for($i = 0; $i < sizeof($data); $i++) {
+                $aData = $data[$i];
+                
+                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
+                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext).' ('.$aData->value.')');
+                
+                $worksheet->setFormat("<l><vo>");
+                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
+                //$worksheet->setFormat("<l><f><vo>");
+                //$worksheet->write_number($rowOffset + 2, $i + 1, $aData->avg);
+                $avg += $aData->avg;
+            }
+            //mittelwert anzeigen
+            $worksheet->setFormat("<l><f><ro2><vo><c:red>");
+            $worksheet->write_string($rowOffset, sizeof($data) + 1, get_string('average', 'feedback'));
+            
+            $worksheet->setFormat("<l><f><vo>");
+            $worksheet->write_number($rowOffset + 1, sizeof($data) + 1, $avg);
+        }
+        $rowOffset +=2 ;
+        return $rowOffset;
+    }
+
+    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
+        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
+        $info = $this->get_info($item);
+        
+        $lines = explode (FEEDBACK_MULTICHOICERATED_LINE_SEP, stripslashes_safe($info->presentation));
+        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
+        if($highlightrequire AND $item->required AND intval($value) <= 0) {
+            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
+        }else {
+            $highlight = '';
+        }
+    ?>
+        <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
+        <td valign="top" align="<?php echo $align;?>">
+    <?php
+        $index = 1;
+        $checked = '';
+        if($readonly){
+            foreach($lines as $line){
+                if($value == $index){
+                    $item_value = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $line);
+                    // print_simple_box_start('left');
+                    print_box_start('generalbox boxalign'.$align);
+                    echo text_to_html($item_value[1], true, false, false);
+                    // print_simple_box_end();
+                    print_box_end();
+                    break;
+                }
+                $index++;
+            }
+        } else {
+            switch($info->subtype) {
+                case 'r':
+                    $this->print_item_radio($item, $value, $info, $align, $edit, $lines);
+                    break;
+                case 'd':
+                    $this->print_item_dropdown($item, $value, $info, $align, $edit, $lines);
+                    break;
+            }
+        }
+    ?>
+        </td>
+    <?php
+    }
+
+    function check_value($value, $item) {
+        if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
+        if(intval($value) > 0)return true;
+        return false;
+    }
+
+    function create_value($data) {
+        $data = clean_param($data, PARAM_INT);
+        return $data;
+    }
+
+    function get_presentation($data) {
+        // $present = str_replace("\n", FEEDBACK_MULTICHOICERATED_LINE_SEP, trim($data->itemvalues));
+        $present = $this->prepare_presentation_values_save(trim($data->itemvalues), FEEDBACK_MULTICHOICERATED_VALUE_SEP2, FEEDBACK_MULTICHOICERATED_VALUE_SEP);
+        // $present = str_replace("\n", FEEDBACK_MULTICHOICERATED_LINE_SEP, trim($data->itemvalues));
+        if(!isset($data->subtype)) {
+            $subtype = 'r';
+        }else {
+            $subtype = substr($data->subtype, 0, 1);
+        }
+        if(isset($data->horizontal) AND $data->horizontal == 1 AND $subtype != 'd') {
+            $present .= FEEDBACK_MULTICHOICERATED_ADJUST_SEP.'1';
+        }
+        return $subtype.FEEDBACK_MULTICHOICERATED_TYPE_SEP.$present;
+    }
+
+    function get_hasvalue() {
+        return 1;
+    }
+    
+    function get_info($item) {
+        $presentation = empty($item->presentation) ? '' : $item->presentation;
+        
+        $info = new object();
+        //check the subtype of the multichoice
+        //it can be check(c), radio(r) or dropdown(d)
+        $info->subtype = '';
+        $info->presentation = '';
+        $info->horizontal = false;
+        
+        @list($info->subtype, $info->presentation) = explode(FEEDBACK_MULTICHOICE_TYPE_SEP, $item->presentation);
+        if(!isset($info->subtype)) {
+            $info->subtype = 'r';
+        }
+
+
+        if($info->subtype != 'd') {
+            @list($info->presentation, $info->horizontal) = explode(FEEDBACK_MULTICHOICE_ADJUST_SEP, $info->presentation);
+            if(isset($info->horizontal) AND $info->horizontal == 1) {
+                $info->horizontal = true;
+            }else {
+                $info->horizontal = false;
+            }
+        }
+
+        return $info;
+    }
+    
+    function print_item_radio($item, $value, $info, $align, $edit, $lines) {
+        $index = 1;
+        $checked = '';
+        ?>
+        <table><tr>
+        <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                name="<?php echo $item->typ . '_' . $item->id ;?>"
+                id="<?php echo $item->typ.'_'.$item->id.'_xxx';?>"
+                value="" <?php echo $value ? '' : 'checked="checked"';?> />
+        </td>
+        <td align="<?php echo $align;?>">
+            <label for="<?php echo $item->typ.'_'.$item->id.'_xxx';?>"><?php print_string('not_selected', 'feedback');?>&nbsp;</label>
+        </td>
+        </tr></table>
+        <?php
+        if($info->horizontal) {
+            echo '<table><tr>';
+        }
+        foreach($lines as $line){
+            if($value == $index){
+                $checked = 'checked="checked"';
+            }else{
+                $checked = '';
+            }
+            $radio_value = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $line);
+            $inputname = $item->typ . '_' . $item->id;
+            $inputid = $inputname.'_'.$index;
+            if($info->horizontal) {
+        ?>
+                <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                        name="<?php echo $inputname;?>"
+                        id="<?php echo $inputid;?>"
+                        value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php
+                                if($edit) {
+                                    echo text_to_html('('.$radio_value[0].') '.$radio_value[1], true, false, false);
+                                }else {
+                                    echo text_to_html($radio_value[1], true, false, false);
+                                }
+                            ?>&nbsp;</label>
+                </td>
+        <?php
+            }else {
+        ?>
+                <table><tr>
+                <td valign="top" align="<?php echo $align;?>"><input type="radio"
+                        name="<?php echo $inputname;?>"
+                        id="<?php echo $inputid;?>"
+                        value="<?php echo $index;?>" <?php echo $checked;?> />
+                </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php
+                                if($edit) {
+                                    echo text_to_html('('.$radio_value[0].') '.$radio_value[1], true, false, false);
+                                }else {
+                                    echo text_to_html($radio_value[1], true, false, false);
+                                }
+                            ?>&nbsp;</label>
+                </td></tr></table>
+        <?php
+            }
+            $index++;
+        }
+        if($info->horizontal) {
+            echo '</tr></table>';
+        }
+    }
+    
+    function print_item_dropdown($item, $value, $info, $align, $edit, $lines) {
+        echo '<select name="'. $item->typ . '_' . $item->id . '">';
+        echo '<option value="0">&nbsp;</option>';
+        $index = 1;
+        $checked = '';
+        foreach($lines as $line){
+            if($value == $index){
+                $selected = 'selected="selected"';
+            }else{
+                $selected = '';
+            }
+            $dropdown_value = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $line);
+            if($edit) {
+                echo '<option value="'. $index.'" '. $selected.'>'. clean_text('('.$dropdown_value[0].') '.$dropdown_value[1]).'</option>';
+            }else {
+                echo '<option value="'. $index.'" '. $selected.'>'. clean_text($dropdown_value[1]).'</option>';
+            }
+            $index++;
+        }
+        echo '</select>';
+    
+    }
+    
+    function prepare_presentation_values_print($valuestring, $valuesep1, $valuesep2) {
+        $lines = explode(FEEDBACK_MULTICHOICERATED_LINE_SEP, $valuestring);
+        $newlines = array();
+        foreach($lines as $line) {
+            $value = '';
+            $text = '';
+            if(strpos($line, $valuesep1) === false) {
+                $value = 0;
+                $text = $line;
+            }else {
+                @list($value, $text) = explode($valuesep1, $line, 2);
+            }
+            
+            $value = intval($value);
+            $newlines[] = $value.$valuesep2.$text;
+        }
+        $newlines = implode("\n", $newlines);
+        return $newlines;
+    }
+    
+    function prepare_presentation_values_save($valuestring, $valuesep1, $valuesep2) {
+        $lines = explode("\n", $valuestring);
+        $newlines = array();
+        foreach($lines as $line) {
+            $value = '';
+            $text = '';
+            
+            if(strpos($line, $valuesep1) === false) {
+                $value = 0;
+                $text = $line;
+            }else {
+                @list($value, $text) = explode($valuesep1, $line, 2);
+            }
+            
+            $value = intval($value);
+            $newlines[] = $value.$valuesep2.$text;
+        }
+        $newlines = implode(FEEDBACK_MULTICHOICERATED_LINE_SEP, $newlines);
+        return $newlines;
+    }
+}
+?>
diff --git a/mod/feedback/item/multichoicerated/multichoicerated_form.php b/mod/feedback/item/multichoicerated/multichoicerated_form.php
new file mode 100644 (file)
index 0000000..12cc1b3
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_multichoicerated_form extends moodleform {
+    var $type = "multichoicerated";
+    var $requiredcheck;
+    var $itemname;
+    var $selectadjust;
+    var $selecttype;
+    var $values;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+
+        $this->selectadjust = $mform->addElement('select',
+                                            'horizontal', 
+                                            get_string('adjustment', 'feedback').'&nbsp;', 
+                                            array(0 => get_string('vertical', 'feedback'), 1 => get_string('horizontal', 'feedback')));
+        
+        $this->selecttype = $mform->addElement('select',
+                                            'subtype', 
+                                            get_string('multichoicetype', 'feedback').'&nbsp;', 
+                                            array('r'=>get_string('radio', 'feedback'),
+                                                  'd'=>get_string('dropdown', 'feedback')));
+
+        $mform->addElement('static', 'hint', get_string('multichoice_values', 'feedback'), get_string('use_one_line_for_each_value', 'feedback'));
+        
+        $this->values = $mform->addElement('textarea', 'itemvalues', '', 'wrap="virtual" rows="10" cols="30"');
+
+    }
+}
+?>
index 6e65f6d91f2be07d418a0cd4db04821a13307613..28a9731949425347dea5770e332192b0ef3221c3 100644 (file)
@@ -8,44 +8,32 @@ class feedback_item_numeric extends feedback_item_base {
     
     }
     
-    function show_edit($item, $usehtmleditor = false) {
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('numeric_form.php');
+        
+        $item_form = new feedback_numeric_form();
 
-        $item->presentation=empty($item->presentation)?'':$item->presentation;
+        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+        
+        $item->required = isset($item->required) ? $item->required : 0;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
 
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('numeric', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                $item->required=isset($item->required)?$item->required:0;
-                echo ($item->required == 1?'checked="checked"':'');
-                ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <?php
-                        //Dropdown-Items fuer die Textfeldbreite
-                        $range_from_to = explode('|',$item->presentation);
-                        $range_from = isset($range_from_to[0]) ? intval($range_from_to[0]) : 0;
-                        $range_to = isset($range_from_to[1]) ? intval($range_from_to[1]) : 0;
-                ?>
-                <td><?php print_string('numeric_range_from', 'feedback');?></td>
-                <td>
-                    <input type="text" name="numericrangefrom" value="<?php echo $range_from;?>" />
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('numeric_range_to', 'feedback');?></td>
-                <td>
-                    <input type="text" name="numericrangeto" value="<?php echo $range_to;?>" />
-                </td>
-            </tr>
-        </table>
-    <?php
+        $item_form->itemname->setValue($item->name);
+        
+        $range_from_to = explode('|',$item->presentation);
+        $range_from = isset($range_from_to[0]) ? intval($range_from_to[0]) : 0;
+        $range_to = isset($range_from_to[1]) ? intval($range_from_to[1]) : 0;
+        
+        $item_form->selectfrom->setValue($range_from);
+        
+        $item_form->selectto->setValue($range_to);
+        
+        return $item_form;
     }
 
     //liefert eine Struktur ->name, ->data = array(mit Antworten)
diff --git a/mod/feedback/item/numeric/numeric_form.php b/mod/feedback/item/numeric/numeric_form.php
new file mode 100644 (file)
index 0000000..1b99b84
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_numeric_form extends moodleform {
+    var $type = "numeric";
+    var $requiredcheck;
+    var $itemname;
+    var $selectfrom;
+    var $selectto;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+        
+        $this->selectfrom = $mform->addElement('text', 'numericrangefrom', get_string('numeric_range_from', 'feedback'), array('size="10"','maxlength="10"'));
+        
+        $this->selectto = $mform->addElement('text', 'numericrangeto', get_string('numeric_range_to', 'feedback'), array('size="10"','maxlength="10"'));
+
+    }
+}
+?>
diff --git a/mod/feedback/item/radio/lib.php b/mod/feedback/item/radio/lib.php
deleted file mode 100644 (file)
index 0cb2fc9..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-<?php  // $Id$
-defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
-require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
-
-define('FEEDBACK_RADIO_LINE_SEP', '|');
-define('FEEDBACK_RADIO_ADJUST_SEP', '<<<<<');
-
-class feedback_item_radio extends feedback_item_base {
-    var $type = "radio";
-    function init() {
-    
-    }
-    
-    function show_edit($item, $usehtmleditor = false) {
-
-        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
-        
-        //check, whether the buttons are vertical or horizontal
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('radio', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php
-                    $item->required=isset($item->required)?$item->required:0;
-                    echo ($item->required == 1?'checked="checked"':'');
-                    ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td colspan="2">
-                    <?php print_string('adjustment', 'feedback');?>:
-                    &nbsp;<?php print_string('vertical', 'feedback');?><input type="radio" name="horizontal" value="0" <?php echo $horizontal ? '' : 'checked="checked"';?> />
-                    &nbsp;<?php print_string('horizontal', 'feedback');?><input type="radio" name="horizontal" value="1" <?php echo $horizontal ? 'checked="checked"' : '';?> />
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td>
-                    <?php print_string('radio_values', 'feedback');?>
-                    <?php print_string('use_one_line_for_each_value', 'feedback');?>
-                </td>
-                <td>
-    <?php
-                    $itemvalues = str_replace(FEEDBACK_RADIO_LINE_SEP, "\n", stripslashes_safe($presentation));
-    ?>
-                    <textarea name="itemvalues" cols="30" rows="5"><?php echo $itemvalues;?></textarea>
-                </td>
-            </tr>
-        </table>
-    <?php
-    }
-
-    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
-    //XXX ist ein eindimensionales Array (anzahl der Antworten bei Typ Radio) Jedes Element ist eine Struktur (answertext, answercount)
-    function get_analysed($item, $groupid = false, $courseid = false) {
-        //fuer den Anfang erstmal nur die Radiobuttons
-        $analysedItem = array();
-        $analysedItem[] = $item->typ;
-        $analysedItem[] = $item->name;
-        //die moeglichen Antworten extrahieren
-        $answers = null;
-        $presentation = '';
-        @list($presentation) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-        
-        $answers = explode (FEEDBACK_RADIO_LINE_SEP, stripslashes_safe($presentation));
-        if(!is_array($answers)) return null;
-
-        //die Werte holen
-        //$values = get_records('feedback_value', 'item', $item->id);
-        $values = feedback_get_group_values($item, $groupid, $courseid);
-        if(!$values) return null;
-        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
-        
-        $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($answers); $i++) {
-            $ans = null;
-            $ans->answertext = $answers[$i-1];
-            $ans->answercount = 0;
-            foreach($values as $value) {
-                //ist die Antwort gleich dem index der Antworten + 1?
-                if ($value->value == $i) {
-                    $ans->answercount++;
-                }
-            }
-            $ans->quotient = $ans->answercount / sizeof($values);
-            $analysedAnswer[] = $ans;
-        }
-        $analysedItem[] = $analysedAnswer;
-        return $analysedItem;
-    }
-
-    function get_printval($item, $value) {
-        $printval = '';
-        
-        if(!isset($value->value)) return $printval;
-                
-        @list($presentation) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-        
-        $presentation = explode (FEEDBACK_RADIO_LINE_SEP, stripslashes_safe($presentation));
-        $index = 1;
-        foreach($presentation as $pres){
-            if($value->value == $index){
-                $printval = $pres;
-                break;
-            }
-            $index++;
-        }
-        return $printval;
-    }
-
-    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
-        $sep_dec = get_string('separator_decimal', 'feedback');
-        if(substr($sep_dec, 0, 2) == '[['){
-            $sep_dec = FEEDBACK_DECIMAL;
-        }
-        
-        $sep_thous = get_string('separator_thousand', 'feedback');
-        if(substr($sep_thous, 0, 2) == '[['){
-            $sep_thous = FEEDBACK_THOUSAND;
-        }
-            
-        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
-        if($analysedItem) {
-            //echo '<table>';
-            $itemnr++;
-            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . $analysedItem[1] .'</th></tr>';
-            $analysedVals = $analysedItem[2];
-            $pixnr = 0;
-            foreach($analysedVals as $val) {
-                if( function_exists("bcmod")) {
-                    $intvalue = bcmod($pixnr, 10);
-                }else {
-                    $intvalue = 0;
-                }
-                $pix = "pics/$intvalue.gif";
-                $pixnr++;
-                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
-                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
-                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ':</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />&nbsp;' . $val->answercount . (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'').'</td></tr>';
-            }
-            //echo '</table>';
-        }
-        return $itemnr;
-    }
-
-    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
-        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
-
-
-        $data = $analysed_item[2];
-
-        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
-        //frage schreiben
-        $worksheet->write_string($rowOffset, 0, $analysed_item[1]);
-        if(is_array($data)) {
-            for($i = 0; $i < sizeof($data); $i++) {
-                $aData = $data[$i];
-                
-                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
-                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext));
-                
-                $worksheet->setFormat("<l><vo>");
-                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
-                $worksheet->setFormat("<l><f><vo><pr>");
-                $worksheet->write_number($rowOffset + 2, $i + 1, $aData->quotient);
-            }
-        }
-        $rowOffset +=3 ;
-        return $rowOffset;
-    }
-
-    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
-        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
-        
-        //extract the adjustment-info
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-        
-        $presentation = explode (FEEDBACK_RADIO_LINE_SEP, stripslashes_safe($presentation));
-        if($highlightrequire AND $item->required AND intval($value) <= 0) {
-            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
-        }else {
-            $highlight = '';
-        }
-        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
-    ?>
-        <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
-        <td valign="top" align="<?php echo $align;?>">
-    <?php
-        $index = 1;
-        $checked = '';
-        if($readonly){
-            foreach($presentation as $radio){
-                if($value == $index){
-                    // print_simple_box_start($align);
-                    print_box_start('generalbox boxalign'.$align);
-                    echo text_to_html($radio, true, false, false);
-                    // print_simple_box_end();
-                    print_box_end();
-                    break;
-                }
-                $index++;
-            }
-        } else {
-    ?>
-            <table><tr>
-            <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                    name="<?php echo $item->typ . '_' . $item->id ;?>"
-                    id="<?php echo $item->typ . '_' . $item->id.'_xxx';?>"
-                    value="" <?php echo $value ? '' : 'checked="checked"';?> />
-            </td>
-            <td align="<?php echo $align;?>">
-                <label for="<?php echo $item->typ . '_' . $item->id.'_xxx';?>"><?php print_string('not_selected', 'feedback');?>&nbsp;</label>
-            </td>
-            </tr></table>
-    <?php
-            if($horizontal) {
-                echo '<table><tr>';
-            }
-            foreach($presentation as $radio){
-                if($value == $index){
-                    $checked = 'checked="checked"';
-                }else{
-                    $checked = '';
-                }
-                $inputname = $item->typ . '_' . $item->id;
-                $inputid = $inputname.'_'.$index;
-                if($horizontal) {
-    ?>
-                    <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                        name="<?php echo $inputname;?>"
-                        id="<?php echo $inputid;?>"
-                        value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td>
-                    <td align="<?php echo $align;?>">
-                        <label for="<?php echo $inputid;?>"><?php echo text_to_html($radio, true, false, false);?>&nbsp;</label>
-                    </td>
-    <?php
-                }else {
-    ?>
-                    <table><tr>
-                    <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                            name="<?php echo $inputname;?>"
-                            id="<?php echo $inputid;?>"
-                            value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php echo text_to_html($radio, true, false, false);?>&nbsp;</label>
-                    </td></tr></table>
-    <?php
-                }
-                $index++;
-            }
-            if($horizontal) {
-                echo '</tr></table>';
-            }
-            /*
-            if($item->required == 1) {
-                echo '<input type="hidden" name="'.$item->typ . '_' . $item->id.'" value="1" />';
-            }
-            */
-        }
-    ?>
-        </td>
-    <?php
-    }
-
-    function check_value($value, $item) {
-        //if the item is not required, so the check is true if no value is given
-        if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
-        if(intval($value) > 0)return true;
-        return false;
-    }
-
-    function create_value($data) {
-        $data = clean_param($data, PARAM_INT);
-        return $data;
-    }
-
-    function get_presentation($data) {
-        $present = str_replace("\n", FEEDBACK_RADIO_LINE_SEP, trim($data->itemvalues));
-        if($data->horizontal == 1) {
-            $present .= FEEDBACK_RADIO_ADJUST_SEP.'1';
-        }
-        return $present;
-    }
-
-    function get_hasvalue() {
-        return 1;
-    }
-}
-?>
diff --git a/mod/feedback/item/radiorated/lib.php b/mod/feedback/item/radiorated/lib.php
deleted file mode 100644 (file)
index 18b4a96..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php  // $Id$
-defined('FEEDBACK_INCLUDE_TEST') OR die('not allowed');
-require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
-
-define('FEEDBACK_RADIORATED_MAXCOUNT', 10); //count of possible items
-define('FEEDBACK_RADIORATED_LINE_SEP', '|');
-define('FEEDBACK_RADIORATED_VALUE_SEP', '####');
-define('FEEDBACK_RADIORATED_ADJUST_SEP', '<<<<<');
-
-class feedback_item_radiorated extends feedback_item_base {
-    var $type = "radiorated";
-    function init() {
-    
-    }
-    
-    function show_edit($item, $usehtmleditor = false) {
-
-        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
-
-        //check, whether the buttons are vertical or horizontal
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('radiorated', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php
-                    $item->required=isset($item->required)?$item->required:0;
-                    echo ($item->required == 1?'checked="checked"':'');
-                    ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td colspan="2">
-                    <?php print_string('adjustment', 'feedback');?>:
-                    &nbsp;<?php print_string('vertical', 'feedback');?><input type="radio" name="horizontal" value="0" <?php echo $horizontal ? '' : 'checked="checked"';?> />
-                    &nbsp;<?php print_string('horizontal', 'feedback');?><input type="radio" name="horizontal" value="1" <?php echo $horizontal ? 'checked="checked"' : '';?> />
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td>
-                    <?php print_string('radio_values', 'feedback');?>
-                </td>
-                <td>
-    <?php
-                    //$itemvalues = str_replace('|', "\n", stripslashes_safe($item->presentation));
-                    if($itemvalues = explode(FEEDBACK_RADIORATED_LINE_SEP, stripslashes_safe($presentation), FEEDBACK_RADIORATED_MAXCOUNT)){
-                        echo '<table>';
-                        echo '<tr>';
-                        echo '<td><b>'.get_string('line_values', 'feedback').'</b></td><td><b>'.get_string('line_labels', 'feedback').'</b></td>';
-                        echo '</tr>';
-                        for ($i = 0; $i < FEEDBACK_RADIORATED_MAXCOUNT; $i++) {
-                            if(count($itemvalues) > $i) {
-                                $value = explode(FEEDBACK_RADIORATED_VALUE_SEP, $itemvalues[$i]);
-                                if(count($value) <= 1) {
-                                    $value[0] = ''; $value[1] = '';
-                                }
-                            }else {
-                                $value[0] = ''; $value[1] = '';
-                            }
-                            echo '<tr>';
-                            echo '<td><input type="text" name="fr_val[]" size="4" maxlength="4" value="'.$value[0].'" /></td>';
-                            echo '<td><input type="text" name="fr_label[]" size="40" maxlength="255" value="'.$value[1].'" /></td>';
-                            echo '</tr>';
-                        }
-                        echo '</table>';
-                    }
-                    
-    ?>
-                </td>
-            </tr>
-        </table>
-    <?php
-    }
-
-    //liefert ein eindimensionales Array mit drei Werten(typ, name, XXX)
-    //XXX ist ein eindimensionales Array (Mittelwert der Werte der Antworten bei Typ Radio_rated) Jedes Element ist eine Struktur (answertext, avg)
-    function get_analysed($item, $groupid = false, $courseid = false) {
-        $analysedItem = array();
-        $analysedItem[] = $item->typ;
-        $analysedItem[] = $item->name;
-        //die moeglichen Antworten extrahieren
-        $lines = null;
-        $presentation = '';
-        @list($presentation) = explode(FEEDBACK_RADIORATED_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-        $lines = explode (FEEDBACK_RADIORATED_LINE_SEP, stripslashes_safe($presentation));
-        if(!is_array($lines)) return null;
-
-        //die Werte holen
-        //$values = get_records('feedback_value', 'item', $item->id);
-        $values = feedback_get_group_values($item, $groupid, $courseid);
-        if(!$values) return null;
-        //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
-        
-        $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($lines); $i++) {
-            $item_values = explode(FEEDBACK_RADIORATED_VALUE_SEP, $lines[$i-1]);
-            $ans = null;
-            $ans->answertext = $item_values[1];
-            $avg = 0.0;
-            $anscount = 0;
-            foreach($values as $value) {
-                //ist die Antwort gleich dem index der Antworten + 1?
-                if ($value->value == $i) {
-                    $avg += $item_values[0]; //erst alle Werte aufsummieren
-                    $anscount++;
-                }
-            }
-            $ans->answercount = $anscount;
-            $ans->avg = doubleval($avg) / doubleval(sizeof($values));
-            $ans->value = $item_values[0];
-            $ans->quotient = $ans->answercount / sizeof($values);
-            $analysedAnswer[] = $ans;
-        }
-        $analysedItem[] = $analysedAnswer;
-        return $analysedItem;
-    }
-
-    function get_printval($item, $value) {
-        $printval = '';
-        
-        if(!isset($value->value)) return $printval;
-                
-        @list($presentation) = explode(FEEDBACK_RADIORATED_ADJUST_SEP, $item->presentation); //remove the adjustment-info
-
-        $presentation = explode (FEEDBACK_RADIORATED_LINE_SEP, stripslashes_safe($presentation));
-        $index = 1;
-        foreach($presentation as $pres){
-            if($value->value == $index){
-                $radio_label = explode(FEEDBACK_RADIORATED_VALUE_SEP, $pres);
-                $printval = $radio_label[1];
-                break;
-            }
-            $index++;
-        }
-        return $printval;
-    }
-
-    function print_analysed($item, $itemnr = 0, $groupid = false, $courseid = false) {
-        $sep_dec = get_string('separator_decimal', 'feedback');
-        if(substr($sep_dec, 0, 2) == '[['){
-            $sep_dec = FEEDBACK_DECIMAL;
-        }
-        
-        $sep_thous = get_string('separator_thousand', 'feedback');
-        if(substr($sep_thous, 0, 2) == '[['){
-            $sep_thous = FEEDBACK_THOUSAND;
-        }
-            
-        $analysedItem = $this->get_analysed($item, $groupid, $courseid);
-        if($analysedItem) {
-            //echo '<table>';
-            $itemnr++;
-            echo '<tr><th colspan="2" align="left">'. $itemnr . '.)&nbsp;' . $analysedItem[1] .'</th></tr>';
-            $analysedVals = $analysedItem[2];
-            $pixnr = 0;
-            $avg = 0.0;
-            foreach($analysedVals as $val) {
-                
-                if( function_exists("bcmod")) {
-                    $intvalue = bcmod($pixnr, 10);
-                }else {
-                    $intvalue = 0;
-                }
-                $pix = "pics/$intvalue.gif";
-                $pixnr++;
-                $pixwidth = intval($val->quotient * FEEDBACK_MAX_PIX_LENGTH);
-                
-                $avg += $val->avg;
-                $quotient = number_format(($val->quotient * 100), 2, $sep_dec, $sep_thous);
-                echo '<tr><td align="left" valign="top">-&nbsp;&nbsp;' . trim($val->answertext) . ' ('.$val->value.'):</td><td align="left" style="width: '.FEEDBACK_MAX_PIX_LENGTH.'"><img alt="'.$intvalue.'" src="'.$pix.'" height="5" width="'.$pixwidth.'" />' . $val->answercount. (($val->quotient > 0)?'&nbsp;('. $quotient . '&nbsp;%)':'') . '</td></tr>';
-            }
-            $avg = number_format(($avg), 2, $sep_dec, $sep_thous);
-            echo '<tr><td align="left" colspan="2"><b>'.get_string('average', 'feedback').': '.$avg.'</b></td></tr>';
-            //echo '</table>';
-        }
-        return $itemnr;
-    }
-
-    function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) {
-        $analysed_item = $this->get_analysed($item, $groupid, $courseid);
-
-
-        $data = $analysed_item[2];
-
-        $worksheet->setFormat("<l><f><ro2><vo><c:green>");
-        //frage schreiben
-        $worksheet->write_string($rowOffset, 0, $analysed_item[1]);
-        if(is_array($data)) {
-            $avg = 0.0;
-            for($i = 0; $i < sizeof($data); $i++) {
-                $aData = $data[$i];
-                
-                $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
-                $worksheet->write_string($rowOffset, $i + 1, trim($aData->answertext).' ('.$aData->value.')');
-                
-                $worksheet->setFormat("<l><vo>");
-                $worksheet->write_number($rowOffset + 1, $i + 1, $aData->answercount);
-                //$worksheet->setFormat("<l><f><vo>");
-                //$worksheet->write_number($rowOffset + 2, $i + 1, $aData->avg);
-                $avg += $aData->avg;
-            }
-            //mittelwert anzeigen
-            $worksheet->setFormat("<l><f><ro2><vo><c:red>");
-            $worksheet->write_string($rowOffset, sizeof($data) + 1, get_string('average', 'feedback'));
-            
-            $worksheet->setFormat("<l><f><vo>");
-            $worksheet->write_number($rowOffset + 1, sizeof($data) + 1, $avg);
-        }
-        $rowOffset +=2 ;
-        return $rowOffset;
-    }
-
-    function print_item($item, $value = false, $readonly = false, $edit = false, $highlightrequire = false){
-        $align = get_string('thisdirection') == 'ltr' ? 'left' : 'right';
-        
-        //extract the adjustment-info
-        $presentation = $horizontal = '';
-        @list($presentation, $horizontal) = explode(FEEDBACK_RADIORATED_ADJUST_SEP, $item->presentation);
-        if(isset($horizontal) AND $horizontal == 1) {
-            $horizontal = true;
-        }else {
-            $horizontal = false;
-        }
-        
-        $lines = explode (FEEDBACK_RADIORATED_LINE_SEP, stripslashes_safe($presentation));
-        if($highlightrequire AND $item->required AND intval($value) <= 0) {
-            $highlight = 'bgcolor="#FFAAAA" class="missingrequire"';
-        }else {
-            $highlight = '';
-        }
-        $requiredmark =  ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
-    ?>
-        <td <?php echo $highlight;?> valign="top" align="<?php echo $align;?>"><?php echo format_text(stripslashes_safe($item->name) . $requiredmark, true, false, false);?></td>
-        <td valign="top" align="<?php echo $align;?>">
-    <?php
-        $index = 1;
-        $checked = '';
-        if($readonly){
-            foreach($lines as $line){
-                if($value == $index){
-                    $radio_value = explode(FEEDBACK_RADIORATED_VALUE_SEP, $line);
-                    // print_simple_box_start('left');
-                    print_box_start('generalbox boxalign'.$align);
-                    echo text_to_html($radio_value[1], true, false, false);
-                    // print_simple_box_end();
-                    print_box_end();
-                    break;
-                }
-                $index++;
-            }
-        } else {
-    ?>
-            <table><tr>
-            <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                    name="<?php echo $item->typ . '_' . $item->id ;?>"
-                    id="<?php echo $item->typ.'_'.$item->id.'_xxx';?>"
-                    value="" <?php echo $value ? '' : 'checked="checked"';?> />
-            </td>
-            <td align="<?php echo $align;?>">
-                <label for="<?php echo $item->typ.'_'.$item->id.'_xxx';?>"><?php print_string('not_selected', 'feedback');?>&nbsp;</label>
-            </td>
-            </tr></table>
-    <?php
-            if($horizontal) {
-                echo '<table><tr>';
-            }
-            foreach($lines as $line){
-                if($value == $index){
-                    $checked = 'checked="checked"';
-                }else{
-                    $checked = '';
-                }
-                $radio_value = explode(FEEDBACK_RADIORATED_VALUE_SEP, $line);
-                $inputname = $item->typ . '_' . $item->id;
-                $inputid = $inputname.'_'.$index;
-                if($horizontal) {
-    ?>
-                    <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                            name="<?php echo $inputname;?>"
-                            id="<?php echo $inputid;?>"
-                            value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php
-                                    if($edit) {
-                                        echo text_to_html('('.$radio_value[0].') '.$radio_value[1], true, false, false);
-                                    }else {
-                                        echo text_to_html($radio_value[1], true, false, false);
-                                    }
-                                ?>&nbsp;</label>
-                    </td>
-    <?php
-                }else {
-    ?>
-                    <table><tr>
-                    <td valign="top" align="<?php echo $align;?>"><input type="radio"
-                            name="<?php echo $inputname;?>"
-                            id="<?php echo $inputid;?>"
-                            value="<?php echo $index;?>" <?php echo $checked;?> />
-                    </td><td align="<?php echo $align;?>"><label for="<?php echo $inputid;?>"><?php
-                                    if($edit) {
-                                        echo text_to_html('('.$radio_value[0].') '.$radio_value[1], true, false, false);
-                                    }else {
-                                        echo text_to_html($radio_value[1], true, false, false);
-                                    }
-                                ?>&nbsp;</label>
-                    </td></tr></table>
-    <?php
-                }
-                $index++;
-            }
-            if($horizontal) {
-                echo '</tr></table>';
-            }
-            /*
-            if($item->required == 1) {
-                echo '<input type="hidden" name="'.$item->typ . '_' . $item->id.'" value="1" />';
-            }
-            */
-        }
-    ?>
-        </td>
-    <?php
-    }
-
-    function check_value($value, $item) {
-        if((!isset($value) OR $value == '' OR $value == 0) AND $item->required != 1) return true;
-        if(intval($value) > 0)return true;
-        return false;
-    }
-
-    function create_value($data) {
-        $data = clean_param($data, PARAM_INT);
-        return $data;
-    }
-
-    function get_presentation($data) {
-        $valuelines = $data->fr_val;
-        $labellines = $data->fr_label;
-        $present = '';
-        if(!is_array($valuelines) AND !is_array($labellines)) {
-            return $present;
-        }
-        
-        //if( trim($valuelines[0]) != ''){
-            $value = intval($valuelines[0]);
-            $label = $labellines[0];
-            $present .= $value.FEEDBACK_RADIORATED_VALUE_SEP.$label;
-        //}
-        
-        for($i = 1; $i < FEEDBACK_RADIORATED_MAXCOUNT; $i++) {
-            if( (trim($valuelines[$i]) == '') AND (trim($labellines[$i]) == ''))continue;
-            
-            $value = intval($valuelines[$i]);
-            $label = $labellines[$i];
-            $present .= FEEDBACK_RADIORATED_LINE_SEP.$value.FEEDBACK_RADIORATED_VALUE_SEP.$label;
-        }
-        //$present = str_replace("\n", '|', trim($data->itemvalues));
-        if($data->horizontal == 1) {
-            $present .= FEEDBACK_RADIORATED_ADJUST_SEP.'1';
-        }
-        return $present;
-    }
-
-    function get_hasvalue() {
-        return 1;
-    }
-}
-?>
index 8bbd1be22a03fa996039fa17251d8c46c646e3f7..e70995eadc09dcd59280ebf1e577438daa8c5374 100644 (file)
@@ -8,49 +8,30 @@ class feedback_item_textarea extends feedback_item_base {
     
     }
     
-    function show_edit($item, $usehtmleditor = false) {
+    function show_edit($item) {
+        global $CFG;
 
-        $item->presentation=empty($item->presentation)?'':$item->presentation;
+        require_once('textarea_form.php');
+        
+        $item_form = new feedback_textarea_form();
 
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('textarea', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                $item->required=isset($item->required)?$item->required:0;
-                echo ($item->required == 1?'checked="checked"':'');
-                ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td><?php print_string('textarea_width', 'feedback');?></td>
-                <td>
-                    <select name="itemwidth">
-    <?php
-                        //Dropdown-Items fuer die Textareabreite
-                        $widthAndHeight = explode('|',$item->presentation);
-                        feedback_print_numeric_option_list(5, 80, $widthAndHeight[0]?$widthAndHeight[0]:30, 5);
-    ?>
-                    </select>
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('textarea_height', 'feedback');?></td>
-                <td>
-                    <select name="itemheight">
-    <?php
-                        //Dropdown-Items fuer die Textareahoehe
-                        feedback_print_numeric_option_list(5, 40, $widthAndHeight[1], 5);
-    ?>
-                    </select>
-                </td>
-            </tr>
-        </table>
-    <?php
+        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+              
+        $item->required = isset($item->required) ? $item->required : 0;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
+
+        $item_form->itemname->setValue($item->name);
+
+        $widthAndHeight = explode('|',$item->presentation);
+        $itemwidth = isset($widthAndHeight[0]) ? $widthAndHeight[0] : 30;
+        $itemheight = isset($widthAndHeight[1]) ? $widthAndHeight[1] : 5;
+        $item_form->selectwith->setValue($itemwidth);
+        $item_form->selectheight->setValue($itemheight);
+        
+        return $item_form;
     }
 
     //liefert eine Struktur ->name, ->data = array(mit Antworten)
diff --git a/mod/feedback/item/textarea/textarea_form.php b/mod/feedback/item/textarea/textarea_form.php
new file mode 100644 (file)
index 0000000..0a9eb50
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_textarea_form extends moodleform {
+    var $type = "textarea";
+    var $requiredcheck;
+    var $itemname;
+    var $selectwith;
+    var $selectheight;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+        
+        $this->selectwith = $mform->addElement('select',
+                                            'itemwidth', 
+                                            get_string('textarea_width', 'feedback').'&nbsp;', 
+                                            array_slice(range(0,80),5,80,true));
+
+        $this->selectheight = $mform->addElement('select',
+                                            'itemheight', 
+                                            get_string('textarea_height', 'feedback').'&nbsp;', 
+                                            array_slice(range(0,40),5,40,true));
+
+    }
+}
+?>
index a45758a38bd81ed4e5bd88607e17def55fed23cc..0e3ce6014780f853080271094f9e7f842f8bf604 100644 (file)
@@ -8,50 +8,30 @@ class feedback_item_textfield extends feedback_item_base {
     
     }
     
-    function show_edit($item, $usehtmleditor = false) {
+    function show_edit($item) {
+        global $CFG;
+        
+        require_once('textfield_form.php');
+        
+        $item_form = new feedback_textfield_form();
+        
+        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
+        $item->name = empty($item->name) ? '' : $item->name;
+        
+        $item->required = isset($item->required) ? $item->required : 0;
+        if($item->required) {
+            $item_form->requiredcheck->setValue(true);
+        }
 
-        $item->presentation=empty($item->presentation)?'':$item->presentation;
+        $item_form->itemname->setValue($item->name);
 
-    ?>
-        <table>
-            <tr>
-                <th colspan="2"><?php print_string('textfield', 'feedback');?>
-                    &nbsp;(<input type="checkbox" name="required" value="1" <?php 
-                $item->required=isset($item->required)?$item->required:0;
-                echo ($item->required == 1?'checked="checked"':'');
-                ?> />&nbsp;<?php print_string('required', 'feedback');?>)
-                </th>
-            </tr>
-            <tr>
-                <td><?php print_string('item_name', 'feedback');?></td>
-                <td><input type="text" id="itemname" name="itemname" size="40" maxlength="255" value="<?php echo isset($item->name)?htmlspecialchars(stripslashes_safe($item->name)):'';?>" /></td>
-            </tr>
-            <tr>
-                <td><?php print_string('textfield_size', 'feedback');?></td>
-                <td>
-                    <select name="itemsize">
-    <?php
-                        //Dropdown-Items fuer die Textfeldbreite
-                        $sizeAndLength = explode('|',$item->presentation);
-                        $selected = '';
-                        feedback_print_numeric_option_list(5, 50, ($sizeAndLength[0])?$sizeAndLength[0]:40, 5);
-    ?>
-                    </select>
-                </td>
-            </tr>
-            <tr>
-                <td><?php print_string('textfield_maxlength', 'feedback');?></td>
-                <td>
-                    <select name="itemmaxlength">
-    <?php
-                        //Dropdown-Items fuer die Textlaenge
-                        feedback_print_numeric_option_list(5, 50, ($sizeAndLength[1])?$sizeAndLength[1]:40, 5);
-    ?>
-                    </select>
-                </td>
-            </tr>
-        </table>
-    <?php
+        $sizeAndLength = explode('|',$item->presentation);
+        $itemsize = isset($sizeAndLength[0]) ? $sizeAndLength[0] : 30;
+        $itemlength = isset($sizeAndLength[1]) ? $sizeAndLength[1] : 5;
+        $item_form->selectwith->setValue($itemsize);
+        $item_form->selectheight->setValue($itemlength);
+        
+        return $item_form;
     }
 
     //liefert eine Struktur ->name, ->data = array(mit Antworten)
diff --git a/mod/feedback/item/textfield/textfield_form.php b/mod/feedback/item/textfield/textfield_form.php
new file mode 100644 (file)
index 0000000..454f6ac
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+require_once $CFG->libdir.'/formslib.php';
+
+class feedback_textfield_form extends moodleform {
+    var $type = "textfield";
+    var $requiredcheck;
+    var $itemname;
+    var $selectwith;
+    var $selectheight;
+    
+    function definition() {
+        $mform =& $this->_form;
+        
+        $mform->addElement('header', 'general', get_string($this->type, 'feedback'));
+        $this->requiredcheck = $mform->addElement('checkbox', 'required', get_string('required', 'feedback'));
+        
+        $this->itemname = $mform->addElement('text', 'itemname', get_string('item_name', 'feedback'), array('size="40"','maxlength="255"'));
+        
+        $this->selectwith = $mform->addElement('select',
+                                            'itemsize', 
+                                            get_string('textfield_size', 'feedback').'&nbsp;', 
+                                            array_slice(range(0,80),5,80,true));
+
+        $this->selectheight = $mform->addElement('select',
+                                            'itemmaxlength', 
+                                            get_string('textfield_maxlength', 'feedback').'&nbsp;', 
+                                            array_slice(range(0,40),5,40,true));
+
+    }
+}
+?>
index 93f4c9047eb970794bf3aaa5c86d8ee266897641..abe1d063808e2934397680ddad0d38db0fd425e6 100644 (file)
     //
     //-----------------------------------------------------------
      
+    define('FEEDBACK_MULTICHOICERESTORE_TYPE_SEP', '>>>>>');
+
     function feedback_restore_mods($mod,$restore) {
 
         global $CFG;
         
-        $allValues = array();
-        $allTrackings = array();
+        // $allValues = array();
+        // $allTrackings = array();
 
         $status = true;
         $restore_userdata = restore_userdata_selected($restore,'feedback',$mod->id);
                     if($version >= 1) {
                         $item->typ = backup_todb($item_info['#']['TYP']['0']['#']);
                         $item->hasvalue = backup_todb($item_info['#']['HASVALUE']['0']['#']);
+                        switch($item->typ) {
+                            case 'radio':
+                                $item->typ = 'multichoice';
+                                $item->presentation = 'r'.FEEDBACK_MULTICHOICERESTORE_TYPE_SEP.$item->presentation;
+                                break;
+                            case 'check':
+                                $item->typ = 'multichoice';
+                                $item->presentation = 'c'.FEEDBACK_MULTICHOICERESTORE_TYPE_SEP.$item->presentation;
+                                break;
+                            case 'dropdown':
+                                $item->typ = 'multichoice';
+                                $item->presentation = 'd'.FEEDBACK_MULTICHOICERESTORE_TYPE_SEP.$item->presentation;
+                                break;
+                            case 'radiorated':
+                                $item->typ = 'multichoicerated';
+                                $item->presentation = 'r'.FEEDBACK_MULTICHOICERESTORE_TYPE_SEP.$item->presentation;
+                                break;
+                            case 'dropdownrated':
+                                $item->typ = 'multichoicerated';
+                                $item->presentation = 'd'.FEEDBACK_MULTICHOICERESTORE_TYPE_SEP.$item->presentation;
+                                break;
+                        }
                     } else {
                         $oldtyp = intval(backup_todb($item_info['#']['TYP']['0']['#']));
                         switch($oldtyp) {
                         $values = $item_info['#']['FBVALUES']['0']['#']['FBVALUE'];
                         for($ii = 0; $ii < sizeof($values); $ii++) {
                             $value_info = $values[$ii];
+                            $value = new object();
                             $value->id = '';
                             $value->item = $newitemid;
                             $value->completed = 0;
                             //put this new value into the database
                             $newvalueid = insert_record('feedback_value', $value);
                             $value->id = $newvalueid;
-                            $allValues[] = $value;
+                            // $allValues[] = $value;
                         }
                     }
                 }
                     $trackings = $info['MOD']['#']['TRACKINGS']['0']['#']['TRACKING'];
                     for($i = 0; $i < sizeof($trackings); $i++) {
                         $tracking_info = $trackings[$i];
+                        $tracking = new object();
                         $tracking->id = '';
                         $tracking->userid = backup_todb($tracking_info['#']['USERID']['0']['#']); //have to change later
                         $tracking->feedback = $newid;
                         //save the tracking
                         $newtrackingid = insert_record('feedback_tracking', $tracking);
                         $tracking->id = $newtrackingid;
-                        $allTrackings[] = $tracking;
+                        // $allTrackings[] = $tracking;
                     }
                     
                     //restore completeds
                     $completeds = $info['MOD']['#']['COMPLETEDS']['0']['#']['COMPLETED'];
                     for($i = 0; $i < sizeof($completeds); $i++) {
                         $completed_info = $completeds[$i];
+                        $completed = new object();
                         $completed->feedback = $newid;
                         $completed->userid = backup_todb($completed_info['#']['USERID']['0']['#']);
                         $completed->timemodified = backup_todb($completed_info['#']['TIMEMODIFIED']['0']['#']);
index 7592d5e5ff4318d5ee39f958f76be92fc93a3e8d..c4788a76af5461c8fae0f5278f3fc00ac9070ad0 100644 (file)
@@ -10,7 +10,7 @@
 */
 
    
-    $module->version = 2008042300; // The current module version (Date: YYYYMMDDXX)
+    $module->version = 2008042401; // The current module version (Date: YYYYMMDDXX)
     $module->requires = 2007101503;  // Requires this Moodle version
     $feedback_version_intern = 1; //this version is used for restore older backups
     $module->cron = 0; // Period for cron to check this module (secs)