Index: addpage.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/lesson/action/addpage.php,v retrieving revision 1.13 diff -u -r1.13 addpage.php --- addpage.php 19 Sep 2006 04:49:45 -0000 1.13 +++ addpage.php 18 Oct 2006 11:11:52 -0000 @@ -1,197 +1,377 @@ -pagepath = 'mod/lesson/addpage'; - - // first get the preceeding page - $pageid = required_param('pageid', PARAM_INT); - $qtype = optional_param('qtype', LESSON_MULTICHOICE, PARAM_INT); - - // set of jump array - $jump = array(); - $jump[0] = get_string("thispage", "lesson"); - $jump[LESSON_NEXTPAGE] = get_string("nextpage", "lesson"); - $jump[LESSON_PREVIOUSPAGE] = get_string("previouspage", "lesson"); - $jump[LESSON_EOL] = get_string("endoflesson", "lesson"); - if(lesson_display_branch_jumps($lesson->id, $pageid)) { - $jump[LESSON_UNSEENBRANCHPAGE] = get_string("unseenpageinbranch", "lesson"); - $jump[LESSON_RANDOMPAGE] = get_string("randompageinbranch", "lesson"); - } - if(lesson_display_cluster_jump($lesson->id, $pageid)) { - $jump[LESSON_CLUSTERJUMP] = get_string("clusterjump", "lesson"); - } - if (!optional_param('firstpage', 0, PARAM_INT)) { - $linkadd = ""; - $apageid = get_field("lesson_pages", "id", "lessonid", $lesson->id, "prevpageid", 0); - - while (true) { - if ($apageid) { - $title = get_field("lesson_pages", "title", "id", $apageid); - $jump[$apageid] = strip_tags(format_string($title,true)); - $apageid = get_field("lesson_pages", "nextpageid", "id", $apageid); - } else { - // last page reached - break; - } - } - } else { - $linkadd = "&firstpage=1"; - } +libdir.'/formslib.php'; +class lesson_addnewpage_form extends moodleform { - // give teacher a blank proforma - print_heading_with_help(get_string("addaquestionpage", "lesson"), "overview", "lesson"); - ?> -
- - - - -
- '.get_string("questiontype", "lesson").": \n"; - echo helpbutton("questiontypes", get_string("questiontype", "lesson"), "lesson")."
"; - lesson_qtype_menu($LESSON_QUESTION_TYPE, $qtype, - "lesson.php?id=$cm->id&action=addpage&pageid=".$pageid.$linkadd); + function definition() { + global $USER,$CFG; + $CFG->pagepath = 'mod/lesson/addpage'; + $mform =& $this->_form; + $renderer =& $mform->defaultRenderer(); + // first get the preceeding page + $cm = $this->_customdata['cm']; + $lesson = $this->_customdata['lesson']; + $pageid = $this->_customdata['pageid']; + $qtype = $this->_customdata['qtype']; + $firstpage = $this->_customdata['firstpage']; + // set of jump array + $jump = array(); + $jump[0] = get_string("thispage", "lesson"); + $jump[LESSON_NEXTPAGE] = get_string("nextpage", "lesson"); + $jump[LESSON_PREVIOUSPAGE] = get_string("previouspage", "lesson"); + $jump[LESSON_EOL] = get_string("endoflesson", "lesson"); + if(lesson_display_branch_jumps($lesson->id, $pageid)) { + $jump[LESSON_UNSEENBRANCHPAGE] = get_string("unseenpageinbranch", "lesson"); + $jump[LESSON_RANDOMPAGE] = get_string("randompageinbranch", "lesson"); + } + if(lesson_display_cluster_jump($lesson->id, $pageid)) { + $jump[LESSON_CLUSTERJUMP] = get_string("clusterjump", "lesson"); + } + if (!$firstpage) { + $apageid = get_field("lesson_pages", "id", "lessonid", $lesson->id, "prevpageid", 0); - if ( $qtype == LESSON_SHORTANSWER || $qtype == LESSON_MULTICHOICE ) { // only display this option for Multichoice and shortanswer - echo '

'; + while (true) { + if ($apageid) { + $title = get_field("lesson_pages", "title", "id", $apageid); + $jump[$apageid] = strip_tags(format_string($title,true)); + $apageid = get_field("lesson_pages", "nextpageid", "id", $apageid); + } else { + // last page reached + break; + } + } + } + $mform->addElement('hidden','id',$cm->id); + $mform->setType('id', PARAM_INT); + $mform->addElement('hidden','action','addpage'); + $mform->setType('action', PARAM_TEXT); + $mform->addElement('hidden','pageid',$pageid); + $mform->setType('pageid', PARAM_INT); + $mform->addElement('hidden','qtype',$qtype); + $mform->setType('qtype', PARAM_INT); + if ($qtype == LESSON_SHORTANSWER || $qtype == LESSON_MULTICHOICE ) { // only display this option for Multichoice and shortanswer if ($qtype == LESSON_SHORTANSWER) { $qoptionstr = get_string('casesensitive', 'lesson'); } else { $qoptionstr = get_string('multianswer', 'lesson'); } - echo ""; - helpbutton("questionoption", get_string("questionoption", "lesson"), "lesson"); - echo '

'; - } - ?> - - - - \n"; - switch ($qtype) { - case LESSON_TRUEFALSE : - for ($i = 0; $i < 2; $i++) { - $iplus1 = $i + 1; - echo "\n"; - echo "\n"; - echo "\n"; - } - break; - case LESSON_ESSAY : - echo "\n"; - break; - case LESSON_MATCHING : - for ($i = 0; $i < $lesson->maxanswers+2; $i++) { - $icorrected = $i - 1; - if ($i == 0) { - echo "\n"; - } elseif ($i == 1) { - echo "\n"; - } else { - echo "\n"; - echo "\n"; - } - if ($i == 2) { - echo "\n"; - } elseif ($i == 3) { - echo "\n"; } + break; + } + $mform->addElement('submit','submit',get_string("addaquestionpage", "lesson")); + $mform->addElement('submit','cancel',get_string("cancel")); + + } +} +$pageid = required_param('pageid', PARAM_INT); +$qtype = optional_param('qtype', LESSON_MULTICHOICE, PARAM_INT); +$firstpage = optional_param('firstpage', 0, PARAM_INT); +if (!$firstpage) { + $linkadd = ""; +} else { + $linkadd = "&firstpage=1"; +} +$maddform =new lesson_addnewpage_form('lesson.php',compact('pageid','qtype','lesson','pageid','cm', 'firstpage')); +if(!$maddform->data_submitted()){ + +} +// check to see if the cancel button was pushed +if (optional_param('cancel', '', PARAM_ALPHA)) { + redirect("$CFG->wwwroot/mod/lesson/edit.php?id=$cm->id"); +} +$timenow = time(); +if ($data=$maddform->data_submitted()){ + $newpage = new stdClass; + $newanswer = new stdClass; + if ($data->pageid) { + // the new page is not the first page + if (!$page = get_record("lesson_pages", "id", $data->pageid)) { + error("Insert page: page record not found"); + } + $newpage->lessonid = $lesson->id; + $newpage->prevpageid = $data->pageid; + $newpage->nextpageid = $page->nextpageid; + $newpage->timecreated = $timenow; + $newpage->qtype = $data->qtype; + if (isset($data->qoption)) { + $newpage->qoption = $data->qoption; + } else { + $newpage->qoption = 0; + } + if (isset($data->layout)) { + $newpage->layout = $data->layout; + } else { + $newpage->layout = 0; + } + if (isset($data->display)) { + $newpage->display =$data->display; + } else { + $newpage->display = 0; + } + $newpage->title = $data->title; + $newpage->contents = trim($data->contents); + $newpage->title = addslashes($newpage->title); + $newpageid = insert_record("lesson_pages", $newpage); + if (!$newpageid) { + error("Insert page: new page not inserted"); + } + // update the linked list (point the previous page to this new one) + if (!set_field("lesson_pages", "nextpageid", $newpageid, "id", $newpage->prevpageid)) { + error("Insert page: unable to update next link"); + } + if ($page->nextpageid) { + // new page is not the last page + if (!set_field("lesson_pages", "prevpageid", $newpageid, "id", $page->nextpageid)) { + error("Insert page: unable to update previous link"); } - break; - case LESSON_SHORTANSWER : - case LESSON_NUMERICAL : - case LESSON_MULTICHOICE : - // default code - for ($i = 0; $i < $lesson->maxanswers; $i++) { - $iplus1 = $i + 1; - echo "\n"; - echo "\n"; - echo "\n"; } - break; + } } - // close table and form - ?> -

