8ae1d420751d9fd063da74349e807bf0ece5ae46

Author: José Lorenzo Rodríguez

Date: 2009-04-29 15:21:43 -0430

Adding some ajax to the question header edition New plugin for jeditable, so it can handle tinymce controls

diff --git a/app_model.php b/app_model.php index 150e1cc..a1bd716 100755 --- a/app_model.php +++ b/app_model.php @@ -102,7 +102,5 @@ class AppModel extends Model{ function getParentCourse() { return false; } - - } ?> diff --git a/plugins/quiz/config/sql/schema.php b/plugins/quiz/config/sql/schema.php index 002ddcf..0a6d8fc 100755 --- a/plugins/quiz/config/sql/schema.php +++ b/plugins/quiz/config/sql/schema.php @@ -102,7 +102,7 @@ class QuizSchema extends CakeSchema { var $quiz_questions_tags = array( 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'key' => 'primary'), 'question_id' => array('type' => 'integer', 'null' => false), - 'tag_id' => array('type' => 'integer', 'null' => false), + 'tag_id' => array('type' => 'integer', 'null' => false), 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)) ); var $quiz_quizzes = array( diff --git a/plugins/quiz/controllers/quizzes_controller.php b/plugins/quiz/controllers/quizzes_controller.php index cf14341..87aaf0e 100755 --- a/plugins/quiz/controllers/quizzes_controller.php +++ b/plugins/quiz/controllers/quizzes_controller.php @@ -259,7 +259,11 @@ class QuizzesController extends QuizAppController { ) ); if (!empty($this->data)) { - if ($this->Quiz->QuizQuestion->save($this->data,true,array('header'))) { + if ($this->data = $this->Quiz->QuizQuestion->save($this->data,true,array('header'))) { + if ($this->RequestHandler->isAjax()) { + $this->set('isAjax',true); + return; + } $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) diff --git a/plugins/quiz/views/quizzes/edit.ctp b/plugins/quiz/views/quizzes/edit.ctp index f82a6f5..8020492 100755 --- a/plugins/quiz/views/quizzes/edit.ctp +++ b/plugins/quiz/views/quizzes/edit.ctp @@ -3,6 +3,8 @@ $javascript->link(array( 'jquery/plugins/jquery.ui.core', 'jquery/plugins/jquery.ui.sortable', 'jquery/plugins/jquery.form', + 'jquery/plugins/jquery.jeditable', + 'jquery/plugins/jquery.jeditable.tinymce' ),false); ?> <h1><?php echo sprintf(__('Edit %s %s', true), __('Quiz', true), $form->value('Quiz.name'));?></h1> @@ -17,7 +19,7 @@ $javascript->link(array( foreach ($this->data['Question'] as $index => $question) { $number = $index + 1; echo '<li class="quiz-question" id="'.$question['QuizQuestion']['id'].'">', - '<div class="quiz-question-header">', + '<div class="quiz-question-header" id="qheader-'.$question['QuizQuestion']['id'].'">', $question['QuizQuestion']['header'], '</div>', "<div class='quiz-question-number'> @@ -41,7 +43,7 @@ $javascript->link(array( 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')); + array('class' => 'quiz-question-action question-edit-header')); echo $this->element('previewing/'.Inflector::underscore($question['type']), array('question' => $question)) , '&nbsp;', '</li>'; @@ -169,6 +171,14 @@ $(document).ready(function(){ }); return false; } + + function editHeader() { + var link = $(this); + var container = link.parent('li').children('.quiz-question-header'); + container.click(); + return false; + } + $('#QuizEditForm.search').ajaxForm({ target: '#questions', url: '<?php echo $html->url(array('action' => 'available_questions') + $this->params['pass'] + $this->params['named']); ?>', @@ -191,6 +201,7 @@ $(document).ready(function(){ $('#questions .list ul li a.question-preview-link').live('click',questionPreview); $('ol.quiz-question-list a.question-remove').live('click',removeQuestion); $('ol.quiz-question-list a.question-move-up, ol.quiz-question-list a.question-move-down').live('click',moveQuestion); + $('ol.quiz-question-list a.question-edit-header').live('click',editHeader); $(".quiz-question-list").sortable({ handle:'h3', placeholder: 'quiz-question-placeholder quiz-question', @@ -226,5 +237,20 @@ $(document).ready(function(){ } }).find('li .question-header').addClass('movable'); + $(".quiz-question-header").each(function(){ + var url = $(this).parent('li').children('a.question-edit-header').attr('href'); + $(this).editable(url,{ + type : 'mce', + name: 'data[QuizQuestion][header]', + submit : 'OK', + indicator : "Saving...", + tooltip : 'Click to edit...', + width : '90%', + placeholder : '', + height : '100px' + }); + }); + }); -</script> \ No newline at end of file +</script> +<?php echo $this->element('ui/editor',array('options' => array('mode' => 'none'))); ?> \ No newline at end of file diff --git a/plugins/quiz/views/quizzes/edit_question_header.ctp b/plugins/quiz/views/quizzes/edit_question_header.ctp index ad2c7ac..80b79b6 100644 --- a/plugins/quiz/views/quizzes/edit_question_header.ctp +++ b/plugins/quiz/views/quizzes/edit_question_header.ctp @@ -1,3 +1,6 @@ +<?php if (!empty($isAjax)) :?> +<?php echo $this->data['QuizQuestion']['header'];?> +<?php else :?> <div class="quiz"> <?php echo $form->create('QuizQuestion',array('url' => array( 'action' => $this->action, @@ -15,4 +18,5 @@ </fieldset> <?php echo $form->end(__('Submit', true));?> <?php echo $this->element('ui/editor');?> -</div> \ No newline at end of file +</div> +<?php endif;?> \ No newline at end of file diff --git a/views/elements/ui/editor.ctp b/views/elements/ui/editor.ctp index f571426..d101a20 100755 --- a/views/elements/ui/editor.ctp +++ b/views/elements/ui/editor.ctp @@ -5,7 +5,9 @@ if (!isset($options)) { echo $javascript->link('tiny_mce/tiny_mce',null,null,false); $this->_loadHelpers($this->helpers,array('TinyMce')); $this->TinyMce = $this->helpers['TinyMce']; +$widget = $this->TinyMce->widget($options); +if (!isset($enclose) || $enclose == true) { + echo $javascript->codeBlock($widget); +} else + echo $widget; ?> -<script language="javascript" type="text/javascript"> -<?php echo $this->TinyMce->widget($options); ?> -</script> diff --git a/webroot/js/jquery/plugins/jquery.jeditable.tinymce.js b/webroot/js/jquery/plugins/jquery.jeditable.tinymce.js new file mode 100644 index 0000000..c31d387 --- /dev/null +++ b/webroot/js/jquery/plugins/jquery.jeditable.tinymce.js @@ -0,0 +1,28 @@ +$.editable.addInputType('mce', { + element : function(settings, original) { + var textarea = $('<textarea id="'+$(original).attr("id")+'_mce"/>'); + if (settings.rows) { + textarea.attr('rows', settings.rows); + } else { + textarea.height(settings.height); + } + if (settings.cols) { + textarea.attr('cols', settings.cols); + } else { + textarea.width(settings.width); + } + $(this).append(textarea); + return(textarea); + }, + plugin : function(settings, original) { + tinyMCE.execCommand("mceAddControl", true, $(original).attr("id")+'_mce'); + }, + submit : function(settings, original) { + tinyMCE.triggerSave(); + tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce'); + }, + reset : function(settings, original) { + tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce'); + original.reset(); + } +}); \ No newline at end of file