Skip to content

Commit

Permalink
Dev: search, group filter and pagination for questions list.
Browse files Browse the repository at this point in the history
  • Loading branch information
louis committed Sep 18, 2015
1 parent 9851847 commit dc5238d
Show file tree
Hide file tree
Showing 5 changed files with 204 additions and 128 deletions.
2 changes: 0 additions & 2 deletions application/controllers/admin/surveyadmin.php
Expand Up @@ -486,8 +486,6 @@ public function listquestions($surveyid)

$survey = Survey::model()->findByPk($iSurveyID);



$aData['surveyid'] = $iSurveyID;
$aData['display']['menu_bars']['listquestions'] = true;
$aData['sidebar']['listquestions'] = true;
Expand Down
68 changes: 25 additions & 43 deletions application/core/Survey_Common_Action.php
Expand Up @@ -908,50 +908,32 @@ function _listquestions($aData)
$iSurveyID = $aData['surveyid'];
$baselang = Survey::model()->findByPk($iSurveyID)->language;

$sort = new CSort();
$sort->attributes = array(
'Question id'=>array(
'asc'=>'qid',
'desc'=>'qid desc',
),
'Question order'=>array(
'asc'=>'question_order',
'desc'=>'question_order desc',
),
'Title'=>array(
'asc'=>'title',
'desc'=>'title desc',
),
'Question'=>array(
'asc'=>'question',
'desc'=>'question desc',
),

'Group'=>array(
'asc'=>'groups.group_name',
'desc'=>'groups.group_name desc',
),
);


// The DataProvider will be build from the Question model, search method
$model = new Question('search');

// Global filter
if (isset($_GET['Question']))
{
$model->attributes = $_GET['Question'];
}

$dataProvider=new CActiveDataProvider('Question', array(
'criteria'=>array(
'condition'=>'t.sid=:surveyid AND t.language=:language',
'params'=>array(':surveyid'=>$iSurveyID,':language'=>$baselang),
'join' => 'LEFT JOIN {{groups}} AS groups ON ( groups.gid = t.gid AND t.language = groups.language )',
),
'sort'=>$sort,
'pagination'=>array(
'pageSize'=>15,
),
));

$aData['questionsDatas'] = $dataProvider;
// Filter group
if (isset($_GET['group_name']))
{
$model->group_name = $_GET['group_name'];
}
// Set number of page
if (isset($_GET['pageSize']))
{
Yii::app()->user->setState('pageSize',(int)$_GET['pageSize']);
}

// We filter the current survey id
$model['sid'] = $iSurveyID;
$model['language'] = $baselang;
$aData['model']=$model;
$this->getController()->renderPartial("/admin/super/listquestions", $aData);
}
}
Expand Down
68 changes: 66 additions & 2 deletions application/models/Question.php
Expand Up @@ -18,6 +18,9 @@

class Question extends LSActiveRecord
{

// Stock the active group_name for questions list filtering
public $group_name;

/**
* Returns the static model of Settings table
Expand Down Expand Up @@ -702,6 +705,15 @@ public static function getQuestionClass($sType)
};
}

/**
* Return all group of the active survey
* Used to render group filter in questions list
*/
public function getAllGroups()
{
return QuestionGroup::model()->findAll("sid=:sid",array(':sid'=>$this->sid));
}

public function getbuttons()
{

Expand All @@ -716,6 +728,58 @@ public function getbuttons()
$button .= '<a class="btn btn-default" href="'.$url.'" role="button"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>';
return $button;
}
}

?>

public function search()
{
$pageSize=Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']);

$sort = new CSort();
$sort->attributes = array(
'Question id'=>array(
'asc'=>'qid',
'desc'=>'qid desc',
),
'Question order'=>array(
'asc'=>'question_order',
'desc'=>'question_order desc',
),
'Title'=>array(
'asc'=>'title',
'desc'=>'title desc',
),
'Question'=>array(
'asc'=>'question',
'desc'=>'question desc',
),

'Group'=>array(
'asc'=>'groups.group_name',
'desc'=>'groups.group_name desc',
),
);

$criteria = new CDbCriteria;
$criteria->condition='t.sid=:surveyid AND t.language=:language';
$criteria->params=(array(':surveyid'=>$this->sid,':language'=>$this->language));
$criteria->join='LEFT JOIN {{groups}} AS groups ON ( groups.gid = t.gid AND t.language = groups.language )';

if($this->group_name != '')
{
$criteria->addCondition('groups.group_name = :group_name');
$criteria->params=(array(':surveyid'=>$this->sid,':language'=>$this->language, ':group_name'=>$this->group_name));
}

$criteria->compare('title', $this->title, true, 'AND');
$criteria->compare('question', $this->title, true, 'OR');

$dataProvider=new CActiveDataProvider('Question', array(
'criteria'=>$criteria,
'sort'=>$sort,
'pagination'=>array(
'pageSize'=>$pageSize,
),
));
return $dataProvider;
}
}
2 changes: 1 addition & 1 deletion application/views/admin/super/listquestiongroups.php
Expand Up @@ -32,7 +32,7 @@
</div>
<div class="col-sm-2">
<?php echo CHtml::submitButton('Search', array('class'=>'btn btn-success')); ?>
<input type="button" class="btn btn-warning" value="reset" />
<a href="<?php echo Yii::app()->createUrl('admin/survey/sa/listquestiongroups/surveyid/'.$surveyid);?>" class="btn btn-warning"><?php eT('reset');?></a>
</div>
</div>
<?php $this->endWidget(); ?>
Expand Down
192 changes: 112 additions & 80 deletions application/views/admin/super/listquestions.php
Expand Up @@ -4,93 +4,125 @@
*/

?>
<div class="side-body">
<h3><?php eT('Questions in this survey'); ?></h3>

