fix

parent 2855140f
...@@ -6,6 +6,7 @@ use Yii; ...@@ -6,6 +6,7 @@ use Yii;
use common\components\AdminController; use common\components\AdminController;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter; use yii\filters\VerbFilter;
use yii\web\UploadedFile;
use common\modules\testings\models\TestingTest; use common\modules\testings\models\TestingTest;
use common\modules\testings\models\SearchTestingTest; use common\modules\testings\models\SearchTestingTest;
...@@ -20,7 +21,7 @@ class TestingTestAdminController extends AdminController ...@@ -20,7 +21,7 @@ class TestingTestAdminController extends AdminController
'Update' => 'Редактирование теста', 'Update' => 'Редактирование теста',
'Delete' => 'Удаление теста', 'Delete' => 'Удаление теста',
'Manage' => 'Управление тестами', 'Manage' => 'Управление тестами',
'ImportTests' => 'Импорт вопросов и ответов к ним', 'Import-tests' => 'Импорт вопросов и ответов к ним',
); );
} }
...@@ -113,17 +114,27 @@ class TestingTestAdminController extends AdminController ...@@ -113,17 +114,27 @@ class TestingTestAdminController extends AdminController
public function actionImportTests($id) public function actionImportTests($id)
{ {
$model = $this->findModel($id); $model = new TestingTest;
$form = new \common\components\BaseForm('/common/modules/testings/forms/TestingImportCSVForm', $model);
$params = ['form' => $form, 'model' => $model]; $model->scenario = 'upload';
if($model->load(Yii::$app->request->post())) Yii::$app->controller->page_title = 'Импорт вопросов и ответов к ним';
Yii::$app->controller->breadcrumbs = [
'Импорт вопросов и ответов к ним',
];
$params = ['model' => $model];
if(Yii::$app->request->isPost && $model->load(Yii::$app->request->post()))
{ {
$csv_file = CUploadedFile::getInstance($model, 'csv_file'); $model->csv_file = UploadedFile::getInstance($model, 'csv_file');
if ($model->upload())
{
$resource = CSVHelper::open($csv_file->tempName); $resource = CSVHelper::open($csv_file->tempName);
try { try
{
$log = []; $log = [];
set_time_limit(60*3); // Максимальное время выполнения скрипта - 3 минуты set_time_limit(60*3); // Максимальное время выполнения скрипта - 3 минуты
...@@ -219,13 +230,15 @@ class TestingTestAdminController extends AdminController ...@@ -219,13 +230,15 @@ class TestingTestAdminController extends AdminController
// добавляем отчёт о кол-ве добавленных вопросов и гамм // добавляем отчёт о кол-ве добавленных вопросов и гамм
Yii::app()->user->setFlash('flash', '<i>Всего добавлено <b>' .$questionsCount. '</b> вопросов в <b>'.$gammasCount. '</b> гаммах. Перейти к '.CHtml::link('списку загруженных вопросов',array('/testings/testingQuestionAdmin/manage','test'=>$model->id)).'.</i>'); Yii::app()->user->setFlash('flash', '<i>Всего добавлено <b>' .$questionsCount. '</b> вопросов в <b>'.$gammasCount. '</b> гаммах. Перейти к '.CHtml::link('списку загруженных вопросов',array('/testings/testingQuestionAdmin/manage','test'=>$model->id)).'.</i>');
$params = array( $params['log'] = '<p>' . implode('</p><p>',$log) . '</p>';
'model' => $model, }
'form' => $form, else
'log' => '<p>'.implode('</p><p>',$log).'</p>', {
); Yii::$app()->session->setFlash('flash', 'Произошла ошибка при загрузке файла. Обратитесь к администратору!');
}
} catch (Exception $e){ }
catch (Exception $e)
{
$params['log'] = 'Импорт прошел неудачно: ' . $e->getMessage(); $params['log'] = 'Импорт прошел неудачно: ' . $e->getMessage();
} }
} }
......
...@@ -49,6 +49,7 @@ class TestingTest extends \common\components\ActiveRecordModel ...@@ -49,6 +49,7 @@ class TestingTest extends \common\components\ActiveRecordModel
[['minutes', 'questions', 'pass_percent', 'attempt'], 'requiredNotMix'], [['minutes', 'questions', 'pass_percent', 'attempt'], 'requiredNotMix'],
[['session_id', 'minutes', 'questions', 'pass_percent', 'attempt', 'mix'], 'integer'], [['session_id', 'minutes', 'questions', 'pass_percent', 'attempt', 'mix'], 'integer'],
[['name'], 'string', 'max' => 200], [['name'], 'string', 'max' => 200],
[['csv_file'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xls, xlsx', 'on' => 'upload'],
[['mix'], 'safe'], [['mix'], 'safe'],
]; ];
} }
...@@ -126,4 +127,17 @@ class TestingTest extends \common\components\ActiveRecordModel ...@@ -126,4 +127,17 @@ class TestingTest extends \common\components\ActiveRecordModel
{ {
return ArrayHelper::map(self::find()->where(['session_id' => $session_id]), 'id', 'name'); return ArrayHelper::map(self::find()->where(['session_id' => $session_id]), 'id', 'name');
} }
public function upload()
{
if ($this->validate())
{
$this->csv_file->saveAs('uploads/' . date('dmYHiS_') . uniqid() . '.' . $this->imageFile->extension);
return true;
}
else
{
return false;
}
}
} }
...@@ -13,13 +13,13 @@ use common\modules\testings\models\TestingQuestion; ...@@ -13,13 +13,13 @@ use common\modules\testings\models\TestingQuestion;
<p> <p>
<?= Html::a(Yii::t('content', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?> <?= Html::a(Yii::t('content', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<!-- <?= Html::a(Yii::t('content', 'Delete'), ['delete', 'id' => $model->id], [ <?= Html::a(Yii::t('content', 'Delete'), ['delete', 'id' => $model->id], [
'class' => 'btn btn-danger', 'class' => 'btn btn-danger',
'data' => [ 'data' => [
'confirm' => Yii::t('content', 'Are you sure you want to delete this item?'), 'confirm' => Yii::t('content', 'Are you sure you want to delete this item?'),
'method' => 'post', 'method' => 'post',
], ],
]) ?> --> ]) ?>
</p> </p>
<?= DetailView::widget([ <?= DetailView::widget([
......
<?php <?php
$this->tabs = array( use yii\widgets\ActiveForm;
'просмотреть сессию' => $this->createUrl('/testings/testingPassingAdmin/manage',array('session'=>$model->session->id)), use yii\helpers\Html;
);
$this->page_title = 'Импорт вопросов в тест из CSV-файла';
$this->crumbs = array(
'Список сессий' => array('/testings/testingSessionAdmin/manage'),
'Сессия "'.$model->session->name.'"' => array('/testings/testingSessionAdmin/view','id'=>$model->session->id),
'Список тестов' => array('/testings/testingTestAdmin/manage','session'=>$model->session->id),
$model->name => array('/testings/testingTestAdmin/view','id'=>$model->id),
'Импорт вопросов из CSV-Файла'
);
?> ?>
<?php if (Yii::app()->user->hasFlash('flash')): ?>
<?php echo $this->msg(Yii::app()->user->getFlash('flash'), 'ok'); ?> <?php if (\Yii::$app->session->hasFlash('flash')): ?>
<div class="alert alert-success fade in m-b-15">
<?php echo $this->msg(\Yii::$app->session->getFlash('flash'), 'ok'); ?>
<span class="close" data-dismiss="alert">×</span>
</div>
<?php endif ?> <?php endif ?>
<?php if (isset($log)) : ?> <?php if (isset($log)) : ?>
<?php $this->tabs['загрузить ещё вопросов из CSV-файла'] = $this->createUrl('/testings/testingTestAdmin/importTests',array('id'=>$model->id)); ?>
<div id="log_box"><?php echo $log; ?></div> <div id="log_box"><?php echo $log; ?></div>
<script type="text/javascript"> <script type="text/javascript">
...@@ -33,14 +25,30 @@ $this->crumbs = array( ...@@ -33,14 +25,30 @@ $this->crumbs = array(
</script> </script>
<?php endif; ?> <?php endif; ?>
<span style="font-size: 14px; color: #008C66;">Краткая инструкция по файла реестра вопросов и ответов в тест.</span><br /><br /> <span style="font-size: 14px; color: #008C66;">Краткая инструкция по файла реестра вопросов и ответов в тест.</span>
<div>
<br /><br />
Для загрузки реестра вопросов на сайт необходимо: Для загрузки реестра вопросов на сайт необходимо:
<ol> <ol>
<li>Заполнить <a href="/upload/users/Questions_example_table.xls">шаблон</a> в формате MS Excel.</li> <li>Заполнить <a href="/upload/users/Questions_example_table.xls">шаблон</a> в формате MS Excel.</li>
<li>Сохранить файл как CSV (разделители-запятые).</li> <li>Сохранить файл как XLS или XLSX.</li>
<li>Загрузить файл на сайт c помощью кнопки ниже.</li> <li>Загрузить файл на сайт c помощью кнопки ниже.</li>
</ol> </ol>
<span style="color: red;">Важно!</span>Не используйте клавишу ENTER для перевода строки при заполнении шаблона. Если это необходимо, пользуйтесь вместо этого тегом <strong><span style="color: red">&lt;br&gt;</span></strong>.
<div class="message info">Внимание! Для правильной работы модуля CSV-импорта необходимо корректно заполнять шаблон. Любое отхождение от шаблона (пустая строка, добавленный столбец) может нарушить работу данной системы.</div> <span style="color: red;">Важно!</span> Не используйте клавишу ENTER для перевода строки при заполнении шаблона. Если это необходимо, пользуйтесь вместо этого тегом <strong><span style="color: red">&lt;br&gt;</span></strong>.
<?php echo $form; ?>
<br /><br />
<div class="alert alert-info">Внимание! Для правильной работы модуля XLS-импорта необходимо корректно заполнять шаблон. Любое отхождение от шаблона (пустая строка, добавленный столбец) может нарушить работу данной системы.</div>
<hr>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'csv_file')->fileInput() ?>
<?= Html::submitButton('Загрузить', ['class' => 'btn btn-success']); ?>
<?php ActiveForm::end() ?>
...@@ -14,13 +14,7 @@ use yii\widgets\DetailView; ...@@ -14,13 +14,7 @@ use yii\widgets\DetailView;
<p> <p>
<?= Html::a(Yii::t('content', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?> <?= Html::a(Yii::t('content', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a(Yii::t('content', 'Delete'), ['delete', 'id' => $model->id], [ <?= Html::a('Импорт вопросов из CSV-файла', ['import-tests', 'id' => $model->id], ['class' => 'btn btn-info']) ?>
'class' => 'btn btn-danger',
'data' => [
'confirm' => Yii::t('content', 'Are you sure you want to delete this item?'),
'method' => 'post',
],
]) ?>
</p> </p>
<?= DetailView::widget([ <?= DetailView::widget([
......
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