From 6cc1599e09a84831c17dd46c935f202190325b02 Mon Sep 17 00:00:00 2001 From: Andreas Grabs Date: Fri, 4 Jun 2010 20:21:08 +0000 Subject: [PATCH] captcha now uses the recaptcha-plugin and some code cleanups --- mod/feedback/analysis.php | 7 +- mod/feedback/analysis_course.php | 5 +- mod/feedback/analysis_to_excel.php | 7 +- mod/feedback/edit_item.php | 45 +--- mod/feedback/item/captcha/lib.php | 243 ++++++++++----------- mod/feedback/item/feedback_item_class.php | 160 ++++++++------ mod/feedback/item/info/lib.php | 5 +- mod/feedback/item/label/lib.php | 11 +- mod/feedback/item/multichoice/lib.php | 6 +- mod/feedback/item/multichoicerated/lib.php | 4 +- mod/feedback/item/numeric/lib.php | 5 +- mod/feedback/item/textarea/lib.php | 7 +- mod/feedback/item/textfield/lib.php | 5 +- mod/feedback/lang/en/feedback.php | 2 + mod/feedback/lib.php | 86 +++----- 15 files changed, 288 insertions(+), 310 deletions(-) diff --git a/mod/feedback/analysis.php b/mod/feedback/analysis.php index 5a79c00d78c..78f46d52b39 100644 --- a/mod/feedback/analysis.php +++ b/mod/feedback/analysis.php @@ -127,11 +127,10 @@ if($check_anonymously) { foreach($items as $item) { if($item->hasvalue == 0) continue; echo ''; + //get the class of item-typ - $itemclass = 'feedback_item_'.$item->typ; - //get the instance of the item-class - require_once($CFG->dirroot.'/mod/feedback/item/'.$item->typ.'/lib.php'); - $itemobj = new $itemclass(); + $itemobj = feedback_get_item_class($item->typ); + $itemnr++; if($feedback->autonumbering) { $printnr = $itemnr.'.'; diff --git a/mod/feedback/analysis_course.php b/mod/feedback/analysis_course.php index 3ea09ba3902..a6ccf103cab 100644 --- a/mod/feedback/analysis_course.php +++ b/mod/feedback/analysis_course.php @@ -168,10 +168,7 @@ if ($courseitemfilter > 0) { if($item->hasvalue == 0) continue; echo '
'; //get the class from item-typ - $itemclass = 'feedback_item_'.$item->typ; - //get the instance of the item-class - require_once($CFG->dirroot.'/mod/feedback/item/'.$item->typ.'/lib.php'); - $itemobj = new $itemclass(); + $itemobj = feedback_get_item_class($item->typ); $itemnr++; if($feedback->autonumbering) { $printnr = $itemnr.'.'; diff --git a/mod/feedback/analysis_to_excel.php b/mod/feedback/analysis_to_excel.php index baf26c5b6b6..de2923da7ca 100644 --- a/mod/feedback/analysis_to_excel.php +++ b/mod/feedback/analysis_to_excel.php @@ -185,9 +185,7 @@ if (empty($items)) { } foreach($items as $item) { //get the class of item-typ - $itemclass = 'feedback_item_'.$item->typ; - //get the instance of the item-class - $itemobj = new $itemclass(); + $itemobj = feedback_get_item_class($item->typ); $rowOffset1 = $itemobj->excelprint_item($worksheet1, $rowOffset1, $xlsFormats, $item, $mygroupid, $coursefilter); } @@ -295,8 +293,7 @@ function feedback_excelprint_detailed_items(&$worksheet, $xlsFormats, $completed foreach($items as $item) { $value = $DB->get_record('feedback_value', array('item'=>$item->id, 'completed'=>$completed->id)); - $itemclass = 'feedback_item_'.$item->typ; - $itemobj = new $itemclass(); + $itemobj = feedback_get_item_class($item->typ); $printval = $itemobj->get_printval($item, $value); // $worksheet->setFormat(''); diff --git a/mod/feedback/edit_item.php b/mod/feedback/edit_item.php index b50446a95c8..2a0807fa9a3 100644 --- a/mod/feedback/edit_item.php +++ b/mod/feedback/edit_item.php @@ -84,8 +84,7 @@ if($id and $item = $DB->get_record('feedback_item', array('id'=>$id))) { require_once($CFG->dirroot.'/mod/feedback/item/'.$typ.'/lib.php'); -$itemclass = 'feedback_item_'.$typ; -$itemobj = new $itemclass(); +$itemobj = feedback_get_item_class($typ); $itemobj->build_editform($item, $feedback, $cm); @@ -124,48 +123,6 @@ if(isset($error)) { feedback_print_errors(); $itemobj->show_editform(); -/* -echo $OUTPUT->box_start('generalbox boxwidthwide boxaligncenter'); - echo '
'; - echo ''; - -//this div makes the buttons stand side by side -echo '
'; -$itemclass = 'feedback_item_'.$typ; -$itemobj = new $itemclass(); -$itemobj->show_edit($item, $usehtmleditor); -echo '
'; - echo ''; - echo ''; - echo ''; - echo ''; - -//choose the position -$lastposition = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); -echo get_string('position', 'feedback').' '; -echo '
'; - -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// -if(!empty($item->id)){ - echo ''; - echo ''; -}else{ - echo ''; - echo ''; -} -echo ''; -echo ''; -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// -*/ // echo $OUTPUT->box_end(); if ($typ!='label') { diff --git a/mod/feedback/item/captcha/lib.php b/mod/feedback/item/captcha/lib.php index c334a75d902..fb87fe4ea82 100644 --- a/mod/feedback/item/captcha/lib.php +++ b/mod/feedback/item/captcha/lib.php @@ -5,74 +5,73 @@ require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php'); class feedback_item_captcha extends feedback_item_base { var $type = "captcha"; var $commonparams; - var $item_form; - var $item; + var $item_form = false; + var $item = false; + var $feedback = false; function init() { } function build_editform($item, $feedback, $cm) { - global $DB, $CFG; - require_once('captcha_form.php'); + global $DB; + + $editurl = new moodle_url('/mod/feedback/edit.php', array('id'=>$cm->id)); - //get the lastposition number of the feedback_items - $position = $item->position; - $lastposition = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); - if($position == -1){ - $i_formselect_last = $lastposition + 1; - $i_formselect_value = $lastposition + 1; - $item->position = $lastposition + 1; - }else { - $i_formselect_last = $lastposition; - $i_formselect_value = $item->position; + //ther are no settings for recaptcha + if(isset($item->id) AND $item->id > 0) { + notice(get_string('there_are_no_settings_for_recaptcha', 'feedback'), $editurl->out()); + exit; } - //the elements for position dropdownlist - $positionlist = array_slice(range(0,$i_formselect_last),1,$i_formselect_last,true); - $item->presentation = empty($item->presentation) ? 3 : $item->presentation; - $item->required = 1; - - //all items for dependitem - $feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item); - $commonparams = array('cmid'=>$cm->id, - 'id'=>isset($item->id) ? $item->id : NULL, - 'typ'=>$item->typ, - 'items'=>$feedbackitems, - 'feedback'=>$feedback->id); - - //build the form - $this->item_form = new feedback_captcha_form('edit_item.php', array('item'=>$item, 'common'=>$commonparams, 'positionlist'=>$positionlist, 'position'=>$position)); + //only one recaptcha can be in a feedback + if($DB->record_exists('feedback_item', array('feedback'=>$feedback->id, 'typ'=>$this->type))) { + notice(get_string('only_one_captcha_allowed', 'feedback'), $editurl->out()); + exit; + } + + $this->item = $item; + $this->feedback = $feedback; + $this->item_form = true; //dummy + + $lastposition = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); + + $this->item->feedback = $feedback->id; + $this->item->template = 0; + $this->item->name = get_string('captcha', 'feedback'); + $this->item->label = get_string('captcha', 'feedback'); + $this->item->presentation = ''; + $this->item->typ = $this->type; + $this->item->hasvalue = $this->get_hasvalue(); + $this->item->position = $lastposition + 1; + $this->item->required = 1; + $this->item->dependitem = 0; + $this->item->dependvalue = ''; + $this->item->options = ''; } - //this function only can used after the call of build_editform() function show_editform() { - $this->item_form->display(); } function is_cancelled() { - return $this->item_form->is_cancelled(); + return false; } function get_data() { - if($this->item = $this->item_form->get_data()) { - return true; - } - return false; + return true; } function save_item() { global $DB; - if(!$item = $this->item_form->get_data()) { + if(!$this->item) { return false; } - $item->hasvalue = $this->get_hasvalue(); if(!$item->id) { - $item->id = $DB->insert_record('feedback_item', $item); + $item->id = $DB->insert_record('feedback_item', $this->item); }else { - $DB->update_record('feedback_item', $item); + $DB->update_record('feedback_item', $this->item); } return $DB->get_record('feedback_item', array('id'=>$item->id)); @@ -91,7 +90,7 @@ class feedback_item_captcha extends feedback_item_base { return $itemnr; } - function excelprint_item(&$worksheet, $rowOffset, $item, $groupid, $courseid = false) { + function excelprint_item(&$worksheet, $rowOffset, $xlsFormats, $item, $groupid, $courseid = false) { return $rowOffset; } @@ -103,13 +102,10 @@ class feedback_item_captcha extends feedback_item_base { * @return void */ function print_item_preview($item) { - global $SESSION, $CFG, $DB, $OUTPUT; + global $DB; $align = right_to_left() ? 'right' : 'left'; - $presentation = $item->presentation; - $SESSION->feedback->item->captcha->charcount = $presentation; - $cmid = 0; $feedbackid = $item->feedback; if($feedbackid > 0) { @@ -119,36 +115,14 @@ class feedback_item_captcha extends feedback_item_base { } } - if(isset($SESSION->feedback->item->captcha->checked)) { - $checked = $SESSION->feedback->item->captcha->checked == true; - unset($SESSION->feedback->item->captcha->checked); - }else { - $checked = false; - } - - $requiredmark = ($item->required == 1)?'':''; + $requiredmark = ''; //print the question and label echo ''; - //print the presentation - echo ''; } /** @@ -161,13 +135,11 @@ class feedback_item_captcha extends feedback_item_base { * @return void */ function print_item_complete($item, $value = '', $highlightrequire = false) { - global $SESSION, $CFG, $DB, $OUTPUT; + global $SESSION, $CFG, $DB, $USER; + require_once($CFG->libdir.'/recaptchalib.php'); $align = right_to_left() ? 'right' : 'left'; - $presentation = $item->presentation; - $SESSION->feedback->item->captcha->charcount = $presentation; - $cmid = 0; $feedbackid = $item->feedback; if($feedbackid > 0) { @@ -177,42 +149,57 @@ class feedback_item_captcha extends feedback_item_base { } } - if(isset($SESSION->feedback->item->captcha->checked)) { - $checked = $SESSION->feedback->item->captcha->checked == true; - unset($SESSION->feedback->item->captcha->checked); - }else { - $checked = false; - } - //check if an false value even the value is not required - if(!$item->required AND $value != '' AND $SESSION->feedback->item->captcha->checkchar != $value) { + if($highlightrequire AND !$this->check_value($value, $item)) { $falsevalue = true; }else { $falsevalue = false; } - if(($highlightrequire AND $item->required AND !$checked) OR $falsevalue) { - $highlight = ' missingrequire'; + if($falsevalue) { + $highlight = 'missingrequire'; }else { $highlight = ''; } - $requiredmark = ($item->required == 1)?'':''; + $requiredmark = ''; - //print the question and label - echo '