812c11f074f1284ce661aa2318b229d1fcafffeb

Author: José Lorenzo Rodríguez

Date: 2009-04-27 16:47:14 -0430

Adding a custom question header per quiz

diff --git a/plugins/quiz/config/sql/schema.php b/plugins/quiz/config/sql/schema.php index 6fc6553..002ddcf 100755 --- a/plugins/quiz/config/sql/schema.php +++ b/plugins/quiz/config/sql/schema.php @@ -96,6 +96,7 @@ class QuizSchema extends CakeSchema { 'question_id' => array('type' => 'integer', 'null' => false), 'quiz_id' => array('type' => 'integer', 'null' => false), 'position' => array('type' => 'integer', 'null' => false, 'length' => 4), + 'header' => array('type' => 'text', 'null' => false), 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) ); var $quiz_questions_tags = array( diff --git a/plugins/quiz/controllers/quizzes_controller.php b/plugins/quiz/controllers/quizzes_controller.php index 255f5fc..cf14341 100755 --- a/plugins/quiz/controllers/quizzes_controller.php +++ b/plugins/quiz/controllers/quizzes_controller.php @@ -249,6 +249,28 @@ class QuizzesController extends QuizAppController { ); } } + + function edit_question_header($quizQuestion) { + $this->Quiz->QuizQuestion->id = $quizQuestion; + $question = $this->Quiz->QuizQuestion->find('first',array( + 'fields' => array('id','quiz_id','header'), + 'conditions' => array('QuizQuestion.id' => $quizQuestion), + 'recursive' => -1 + ) + ); + if (!empty($this->data)) { + if ($this->Quiz->QuizQuestion->save($this->data,true,array('header'))) { + $this->Session->setFlash(__('The question header was edited', true), 'default', array('class' => 'success')); + $this->redirect( + array('controller' => 'quizzes', 'action' => 'edit',$question['QuizQuestion']['quiz_id'],'course_id' => $this->activeCourse) + ); + } else { + $this->Session->setFlash(__('The question header could not be edited', true), 'default', array('class' => 'error')); + } + } else { + $this->data = $question; + } + } function answer($id = null) { if (!$id) { diff --git a/plugins/quiz/models/quiz.php b/plugins/quiz/models/quiz.php index 312c350..268a12d 100755 --- a/plugins/quiz/models/quiz.php +++ b/plugins/quiz/models/quiz.php @@ -54,8 +54,7 @@ class Quiz extends QuizAppModel { 'order' => array('QuizQuestion.position' => 'ASC') ) ); - - + function __construct($id = false, $table = null, $ds = null) { $this->setErrorMessage( 'name.required', __('The name can not be empty',true) diff --git a/plugins/quiz/vendors/css/quiz.css b/plugins/quiz/vendors/css/quiz.css index 4f943c2..2e314bc 100755 --- a/plugins/quiz/vendors/css/quiz.css +++ b/plugins/quiz/vendors/css/quiz.css @@ -6,7 +6,7 @@ } .quiz-preview { - width:90%; + width:95%; } .quiz-preview .content { @@ -24,13 +24,7 @@ background:#f5f5f5; color:#333; font-style:italic; - clear:both; -} - -.quiz-preview li{ - float: left; - clear:both; - margin-bottom:10px; + clear:right; } .droplist { @@ -203,7 +197,7 @@ text-decoration:none; } -#questions .list ul li.question-list-element h4.loading, .quiz-question-list li h3.loading { +#questions .list ul li.question-list-element h4.loading, .quiz-question-list li .loading { background-image:url('../img/loading.gif'); background-position:right; background-repeat:no-repeat; @@ -423,6 +417,13 @@ div.textQuestion div.input.text input, div.textQuestion div.input.textarea texta width:75%; } +ol.quiz-question-list li.quiz-question{ + float: left; + clear:both; + margin-bottom:10px; + list-style:none; +} + ol.quiz-question-list li { width:100%; } @@ -441,4 +442,17 @@ ol.quiz-question-list li a.quiz-question-action.hidden { .quiz-question-placeholder { border:1px solid #FCEFA1; background:#6EA6D5; + height:2em; +} + +ol.quiz-question-list li .quiz-question-number { + float:left; + font-weight:bold; + margin:15px 20px 0 0; +} +ol.quiz-question-list li .quiz-question-header { + clear:both; +} +ol.quiz-question-list li .quiz-question-header *{ + margin-bottom:0; } \ No newline at end of file diff --git a/plugins/quiz/views/elements/listing/choice_question.ctp b/plugins/quiz/views/elements/listing/choice_question.ctp index ac30ea5..ba8910e 100755 --- a/plugins/quiz/views/elements/listing/choice_question.ctp +++ b/plugins/quiz/views/elements/listing/choice_question.ctp @@ -10,7 +10,7 @@ } $question = $question['ChoiceQuestion']; ?> - <h4><?php echo $html->link($text->truncate($question['body'], 200), array( + <h4><?php echo $html->link($text->truncate(strip_tags($question['body']), 200), array( 'controller' => 'choice_questions', 'action' => 'preview', $question['id'], diff --git a/plugins/quiz/views/elements/listing/matching_question.ctp b/plugins/quiz/views/elements/listing/matching_question.ctp index 8bdc249..e10a2ac 100755 --- a/plugins/quiz/views/elements/listing/matching_question.ctp +++ b/plugins/quiz/views/elements/listing/matching_question.ctp @@ -9,7 +9,7 @@ $num = __('%s Match item', true); } ?> - <h4><?php echo $html->link($text->truncate($question['body'], 200), array( + <h4><?php echo $html->link($text->truncate(strip_tags($question['body']), 200), array( 'controller' => 'matching_questions', 'action' => 'preview', $question['id'], diff --git a/plugins/quiz/views/elements/listing/ordering_question.ctp b/plugins/quiz/views/elements/listing/ordering_question.ctp index 95ebb75..6d3a7f1 100755 --- a/plugins/quiz/views/elements/listing/ordering_question.ctp +++ b/plugins/quiz/views/elements/listing/ordering_question.ctp @@ -7,7 +7,7 @@ } $question = $question['OrderingQuestion']; ?> - <h4><?php echo $html->link($text->truncate($question['body'], 200), array( + <h4><?php echo $html->link($text->truncate(strip_tags($question['body']), 200), array( 'controller' => 'ordering_questions', 'action' => 'preview', $question['id'], diff --git a/plugins/quiz/views/elements/listing/text_question.ctp b/plugins/quiz/views/elements/listing/text_question.ctp index fa2280a..1f239c5 100755 --- a/plugins/quiz/views/elements/listing/text_question.ctp +++ b/plugins/quiz/views/elements/listing/text_question.ctp @@ -2,7 +2,7 @@ $question = $question['TextQuestion']; ?> <li class="question-list-element"> - <h4><?php echo $html->link($text->truncate($question['title'], 200), array( + <h4><?php echo $html->link($text->truncate(strip_tags($question['title']), 200), array( 'controller' => 'text_questions', 'action' => 'preview', $question['id'], diff --git a/plugins/quiz/views/quizzes/edit.ctp b/plugins/quiz/views/quizzes/edit.ctp index 07e6874..f82a6f5 100755 --- a/plugins/quiz/views/quizzes/edit.ctp +++ b/plugins/quiz/views/quizzes/edit.ctp @@ -12,14 +12,20 @@ $javascript->link(array( <h2>&mdash; <?php echo $form->value('Quiz.name') ?> &mdash;</h2> <?php unset($this->data['Quiz']); - echo '<ol class="quiz-question-list">'; $total = count($this->data['Question']); + echo '<ol class="quiz-question-list">'; foreach ($this->data['Question'] as $index => $question) { - echo - "<li id='".$question['QuizQuestion']['id']."'", - '<h3 class="question-header">' , + $number = $index + 1; + echo '<li class="quiz-question" id="'.$question['QuizQuestion']['id'].'">', + '<div class="quiz-question-header">', + $question['QuizQuestion']['header'], + '</div>', + "<div class='quiz-question-number'> + $number. + </div>", + '<h3 class="question-header">', __(Inflector::humanize(Inflector::underscore($question['type'])), true) , - '</h3>' , + '</h3>', $html->link(__('remove',true), array('action' => 'remove_question',$question['QuizQuestion']['id']), array('class' => 'quiz-question-action question-remove')); @@ -33,6 +39,9 @@ $javascript->link(array( echo $html->link(__('move up',true), array('action' => 'move_question',$question['QuizQuestion']['id'],'up'), array('class' => 'quiz-question-action question-move-up' .$hidden)); + echo $html->link(__('edit header',true), + array('action' => 'edit_question_header',$question['QuizQuestion']['id']), + array('class' => 'quiz-question-action')); echo $this->element('previewing/'.Inflector::underscore($question['type']), array('question' => $question)) , '&nbsp;', '</li>'; @@ -51,7 +60,7 @@ $(document).ready(function(){ (json.flash.params.class == 'success'); } - function fixMoveButtons(question) { + function fixThings(question) { question .parent() .children('li:first-child') @@ -72,7 +81,13 @@ $(document).ready(function(){ .children('a.question-move-down').hide() .end() .prev() - .children('a.question-move-down').show(); + .children('a.question-move-down').show() + .end() + .end() + .end() + .children('li').each(function(i){ + $(this).find('.quiz-question-number').html((i + 1) + '.'); + }); } function questionPreview() { var link = $(this); @@ -178,7 +193,7 @@ $(document).ready(function(){ $('ol.quiz-question-list a.question-move-up, ol.quiz-question-list a.question-move-down').live('click',moveQuestion); $(".quiz-question-list").sortable({ handle:'h3', - placeholder: 'quiz-question-placeholder', + placeholder: 'quiz-question-placeholder quiz-question', opacity: 0.5, axis: 'y', cursor: 'move', @@ -197,7 +212,7 @@ $(document).ready(function(){ dataType : 'json', success : function(data,status) { if (jsonSucces(data)) { - fixMoveButtons(item); + fixThings(item); item.data('position',position); } }, diff --git a/plugins/quiz/views/quizzes/edit_question_header.ctp b/plugins/quiz/views/quizzes/edit_question_header.ctp new file mode 100644 index 0000000..ad2c7ac --- /dev/null +++ b/plugins/quiz/views/quizzes/edit_question_header.ctp @@ -0,0 +1,18 @@ +<div class="quiz"> +<?php echo $form->create('QuizQuestion',array('url' => array( + 'action' => $this->action, + 'controller' => 'quizzes', + ) + $this->params['pass'] + ) + ); +?> + <fieldset> + <legend><?php echo __('Edit Question header', true);?></legend> + <?php + echo $form->input('id'); + echo $form->input('header',array('type' => 'textarea')); + ?> + </fieldset> +<?php echo $form->end(__('Submit', true));?> +<?php echo $this->element('ui/editor');?> +</div> \ No newline at end of file diff --git a/tmp/cache/models/.gitignore b/tmp/cache/models/.gitignore old mode 100644 new mode 100755 diff --git a/tmp/cache/persistent/.gitignore b/tmp/cache/persistent/.gitignore old mode 100644 new mode 100755 diff --git a/tmp/cache/views/.gitignore b/tmp/cache/views/.gitignore old mode 100644 new mode 100755