-
"; - echo get_string("pagecontents", "lesson").":
\n"; - print_textarea($usehtmleditor, 25,70, 630, 400, "contents"); - use_html_editor("contents"); - echo "
".get_string("answer", "lesson")." $iplus1:
\n"; - print_textarea(false, 6, 70, 630, 300, "answer[$i]"); - echo "
".get_string("response", "lesson")." $iplus1:
\n"; - print_textarea(false, 6, 70, 630, 300, "response[$i]"); - echo "
".get_string("jump", "lesson")." $iplus1: \n"; - if ($i) { - // answers 2, 3, 4... jumpto this page - choose_from_menu($jump, "jumpto[$i]", 0, ""); - } else { - // answer 1 jumpto next page - choose_from_menu($jump, "jumpto[$i]", LESSON_NEXTPAGE, ""); - } - helpbutton("jumpto", get_string("jump", "lesson"), "lesson"); - if($lesson->custom) { + $mform->addElement('checkbox','qoption',$qoptionstr); + $mform->setHelpButton('qoption', array('questionoption', get_string('questionoption','lesson'),'lesson'), true); + } + $mform->addElement('text','title',get_string("pagetitle", "lesson"),'maxlength="255" size="70"'); + $mform->setType('title', PARAM_TEXT); + $mform->addElement('htmleditor','contents',get_string("pagecontents", "lesson"),array('rows'=>'20', 'cols'=>'65')); + $mform->setType('contents', PARAM_RAW); + switch ($qtype) { + case LESSON_TRUEFALSE : + for ($i = 0; $i < 2; $i++) { + $iplus1 = $i + 1; + $mform->addElement('textarea',"answer[$i]",get_string("answer", "lesson").$iplus1,array('rows'=>'6', 'cols'=>'60')); + $mform->setType("answer[$i]", PARAM_TEXT); + $mform->addElement('textarea',"response[$i]",get_string("response", "lesson").$iplus1,array('rows'=>'6', 'cols'=>'60')); + $mform->setType("response[$i]", PARAM_TEXT); if ($i) { - echo get_string("score", "lesson")." $iplus1: "; + // answers 2, 3, 4... jumpto this page + $mform->addElement('select',"jumpto[$i]",get_string("jump", "lesson")."$iplus1:",$jump); + $mform->setDefault("jumpto[$i]",'0'); } else { - echo get_string("score", "lesson")." $iplus1: "; + // answer 1 jumpto next page + $mform->addElement('select',"jumpto[$i]",get_string("jump", "lesson")."$iplus1:",$jump); + $mform->setDefault("jumpto[$i]",LESSON_NEXTPAGE); + } + $mform->setHelpButton("jumpto[$i]", array('jumpto', get_string('jump','lesson'),'lesson'), true); + if($lesson->custom) { + if ($i) { + $mform->addElement('text',"score[$i]",get_string("score", "lesson")." $iplus1:",'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'0'); + } else { + $mform->addElement('text',"score[$i]",get_string("score", "lesson")." $iplus1:",'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'1'); + } } } - echo "
".get_string("jump", "lesson").": \n"; - choose_from_menu($jump, "jumpto[0]", LESSON_NEXTPAGE, ""); - helpbutton("jumpto", get_string("jump", "lesson"), "lesson"); + break; + case LESSON_ESSAY : + $mform->addElement('select',"jumpto[0]",get_string("jump", "lesson").":",$jump); + $mform->setDefault("jumpto[0]",LESSON_NEXTPAGE); + $mform->setHelpButton("jumpto[0]", array('jumpto', get_string('jump','lesson'),'lesson'), true); if ($lesson->custom) { - echo get_string("score", "lesson").": "; + $mform->addElement('text',"score[0]",get_string("score", "lesson"),'size="5"'); + $mform->setType("score[0]", PARAM_TEXT); + $mform->setDefault("score[0]",'1'); } - echo "
".get_string("correctresponse", "lesson").":
\n"; - print_textarea(false, 6, 70, 630, 300, "answer[$i]"); - echo "
".get_string("wrongresponse", "lesson").":
\n"; - print_textarea(false, 6, 70, 630, 300, "answer[$i]"); - echo "
".get_string("answer", "lesson")." $icorrected:
\n"; - print_textarea(false, 6, 70, 630, 300, "answer[$i]"); - echo "
".get_string("matchesanswer", "lesson")." $icorrected:
\n"; - print_textarea(false, 6, 70, 630, 300, "response[$i]"); - echo "
".get_string("correctanswerjump", "lesson").": \n"; - choose_from_menu($jump, "jumpto[$i]", LESSON_NEXTPAGE, ""); - helpbutton("jumpto", get_string("jump", "lesson"), "lesson"); - if($lesson->custom) { - echo get_string("correctanswerscore", "lesson").": "; + break; + case LESSON_MATCHING : + for ($i = 0; $i < $lesson->maxanswers+2; $i++) { + $icorrected = $i - 1; + if ($i == 0) { + $mform->addElement('textarea',"answer[$i]",get_string("correctresponse", "lesson").":",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("answer[$i]", PARAM_TEXT); + } elseif ($i == 1) { + $mform->addElement('textarea',"answer[$i]",get_string("wrongresponse", "lesson").":",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("answer[$i]", PARAM_TEXT); + } else { + $mform->addElement('textarea',"answer[$i]",get_string("answer", "lesson")."$icorrected:",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("answer[$i]", PARAM_TEXT); + $mform->addElement('textarea',"response[$i]",get_string("matchesanswer", "lesson")."$icorrected:",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("response[$i]", PARAM_TEXT); + } + if ($i == 2) { + $mform->addElement('select',"jumpto[$i]",get_string("correctanswerjump", "lesson").":",$jump); + $mform->setDefault("jumpto[$i]",LESSON_NEXTPAGE); + $mform->setHelpButton("jumpto[$i]", array('jumpto', get_string('jump','lesson'),'lesson'), true); + if($lesson->custom) { + $mform->addElement('text',"score[$i]",get_string("correctanswerscore", "lesson"),'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'1'); + } + } elseif ($i == 3) { + $mform->addElement('select',"jumpto[$i]",get_string("wronganswerjump", "lesson").":",$jump); + $mform->setDefault("jumpto[$i]",'0'); + $mform->setHelpButton("jumpto[$i]", array('jumpto', get_string('jump','lesson'),'lesson'), true); + if($lesson->custom) { + $mform->addElement('text',"score[$i]",get_string("wronganswerscore", "lesson").":",'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'0'); + } + } + } + break; + case LESSON_SHORTANSWER : + case LESSON_NUMERICAL : + case LESSON_MULTICHOICE : + // default code + for ($i = 0; $i < $lesson->maxanswers; $i++) { + $iplus1 = $i + 1; + $mform->addElement('textarea',"answer[$i]",get_string("answer", "lesson")."$iplus1:",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("answer[$i]", PARAM_TEXT); + $mform->addElement('textarea',"response[$i]",get_string("response", "lesson")."$iplus1:",array('rows'=>'6', 'cols'=>'60')); + $mform->setType("response[$i]", PARAM_TEXT); + if ($i) { + // answers 2, 3, 4... jumpto this page + $mform->addElement('select',"jumpto[$i]",get_string("jump", "lesson")."$iplus1:",$jump); + $mform->setDefault("jumpto[$i]",'0'); + } else { + // answer 1 jumpto next page + $mform->addElement('select',"jumpto[$i]",get_string("jump", "lesson")."$iplus1:",$jump); + $mform->setDefault("jumpto[$i]",LESSON_NEXTPAGE); } - echo "
".get_string("wronganswerjump", "lesson").": \n"; - choose_from_menu($jump, "jumpto[$i]", 0, ""); - helpbutton("jumpto", get_string("jump", "lesson"), "lesson"); + $mform->setHelpButton("jumpto[$i]", array('jumpto', get_string('jump','lesson'),'lesson'), true); if($lesson->custom) { - echo get_string("wronganswerscore", "lesson").": "; + if ($i) { + $mform->addElement('text',"score[$i]",get_string("score", "lesson")."$iplus1:",'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'0'); + } else { + $mform->addElement('text',"score[$i]",get_string("score", "lesson")."$iplus1:",'size="5"'); + $mform->setType("score[$i]", PARAM_TEXT); + $mform->setDefault("score[$i]",'1'); + } } - echo "
".get_string("answer", "lesson")." $iplus1:
\n"; - print_textarea(false, 6, 70, 630, 300, "answer[$i]"); - echo "
".get_string("response", "lesson")." $iplus1:
\n"; - print_textarea(false, 6, 70, 630, 300, "response[$i]"); - echo "
".get_string("jump", "lesson")." $iplus1: \n"; - if ($i) { - // answers 2, 3, 4... jumpto this page - choose_from_menu($jump, "jumpto[$i]", 0, ""); - } else { - // answer 1 jumpto next page - choose_from_menu($jump, "jumpto[$i]", LESSON_NEXTPAGE, ""); + } + } else { + // new page is the first page + // get the existing (first) page (if any) + if (!$page = get_record_select("lesson_pages", "lessonid = $lesson->id AND prevpageid = 0")) { + // there are no existing pages + $newpage->lessonid = $lesson->id; + $newpage->prevpageid = 0; // this is a first page + $newpage->nextpageid = 0; // this is the only page + $newpage->timecreated = $timenow; + $newpage->qtype = $data->qtype; + if (isset($data->qoption)) { + $newpage->qoption = $data->qoption; + } else { + $newpage->qoption = 0; + } + if (isset($data->layout)) { + $newpage->layout = $data->layout; + } else { + $newpage->layout = 0; + } + if (isset($data->display)) { + $newpage->display = $data->display; + } else { + $newpage->display = 0; + } + $newpage->title = $data->title; + $newpage->contents = trim($data->contents); + $newpage->title = addslashes($newpage->title); + $newpageid = insert_record("lesson_pages", $newpage); + if (!$newpageid) { + error("Insert page: new first page not inserted"); + } + } else { + // there are existing pages put this at the start + $newpage->lessonid = $lesson->id; + $newpage->prevpageid = 0; // this is a first page + $newpage->nextpageid = $page->id; + $newpage->timecreated = $timenow; + $newpage->qtype = $data->qtype; + if (isset($data->qoption)) { + $newpage->qoption = $data->qoption; + } else { + $newpage->qoption = 0; + } + if (isset($data->layout)) { + $newpage->layout = $data->layout; + } else { + $newpage->layout = 0; + } + if (isset($data->display)) { + $newpage->display = $data->display; + } else { + $newpage->display = 0; + } + $newpage->title = $data->title; + $newpage->contents = trim($data->contents); + $newpage->title = addslashes($newpage->title); + $newpageid = insert_record("lesson_pages", $newpage); + if (!$newpageid) { + error("Insert page: first page not inserted"); + } + // update the linked list + if (!set_field("lesson_pages", "prevpageid", $newpageid, "id", $newpage->nextpageid)) { + error("Insert page: unable to update link"); + } + } + } + + // now add the answers + if ($data->qtype == LESSON_ESSAY) { + $newanswer->lessonid = $lesson->id; + $newanswer->pageid = $newpageid; + $newanswer->timecreated = $timenow; + if (isset($data->jumpto[0])) { + $newanswer->jumpto = $data->jumpto[0]; + } + if (isset($data->score[0])) { + $newanswer->score = $data->score[0]; + } + $newanswerid = insert_record("lesson_answers", $newanswer); + if (!$newanswerid) { + error("Insert Page: answer record not inserted"); + } + } else { + if ($data->qtype == LESSON_MATCHING) { + // need to add two to offset correct response and wrong response + $lesson->maxanswers = $lesson->maxanswers + 2; + } + for ($i = 0; $i < $lesson->maxanswers; $i++) { + if (!empty($data->answer[$i]) and trim(strip_tags($data->answer[$i]))) { // strip_tags because the HTML editor adds