<div class="row">
<div class="col-lg-12 content-right">
<?php
$this->widget('bootstrap.widgets.TbGridView', array(
'dataProvider' => $questionsDatas,
'columns' => array(
array(
'name' => 'Question id',
'value'=>'$data->qid',
'htmlOptions' => array('class' => 'col-md-1'),
),
array(
'name' => 'Question order',
'value'=>'$data->question_order',
'htmlOptions' => array('class' => 'col-md-2'),
),
array(
'name' => 'Title',
'value'=>'$data->title',
'htmlOptions' => array('class' => 'col-md-1'),
),
array(
'name' => 'Question',
'value'=>'$data->question',
),
array(
'name' => 'Group',
//'value'=>'$data->groupName',
'value'=>'$data->groups->group_name',
'htmlOptions' => array('class' => 'col-md-2'),
),
<?php $pageSize=Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']);?>

array(
'name'=>'',
'type'=>'raw',
'value'=>'$data->buttons',
'htmlOptions' => array('class' => 'col-md-2 text-right'),
),

),
'ajaxUpdate' => false,
/*
'columns' => array(
<div class="side-body">
<h3><?php eT('Questions in this survey'); ?></h3>

array(
'name'=>'Group id',
'value'=>'$data->gid',
'htmlOptions' => array('class' => 'col-md-1'),
),
<div class="row">
<div class="col-lg-12 content-right">

<!-- Search Box -->
<div class="row">
<div class="col-lg-12">
<div class="form">
<!-- Begin Form -->
<?php $form=$this->beginWidget('CActiveForm', array(
'action' => Yii::app()->createUrl('admin/survey/sa/listquestions/surveyid/'.$surveyid),
'method' => 'get',
'htmlOptions'=>array(
'class'=>'form-horizontal',
),
)); ?>

<!-- search input -->
<div class="form-group">
<?php echo $form->label($model, 'filter: ', array('class'=>'col-sm-2 control-label text-right col-sm-offset-6')); ?>
<div class="col-sm-2 text-right">
<?php echo $form->textField($model, 'title', array('class'=>'form-control')); ?>
</div>
</div>

array(
'name'=>'Group Order',
'value'=>'$data->group_order',
'htmlOptions' => array('class' => 'col-md-1'),
),
array(
'name'=>'Group Name',
'value'=>'$data->group_name',
'htmlOptions' => array('class' => 'col-md-2'),
),
array(
'name'=>'Description',
'type'=>'raw',
'value'=>'$data->description',
'htmlOptions' => array('class' => 'col-md-2'),
),
),
'htmlOptions'=>array('style'=>'cursor: pointer;', 'class'=>'hoverAction'),
'selectionChanged'=>"function(id){window.location='" . Yii::app()->urlManager->createUrl('admin/survey/sa/view/surveyid/'.$surveyid.'/gid/' ) . '/' . "' + $.fn.yiiGridView.getSelection(id.split(',', 1));}",
'ajaxUpdate' => true,
*/
));
?>
</div>
</div>
</div>
<!-- select group -->
<div class="form-group">
<?php echo $form->label($model, 'Group:', array('class'=>'col-sm-2 control-label text-right col-sm-offset-6')); ?>
<div class="col-sm-2 text-right">
<select name="group_name" class="form-control">
<option value=""><?php eT('select a question group');?></option>
<?php foreach($model->AllGroups as $group): ?>
<option value="<?php echo $group->group_name;?>" <?php if( $group->group_name == $model->group_name){echo 'selected';} ?>>
<?php echo $group->group_name;?>
</option>
<?php endforeach?>
</select>
</div>
<div class="col-sm-2">
<?php echo CHtml::submitButton('Search', array('class'=>'btn btn-success')); ?>
<a href="<?php echo Yii::app()->createUrl('admin/survey/sa/listquestions/surveyid/'.$surveyid);?>" class="btn btn-warning"><?php eT('reset');?></a>
</div>
</div>

<?php $this->endWidget(); ?>
</div><!-- form -->
</div>
</div>

<!-- Grid -->
<?php
$this->widget('bootstrap.widgets.TbGridView', array(
'dataProvider' => $model->search(),
'id' => 'question-grid',

// Number of row per page selection
'summaryText'=>gT('Displaying {start}-{end} of {count} result(s).') .
CHtml::dropDownList(
'pageSize',
$pageSize,
Yii::app()->params['pageSizeOptions'],
array('class'=>'changePageSize form-control', 'style'=>'display: inline; width: auto')) .
gT(' rows per page'),

'columns' => array(
array(
'name' => 'Question id',
'value'=>'$data->qid',
'htmlOptions' => array('class' => 'col-md-1'),
),
array(
'name' => 'Question order',
'value'=>'$data->question_order',
'htmlOptions' => array('class' => 'col-md-2'),
),
array(
'name' => 'Title',
'value'=>'$data->title',
'htmlOptions' => array('class' => 'col-md-1'),
),
array(
'name' => 'Question',
'value'=>'$data->question',
),
array(
'name' => 'Group',
//'value'=>'$data->groupName',
'value'=>'$data->groups->group_name',
'htmlOptions' => array('class' => 'col-md-2'),
),

array(
'name'=>'',
'type'=>'raw',
'value'=>'$data->buttons',
'htmlOptions' => array('class' => 'col-md-2 text-right'),
),

),
'ajaxUpdate' => false,
));
?>
</div>
</div>
</div>


<!-- To update rows per page via ajax -->
<script type="text/javascript">
jQuery(function($) {
jQuery(document).on("change", '#pageSize', function(){
$.fn.yiiGridView.update('question-grid',{ data:{ pageSize: $(this).val() }});
});
});
</script>



Expand Down

0 comments on commit dc5238d

Please sign in to comment.