add filters, update api, update api docs

This commit is contained in:
iIronside
2021-11-12 14:30:01 +03:00
parent 560de1c05e
commit 12914e9f8f
27 changed files with 8734 additions and 111 deletions

View File

@ -2,9 +2,12 @@
namespace backend\modules\questionnaire\controllers;
use console\controllers\MovingController;
use Yii;
use backend\modules\questionnaire\models\Answer;
use backend\modules\questionnaire\models\AnswerSearch;
use yii\helpers\Console;
use yii\helpers\Html;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;

View File

@ -83,12 +83,10 @@ class QuestionController extends Controller
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if ($questionnaire_id !== null )
{
if ($questionnaire_id !== null) {
return $this->redirect(['questionnaire/view', 'id' => $questionnaire_id]);
}
elseif ($question_type_id !== null)
{
elseif ($question_type_id !== null) {
return $this->redirect(['question-type/view', 'id' => $question_type_id]);
}
@ -113,12 +111,10 @@ class QuestionController extends Controller
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if ($questionnaire_id !== null)
{
if ($questionnaire_id !== null) {
return $this->redirect(['questionnaire/view', 'id' => $questionnaire_id]);
}
elseif ($question_type_id !== null)
{
elseif ($question_type_id !== null) {
return $this->redirect(['question-type/view', 'id' => $question_type_id]);
}
@ -139,15 +135,12 @@ class QuestionController extends Controller
*/
public function actionDelete(int $id, $questionnaire_id = null, $question_type_id = null)
{
$this->findModel($id)->delete();
if ($questionnaire_id !== null)
{
if ($questionnaire_id !== null) {
return $this->redirect(['questionnaire/view', 'id' => $questionnaire_id]);
}
elseif ($question_type_id !== null)
{
elseif ($question_type_id !== null) {
return $this->redirect(['question-type/view', 'id' => $question_type_id]);
}
@ -169,4 +162,16 @@ class QuestionController extends Controller
throw new NotFoundHttpException('The requested page does not exist.');
}
// protected function goToView($questionnaire_id = null, $question_type_id = null)
// {
// if ($questionnaire_id !== null)
// {
// return $this->redirect(['questionnaire/view', 'id' => $questionnaire_id]);
// }
// elseif ($question_type_id !== null)
// {
// return $this->redirect(['question-type/view', 'id' => $question_type_id]);
// }
// }
}

View File

@ -153,7 +153,7 @@ class UserQuestionnaireController extends Controller
$parents = $_POST['depdrop_parents'];
if ($parents != null) {
$cat_id = $parents[0];
$categories = Questionnaire::questionnairesOfCategoryArr($cat_id);
$categories = Questionnaire::questionnairesByCategoryArr($cat_id);
$formattedCatArr = array();
foreach ($categories as $key => $value){

View File

@ -4,13 +4,14 @@ namespace backend\modules\questionnaire\models;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use backend\modules\questionnaire\models\Answer;
/**
* AnswerSearch represents the model behind the search form of `backend\modules\questionnaire\models\Answer`.
*/
class AnswerSearch extends Answer
{
public $questionnaire;
/**
* {@inheritdoc}
*/
@ -18,7 +19,7 @@ class AnswerSearch extends Answer
{
return [
[['id', 'question_id', 'answer_flag', 'status'], 'integer'],
[['answer_body', 'created_at', 'updated_at'], 'safe'],
[['answer_body', 'questionnaire', 'created_at', 'updated_at'], 'safe'],
];
}
@ -40,13 +41,17 @@ class AnswerSearch extends Answer
*/
public function search($params)
{
$query = Answer::find()->with('question');
$query = Answer::find()->with('question')->joinWith('questionnaire');
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->sort->attributes['title'] = [
'asc' => ['questionnaire.title' => SORT_ASC],
'desc' => ['questionnaire.title' => SORT_DESC],
];
$this->load($params);
@ -68,6 +73,10 @@ class AnswerSearch extends Answer
$query->andFilterWhere(['like', 'answer_body', $this->answer_body]);
$query->joinWith(['questionnaire' => function($q) {
$q->andFilterWhere(['like', 'questionnaire.id', $this->questionnaire]);
}]);
return $dataProvider;
}
}

View File

@ -0,0 +1,34 @@
<?php
use backend\modules\questionnaire\models\Questionnaire;
use kartik\select2\Select2;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model backend\modules\questionnaire\models\AnswerSearch */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="answer-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'questionnaire')->widget(Select2::className(),[
'data' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
'options' => ['placeholder' => 'Выберите анкету'],
'pluginOptions' => [
'allowClear' => true
],
])->label('Анкета') ?>
<div class="form-group">
<?= Html::submitButton('Поиск', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -1,12 +1,11 @@
<?php
use backend\modules\questionnaire\models\Question;
use backend\modules\questionnaire\models\Questionnaire;
use common\helpers\AnswerHelper;
use common\helpers\StatusHelper;
use kartik\select2\Select2;
use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $searchModel backend\modules\questionnaire\models\AnswerSearch */
@ -17,33 +16,32 @@ $this->params['breadcrumbs'][] = $this->title;
?>
<div class="answer-index">
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<p>
<?= Html::a('Создать новый ответ', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<!-- --><?php
//
// echo Select2::widget([
// 'model' => \backend\modules\questionnaire\models\Questionnaire::findOne()->where(['id'=>1]),
// 'attribute' => 'state_2',
// 'data' => 1,
// 'options' => ['placeholder' => 'Select a state ...'],
// 'pluginOptions' => [
// 'allowClear' => true
// ],
// ]);
//
// ?>
<?= $this->render('_search_by_questionnaire', [
'model' => $searchModel,
]) ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
// [
// 'filter' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
// 'label' => 'Анкета',
// 'attribute' => 'questionnaire',
// 'value' => 'questionnaire.title'
// ],
[
'filter' => Question::find()->select(['question_body', 'id'])->where(['!=', 'question_type_id', '1'])->indexBy('id')->column(),
'filter' => Question::find()->select(['question_body', 'id'])->where(['!=', 'question_type_id', '1'])
->andWhere(['questionnaire_id' => ''])
->indexBy('id')->column(),
// 'filter' => function($model){
// return \yii\helpers\ArrayHelper::getValue(Question::find()->where(['questionnaire_id' => $model->questionnaire_id]), ['id', 'title']) ;
// },
'attribute' => 'question_id',
'value' => 'question.question_body'
],
@ -68,3 +66,4 @@ $this->params['breadcrumbs'][] = $this->title;
],
]); ?>
</div>

View File

@ -42,7 +42,7 @@ $this->params['breadcrumbs'][] = $this->title;
<?= GridView::widget([
'dataProvider' => $questionDataProvider,
'filterModel' => $questionSearchModel,
// 'filterModel' => $questionSearchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'question_body',

View File

@ -0,0 +1,35 @@
<?php
use backend\modules\questionnaire\models\Questionnaire;
use kartik\select2\Select2;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model backend\modules\questionnaire\models\QuestionSearch */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="question-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'questionnaire_id')->widget(Select2::className(),[
'data' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
'options' => ['placeholder' => 'Выберите анкету'],
'pluginOptions' => [
'allowClear' => true
],
])->label('Анкета') ?>
<div class="form-group">
<?= Html::submitButton('Поиск', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -20,6 +20,10 @@ $this->params['breadcrumbs'][] = $this->title;
<?= Html::a('Создать вопрос', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= $this->render('_search_by_questionnaire', [
'model' => $searchModel,
]) ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
@ -31,11 +35,11 @@ $this->params['breadcrumbs'][] = $this->title;
'filter' => QuestionType::find()->select(['question_type', 'id'])->indexBy('id')->column(),
'value' => 'questionType.question_type'
],
[
'attribute' => 'questionnaire_id',
'filter' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
'value' => 'questionnaire.title',
],
// [
// 'attribute' => 'questionnaire_id',
// 'filter' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
// 'value' => 'questionnaire.title',
// ],
'question_priority',
'next_question',
[

View File

@ -72,7 +72,7 @@ $this->params['breadcrumbs'][] = $this->title;
<?= GridView::widget([
'dataProvider' => $answerDataProvider,
'filterModel' => $answerSearchModel,
// 'filterModel' => $answerSearchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'answer_body',

View File

@ -50,7 +50,7 @@ YiiAsset::register($this);
<?= GridView::widget([
'dataProvider' => $questionnaireDataProvider,
'filterModel' => $questionnaireSearchModel,
// 'filterModel' => $questionnaireSearchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'title',

View File

@ -65,7 +65,7 @@ YiiAsset::register($this);
<?= GridView::widget([
'dataProvider' => $questionDataProvider,
'filterModel' => $questionSearchModel,
// 'filterModel' => $questionSearchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'question_body',

View File

@ -0,0 +1,38 @@
<?php
use backend\modules\questionnaire\models\Questionnaire;
use backend\modules\questionnaire\models\UserQuestionnaire;
use kartik\select2\Select2;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model backend\modules\questionnaire\models\QuestionSearch */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="question-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'user_questionnaire_uuid')->widget(Select2::className(),[
// 'data' => Questionnaire::find()->select(['title', 'id'])->indexBy('id')->column(),
'data' => Questionnaire::find()->joinWith('userQuestionnaires')->select(['title', 'uuid',])->column(),
'options' => ['placeholder' => 'Выберите анкету'],
'pluginOptions' => [
'allowClear' => true
],
])->label('Анкета') ?>
<div class="form-group">
<?= Html::submitButton('Поиск', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php

View File

@ -20,6 +20,13 @@ $this->params['breadcrumbs'][] = $this->title;
<?= Html::a('Новый ответ пользователя', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?php
//echo $this->render('_search_by_questionnaire', [
// 'model' => $searchModel,
// ])
?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,