... + $newanswer->lessonid = $lesson->id; + $newanswer->pageid = $newpageid; + $newanswer->timecreated = $timenow; + $newanswer->answer = trim($data->answer[$i]); + if (isset($data->response[$i])) { + $newanswer->response = trim($data->response[$i]); } - helpbutton("jumpto", get_string("jump", "lesson"), "lesson"); - if($lesson->custom) { - if ($i) { - echo get_string("score", "lesson")." $iplus1: "; - } else { - echo get_string("score", "lesson")." $iplus1: "; + if (isset($data->jumpto[$i])) { + $newanswer->jumpto = $data->jumpto[$i]; + } + if ($lesson->custom) { + if (isset($data->score[$i])) { + $newanswer->score = $data->score[$i]; + } + } + $newanswerid = insert_record("lesson_answers", $newanswer); + if (!$newanswerid) { + error("Insert Page: answer record $i not inserted"); + } + } else { + if ($data->qtype == LESSON_MATCHING) { + if ($i < 2) { + $newanswer->lessonid = $lesson->id; + $newanswer->pageid = $newpageid; + $newanswer->timecreated = $timenow; + $newanswerid = insert_record("lesson_answers", $newanswer); + if (!$newanswerid) { + error("Insert Page: answer record $i not inserted"); + } } + } else { + break; } - echo "


- "> - "> -
-
+ + lesson_set_message(get_string('insertedpage', 'lesson').': '.format_string($newpage->title, true), 'notifysuccess'); + redirect("$CFG->wwwroot/mod/lesson/edit.php?id=$cm->id"); + +}else{ + print_heading_with_help(get_string("addaquestionpage", "lesson"), "overview", "lesson"); + lesson_qtype_menu($LESSON_QUESTION_TYPE, $qtype,"lesson.php?id=$cm->id&action=addpage&pageid=".$pageid.$linkadd); + $maddform->display(); +} +?> \ No newline at end of file