Commit 64fae795 authored by Шакарим Сапа's avatar Шакарим Сапа

Merge remote-tracking branch 'origin/master'

parents 6d31f7fc c0ab0ad0
......@@ -2,9 +2,12 @@
namespace common\modules\school\controllers;
use Yii;
use common\components\BaseController;
use common\modules\school\models\Lessons;
use common\modules\testings\models\Passing;
class LessonController extends BaseController
{
......@@ -18,10 +21,19 @@ class LessonController extends BaseController
public function actionView($id)
{
$model = Lessons::findOne($id);
\Yii::$app->view->registerMetaTag([
'property' => 'og:title',
'content' => $model->title
]);
return $this->render('view', ['model' => $model]);
// Ищим прохождение теста
$passing = null;
if($model->test)
{
$passing = Passing::find()->where(['test_id' => $model->test_id, 'user_id' => Yii::$app->user->id])->one();
}
return $this->render('view', compact('model', 'passing'));
}
}
......@@ -4,6 +4,7 @@ use yii\helpers\Url;
use common\modules\users\widgets\UserBoxWidget;
use common\modules\school\assets\WidgetAssetBundle;
use common\modules\testings\models\Passing;
WidgetAssetBundle::register($this);
?>
......@@ -75,7 +76,11 @@ WidgetAssetBundle::register($this);
</section>
<section class="vc-cont">
<div class="container">
<?php if($model->test) : ?>
<?php if(!$passing) : ?>
<div class="row">
<div class="col-md-4 col-xs-5 col-sm-12">
<a href="<?=Url::to(['/testing/info/' . $model->test_id])?>" class="vc_bt_quit_less">Завершить урок</a>
......@@ -84,14 +89,55 @@ WidgetAssetBundle::register($this);
<div class="vc_quit_txt">Чтобы завершить урок, выполните задание.</div>
</div>
</div>
<?php endif; ?>
<!-- <div class="row">
<?php else : ?>
<?php if($passing->status == Passing::STARTED && strtotime($passing->start_date) + ($passing->test->minutes * 60) > time() && $passing->attempt < $passing->test->attempt) : ?>
<div class="row">
<div class="col-md-4 col-xs-5 col-sm-12">
<a href="<?=Url::to(['/testing/pass/' . $passing->id])?>" class="vc_bt_quit_less">Продолжить</a>
</div>
<div class="col-md-8 col-xs-7 col-sm-12">
<div class="vc_quit_txt">Пожалуйста, завершите начатое тестирование.</div>
</div>
</div>
<?php elseif($passing->passed == Passing::PASSED) : ?>
<div class="row">
<div class="col-md-4 col-xs-5 col-sm-12">
<a href="<?=Url::to(['/testing/statistic/' . $passing->id])?>" class="vc_bt_quit_less">Результаты</a>
</div>
<div class="col-md-8 col-xs-7 col-sm-12">
<div class="vc_quit_txt">Вы можете посмотреть результаты теста.</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<div class="vc_green_inf">
<span>Тестирование успешно пройдено. Вы набрали 99 999 балов.<br> Оставляйте комментарии, что бы увеличить Ваш рейтинг.</span>
<span>Тестирование успешно пройдено. Вы набрали <?=$passing->points?> баллов.<br> Оставляйте комментарии, что бы увеличить Ваш рейтинг.</span>
</div>
</div>
</div>
</div> -->
<?php else : ?>
<div class="row">
<div class="col-md-4 col-xs-5 col-sm-12">
<a href="<?=Url::to(['/testing/info/' . $model->test_id])?>" class="vc_bt_quit_less">Пересдать</a>
</div>
<div class="col-md-8 col-xs-7 col-sm-12">
<div class="vc_quit_txt">Может быть повезет на этот раз?</div>
</div>
</div>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?php if($model->text):?>
<div class="row">
......
......@@ -35,26 +35,8 @@ class SessionAdminController extends AdminController
{
$model = $this->findModel($id);
$test_ids = array_keys(\yii\helpers\ArrayHelper::map($model->tests, 'id', 'name'));
$query = Passing::find()
->joinWith('user')
->where([
'test_id' => $test_ids,
]);
$query->andWhere(['<>', 'end_date', ""]);
$users = [];
foreach ($query->all() as $passing)
{
$users[$passing->end_date] = $passing->user;
}
return $this->render('view', [
'model' => $model,
'users' => $users
'model' => $model
]);
}
......
......@@ -31,12 +31,18 @@ class TestController extends \common\components\BaseController
{
$model = $this->findModel($id);
if(
$model
// && $model->user_id == Yii::app()->request->cookies[self::AUTH_COOKIE]->value
// && $model->status == TestingPassing::NOT_STARTED
)
if($model)
{
$passing = Passing::find()->where([
'user_id' => Yii::$app->user->identity->id,
'test_id' => $id
])->one();
if($passing && $passing->passed == Passing::PASSED)
{
return $this->redirect(['/testing/statistic/'.$passing->id]);
}
return $this->render('info', [
'model' => $model
]);
......@@ -68,18 +74,21 @@ class TestController extends \common\components\BaseController
$passing->status = Passing::NOT_STARTED;
}
if($passing && $passing->passed == Passing::PASSED)
{
return $this->redirect(['/testing/statistic/'.$passing->id]);
}
// Проверяем статус прохождения
switch ($passing->status)
{
case Passing::FAILED :
case Passing::PASSED :
case Passing::NOT_STARTED :
case Passing::ENDED :
$passing->start_date = date('d.m.Y H:i:s');
$passing->passed = Passing::FAILED;
$passing->end_date = null;
$passing->percent = 0;
$passing->attempt = 0;
$passing->points = 0;
break;
case Passing::STARTED :
......@@ -281,12 +290,10 @@ class TestController extends \common\components\BaseController
if ($passing->end_date === null)
{
$passing->end_date = date('d.m.Y H:i:s');
$passing->status = Passing::ENDED;
$passing->recountPassResult();
$passing->percent = $passing->getPercentRight();
$passing->addPoints();
$passing->save();
......@@ -307,26 +314,18 @@ class TestController extends \common\components\BaseController
{
$passing = $this->findPassing($id);
if($passing->attempt >= $passing->test->attempt || strtotime($passing->start_date) + ($passing->test->minutes * 60) < time())
if($passing->attempt >= $passing->test->attempt
|| ($passing->end_date && strtotime($passing->start_date) + ($passing->test->minutes * 60) < strtotime($passing->end_date))
|| (!$passing->end_date && strtotime($passing->start_date) + ($passing->test->minutes * 60) < time()))
{
return $this->render('error', [
'model' => $passing,
]);
}
switch ($passing->passed)
{
case Passing::FAILED :
case Passing::PASSED :
return $this->render('statistics', [
'model' => $passing,
]);
break;
default :
throw new NotFoundHttpException('The requested page does not exist.');
break;
}
}
/**
......
......@@ -196,4 +196,18 @@ class Passing extends \common\components\ActiveRecordModel
return true;
}
public function addPoints()
{
if($this->passed == Passing::PASSED)
{
$this->points = $this->test->passed_scores;
}
else
{
$this->points = $this->test->notpassed_scores;
}
return true;
}
}
......@@ -23,8 +23,8 @@ class SearchPassing extends Passing
public function rules()
{
return [
[['id', 'user_id', 'test_id', 'status'], 'integer'],
[['id', 'user_id', 'test_id', 'status', 'end_date', 'filter_user_email', 'filter_user_last_name'], 'safe'],
[['id', 'user_id', 'test_id', 'status', 'passed'], 'integer'],
[['id', 'user_id', 'test_id', 'status', 'passed', 'end_date', 'filter_user_email', 'filter_user_last_name'], 'safe'],
];
}
......@@ -78,6 +78,8 @@ class SearchPassing extends Passing
$query->andFilterWhere([
'id' => $this->id,
'user_id' => $this->user_id,
'status' => $this->status,
'passed' => $this->passed,
'test_id' => $this->test_id,
'start_date' => $this->start_date,
Test::tableName() . '.session_id' => Yii::$app->request->get('session'),
......
......@@ -106,7 +106,7 @@ class Session extends \common\components\ActiveRecordModel
$query->andWhere([
Test::tableName() . '.session_id' => $this->id,
'status' => Passing::PASSED,
'passed' => Passing::PASSED,
]);
$query->groupBy(['user_id', 'test_id']);
......
......@@ -10,6 +10,7 @@ use yii\helpers\ArrayHelper;
use common\modules\testings\models\Passing;
use common\modules\testings\models\Session;
use common\modules\testings\models\Question;
use common\modules\school\models\Lessons;
class Test extends \common\components\ActiveRecordModel
{
......@@ -105,6 +106,11 @@ class Test extends \common\components\ActiveRecordModel
return $this->hasOne(Question::className(), ['id' => 'test_id']);
}
public function getLesson()
{
return $this->hasOne(Lessons::className(), ['test_id' => 'id']);
}
public static function getTestsList($session_id)
{
return ArrayHelper::map(self::find()->where(['session_id' => $session_id]), 'id', 'name');
......
......@@ -28,7 +28,7 @@ use common\modules\testings\models\Passing;
'attributes' => [
[
'attribute' => 'user_id',
'value' => ($model->user) ? Html::a($model->user->fio, ["/testings/user-admin/view", "id" => $model->user->id]) : "Пользователь удалён",
'value' => ($model->user) ? $model->user->surname . ' ' . $model->user->name : "Пользователь удалён",
'format' => 'html',
],
[
......@@ -42,11 +42,11 @@ use common\modules\testings\models\Passing;
'format' => 'html',
],
[
'attribute' => 'is_passed',
'attribute' => 'passed',
'format' => 'raw',
'value' => Passing::$state_list[$model->is_passed] . " ({$model->CountPassedQuestions} - {$model->percent_rights}%)",
'value' => Passing::$passed_list[$model->passed] . " ({$model->CountPassedQuestions} - {$model->percent}%)",
],
'pass_date',
'end_date',
],
]) ?>
......
......@@ -30,7 +30,7 @@ use \common\components\zii\AdminGrid;
'start_date',
'end_date',
[
'header' => 'Назначено тестов',
'header' => 'Прохождений',
'value' => function($model)
{
return $model->usersOverall;
......
......@@ -14,7 +14,7 @@ use yii\widgets\DetailView;
<p>
<?= Html::a(Yii::t('content', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a("Экспорт результатов", ['testings/session-admin/export-session-result', 'id' => $model->id], ['class' => 'btn btn-info']) ?>
<!-- <?= Html::a("Экспорт результатов", ['testings/session-admin/export-session-result', 'id' => $model->id], ['class' => 'btn btn-info']) ?> -->
</p>
<?= DetailView::widget([
......@@ -27,10 +27,4 @@ use yii\widgets\DetailView;
],
]) ?>
<?php echo '<br/><br/><h2>Продленные сессии</h2>'; ?>
<?php foreach ($users as $time => $user)
{
echo $user->first_name.' '.$user->last_name.' '.$user->patronymic.' до '.$time.'<br/>';
} ?>
</div>
\ No newline at end of file
......@@ -44,6 +44,8 @@ if($session)
'minutes',
'questions',
'pass_percent',
'passed_scores',
'notpassed_scores',
'attempt',
[
'header' => 'Список вопросов',
......
......@@ -29,6 +29,8 @@ use yii\widgets\DetailView;
'minutes',
'questions',
'pass_percent',
'passed_scores',
'notpassed_scores',
'attempt',
'create_date',
],
......
<?php
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
use common\models\Settings;
......@@ -21,14 +22,21 @@ use common\models\Settings;
<div class="container">
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<h1 class="successfully_title">Тестирование не завершено.</h1>
<h6>Для переназначения теста позвоните в службу поддержки по телефону <?=Settings::getValue('content-phone');?></h6>
<h1 class="successfully_title">Сожалеем, но у вас закончилось время.</h1>
<div class="successfully_subtitle" style="color: #4A6377;font-size: 36px;margin-top:10px;">Вам начислено <?=$model->points?> баллов</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<div class="list_back" style="padding-bottom: 0;">
<a href="<?=Url::to(['/testing/gen-pass/'.$model->test_id])?>">Попробуйте пройти тест еще раз</a>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<div class="error_fedback clearfix">
<h6>Обратная связь</h6>
<h6>Скажите, какие вопросы вызывали трудности?</h6>
<?php $form = ActiveForm::begin([
'id' => 'error-testing-form',
'action' => ['/testing/send-not-attempt/'.$model->id]
......@@ -46,7 +54,8 @@ use common\models\Settings;
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<div class="list_back">
<a href="#">Вернуться к списку тестов <span></span></a>
<a href="<?=Url::to(['/school/course/'.$model->test->lesson->course->id])?>">Вернуться к списку уроков <span></span></a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<a href="<?=Url::to(['/school/lesson/'.$model->test->lesson->id])?>">Вернуться к уроку <span></span></a>
</div>
</div>
</div>
......
<?php
use yii\helpers\Url;
use common\modules\testings\models\Passing;
?>
......@@ -20,11 +22,11 @@ use common\modules\testings\models\Passing;
<div class="col-md-12 col-xs-12 col-sm-12">
<?php if ($model->passed == Passing::PASSED) : ?>
<h1 class="successfully_title">Поздравляем, Вы сдали тест</h1>
<div class="successfully_subtitle">Тестирование завершено</div>
<?php elseif ($model->passed == Passing::FAILED) : ?>
<h1 class="successfully_title">Тест не сдан!</h1>
<div class="successfully_subtitle">Тестирование завершено</div>
<?php endif; ?>
<div class="successfully_subtitle" style="color: #404146;font-size: 20px;">Количество набранных баллов:</div>
<div class="successfully_subtitle" style="color: #4A6377;font-size: 36px;margin-top:-15px;"><?=$model->points?></div>
</div>
</div>
<div class="row">
......@@ -41,6 +43,14 @@ use common\modules\testings\models\Passing;
<div class="succes_block_cont"><?=$minutesText?> <?=$secondsText?></div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<div class="list_back">
<a href="<?=Url::to(['/school/course/'.$model->test->lesson->course->id])?>">Вернуться к списку уроков <span></span></a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<a href="<?=Url::to(['/school/lesson/'.$model->test->lesson->id])?>">Вернуться к уроку <span></span></a>
</div>
</div>
</div>
<!-- <div class="row">
<div class="col-md-12 col-xs-12 col-sm-12">
<ul class="stat_testing">
......
......@@ -52,7 +52,6 @@ use common\modules\testings\models\Question;
<script type="text/javascript">
$(function(){
countDown.init({
continue: <?=($model->start_date?'true':'false')?>,
startDate: '<?=date("d F Y H:i:s", strtotime($model->start_date))?>',
......@@ -73,8 +72,6 @@ use common\modules\testings\models\Question;
finishUrl: '<?=Url::to(["/testing/finish-test/".$model->id])?>',
passUrl: '<?=Url::to(["/testing/pass/".$model->id])?>'
});
$('#answerBox').on('change','*',tester.answersChangeStatus);
});
</script>
......
......@@ -145,7 +145,7 @@ tester = {
}
if (q['type'] == tester.options.user_answer) {
tester.answerBox.html('');
tester.answerBox.append('<div class="input_bg"><input type="text" value="" placeholder="Ваш ответ" /></div>');
tester.answerBox.append('<div class="input_bg"><input type="text" class="textarea" value="" placeholder="Ваш ответ" /></div>');
}
tester.answerBox.append('<div class="clear"></div>');
});
......@@ -184,7 +184,7 @@ tester = {
if (q['type'] == this.options.user_answer)
{
this.answerBox.find('textarea').each(function(){
this.answerBox.find('input.textarea').each(function(){
answer.push($(this).val());
});
}
......@@ -308,6 +308,7 @@ tester = {
var clickNext = $('#clickNext');
var sendInfoBox = $('#sendInfoBox');
clickNext.css('display','none');
this.questionNumberBox.remove();
this.resetQuestion();
$('p.uploading_info').remove();
......@@ -338,14 +339,19 @@ tester = {
answersChangeStatus : function() {
var clickNext = $('#clickNext');
if (($('#answerBox input:radio:checked').length > 0)
|| ($('#answerBox input:checkbox:checked').length > 0)
|| ($('#answerBox input[type="text"]').length > 0)
) {
if ($('#answerBox input:radio:checked').length > 0 || $('#answerBox input:checkbox:checked').length > 0 || $('#answerBox input[type="text"]').val() != '')
{
clickNext.removeAttr('disabled');
} else {
}
else
{
clickNext.attr('disabled','disabled');
}
}
}
$(function(){
$('#answerBox').on('change', '*', tester.answersChangeStatus);
$(document).delegate('#answerBox input[type="text"]', 'keydown', tester.answersChangeStatus);
});
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment