<repo_name>notnaa/counter-yii<file_sep>/basic/models/Group.php
<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "group".
 *
 * @property integer $group_id
 * @property string $group_name
 * @property integer $kafedra
 * @property integer $created_at
 * @property integer $updated_at
 *
 * @property Kafedra $kafedra0
 * @property User[] $users
 */
class Group extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'group';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['group_name', 'kafedra', 'created_at', 'updated_at'], 'required'],
            [['kafedra', 'created_at', 'updated_at'], 'integer'],
            [['group_name'], 'string', 'max' => 255],
            [['kafedra'], 'unique'],
            [['kafedra'], 'exist', 'skipOnError' => true, 'targetClass' => Kafedra::className(), 'targetAttribute' => ['kafedra' => 'kafedra_id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'group_id' => 'Group ID',
            'group_name' => 'Group Name',
            'kafedra' => 'Kafedra',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getKafedra0()
    {
        return $this->hasOne(Kafedra::className(), ['kafedra_id' => 'kafedra']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUsers()
    {
        return $this->hasMany(User::className(), ['group' => 'group_id']);
    }
}
<file_sep>/counter_yii.sql
-- phpMyAdmin SQL Dump
-- version 4.6.5.2
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Время создания: Авг 03 2017 г., 14:56
-- Версия сервера: 5.7.16
-- Версия PHP: 5.6.29

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- База данных: `counter_yii`
--

-- --------------------------------------------------------

--
-- Структура таблицы `auth_assignment`
--

CREATE TABLE `auth_assignment` (
  `item_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` int(64) NOT NULL,
  `created_at` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `auth_assignment`
--

INSERT INTO `auth_assignment` (`item_name`, `user_id`, `created_at`) VALUES
('admin', 2, 1497138271),
('student', 6, 1497138284),
('teacher', 3, 1497138279);

-- --------------------------------------------------------

--
-- Структура таблицы `auth_item`
--

CREATE TABLE `auth_item` (
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `type` smallint(6) NOT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `rule_name` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `data` blob,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `auth_item`
--

INSERT INTO `auth_item` (`name`, `type`, `description`, `rule_name`, `data`, `created_at`, `updated_at`) VALUES
('/admin/*', 2, NULL, NULL, NULL, 1497136134, 1497136134),
('/admin/group/*', 2, NULL, NULL, NULL, 1497136176, 1497136176),
('/admin/test/delete', 2, NULL, NULL, NULL, 1497199967, 1497199967),
('/admin/test/index', 2, NULL, NULL, NULL, 1497199833, 1497199833),
('/admin/test/view', 2, NULL, NULL, NULL, 1497136310, 1497136310),
('/admin/users/*', 2, NULL, NULL, NULL, 1497137185, 1497137185),
('/admin/users/update', 2, NULL, NULL, NULL, 1497137204, 1497137204),
('/admin/users/view', 2, NULL, NULL, NULL, 1497137240, 1497137240),
('/rbac/*', 2, NULL, NULL, NULL, 1497136117, 1497136117),
('/site/*', 2, NULL, NULL, NULL, 1497136112, 1497136112),
('admin', 1, 'Главный администратор', NULL, NULL, 1497138110, 1497138110),
('adminAccess', 2, 'Доступ к административным разделам.', NULL, NULL, 1497137698, 1497137698),
('authorizeAccess', 2, 'Доступ к данным аккаунта и результату тестирования', NULL, NULL, 1497137529, 1497138048),
('moderatorAccess', 2, 'Доступ к всем результатам тестирования. Доступ к добавлению, удалению, просмотру и обновлению информации о группах.', NULL, NULL, 1497137381, 1497199971),
('student', 1, 'Обучающийся авторизованный пользователь', NULL, NULL, 1497138213, 1497138213),
('teacher', 1, 'Преподаватель', NULL, NULL, 1497138173, 1497138173);

-- --------------------------------------------------------

--
-- Структура таблицы `auth_item_child`
--

CREATE TABLE `auth_item_child` (
  `parent` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `child` varchar(64) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `auth_item_child`
--

INSERT INTO `auth_item_child` (`parent`, `child`) VALUES
('adminAccess', '/admin/*'),
('moderatorAccess', '/admin/group/*'),
('moderatorAccess', '/admin/test/delete'),
('moderatorAccess', '/admin/test/index'),
('authorizeAccess', '/admin/test/view'),
('moderatorAccess', '/admin/test/view'),
('authorizeAccess', '/admin/users/update'),
('authorizeAccess', '/admin/users/view'),
('moderatorAccess', '/admin/users/view'),
('adminAccess', '/rbac/*'),
('admin', 'adminAccess'),
('student', 'authorizeAccess'),
('teacher', 'moderatorAccess');

-- --------------------------------------------------------

--
-- Структура таблицы `auth_rule`
--

CREATE TABLE `auth_rule` (
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `data` blob,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Структура таблицы `group`
--

CREATE TABLE `group` (
  `group_id` int(11) NOT NULL,
  `group_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `kafedra` int(11) NOT NULL,
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `group`
--

INSERT INTO `group` (`group_id`, `group_name`, `kafedra`, `created_at`, `updated_at`) VALUES
(1, '122', 1, 11111, 11111);

-- --------------------------------------------------------

--
-- Структура таблицы `kafedra`
--

CREATE TABLE `kafedra` (
  `kafedra_id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `kafedra`
--

INSERT INTO `kafedra` (`kafedra_id`, `name`, `created_at`, `updated_at`) VALUES
(1, 'test', 11111, 11111);

-- --------------------------------------------------------

--
-- Структура таблицы `menu`
--

CREATE TABLE `menu` (
  `id` int(11) NOT NULL,
  `name` varchar(128) NOT NULL,
  `parent` int(11) DEFAULT NULL,
  `route` varchar(255) DEFAULT NULL,
  `order` int(11) DEFAULT NULL,
  `data` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `migration`
--

CREATE TABLE `migration` (
  `version` varchar(180) NOT NULL,
  `apply_time` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `migration`
--

INSERT INTO `migration` (`version`, `apply_time`) VALUES
('m000000_000000_base', 1496867517),
('m140506_102106_rbac_init', 1497133215),
('m140602_111327_create_menu_table', 1497133175),
('m160312_050000_create_user', 1497133175),
('m170608_143514_create_user_table', 1496935077),
('m170609_090307_create_test', 1496999745),
('m170610_211053_create_kafedra', 1497129401),
('m170610_211811_create_group', 1497129852);

-- --------------------------------------------------------

--
-- Структура таблицы `test`
--

CREATE TABLE `test` (
  `test_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `results` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `test`
--

INSERT INTO `test` (`test_id`, `user_id`, `results`, `created_at`, `updated_at`) VALUES
(2, 2, '5', 11111, 11111);

-- --------------------------------------------------------

--
-- Структура таблицы `user`
--

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `group` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `lastname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `thirdname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `status` smallint(6) NOT NULL DEFAULT '10',
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `user`
--

INSERT INTO `user` (`user_id`, `username`, `group`, `name`, `lastname`, `thirdname`, `auth_key`, `password_hash`, `password_reset_token`, `email`, `status`, `created_at`, `updated_at`) VALUES
(2, 'admin', 1, 'Anton', 'Drogin', 'Romanovich', '1o2-J_YxXvsOgXe-v0u4mj7BYPWhUJsw', '$2y$13$FPN0NGOcUCdHfizyS3xYw.fKU8OJ8rXednM8.B213la3XrLWP9ON.', NULL, '<EMAIL>', 10, 1497130828, 1497130828),
(3, 'astaf', 1, 'Иван', 'Астафьев', 'Сергеевич', 'Pz4iP30SzQlm_H1nWYlg2tONTC4gHGv_', '$2y$13$E4cnrkqMSyrdQUe6ucp0c.U7UyeJzgbAZyp.kPCUuQw/0Hd..ie0C', 'YPNouY0F0xwMjul5xvSffB1-OlEHXzfh_1497566030', '<EMAIL>', 10, 1497134862, 1497566030),
(6, 'zemlyak', 1, 'Сергей', 'Земляков', 'Рустамович', 'TYRNN1kDG8AqEMZq5h_CfBHe6rFgfjah', '$2y$13$IOJGa/C2e0SQmu/y/aPS7u2L3bK3scQFkooL5SOonMKkm3zt/YGea', NULL, '<EMAIL>', 10, 1497135589, 1497135589);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `auth_assignment`
--
ALTER TABLE `auth_assignment`
  ADD PRIMARY KEY (`item_name`,`user_id`),
  ADD KEY `user_id` (`user_id`);

--
-- Индексы таблицы `auth_item`
--
ALTER TABLE `auth_item`
  ADD PRIMARY KEY (`name`),
  ADD KEY `rule_name` (`rule_name`),
  ADD KEY `idx-auth_item-type` (`type`);

--
-- Индексы таблицы `auth_item_child`
--
ALTER TABLE `auth_item_child`
  ADD PRIMARY KEY (`parent`,`child`),
  ADD KEY `child` (`child`);

--
-- Индексы таблицы `auth_rule`
--
ALTER TABLE `auth_rule`
  ADD PRIMARY KEY (`name`);

--
-- Индексы таблицы `group`
--
ALTER TABLE `group`
  ADD PRIMARY KEY (`group_id`),
  ADD UNIQUE KEY `kafedra` (`kafedra`);

--
-- Индексы таблицы `kafedra`
--
ALTER TABLE `kafedra`
  ADD PRIMARY KEY (`kafedra_id`);

--
-- Индексы таблицы `menu`
--
ALTER TABLE `menu`
  ADD PRIMARY KEY (`id`),
  ADD KEY `parent` (`parent`);

--
-- Индексы таблицы `migration`
--
ALTER TABLE `migration`
  ADD PRIMARY KEY (`version`);

--
-- Индексы таблицы `test`
--
ALTER TABLE `test`
  ADD PRIMARY KEY (`test_id`),
  ADD KEY `test_ibfk_1` (`user_id`);

--
-- Индексы таблицы `user`
--
ALTER TABLE `user`
  ADD PRIMARY KEY (`user_id`),
  ADD UNIQUE KEY `email` (`email`),
  ADD UNIQUE KEY `password_reset_token` (`<PASSWORD>token`),
  ADD KEY `group` (`group`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `group`
--
ALTER TABLE `group`
  MODIFY `group_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT для таблицы `kafedra`
--
ALTER TABLE `kafedra`
  MODIFY `kafedra_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT для таблицы `menu`
--
ALTER TABLE `menu`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT для таблицы `test`
--
ALTER TABLE `test`
  MODIFY `test_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT для таблицы `user`
--
ALTER TABLE `user`
  MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- Ограничения внешнего ключа сохраненных таблиц
--

--
-- Ограничения внешнего ключа таблицы `auth_assignment`
--
ALTER TABLE `auth_assignment`
  ADD CONSTRAINT `auth_assignment_ibfk_1` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `auth_assignment_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`);

--
-- Ограничения внешнего ключа таблицы `auth_item`
--
ALTER TABLE `auth_item`
  ADD CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE;

--
-- Ограничения внешнего ключа таблицы `auth_item_child`
--
ALTER TABLE `auth_item_child`
  ADD CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `auth_item_child_ibfk_2` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Ограничения внешнего ключа таблицы `group`
--
ALTER TABLE `group`
  ADD CONSTRAINT `group_ibfk_1` FOREIGN KEY (`kafedra`) REFERENCES `kafedra` (`kafedra_id`);

--
-- Ограничения внешнего ключа таблицы `menu`
--
ALTER TABLE `menu`
  ADD CONSTRAINT `menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;

--
-- Ограничения внешнего ключа таблицы `test`
--
ALTER TABLE `test`
  ADD CONSTRAINT `test_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`);

--
-- Ограничения внешнего ключа таблицы `user`
--
ALTER TABLE `user`
  ADD CONSTRAINT `user_ibfk_1` FOREIGN KEY (`group`) REFERENCES `group` (`group_id`);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
<file_sep>/basic/views/site/signup.php
<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;

$this->title = 'Регистрация нового пользователя';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-signup">
    <h1><?= Html::encode($this->title) ?></h1>
    <div class="row">
        <div class="col-md-8">

            <?php $form = ActiveForm::begin(['id' => 'form-signup']); ?>
            <?= $form->field($model, 'lastname')->label('Фамилия'); ?>
            <?= $form->field($model, 'name')->label('Имя'); ?>
            <?= $form->field($model, 'thirdname')->label('Отчество'); ?>
            <?= $form->field($model, 'group')->label('Номер группы')->dropDownList([
                '0' => 'У-134',
                '1' => 'У-133',
                '2' => 'А-155',
            ]);
            ?>
            <?= $form->field($model, 'username')->label('Логин'); ?>
            <?= $form->field($model, 'email')->label('Email'); ?>
            <?= $form->field($model, 'password')->passwordInput()->label('Пароль'); ?>
            <div class="form-group">
                <?= Html::submitButton('Зарегистрироваться', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?>
            </div>
            <?php ActiveForm::end(); ?>

        </div>
    </div>
</div><file_sep>/basic/web/js/counter.js
var i = 0;  //  Временный костыль для запрета множественного одновременного запуска функции onStart
var status="none";  //  пока никак не задействована. Думаю хранить там состояние установки: работает или нет (следовательно, если один из статусов принят, то она уже включалась хотя бы раз)
var num;  //  Переменная показаний счетчика. Пришлось как глобальную объявить, чтобы у функций был к ней доступ

function onStart(){ //  Основная функция, которая запускает установку (можно сказать, это main)
  document.addEventListener('DOMContentLoaded', onDomReady);  //  нужно подгружать до функции onDomReady
  document.addEventListener('DOMContentLoaded', timerPanel);  //  нужно подгружать до функции timerPanel
  count();  //  Запуск счетчика
  randomInteger();  //  Запуск рандома для показаний температуры/влажности
  onDomReady(); //  Вывод данных температуры/влажности. В функции описал почему данный этап разбит на две функции
  timerPanel(); //  Запуск и вывод таймера
}

function count(){ //  Функция счетчика (Codepen)
  // num = parseInt(Math.random() * 100000, 10);
  num = 0;
  setTimeout(function(){
    $('.cou-item').find('ul').each(function(i, el){
      var val = pad(num, 5, 0).split("");
      var $el = $(this);
      $el.removeClass();
      $el.addClass('goto-' + val[i]);
    })
  }, 1000);

  setTimeout(function(){
    counter();
  }, 0)
}

function pad(n, width, z) { //  Функция счетчика (Codepen)
  z = z || '0';
  n = n + '';
  
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

function counter() { //  Функция счетчика (Codepen)
  setInterval(function(){
    $('.cou-item').find('ul').each(function(i, el){
      num += 1;
      var val = pad(num, 5, 0).split("");
      var $el = $(this);
      $el.removeClass();
      $el.addClass('goto-' + val[i]);
    })
  }, 250);
}

// custom

//  генерирует целое значение в нужном диапозоне
function randomInteger(min, max) {
    var rand = min - 0.5 + Math.random() * (max - min + 1)
    rand = Math.round(rand);
    return rand;
}

//  выводит значение в нужное место через заданный промежуток времени. Есть смысл дописать brake или придумать другой стопор функции (она зациклена)
function onDomReady(place) {
    var place = document.getElementById('temperature'); //  к примеру, температура. В идеале нужно передавать в функцию id нужного элемента для изменения
    (function iterate(i) {
        value = randomInteger(15, 25);  //  лучше передавать эти данные в функцию с помощью доп. параметра
        timeout = randomInteger(1000, 2000);  //  рандомная задержка между выводом значения 1000...2000 мсек
        place.innerHTML = value;
        // setTimeout(function() { iterate(i + 1); }, timeout);
    })(0);
}

function timerPanel(){ //  Функция создания и вывода таймера
  var hour = 0;
  var minute = 0;
  var second = 0;
  var milsecond = 0;
  var hour_zero = '0';
  var minute_zero = '0';
  var second_zero = '0';
  var milsecond_zero = '0';
  // var place = document.getElementById('timer');
  var place_hour = document.getElementById('hour');
  var place_minute = document.getElementById('minute');
  var place_second = document.getElementById('second');
  var place_milsecond = document.getElementById('milsecond');
  (function iterate(i) {
    milsecond++;

    if(milsecond == 100){
      milsecond = 0;
      second++;
    }
    if(second == 60){
      second = 0;
      minute++;
    }
    if(minute == 60){
      minute = 0;
      hour++;
    }
    if(milsecond > 9){
      milsecond_zero = '';
    }else{
      milsecond_zero = '0';
    }
    if(second > 9){
      second_zero = '';
    }else{
      second_zero = '0';
    }
    if(minute > 9){
      minute_zero = '';
    }else{
      minute_zero = '0';
    }
    if(hour > 9){
      hour_zero = '';
    }else{
      hour_zero = '0';
    }
    // console.log(hour+' | '+minute+' | '+second+' | '+milsecond);
    place_hour.innerHTML = hour_zero+hour;
    place_minute.innerHTML = minute_zero+minute;
    place_second.innerHTML = second_zero+second;
    place_milsecond.innerHTML = milsecond_zero+milsecond;
    // place.innerHTML = hour_zero+hour+':'+minute_zero+minute+':'+second_zero+second+':'+milsecond_zero+milsecond;
    
    setTimeout(function() { iterate(i + 1); }, 10);
  })(0);
}<file_sep>/basic/models/SignupForm.php
<?php

namespace app\models;

use Yii;
use yii\base\Model;

/**
 * Signup form
 */
class SignupForm extends Model
{

    public $username;
    public $email;
    public $group;
    public $name;
    public $lastname;
    public $thirdname;
    public $password;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            ['username', 'trim'],
            ['username', 'required', 'message' => 'Поле не должно быть пустым'],
            ['username', 'unique', 'targetClass' => '\app\models\User', 'message' => 'Логин занят. Попробуйте другой.'],
            ['username', 'string', 'max' => 32, 'message' => 'Логин слишком длинный'],
            ['email', 'trim'],
            ['email', 'required', 'message' => 'Поле не должно быть пустым'],
            ['email', 'email'],
            ['email', 'string', 'max' => 45],
            ['email', 'unique', 'targetClass' => '\app\models\User', 'message' => 'Данный Email был зарегистрирован ранее.'],
            ['group', 'trim'],
            ['group', 'required', 'message' => 'Поле не должно быть пустым'],
            ['group', 'string'],
            ['name', 'trim'],
            ['name', 'required', 'message' => 'Поле не должно быть пустым'],
            ['name', 'string', 'max' => 32],
            ['lastname', 'trim'],
            ['lastname', 'required', 'message' => 'Поле не должно быть пустым'],
            ['lastname', 'string', 'max' => 32],
            ['thirdname', 'trim'],
            ['thirdname', 'required', 'message' => 'Поле не должно быть пустым'],
            ['thirdname', 'string', 'max' => 32],
            ['password', 'required', 'message' => 'Поле не должно быть пустым'],
            ['password', 'string', 'min' => 6, 'message' => 'Пароль должен содержать не менее 6 символов'],

        ];
    }

    /**
     * Signs user up.
     *
     * @return User|null the saved model or null if saving fails
     */
    public function signup()
    {

        if (!$this->validate()) {
            return null;
        }

        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->group = $this->group;
        $user->name = $this->name;
        $user->lastname = $this->lastname;
        $user->thirdname = $this->thirdname;
        $user->setPassword($<PASSWORD>);
        $user->generateAuthKey();
        return $user->save() ? $user : null;
    }

}<file_sep>/basic/views/site/index.php
<?php

/* @var $this yii\web\View */

$this->title = 'Тренажер поверки газового счетчика';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="container">
    <div class="col-md-4 gas-meter">
        <div class="odometer">
            <ul class="digits">
                <li class="digit" style="border-left: 0px solid #1c3c50 !important;">
          <span class="cou-item cou-item-anim">
            <ul>
              <li>0</li>
              <li>0</li>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>0</li>
            </ul>
          </span>
                </li>
                <li class="digit">
          <span class="cou-item">
            <ul>
              <li>0</li>
              <li>0</li>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>0</li>
            </ul>
          </span>
                </li>
                <li class="digit">
          <span class="cou-item">
            <ul>
              <li>0</li>
              <li>0</li>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>0</li>
            </ul>
          </span>
                </li>
                <li class="digit">
          <span class="cou-item">
            <ul>
              <li>0</li>
              <li>0</li>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>0</li>
            </ul>
          </span>
                </li>
                <li class="digit">
          <span class="cou-item">
            <ul>
              <li>0</li>
              <li>0</li>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>0</li>
            </ul>
          </span>
                </li>
            </ul>
        </div>
    </div>
    <div class="col-md-8">
        <div class="scheme-device">
            <div  class="popup" onclick="myFunction()">
                <img class="rotate" src="img/circle-animate.png">
                <span class="popuptext" id="myPopup">A Simple Popup!</span>
            </div>
        </div>
    </div>
    <div class="col-md-8 on-start">
        <button class="start" id="start">Запуск</button>
    </div>
    <div class="col-md-8 panel">
        <div class="panel-use">
            <div class="indication-1">
          <span id="temperature">
            0
          </span>
            </div>
            <div class="indication-2">
          <span id="chastota">
            0
          </span>
            </div>
            <div class="indication-3">
          <span id="davlenie">
            2206
          </span>
            </div>
            <div class="indication-4">
          <span id="timer">
            <span id="hour">00</span>:<span id="minute">00</span>:<span id="second">00</span>:<span id="milsecond">00</span>
          </span>
            </div>
            <div class="indication-5">
          <span id="zadvijka">
            49.7
          </span>
            </div>
            <div class="indication-6">
          <span id="vakuum">
            24.07
          </span>
            </div>
        </div>
    </div>
</div>
<!--<script>-->
<!--    // When the user clicks on div, open the popup-->
<!--    // function myFunction() {-->
<!--    //     var popup = document.getElementById("myPopup");-->
<!--    //     popup.classList.toggle("show");-->
<!--    // }-->
<!--</script>-->

<?php
$script = <<< JS
    document.getElementById('start').onclick = function() {
        if (i == 0){
            onStart();
            i++;
        }
    }
JS;
$this->registerJs($script, yii\web\View::POS_END);
?>
<!--     var i = 0;-->
<!--       if (i == 0){-->
<!--         var script = document.createElement('script');-->
<!--         script.src = "js/counter.js";-->
<!--         document.getElementsByTagName('head')[0].appendChild(script);-->
<!--       }-->
<!--     i++;-->
<!--     onStart();-->
<!--     }-->