Skip to content
Snippets Groups Projects
Commit adad2d0b authored by Andrew Rudenets's avatar Andrew Rudenets
Browse files

Первый коммит, v0.2.1

parents
Branches
Tags
No related merge requests found
Showing
with 928 additions and 0 deletions
application/cache/
application/logs/
application/config/
modules/
system/
*.*~
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /~dev_rating/
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
<?php defined('SYSPATH') or die('No direct script access.');
// -- Environment setup --------------------------------------------------------
// Load the core Kohana class
require SYSPATH.'classes/Kohana/Core'.EXT;
if (is_file(APPPATH.'classes/Kohana'.EXT))
{
// Application extends the core
require APPPATH.'classes/Kohana'.EXT;
}
else
{
// Load empty core extension
require SYSPATH.'classes/Kohana'.EXT;
}
/**
* Set the default time zone.
*
* @link http://kohanaframework.org/guide/using.configuration
* @link http://www.php.net/manual/timezones
*/
date_default_timezone_set('Europe/Moscow');
/**
* Set the default locale.
*
* @link http://kohanaframework.org/guide/using.configuration
* @link http://www.php.net/manual/function.setlocale
*/
setlocale(LC_ALL, 'ru-RU.utf-8');
/**
* Enable the Kohana auto-loader.
*
* @link http://kohanaframework.org/guide/using.autoloading
* @link http://www.php.net/manual/function.spl-autoload-register
*/
spl_autoload_register(array('Kohana', 'auto_load'));
/**
* Optionally, you can enable a compatibility auto-loader for use with
* older modules that have not been updated for PSR-0.
*
* It is recommended to not enable this unless absolutely necessary.
*/
//spl_autoload_register(array('Kohana', 'auto_load_lowercase'));
/**
* Enable the Kohana auto-loader for unserialization.
*
* @link http://www.php.net/manual/function.spl-autoload-call
* @link http://www.php.net/manual/var.configuration#unserialize-callback-func
*/
ini_set('unserialize_callback_func', 'spl_autoload_call');
/**
* Set the mb_substitute_character to "none"
*
* @link http://www.php.net/manual/function.mb-substitute-character.php
*/
mb_substitute_character('none');
// -- Configuration and initialization -----------------------------------------
/**
* Set the default language
*/
I18n::lang('ru-ru');
Cookie::$salt = 'q98fbef23';
if (isset($_SERVER['SERVER_PROTOCOL']))
{
// Replace the default protocol.
HTTP::$protocol = $_SERVER['SERVER_PROTOCOL'];
}
/**
* Set Kohana::$environment if a 'KOHANA_ENV' environment variable has been supplied.
*
* Note: If you supply an invalid environment name, a PHP warning will be thrown
* saying "Couldn't find constant Kohana::<INVALID_ENV_NAME>"
*/
if (isset($_SERVER['KOHANA_ENV']))
{
Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
}
/**
* Initialize Kohana, setting the default options.
*
* The following options are available:
*
* - string base_url path, and optionally domain, of your application NULL
* - string index_file name of your index file, usually "index.php" index.php
* - string charset internal character set used for input and output utf-8
* - string cache_dir set the internal cache directory APPPATH/cache
* - integer cache_life lifetime, in seconds, of items cached 60
* - boolean errors enable or disable error handling TRUE
* - boolean profile enable or disable internal profiling TRUE
* - boolean caching enable or disable internal caching FALSE
* - boolean expose set the X-Powered-By header FALSE
*/
Kohana::init(array(
'base_url' => '/~dev_rating/',
'index_file' => FALSE
));
/**
* Attach the file write to logging. Multiple writers are supported.
*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));
/**
* Attach a file reader to config. Multiple readers are supported.
*/
Kohana::$config->attach(new Config_File);
/**
* Информация о системе: название, версия.
*/
define('ASSEMBLY_SYSTEM_NAME', 'Сервис БРС');
define('ASSEMBLY_VERSION', '0.9');
/**
* Enable modules. Modules are referenced by a relative or absolute path.
*/
Kohana::modules(array(
'kotwig' => MODPATH.'kotwig', // TWIG!!!
// 'auth' => MODPATH.'auth', // Basic authentication
// 'exauth' => MODPATH.'exauth', // Basic authentication
// 'cache' => MODPATH.'cache', // Caching with multiple backends
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
'database' => MODPATH.'database', // Database access
// 'image' => MODPATH.'image', // Image manipulation
// 'minion' => MODPATH.'minion', // CLI Tasks
// 'orm' => MODPATH.'orm', // Object Relationship Mapping
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'userguide' => MODPATH.'userguide', // User guide and API documentation
));
/**
* Set the routes. Each route must have a minimum of a name, a URI and a set of
* defaults for the URI.
*/
/* --------------- Авторизация ---------------- */
Route::set('sign', '(sign(/<type>))', array('type' => '(up|in)'))
->defaults(array(
'controller' => 'authentication',
'action' => 'sign',
));
Route::set('remind', 'remind')
->defaults(array(
'controller' => 'authentication',
'action' => 'remind',
));
Route::set('logout', 'logout')
->defaults(array(
'controller' => 'authentication',
'action' => 'logout',
));
/* --------------- Служебные ссылки ---------------- */
Route::set('handler', 'handler/<controller>/<action>(/<id>)')
->defaults(array(
'action' => 'index',
'directory' => 'handler'))
->filter(function($route, $params, $request)
{
if ($request->method() !== HTTP_Request::POST)
{
// Данный маршрут выполним только для POST-запросов изнутри фреймворка
return FALSE;
}
});
Route::set('twig:show', 'twig(/<id>)')
->defaults(array(
'controller' => 'twig',
'action' => 'show'
));
/* --------------- Общие ссылки ---------------- */
Route::set('index', 'index')
->defaults(array(
'controller' => 'UserEnvi',
'action' => 'index'
));
Route::set('settings', 'settings')
->defaults(array(
'controller' => 'UserEnvi',
'action' => 'settings'
));
Route::set('profile', 'profile(/<type>(/<id>))', array('type' => '(teacher|student)'))
->defaults(array(
'controller' => 'UserEnvi',
'action' => 'profile'
));
/* --------------- Студенты ---------------- */
Route::set('subject', 'subject/<id>', array('id' => '[0-9]+'))
->defaults(array(
'directory' => 'student',
'controller' => 'subject',
'action' => 'show'
));
// Внутренние вызовы!
Route::set('stdnt:index', 'student/index')
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'student',
'controller' => 'index',
'action' => 'index'
));
Route::set('stdnt:settings', 'student/settings')
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'student',
'controller' => 'index',
'action' => 'settings'
));
Route::set('stdnt:profile', 'student/profile')
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'student',
'controller' => 'profile',
'action' => 'show'
));
/* --------------- Преподаватели ---------------- */
Route::set('map:show', 'map/<id>', array('id' => '[0-9]+'))
->defaults(array(
'directory' => 'teacher',
'controller' => 'map',
'action' => 'show'
));
Route::set('map:act', 'map/<action>/<id>', array('action' => '(create|edit)', 'id' => '[0-9]+'))
->defaults(array(
'directory' => 'teacher',
'controller' => 'map'
));
Route::set('rating', 'rating/<id>', array('id' => '[0-9]+'))
->defaults(array(
'directory' => 'teacher',
'controller' => 'rating',
'action' => 'edit'
));
// Внутренние вызовы!
Route::set('tchr:index', 'teacher/index')
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'teacher',
'controller' => 'index',
'action' => 'index'
));
Route::set('tchr:settings', 'teacher/settings')
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'teacher',
'controller' => 'index',
'action' => 'settings'
));
Route::set('tchr:profile', 'teacher/profile(/<action>(/<id>))', array('action' => '(student)', 'id' => '[0-9]+'))
->filter(function($route, $params, $request){
if($request->is_initial())
return FALSE;
})
->defaults(array(
'directory' => 'teacher',
'controller' => 'profile',
'action' => 'show'
));
<?php defined('SYSPATH') OR die('No direct script access.');
class Auth {
public static function login($id)
{
$session = Session::instance();
$session->set('LoggedIn', true)->set('ID', $id);
}
public static function isLoggedIn()
{
return Session::instance()->get('LoggedIn');
}
public static function logout()
{
Session::instance()->set('LoggedIn', false)->restart();
}
public static function setAccountType($type)
{
return Session::instance()->set('Type', $type);
}
public static function getData()
{
return Session::instance()->as_array();
}
}
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Authentication extends Controller {
public function before() {
parent::before();
if(UTF8::strcasecmp($this->request->action(), 'logout'))
{
if(Auth::isLoggedIn())
{
$account = Auth::getData();
$page = Request::factory($account['Type'].'/index')->execute();
$this->response->body($page);
}
}
}
public function action_sign()
{
if(!Auth::isLoggedIn())
{
$type = $this->request->param('type');
if(empty($type)) $type = 'in';
$twig = Twig::factory('sign/'.$type);
$this->response->body($twig);
}
}
public function action_remind()
{
if(!Auth::isLoggedIn())
{
$twig = Twig::factory('sign/remindpass');
$this->response->body($twig);
}
}
public function action_logout()
{
Auth::logout();
$this->action_sign();
}
} // End Welcome
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Handler_Sign extends Controller {
protected $model;
public function before() {
parent::before();
$this->model = new Model_Sign;
}
public function action_in()
{
if(!$this->request->is_ajax() || Auth::isLoggedIn())
{
$this->response->body("{'success': 'false', 'errors': 'no access'}");
return;
}
list($response, $data) = $this->checkAuthData(Arr::map('trim', $_POST));
if($response['success'])
{
Auth::login($data['ID']);
Auth::setAccountType($data['Type']);
}
$this->response->body(json_encode($response));
}
private function checkAuthData($data)
{
$post = Validation::factory($data);
$post->rule('login', 'email')->rule('login', 'not_empty');
$res = null;
if(!$post->check())
{
$post = Validation::factory($data);
$post->rule('login', 'alpha_dash')->rule('login', 'not_empty');
if($post->check())
$res = $this->model->getAccountInfoByLogin($data['login'], sha1($data['password']))->offsetGet(0);
}
else
$res = $this->model->getAccountInfoByMail($data['login'], sha1($data['password']))->offsetGet(0);
$response['success'] = $res['ID'] != 0;
return array($response, $res);
}
public function action_up()
{
if(!$this->request->is_ajax() || Auth::isLoggedIn())
{
$this->response->body("{'success': 'false', 'errors': 'no access'}");
return;
}
$data = Arr::map('trim', $_POST);
$response = $this->validateActivationData($data);
if($response['success'])
{
$id = $this->model->activateAccount($data['login'], sha1($data['password']),
$data['email'], $data['activation_code']);
$res = $this->model->getAccountInfoByLogin($data['login'], sha1($data['password']))->offsetGet(0);
Auth::login($id);
Auth::setAccountType($res['Type']);
}
$this->response->body(json_encode($response));
}
private function validateActivationData($data)
{
$response['success'] = false;
$post = Validation::factory($data);
$post->rule('activation_code', 'alpha_numeric')
->rule('login', 'alpha_dash')
->rule('login', 'not_empty')
->rule('password', 'min_length', array(':value', 4))
->rule('confirm_password', 'matches', array(':validation', 'confirm_password', 'password'))
->rule('email', 'not_empty')
->rule('email', 'email')
// ->rule('email', 'email_domain')
->rule('confirm_email', 'matches', array(':validation', 'confirm_email', 'email'));
if($post->check())
{
if($this->model->isActivationCodeValid($data['activation_code']))
{
if($count = $this->model->isAccountExists($data['login'], $data['email']))
{
if($count['login'] != 0)
$post->error ('login', 'already_exists');
if($count['email'] != 0)
$post->error ('email', 'already_exists');
$response['count'] = $count;
$response['success'] = false;
}
else
{
$response['success'] = true;
}
}
else {
$post->error('activation_code', 'invalid_code');
$response['success'] = false;
}
}
if(!$response['success'])
$response['errors'] = $post->errors ('signin');
return $response;
}
public function action_remindpass()
{
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Student_Index extends Controller_UserEnvi {
public function action_index()
{
$twig = Twig::factory('student/index');
$twig->User = $this->UserInfo;
$db = new Model_Student;
$disciplines = $db->getAllDisciplines($this->UserInfo['StudentID']);
$i = 0;
foreach($disciplines as $row)
{
$i++;
if($row['ExamType'] == 'exam')
$disciplinesHandled[$i]['Control'] = 'Экзамен';
elseif($row['ExamType'] == 'credit')
$disciplinesHandled[$i]['Control'] = 'Зачет';
$disciplinesHandled[$i]['Teacher'] = $row['TeacherLast'].' '.UTF8::substr($row['TeacherFirst'], 0, 1).'. ';
if(!empty($row['TeacherSecond']))
$disciplinesHandled[$i]['Teacher'] = UTF8::substr($row['TeacherFirst'], 0, 1).'.';
$disciplinesHandled[$i]['ID'] = $row['SubjectID'];
$disciplinesHandled[$i]['Title'] = $row['SubjectName'];
$disciplinesHandled[$i]['Rate'] = $row['Rate'];
$disciplinesHandled[$i]['MaxRate'] = $row['MaxRate'];
}
$twig->disciplines = $disciplinesHandled;
$this->response->body($twig);
}
public function action_settings() {
$twig = Twig::factory('settings');
$this->UserInfo['EMail'] = 'example@exp.com';
$this->UserInfo['Login'] = 'You Login';
$twig->User = $this->UserInfo;
//
$this->response->body($twig);
}
}
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Student_Profile extends Controller_UserEnvi {
public function action_show()
{
$twig = Twig::factory('base');
$twig->User = $this->UserInfo;
$db = new Model_Student;
//$profile = $db->getStudentProfile($this->UserInfo['StudentID']);
$this->response->body($twig);
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Student_Subject extends Controller_UserEnvi {
public function action_show()
{
$twig = Twig::factory('student/subject');
$twig->User = $this->UserInfo;
$db = new Model_Student;
$id = $this->request->param('id');
$discipline = $db->getDisciplineMap($this->UserInfo['StudentID'], $id);
if(count($discipline) == 0)
throw HTTP_Exception::factory(404, "Предмет с ID $id не найден!");
$disciplineHandled = array();
$rate = 0; $maxRate = 0; $i = 0; $id = 0;
foreach($discipline as $row)
{
if($row['ModuleID'] != $id)
{
$i++;
$id = $row['ModuleID'];
}
if(!isset($disciplineHandled[$i]['SubmodulesCount']))
{
$disciplineHandled[$i]['SubmodulesCount'] = 0;
$disciplineHandled[$i]['Rate'] = 0;
$disciplineHandled[$i]['MaxRate'] = 0;
}
$j = $disciplineHandled[$i]['SubmodulesCount'] += 1;
$disciplineHandled[$i]['Rate'] += (int) $row['Rate'];
$disciplineHandled[$i]['MaxRate'] += (int) $row['MaxRate'];
$disciplineHandled[$i]['ModuleTitle'] = $row['ModuleName'];
$disciplineHandled[$i][$j]['Title'] = $row['SubModuleName'];
$disciplineHandled[$i][$j]['Description'] = $row['SubmoduleDescription'];
$disciplineHandled[$i][$j]['Rate'] = (int) $row['Rate'];
$disciplineHandled[$i][$j]['Date'] = '---';
$disciplineHandled[$i][$j]['MaxRate'] = (int) $row['MaxRate'];
$rate += $row['Rate'];
$maxRate += $row['MaxRate'];
}
$disciplineHandled['ModulesCount'] = $i;
$disciplineHandled['Rate'] = (int) $rate;
$disciplineHandled['MaxRate'] = (int) $maxRate;
$twig->discipline = $disciplineHandled;
// $twig = '<pre>'.print_r($disciplineHandled, true).'</pre>';
$this->response->body($twig);
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Index extends Controller_UserEnvi {
public function action_index()
{
$twig = Twig::factory('teacher/setRate');
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Map extends Controller_UserEnvi {
public function action_show()
{
$twig = Twig::factory('base');
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
public function action_create()
{
$twig = Twig::factory('base');
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
public function action_edit()
{
$twig = Twig::factory('base');
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Rating extends Controller_UserEnvi {
public function action_edit()
{
$twig = Twig::factory('base');
$twig->User = $this->UserInfo;
// PUT YOUR CODE HERE
$this->response->body($twig);
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Twig extends Controller {
public function action_show()
{
$path = $this->request->param('id');
$path = UTF8::str_ireplace(':', '/', $path);
if(Kohana::find_file('views', $path, 'twig'))
{
$twig = Twig::factory($path);
$this->response->body($twig);
}
else
{
$twig = Twig::factory('errors/404');
$twig->message = 'Шаблончик-то не найден!';
$this->response->status(404)->body($twig);
}
}
} // End Welcome
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_UserEnvi extends Controller {
protected $UserInfo;
public function before()
{
if(!Auth::isLoggedIn())
{
$this->redirect('sign', 302);
}
else
{
$model = new Model_Sign;
$user = Auth::getData();
$this->UserInfo = $model->getFullInfoByID($user['ID'])->offsetGet(0);
$directory = $this->request->directory();
if(!empty($directory))
if(UTF8::strcasecmp($this->request->directory(), $user['Type']))
//throw HTTP_Exception::factory(404, $this->request->directory());
throw HTTP_Exception::factory(404, 'Не пытайтесь попасть туда, куда попадать не следует.');
}
}
public function action_index()
{
$page = Request::factory($this->UserInfo['AccountType'].'/index')->execute();
$this->response->body($page);
}
public function action_profile()
{
$url = $this->UserInfo['AccountType']."/profile";
if(!empty($type))
$url .= '/'.$type;
if(!empty($id))
$url .= '/'.$id;
$page = Request::factory($url)->execute();
$this->response->body($page);
}
public function action_settings()
{
$page = Request::factory($this->UserInfo['AccountType'].'/settings')->execute();
$this->response->body($page);
}
}
<?php defined('SYSPATH') or die('No direct script access.');
class HTTP_Exception extends Kohana_HTTP_Exception {
/**
* Generate a Response for all Exceptions without a more specific override
*
* The user should see a nice error page, however, if we are in development
* mode we should show the normal Kohana error page.
*
* @return Response
*/
public function get_response()
{
// Lets log the Exception, Just in case it's important!
Kohana_Exception::log($this);
if (Kohana::$environment >= Kohana::DEVELOPMENT)
{
// Show the normal Kohana error page.
return parent::get_response();
}
else
{
// Generate a nicer looking "Oops" page.
$twig = Twig::factory('errors/default');
$response = Response::factory()
->status($this->getCode())
->body($twig);
return $response;
}
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {
/**
* Generate a Response for the 404 Exception.
*
* The user should be shown a nice 404 page.
*
* @return Response
*/
public function get_response()
{
$twig = Twig::factory('errors/404');
// Remembering that `$this` is an instance of HTTP_Exception_404
$twig->message = $this->getMessage();
$response = Response::factory()
->status(404)
->body($twig);
return $response;
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Sign extends Model
{
public function getAccountInfoByLogin($login, $password)
{
$sql = "CALL GetAccInfoByLogin('$login', '$password');";
$query = DB::query(Database::SELECT, $sql)->execute();
return $query;
}
public function getAccountInfoByMail($email, $password)
{
$sql = "CALL GetAccInfoByMail('$email', '$password');";
$query = DB::query(Database::SELECT, $sql)->execute();
return $query;
}
public function getFullInfoByID($id)
{
$sql = "CALL GetPersonalInfoByID('$id');";
$query = DB::query(Database::SELECT, $sql)->execute();
return $query;
}
public function isAccountExists($login, $email)
{
$sql = "SELECT GetAccNumByLogin('$login') AS Num;";
$login = DB::query(Database::SELECT, $sql)->execute();
/* foreach ($login as $value) {
$login_count = $value['Num'];
} */
$sql = "SELECT GetAccNumByMail('$email') AS Num;";
$email = DB::query(Database::SELECT, $sql)->execute();
/* foreach ($email as $value) {
$email_count = $value['Num'];
} */
if(($login->get('Num') + $email->get('Num')) != 0)
return array('login' => $login->get('Num'), 'email' => $email->get('Num'));
else
return false;
}
public function isActivationCodeValid($code)
{
$sql = "SELECT GetAccNumByCode('$code') AS Num;";
$res = DB::query(Database::SELECT, $sql)->execute();
foreach ($res as $value) {
$count = $value['Num'];
}
return $count == 1;
}
public function activateAccount($login, $password, $email, $code)
{
$sql = "SELECT `ActivateAccount` ('$code', '$login', '$email', '$password') AS `Num`; ";
$res = DB::query(Database::SELECT, $sql)->execute();
foreach ($res as $value) {
$id = $value['Num'];
}
return $id;
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Student extends Model
{
public function getAllDisciplines($id)
{
$sql = "CALL `GetDisciplinesForStudent`('$id'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getDisciplineMap($student_id, $subject_id)
{
$sql = "CALL `GetSubjectMapForStudent`('$student_id', '$subject_id'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
}
<?php defined('SYSPATH') or die('No direct script access.');
class Twig extends Kohana_Twig
{
public static function factory($file = NULL, array $data = NULL) {
$twig = parent::factory($file, $data);
$twig->HTML = new HTML;
$twig->Date = new Date;
$twig->URL = new URL;
$twig->UTF8 = new UTF8;
$twig->Text = new Text;
$twig->Arr = new Arr;
$twig->Inflector = new Inflector;
$twig->System = array('Title' => ASSEMBLY_SYSTEM_NAME, 'Version' => ASSEMBLY_VERSION);
return $twig;
}
}
\ No newline at end of file
<?php defined('SYSPATH') or die('No direct script access.');
return array(
':field must contain only numbers, letters and dashes' => ':field содержит недопустимые символы',
':field must contain only letters and numbers' => ':field содержит недопустимые символы',
':field must be an email address' => ':field должен быть E-Mail адресом',
':field must contain a valid email domain' => ':field должен быть действительным E-Mail адресом',
':field must be the same as :param3' => ':param3 и :field должны совпадать',
':field must be at least :param2 characters long' => ':field не может быть короче :param2 символов',
':field must not be empty' => ':field не может быть пустым',
':field must be numeric' => ':field должен состоять только из цифр',
':value already exists' => ':field :value уже существует!',
':value is invalid activation code' => 'Введенный код активации недействителен',
'login' => 'Имя пользователя',
'email' => 'E-Mail',
'confirm email' => 'подтверждение E-Mail',
'password' => 'Пароль',
'confirm password' => 'подтверждение пароля',
'activation code' => 'Код активации',
);
\ No newline at end of file
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