Commit 1c5f5663 authored by Олег Гиммельшпах's avatar Олег Гиммельшпах

Merge branch 'testing'

parents a56bce93 3a9ed8a6
<?php
class TestingBulkmailAccountAdminController extends AdminController
{
public static function actionsTitles()
{
return array(
'View' => 'Просмотр аккаунта рассылки',
'Create' => 'Создание аккаунта рассылки',
'Update' => 'Редактирование аккаунта рассылки',
'Delete' => 'Удаление аккаунта рассылки',
'Manage' => 'Управление аккаунтами рассылки',
);
}
public function actionView($id)
{
$this->render('view', array(
'model' => $this->loadModel($id),
));
}
public function actionCreate()
{
$model = new TestingBulkmailAccount;
$form = new BaseForm('testings.TestingBulkmailAccountForm', $model);
// $this->performAjaxValidation($model);
if(isset($_POST['TestingBulkmailAccount']))
{
$model->attributes = $_POST['TestingBulkmailAccount'];
if($model->save()) {
$this->redirect(array('/testings/testingBulkmailAccountAdmin/manage'));
}
}
$this->render('create', array(
'form' => $form,
));
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);;
$form = new BaseForm('testings.TestingBulkmailAccountForm', $model);
// $this->performAjaxValidation($model);
if(isset($_POST['TestingBulkmailAccount']))
{
$model->attributes = $_POST['TestingBulkmailAccount'];
if($model->save())
{
$this->redirect(array('/testings/testingBulkmailAccountAdmin/manage'));
}
}
$this->render('update', array(
'form' => $form,
));
}
public function actionManage()
{
$model=new TestingBulkmailAccount('search');
$model->unsetAttributes();
if(isset($_GET['TestingBulkmailAccount']))
{
$model->attributes = $_GET['TestingBulkmailAccount'];
}
$this->render('manage', array(
'model' => $model,
));
}
public function actionDelete($id)
{
if(Yii::app()->request->isPostRequest)
{
$this->loadModel($id)->delete();
if(!isset($_GET['ajax']))
{
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
}
else
{
throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}
}
public function loadModel($id)
{
$model = TestingBulkmailAccount::model()->findByPk((int) $id);
if($model === null)
{
$this->pageNotFound();
}
return $model;
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax'] === 'bulkmail-account-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
<?php
class TestingFaqAdminController extends AdminController
{
public static function actionsTitles()
{
return array(
'Create' => 'Создание справки',
'Update' => 'Редактирование справки',
'Delete' => 'Удаление',
'Manage' => 'Управление справкой',
);
}
public function actionCreate()
{
$model = new TestingFaq;
$form = new BaseForm('testings.TestingFaqForm', $model);
if(isset($_POST['TestingFaq']))
{
$model->attributes = $_POST['TestingFaq'];
if($model->save())
{
$this->redirect(array('manage'));
}
}
$this->render('create', array(
'form' => $form,
));
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$form = new BaseForm('testings.TestingFaqForm', $model);
if(isset($_POST['TestingFaq']))
{
$model->attributes = $_POST['TestingFaq'];
if($model->save())
{
$this->redirect(array('manage'));
}
}
$this->render('update', array(
'form' => $form,
));
}
public function actionDelete($id)
{
if(Yii::app()->request->isPostRequest)
{
$this->loadModel($id)->delete();
if(!isset($_GET['ajax']))
{
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
}
else
{
throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}
}
public function actionManage()
{
$model=new TestingFaq('search');
$model->unsetAttributes();
if(isset($_GET['TestingFaq']))
{
$model->attributes = $_GET['TestingFaq'];
}
$this->render('manage', array(
'model' => $model,
));
}
public function loadModel($id)
{
$model = TestingFaq::model()->findByPk((int) $id);
if($model === null)
{
$this->pageNotFound();
}
return $model;
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax'] === 'testing-faq-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
<?php
class TestingFaqController extends BaseController
{
const AUTH_COOKIE = 'test_user_cookie';
const PASS_COOKIE = 'test_pass_cookie';
public $layout = '/layouts/testing';
public $page_subtitle;
public $logined_user;
public function filters() {
return CMap::mergeArray(parent::filters(), array(
'checkAuth - login',
));
}
public function filterCheckAuth($filterChain) {
// проверим для начала наличие куков
if (!isset(Yii::app()->request->cookies[self::AUTH_COOKIE])
|| !isset(Yii::app()->request->cookies[self::PASS_COOKIE]))
{
$this->redirect('/testings/testingTest/login');
}
// во вторую очередь проверим, есть ли такой юзер с таким айди
$id = (int) Yii::app()->request->cookies[self::AUTH_COOKIE]->value;
$pass = Yii::app()->request->cookies[self::PASS_COOKIE]->value;
$user = TestingUser::model()->findByPk($id);
if (!$user) {
$this->redirect('/testings/testingTest/login');
}
// в конце проверим, совпадает ли пароль
if ($this->encodePassword($user->password) <> $pass) {
$this->redirect('/testings/testingTest/login');
}
$this->logined_user = $user;
$filterChain->run();
}
private function encodePassword($pass) {
return md5($pass.'the.longest.salt.ever.dont.even.try.to.decode.lol');
}
public static function actionsTitles()
{
return array(
'View' => 'Справка',
);
}
public function actionView($url)
{
$model = $this->loadModel($url);
$this->render('view', array(
'model' => $model,
));
}
public function loadModel($url)
{
$model = TestingFaq::model()->findByAttributes(array('url' => $url));
if($model === null)
{
$this->pageNotFound();
}
return $model;
}
}
<?php
class TestingFaqStageAdminController extends AdminController
{
public static function actionsTitles()
{
return array(
'Create' => 'Создание пункта справки',
'Update' => 'Редактирование пункта справки',
'Delete' => 'Удаление пункта',
'Manage' => 'Управление пунктами справки',
);
}
public function actionCreate($faq)
{
if(!$faq)
{
$this->pageNotFound();
}
$model = new TestingFaqStage;
$form = new BaseForm('testings.TestingFaqStageForm', $model);
if(isset($_POST['TestingFaqStage']))
{
$model->attributes = $_POST['TestingFaqStage'];
$model->faq_id = $faq;
if($model->save())
{
$this->redirect(array('manage', 'faq' => $faq));
}
}
$this->render('create', array(
'form' => $form,
));
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$form = new BaseForm('testings.TestingFaqStageForm', $model);
if(isset($_POST['TestingFaqStage']))
{
$model->attributes = $_POST['TestingFaqStage'];
if($model->save())
{
$this->redirect(array('manage', 'faq' => $model->faq_id));
}
}
$this->render('update', array(
'form' => $form,
'model' => $model
));
}
public function actionDelete($id)
{
if(Yii::app()->request->isPostRequest)
{
$this->loadModel($id)->delete();
if(!isset($_GET['ajax']))
{
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
}
else
{
throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}
}
public function actionManage()
{
if(!Yii::app()->request->getQuery('faq'))
{
$this->pageNotFound();
}
$model = new TestingFaqStage('search');
$model->unsetAttributes();
if(isset($_GET['TestingFaqStage']))
{
$model->attributes = $_GET['TestingFaqStage'];
}
$this->render('manage', array(
'model' => $model,
));
}
public function loadModel($id)
{
$model = TestingFaqStage::model()->findByPk((int) $id);
if($model === null)
{
$this->pageNotFound();
}
return $model;
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax'] === 'testing-faq-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
<?php
class TestingPassingTKIController extends AdminController
{
public static function actionsTitles()
{
return array(
'View' => 'Просмотр прохождения',
'Manage' => 'Управление прохождениями',
);
}
private function showPeriod($time) {
return sprintf("%02d:%02d:%02d", (int)($time / 3600), (int)(($time % 3600) / 60), $time % 60);
}
public function actionView($id)
{
$model = $this->loadModel($id);
$questions = new TestingQuestionPassing('search');
$questions->unsetAttributes();
$this->render('view', array(
'model' => $model,
'questions' => $questions,
'time' => $this->showPeriod($model->time),
));
}
public function actionManage($session=null)
{
$model = new TestingPassing('search');
$model->unsetAttributes();
if(isset($_GET['TestingPassing']))
{
$model->attributes = $_GET['TestingPassing'];
}
$this->render('manage', array(
'model' => $model,
'session' => $session ? TestingSession::model()->findByPk($session) : '',
'sessions' => TestingSession::model()->findAll(),
));
}
public function loadModel($id)
{
$model = TestingPassing::model()->findByPk((int) $id);
if($model === null)
{
$this->pageNotFound();
}
return $model;
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax'] === 'testing-passing-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
...@@ -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\helpers\ArrayHelper;
use common\modules\testings\models\TestingQuestion; use common\modules\testings\models\TestingQuestion;
use common\modules\testings\models\SearchTestingQuestion; use common\modules\testings\models\SearchTestingQuestion;
...@@ -92,47 +93,29 @@ class TestingQuestionAdminController extends AdminController ...@@ -92,47 +93,29 @@ class TestingQuestionAdminController extends AdminController
return $this->redirect(['manage']); return $this->redirect(['manage']);
} }
// public function actionManage() public function actionManage()
// { {
// $questions = array();//Вопросы с предупреждением о картинках $questions = [];
// //$param = 'карт, изобр, изображение, скриншот, картинка, схема, рисунок, рис'; $param = 'карт, изобр, изображение, скриншот, картинка, схема, рисунок, рис';
// $param = trim(Setting::getValue('testings_questions_with_picture')); // $param = trim(Setting::getValue('testings_questions_with_picture'));
// $words = empty($param) ? array() : explode(',', trim($param));
// $db = Yii::app()->db;
// if( isset($_GET['test']) && !empty($words)) {
// $where = array();
// for ($i = 0; $i < count($words); $i++) {
// $where[] = sprintf('%s LIKE trim(%s)',
// $db->quoteColumnName('text'),
// $db->quoteValue('%'.trim($words[$i]).'%'));
// }
// $where = implode(' OR ', $where);
// $sql = "SELECT id, `text` FROM testings_questions WHERE test_id = :test_id AND ($where)";
// $rows = $db->createCommand($sql)->queryAll(true, array('test_id' => $_GET['test']));
// foreach($rows as $row) {
// $questions[$row['id']] = $row['text'];
// }
// }
// $model=new TestingQuestion('search');
// $model->unsetAttributes();
// if(isset($_GET['TestingQuestion']))
// {
// $model->attributes = $_GET['TestingQuestion'];
// }
// $this->render('manage', array(
// 'model' => $model,
// 'questions' => $questions,
// 'questions_param' => $param,
// ));
// }
public function actionManage() $words = empty($param) ? array() : explode(',', trim($param));
if(Yii::$app->request->get('test') && !empty($words))
{
$query = TestingQuestion::find();
for ($i = 0; $i < count($words); $i++)
{ {
$query->orWhere(['like', 'text', trim($words[$i])]);
}
$query->andWhere(['test_id' => Yii::$app->request->get('test')]);
$questions = ArrayHelper::map($query->all(), 'id', 'text');
}
$searchModel = new SearchTestingQuestion(); $searchModel = new SearchTestingQuestion();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
...@@ -144,6 +127,8 @@ class TestingQuestionAdminController extends AdminController ...@@ -144,6 +127,8 @@ class TestingQuestionAdminController extends AdminController
return $this->render('manage', [ return $this->render('manage', [
'searchModel' => $searchModel, 'searchModel' => $searchModel,
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'questions' => $questions,
'questions_param' => $param,
]); ]);
} }
......
<?php
$buttons = array(
'submit' => array(
'type' => 'submit',
'value' => 'сохранить',
),
);
return array(
'activeForm' => array(
'id' => 'bulkmail-account-form',
//'enableAjaxValidation' => true,
//'clientOptions' => array(
// 'validateOnSubmit' => true,
// 'validateOnChange' => true
//)
),
'elements' => array(
'server' => array('type' => 'text'),
'port' => array('type' => 'text'),
'smtp_secure' => array('type' => 'dropdownlist', 'items' => array('' => '', 'ssl' => 'SSL', 'tls' => 'TLS')),
'email' => array('type' => 'text'),
'username' => array('type' => 'text'),
'password' => array('type' => 'text'),
//'create_date' => array('type' => 'text'),
),
'buttons' => $buttons,
);
<?php
return array(
'activeForm' => array(
'id' => 'testing-faq-form',
),
'elements' => array(
'title' => array('type' => 'text'),
'content' => array('type' => 'editor'),
),
'buttons' => array(
'submit' => array(
'type' => 'submit',
'value' => $this->model->isNewRecord ? 'создать' : 'сохранить',
),
),
);
<?php
return array(
'activeForm' => array(
'id' => 'import-csv-form',
'class' => 'CActiveForm',
'htmlOptions' => array('enctype' => 'multipart/form-data')
),
'elements' => array(
'csv_file' => array(
'type' => 'file',
)
),
'buttons' => array(
'submit' => array(
'type' => 'submit',
'value' => 'Загрузить',
)
)
);
\ No newline at end of file
<?php
class TestingBulkmailAccount extends ActiveRecordModel
{
const PAGE_SIZE = 10;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'bulkmail_accounts';
}
public function name()
{
return 'Модель TestingBulkmailAccount';
}
public function behaviors(){
$behaviors = array();// parent::behaviors();
$behaviors['CTimestampBehavior'] = array(
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => 'create_date',
'updateAttribute' => 'create_date',
);
return $behaviors;
}
public function rules()
{
return array(
array('server, port, email, username, password', 'required'),
array('email', 'email'),
array('email', 'unique'),
array('port', 'numerical', 'integerOnly' => true),
array('server, email, username, password, smtp_secure', 'length', 'max' => 200),
array('id, server, port, email, username, password, create_date, smtp_secure', 'safe', 'on' => 'search'),
);
}
public function relations()
{
return array(
);
}
public function search()
{
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('server', $this->server, true);
$criteria->compare('port', $this->port);
$criteria->compare('email', $this->email, true);
$criteria->compare('username', $this->username, true);
$criteria->compare('smtp_secure', $this->smtp_secure, true);
$criteria->compare('password', $this->password, true);
$criteria->compare('create_date', $this->create_date, true);
return new ActiveDataProvider(get_class($this), array(
'criteria' => $criteria
));
}
}
\ No newline at end of file
<?php
class TestingFaq extends ActiveRecordModel
{
const PAGE_SIZE = 10;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'testings_faq';
}
public function name()
{
return 'Модель TestingFaq';
}
public function relations()
{
return array(
'stages' => array(self::HAS_MANY, 'TestingFaqStage', 'faq_id'),
);
}
public function attributeLabels() {
return array(
'id' => 'ID',
'title' => 'Заголовок',
'content' => 'Контент',
'url' => 'Ссылка',
);
}
public function rules()
{
return array(
array('title, url', 'required'),
array('content', 'safe'),
array('url', 'unique'),
array('id, title, url', 'safe', 'on' => 'search'),
);
}
public function search()
{
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('title', $this->title);
$criteria->compare('url', $this->url);
return new ActiveDataProvider(get_class($this), array(
'criteria' => $criteria
));
}
}
\ No newline at end of file
<?php
class TestingFaqStage extends ActiveRecordModel
{
const PAGE_SIZE = 10;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'testings_faq_stage';
}
public function name()
{
return 'Модель TestingFaqStage';
}
public function attributeLabels() {
return array(
'id' => 'ID',
'faq_id' => 'Страница справки',
'title' => 'Заголовок',
'content' => 'Контент',
);
}
public function rules()
{
return array(
array('title, content, faq_id', 'required'),
array('id, title, faq_id', 'safe', 'on' => 'search'),
);
}
public function search()
{
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('title', $this->title);
$criteria->compare('faq_id', Yii::app()->request->getQuery('faq'));
return new ActiveDataProvider(get_class($this), array(
'criteria' => $criteria
));
}
}
\ No newline at end of file
...@@ -28,8 +28,7 @@ $("#message_expand").one("click", function (e) { ...@@ -28,8 +28,7 @@ $("#message_expand").one("click", function (e) {
e.preventDefault(); e.preventDefault();
var el = $(this).hide(); var el = $(this).hide();
el.parent(".message") $('#list_expand').show();
.css({height: "auto", overflow: "auto"});
}); });
EOD; EOD;
...@@ -41,7 +40,7 @@ $this->registerJs($js, yii\web\View::POS_READY, 'expnd.info'); ...@@ -41,7 +40,7 @@ $this->registerJs($js, yii\web\View::POS_READY, 'expnd.info');
<a href="#" id="message_expand">Показать</a> <a href="#" id="message_expand">Показать</a>
<p>Имеются вопросы со словами: <b>&laquo<?php echo Html::encode($questions_param);?>&raquo</b></p> <p>Имеются вопросы со словами: <b>&laquo<?php echo Html::encode($questions_param);?>&raquo</b></p>
<br/><br/> <br/><br/>
<ul> <ul style="display:none;" id="list_expand">
<?php foreach($questions as $id => $text): ?> <?php foreach($questions as $id => $text): ?>
<li><?php echo Html::a(Html::encode($text), ['update', 'id' => $id]); ?></li> <li><?php echo Html::a(Html::encode($text), ['update', 'id' => $id]); ?></li>
<?php endforeach; ?> <?php endforeach; ?>
......
<h2>Общая логика работы при выгрузке в сервис unisender</h2>
<ol>
<li><a href = "<?=Yii::app()->createUrl('testings/TestingApi/list');?>">Создать новый список для выгрузки (если хотите создать абсолютно чистый список для рассылки email адресов)</a></li>
<li><a href = "<?=Yii::app()->createUrl('testings/TestingApi/prepair');?>">Сделать выгрузку в выбранный список</a></li>
<li>Перейти в личный кабинет в <a target = "_blank" href = "http://unisender.com">unisender.com</a></li>
<li>Сформировать в системе unisender.com письмо для рассылки с тегами</li>
</ol>
\ No newline at end of file
<h2>Имеющиеся списки в системе unisender (при необходимости лишнее можно удалить)</h2>
<?php if(Yii::app()->user->hasFlash('list_generate')): ?>
<div class="l-system_message">
<hr/>
<p><b><?php echo Yii::app()->user->getFlash('list_generate'); ?></b></p>
<hr/>
</div>
<?php endif; ?>
<?php
$api = new UniSenderApi;
$result = $api->__call('getLists', array());
// Раскодируем ответ API-сервера
$data = $api->checkErrors($result);
if($data['status'] == true) {
foreach ($data['data'] -> result as $one) {
echo '<div class = "d-list">';
echo "<p>Список #" . $one->id . " (" . $one->title . ")". " ";
echo '<a href = "'.Yii::app()->createUrl('/testings/TestingApi/deleteList', array('id'=>$one->id)).'">Удалить</a> </p>';
echo '</div>';
}
}
?>
<div class = "d-list_responce"></div>
<h2>Создать новый список для рассылки</h2>
<div class = "form">
<?php echo CHtml::beginForm(); ?>
<dl class="text">
<dd>
<?php echo CHtml::label('Введите название группы', 'unisender_new_list'); ?>
<?php echo CHtml::textField("unisender_new_list", '', array('class'=>'text')); ?>
</dd>
</dl>
<div class="row buttons">
<?php echo CHtml::submitButton('Создать', array('class'=>'submit mid')); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div>
<script type = "text/javascript">
$('.d-list a').click(function() {
var url = $(this).attr('href');
var link = $(this);
if(confirm("Вы уверены, что хотите удалить данный список?")){
$.ajax({
'url': url,
'type': "POST",
'success':function(data) {
link.parents('.d-list').remove();
$('.d-list_responce').html(data);
},
'error':function(data) {
$('.d-list_responce').html(data);
}
})
}
return false;
})
</script>
\ No newline at end of file
<h2>Загрузка подписчиков в Unisender</h2>
<p>Выберите группу, в которую будут загружаться подписчики</p>
<?php
$api = new UniSenderApi;
$result = $api->__call('getLists', array());
$data = $api->checkErrors($result);
$group = array();
if($data['status'] == true) {
foreach ($data['data'] -> result as $one) {
$group[$one->id] = $one->title;
}
}
echo CHtml::dropDownList('group_list', '', $group, array('class'=>'j-group_list'));
?>
<br/>
<br/>
<p>Выберите сессию, из которой будет происходить выгрузка</p>
<?php
$testing = TestingSession::model()->findAll(array('order'=>'id DESC'));
$lastTest = TestingSession::model()->find(array('order'=>'id DESC'));
foreach($testing as $test) {
$t[$test->id] = $test->name;
}
echo CHtml::dropDownList('session_list', '', $t, array('class'=>'j-session_list'));
?>
<br/>
<p>Общее число уникальных пользователей для рассылки: <span class = "d-persons"><?=count($this->getUnique($lastTest->id));?></span></p>
<p>
Выгружать по <input type = "text" name = "limit" class = "j-limit text" value = "300"/> пользователей<br/><br/>
начиная с <input type = "text" name = "limit" class = "j-start text" value = "1"/> пользователя
</p>
<a href = "<?=Yii::app()->createUrl('testings/TestingApi/send');?>" class = "a-send_data">Начать выгрузку</a>
<div class = "d-upload_status"></div>
<script type = "text/javascript">
$('.j-session_list').change(function() {
var url = "<?=Yii::app()->createUrl('/testings/TestingApi/GetUnique');?>";
var val = $(this).val();
$.ajax({
'url': url,
'type': "POST",
data: { sessionId: val},
'success':function(data) {
$('.d-persons').html(data);
},
'error':function(data) {
$('.d-persons').html(data);
}
})
return false;
});
$('.a-send_data').click(function() {
var url = $(this).attr('href');
var sessionId = $('.j-session_list').val();
var groupId = $('.j-group_list').val();
var limit = $('.j-limit').val();
var start = $('.j-start').val();
$.ajax({
'url': url,
'type': "POST",
'data': { sessionId:sessionId, groupId:groupId, start:start, limit:limit},
'beforeSend': function() {
$('.d-upload_status').text('Идет загрузка данных...');
},
'success':function(data) {
$('.d-upload_status').html(data);
},
'error':function(data) {
$('.d-upload_status').html(data);
}
})
return false;
})
</script>
\ No newline at end of file
<?php
$this->tabs = array(
//'управление' => $this->createUrl('manage')
);
echo $form;
<?php
/*
$this->tabs = array(
'добавить' => $this->createUrl('create')
);
*/
$this->widget('AdminGrid', array(
'id' => 'bilkmail-account-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
array('name' => 'server'),
array('name' => 'port'),
array('name' => 'smtp_secure'),
array('name' => 'email'),
array('name' => 'username'),
array('name' => 'password'),
array('name' => 'create_date'),
array(
'class' => 'CButtonColumn',
),
),
));
<?php
$this->tabs = array(
//'управление' => $this->createUrl('manage'),
'просмотр' => $this->createUrl('view', array('id' => $form->model->id))
);
echo $form;
\ No newline at end of file
<?php
$this->tabs = array(
//'управление' => $this->createUrl('manage'),
'редактировать' => $this->createUrl('update', array('id' => $model->id))
);
$this->widget('DetailView', array(
'data' => $model,
'attributes' => array(
array('name' => 'server'),
array('name' => 'port'),
array('name' => 'email'),
array('name' => 'username'),
array('name' => 'password'),
array('name' => 'create_date'),
),
));
<div class="wide form">
<?php $form=$this->beginWidget('CActiveForm', array(
'action'=>Yii::app()->createUrl($this->route),
'method'=>'get',
)); ?>
<div class="row">
<?php echo $form->label($model,'id'); ?>
<?php echo $form->textField($model,'id'); ?>
</div>
<div class="row">
<?php echo $form->label($model,'passing_id'); ?>
<?php echo $form->textField($model,'passing_id'); ?>
</div>
<div class="row">
<?php echo $form->label($model,'description'); ?>
<?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>3000)); ?>
</div>
<div class="row">
<?php echo $form->label($model,'is_expert_agreed'); ?>
<?php echo $form->textField($model,'is_expert_agreed'); ?>
</div>
<div class="row">
<?php echo $form->label($model,'create_date'); ?>
<?php echo $form->textField($model,'create_date'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Search'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- search-form -->
\ No newline at end of file
<style type="text/css">
.ui-icon {
display: inline-block;
vertical-align: middle;
}
ol,ul {
list-style: inherit;
padding: 0 30px;
margin: 15px 0;
}
span, p, ol, ul {
font-size: inherit;
}
span[data-toggle="tooltip"]
{
border-bottom: 1px dotted #4fa600;
color: #4fa600;
cursor: pointer;
}
</style>
<?php if($model->content) {?>
<p><?=$model->content?></p>
<? } ?>
<br>
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<?php if($model->stages) {
foreach ($model->stages as $i => $stage) { ?>
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="heading-<?=$i?>">
<h4 class="panel-title" style="padding-bottom:0;">
<a role="button" <?if($i!=0){?>class="collapsed"<?}?> data-toggle="collapse" data-parent="#accordion" href="#collapse-<?=$i?>" aria-expanded="<?if($i==0){?>true<?}else{?>false<?}?>" aria-controls="collapse-<?=$i?>"><?=$stage->title?></a>
</h4>
</div>
<div id="collapse-<?=$i?>" class="panel-collapse collapse <?if($i==0){?>in<?}?>" role="tabpanel" aria-labelledby="heading-<?=$i?>">
<div class="panel-body">
<?=$stage->content?>
</div>
</div>
</div>
<? }
} ?>
</div>
\ No newline at end of file
<?php
$this->tabs = array(
'управление' => $this->createUrl('manage')
);
echo $form;
<?php
$this->crumbs = array(
);
$this->tabs = array(
'добавить' => $this->createUrl('create')
);
$this->widget('AdminGrid', array(
'id' => 'testing-answer-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
'title',
'url',
array(
'header' => 'Управление пунктами',
'type' => 'html',
'value' => function($data)
{
return CHtml::link('Пункты', array('/testings/testingFaqStageAdmin/manage', 'faq' => $data->id));
}
),
array(
'class' => 'CButtonColumn',
),
),
));
<?php
$this->tabs = array(
'управление' => $this->createUrl('manage'),
);
echo $form;
\ No newline at end of file
<?php
$this->tabs = array(
'управление' => $this->createUrl('manage', array('faq' => Yii::app()->request->getQuery('faq')))
);
echo $form;
<?php
$this->crumbs = array(
);
$this->tabs = array(
'управление справками' => $this->createUrl('/testings/testingFaqAdmin/manage'),
'добавить' => $this->createUrl('create', array('faq' => Yii::app()->request->getQuery('faq')))
);
$this->widget('AdminGrid', array(
'id' => 'testing-answer-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'title',
array(
'class' => 'CButtonColumn',
),
),
));
<?php
$this->tabs = array(
'управление' => $this->createUrl('manage', array('faq' => $model->faq_id)),
);
echo $form;
\ No newline at end of file
<script>
$(document).ready(function() {
$('.session').css('display', 'none');
$('#sessions_list').bind('change', function () {
$('.session').css('display', 'none');
id = $(this).val();
$('#'+id).css('display', 'block');
});
$('#sessions_list:first').change();
});
</script>
<style>
.session {
width: 1000px;
margin-top: 10px;
}
.session td {
width: 135px;
text-align: center;
}
.session tr {
height: 100px;
}
</style>
<?php
$this->crumbs = array(
'Тестирование' => false,
);
$this->page_title = 'Список прохождений';
?>
<span style="font-size: 12px; float: right;"><?php echo ' (' .CHtml::link('Выход',array('/testings/testingTest/logout')) . ')'; ?> </span>
<?php
if ($sessions == null) {
echo 'нет сессий';
}
else {
echo 'Выберите сессию:';
echo CHtml::dropDownList('sessions_list', null, CHtml::listData($sessions, 'id', 'name'));
}
if ($passings) {
foreach ($passings as $session_id => $session) {
echo '<div id = "'.$session_id.'" class="session">
<table border="1">
<tr><td>ФИО</td><td>Email</td><td>Город</td><td>Компания</td><td>Тест</td><td>Результат</td></tr>';
foreach ($session as $user) {
?>
<tr>
<td style="width:220px;"><?php echo $user->user->first_name.' '.$user->user->last_name.' '.$user->user->patronymic; ?></td>
<td><?php echo $user->user->email; ?></td>
<td><?php echo $user->user->city; ?></td>
<td><?php echo $user->user->company_name; ?></td>
<td style="width:220px;"><?php echo $user->test->name; ?></td>
<td><?php echo TestingPassing::$state_list[$user->status].' '.$user->pass_date; ?></td>
</tr>
<?php
}
echo '</table></div>';
}
}
else {
echo 'Пользователи не загруженны в сессии';
}
?>
<?php
$this->page_title = 'Список прохождений';
?>
<style type="text/css">
.STATE1 {
font-weight: bold;
color: #449944;
}
.STATE0, .STATE2 {
font-weight: bold;
color: #ee4444;
}
.STATE, .STATE3 {
color: #999;
}
</style>
<?php
echo CHtml::dropDownList('sessions_list', $session ? $session->id : '', CHtml::listData($sessions, 'id', 'name'), array('onchange' => 'js:document.location.href = "/testings/TestingPassingTKI/manage/session/"+this.value'));
echo CHtml::hiddenField('TestingPassing[session]', $session ? $session->id : '');
if ($session)
{
$this->widget('AdminGrid', array(
'id' => 'testing-passing-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
array(
'name' => 'user_id',
'value' => '($data->user)?CHtml::link($data->user->fio,array("/testings/testingUserAdmin/view","id"=>$data->user->id)):"Пользователь удалён"',
'type' => 'html',
'filter' => CHtml::textField('fio', ''),
),
array(
'name' => 'user.email',
'value' => 'CHtml::link($data->user->email, "mailto:".$data->user->email)',
'type' => 'html',
'filter' => CHtml::textField('email', ''),
),
array(
'header' => 'Наименование компании',
'value' => '$data->user->company_name',
'filter' => CHtml::textField('company_name', ''),
),
array(
'name' => 'test_id',
'value' => 'CHtml::link($data->test->name,array("/testings/testingTestAdmin/view","id"=>$data->test_id))',
'type' => 'html',
'filter' => TestingTest::getTestsList($session->id),
),
array(
'name' => 'is_passed',
'value' => function($data, $row) {
$text = '';
return CHtml::tag("span",array("class"=>"STATE".$data->status),
TestingPassing::$state_list[$data->status].$text
);
},
'type' => 'html',
'filter' => TestingPassing::$state_list,
),
array(
'name' => 'pass_date',
),
array(
'header' => 'Ответственный менеджер',
'value' => '($data->user && $data->user->manager)?CHtml::link($data->user->manager->name,array("/users/userAdmin/view","id"=>$data->user->manager->id)):"Пользователь удалён"',
'type' => 'html',
//'filter' => false,
),
array(
'header' => 'Загрузить сообщение об ошибке',
'value' => '(!($data->is_passed === null)) ? (CHtml::link(($data->mistake)?"Сведения ".$data->mistake->create_date:"Загрузить",array("/testings/testingPassingAdmin/mistake","id"=>$data->id))) : ""',
'type' => 'html',
'filter' => false,
),
array(
'class' => 'CButtonColumn',
'template' => '{view}{delete}',
),
),
));
}
<?php
$this->widget('DetailView', array(
'data' => $model,
'attributes' => array(
array(
'name' => 'user_id',
'value' => ($model->user)?$model->user->fio:"Пользователь удалён",
'type' => 'html',
),
array(
'name' => 'session_id',
'value' => $model->test->session->name,
'type' => 'html',
),
array(
'name' => 'test_id',
'value' => $model->test->name,
'type' => 'html',
),
array(
'name' => 'is_passed',
'type' => 'raw',
'value' => TestingPassing::$state_list[$model->is_passed]
." ({$model->CountPassedQuestions} - {$model->percent_rights}%)",
/*
'value' => function() {
return $text;
}*/
),
array('name' => 'pass_date'),
//array('name' => 'create_date'),
),
));
?>
<style type="text/css">
.STATE1 {
font-weight: bold;
color: #449944;
}
.STATE {
font-weight: bold;
color: #ee4444;
}
</style>
<br /><br />
<h1>Подробная статистика по ответам</h1>
<h3>(Всего времени затрачено: <?php echo $time; ?>)</h3>
<?php
$this->widget('AdminGrid', array(
'id' => 'testing-question-passing-grid',
'dataProvider' => $questions->search($model->id),
'filter' => $questions,
'columns' => array(
array(
'name' => 'question_id',
'value' => '$data->question->text',
'filter' => false,
),
array(
'header' => 'Правильный ответ',
'value' => '$data->question->rightAnswer',
'filter' => false,
),
array(
'name' => 'user_answer',
'filter' => false,
),
array(
'header' => 'Ответ',
'value' => 'CHtml::tag("span",array("class"=>"STATE".$data->isRight),TestingPassing::$answer_list[$data->isRight])." ".'
.'CHtml::link("Изменить на обратное",array("/testings/testingPassingAdmin/changeAnswerStatus","qp_id"=>$data->id))',
'filter' => false,
'type' => 'html',
),
array(
'name' => 'answer_time',
'filter' => false,
),
),
'emptyText'=>'Подробная статистика появится тут после того, как пользователь начнёт тестирование',
));
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