Программный комплекс управления сайтом с использованием "Kohana Framework"

Разработка структурной схемы и интерфейса программного комплекса управления сайтом. Выбор языка программирования. Принципы тестирования программы. Разработка руководства оператора и системного программиста. Расчет сметы затрат на программный продукт.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 11.06.2012
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

9. http://www.sdelaysite.com/php/php-1

10. http://kohana3.ru/

11. http://www.webcorp.ru/page/cmsabout.html

12. http://habrahabr.ru/hub/kohanaphp/

13. http://blogocms.ru/category/tryuki-vebmastera/kohana/

14. http://forum.php.su/

15. http://vremenno.net/html-css/css3-review/

16. http://1popov.ru/bonuscourse/cssform/

17. http://ckeditor.com/

18. http://htmlpurifier.org/

19. http://github.com

20. http://www.apache.org/

21. http://www.php.net/

22. http://www.mysql.com/

23. http://validator.w3.org/

Приложение. Код программы

..\css\auth.css

@charset "UTF-8";

#close-button{

position: absolute;

z-index:30;

bottom: 4px;

right: 2px;}

#ptext{

margin: 5px 0 0 0;}

#slider p a,#close-button{

color: #000;}

.btmimg:hover{

background-image: url(/img/buttonover.png);

background-repeat: no-repeat;

width: 110px;

height: 45px;

margin: 0 auto;

padding-top: 2px;

border: none;}

.btmimg{

background-image: url(/img/buttonout.png);

background-repeat: no-repeat;

width: 110px;

height: 45px;

margin: 0 auto;

border: none;}

#slider{

font-size: 12px;

font-family: verdana, sans-serif;

color: #333;

position:absolute;

top:-56px;

right:-80px;

z-index:2;

width:200px;

text-align: center;

padding-bottom: 2px;}

#slider-in{

position:relative;

z-index:3;

height:0;

overflow:hidden;

background: rgb(245,246,246); /* Old browsers */

/* IE9 SVG, needs conditional override of 'filter' to 'none' градиент-диагональный */

background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjZjVmNmY2IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMjElIiBzdG9wLWNvbG9yPSIjZGJkY2UyIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNDklIiBzdG9wLWNvbG9yPSIjYjhiYWM2IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iODAlIiBzdG9wLWNvbG9yPSIjZGRkZmUzIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Y1ZjZmNiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);

background: -moz-linear-gradient(-45deg, rgba(245,246,246,1) 0%, rgba(219,220,226,1) 21%, rgba(184,186,198,1) 49%, rgba(221,223,227,1) 80%, rgba(245,246,246,1) 100%); /* FF3.6+ */

background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(245,246,246,1)), color-stop(21%,rgba(219,220,226,1)), color-stop(49%,rgba(184,186,198,1)), color-stop(80%,rgba(221,223,227,1)), color-stop(100%,rgba(245,246,246,1))); /* Chrome,Safari4+ */

background: -webkit-linear-gradient(-45deg, rgba(245,246,246,1) 0%,rgba(219,220,226,1) 21%,rgba(184,186,198,1) 49%,rgba(221,223,227,1) 80%,rgba(245,246,246,1) 100%); /* Chrome10+,Safari5.1+ */

background: -o-linear-gradient(-45deg, rgba(245,246,246,1) 0%,rgba(219,220,226,1) 21%,rgba(184,186,198,1) 49%,rgba(221,223,227,1) 80%,rgba(245,246,246,1) 100%); /* Opera 11.10+ */

background: -ms-linear-gradient(-45deg, rgba(245,246,246,1) 0%,rgba(219,220,226,1) 21%,rgba(184,186,198,1) 49%,rgba(221,223,227,1) 80%,rgba(245,246,246,1) 100%); /* IE10+ */

background: linear-gradient(-45deg, rgba(245,246,246,1) 0%,rgba(219,220,226,1) 21%,rgba(184,186,198,1) 49%,rgba(221,223,227,1) 80%,rgba(245,246,246,1) 100%); /* W3C */

filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f6f6', endColorstr='#f5f6f6',GradientType=1 ); /* IE6-8 fallback on horizontal gradient */

box-shadow: 0 0 50px #40310a; /* тень - размытая */}

..\css\stylesheet.css

@charset "UTF-8";

@import url(auth.css);

body {

margin:0px;

padding:0px;

min-height: 800px;

min-width: 1024px;

background-attachment: scroll;

background-image: url(../img/background.jpg);

background-repeat: repeat-x;

background-position: left top;}

#content_container {

position: relative;

margin: 0 auto;

width:900px;

min-height: 550px;

background-attachment: scroll;

background-image: url(../img/Untitled-4.png);

background-repeat: no-repeat;

background-position: right center;}

#logo_container {

height:90px;

width:900px;

margin: 0 auto;

min-width: 900px;}

#main_container {

height:70px;

width:900px;

margin: 0 auto;}

#logo_image {

width:255px;

height:75px;

margin-left:10px;

margin-top:15px;

float:left;

background-image: url(../img/logo.png);}

#top_bar_black {

width:100%;

height:90px;

background-color:#000000;}

#bottom_bar_black {

width:100%;

height:80px;

background-color:#000000;}

#nav_block {

width: 500px;

height:90px;

float:right;}

.nav_button {

width: 70px; /*This number you can edit when you need to add more with to fit your text inside the button */

color:#FFFFFF;

font-family:Verdana, Arial, Helvetica, sans-serif;

font-style: italic;

font-size:12px;

margin-left:10px;

margin-top:35px;

text-align:center;

float:left;}

a:hover{

font-style: normal;

font-weight: bold;

color: #fff; }

a {

text-decoration: none;

font-style: italic;

font-weight: normal;

color: #fff;

font-family:Verdana, Arial, Helvetica, sans-serif;

font-style: italic;

font-size:12px; }

#header {

width:500px;

margin-top:50px;

margin-bottom:250px;

float: left;}

.header_content_mainline {

font-size:35px;

color:#000000;

width:500px;

font-style: italic;}

#header_content_boxline {

font-size:35px;

color:#000000;

width:400px;

font-style: italic;}

#header_content_lowerline {

font-size:35px;

color:#FFFFFF;

width:400px;

font-style: italic;}

#header_content_boxcontent {

font-size:12px;

color:#333333;

width:400px;

font-style: italic;}

#header_content_lowerboxcontent {

font-size:12px;

color:#CCCCCC;

width:400px;}

#header_content_tagline {

font-size:12px;

color:#333333;

width:500px;}

#header_lower {

width:400px;

float:left;

margin-right:40px;

margin-bottom:50px;}

#copywriteblock {

margin: 10px auto;

width: 900px;

color:#333333;

font-size:10px;

font-family: verdana;

text-align:right;

text-decoration:none;}

#copywriteblock a{

color: #222;}

#copywriteblock a:hover{

color: #555;}

#clear{clear: both;}

..\css\stylesheetadmin.css

@charset "UTF-8";

body {

margin:0px;

padding:0px;

min-height: 800px;

min-width: 1024px;

background-attachment: scroll;

background-image: url(../img/background.jpg);

background-repeat: repeat-x;

background-position: left top;}

#content_container {

position: relative;

margin: 0 auto;

width:900px;

min-height: 550px;

background-attachment: scroll;

background-image: none;

background-repeat: no-repeat;

background-position: right center;}

#logo_container {

height:90px;

width:900px;

margin: 0 auto;

min-width: 900px;}

#main_container {

height:70px;

width:900px;

margin: 0 auto;}

#logo_image {

width:255px;

height:75px;

margin-left:10px;

margin-top:15px;

float:left;

background-image: url(../img/logo.png);}

#top_bar_black {

width:100%;

height:90px;

background-color:#000000;}

#bottom_bar_black {

width:100%;

height:80px;

background-color:#000000;}

#nav_block {

width: 500px;

height:90px;

float:right;}

.nav_button {

color:#FFFFFF;

font-family:Verdana, Arial, Helvetica, sans-serif;

font-style: italic;

font-size:12px;

margin-left:15px;

margin-top:35px;

text-align:center;

float:left;}

a:hover{

font-style: normal;

font-weight: bold;

color: #fff; }

a {

text-decoration: none;

font-style: italic;

font-weight: normal;

color: #fff;

font-family:Verdana, Arial, Helvetica, sans-serif;

font-style: italic;

font-size:12px; }

#header {

width:500px;

margin-top:50px;

margin-bottom:250px;

float: left;}

.header_content_mainline {

font-size:35px;

color:#000000;

width:500px;

font-style: italic;}

#header_content_boxline {

font-size:35px;

color:#000000;

width:400px;

font-style: italic;}

#header_content_lowerline {

font-size:35px;

color:#FFFFFF;

width:400px;

font-style: italic;}

#header_content_boxcontent {

font-size:12px;

color:#333333;

width:400px;

font-style: italic;}

#header_content_lowerboxcontent {

font-size:12px;

color:#CCCCCC;

width:400px;}

#header_content_tagline {

font-size:12px;

color:#333333;

width:500px;}

#header_lower {

width:400px;

float:left;

margin-right:40px;

margin-bottom:50px;}

#copywriteblock {

margin: 10px auto;

width: 900px;

color:#333333;

font-size:10px;

font-family: verdana;

text-align:right;

text-decoration:none;}

#copywriteblock a{

color: #222;}

#copywriteblock a:hover{

color: #555;}

#clear{clear: both;}

input{

padding: 0 10px;

margin: 5px;}

..\aplication\classes\adminverification.php

<?php defined('SYSPATH') or die('No direct script access.');

class Adminverification extends Controller_Template

{

public function before()

{

$session = Session::instance();

$session->set('auth_redirect', $_SERVER['REQUEST_URI']);

$auth=Auth::instance();

if($auth->logged_in() == 0 ) Request::initial()->redirect('authformer');

if($auth->logged_in('admin') == 0 ) Request::initial()->redirect('netprav');

return parent::before();

}

}

..\aplication\classes\childrenbefore.php

<?php defined('SYSPATH') or die('No direct script access.');

class Childrenbefore extends Controller_Template

{

public function before()

{

$session = Session::instance(); // Создание эземпляра класса Session на основе метода Instance

$session->set('auth_redirect', $_SERVER['REQUEST_URI']); // запись в переменную session методом set страницы которую хотел посетить пользователь

$auth=Auth::instance(); // объявление экземпляра класса авторизации

if($auth->logged_in() == 0) Request::initial()->redirect('authformer'); // если пользователь не авторизован переадресовать его на страницу авторизации

return parent::before();

}

}

..\aplication\classes\exception404.php

<?php defined('SYSPATH') or die('No direct script access.');

class Exception404

{

public static function handle(Exception $e) // На вход приходит ошибка

{

switch (get_class($e))

{

case 'HTTP_Exception_404':// сравнивается с 404

$response = new Response;

$response->status(404);// в статус сервера 404

$view = new View('404view'); // использовать вид view404

$view->message = $e->getMessage(); // записать в переменную $message сообщение из контроллера materials -- throw new HTTP_Exception_404('Страница не найдена!');

echo $response->body($view)->send_headers()->body();// генерация отображения

return TRUE;

break;

default:// если не 404 обрабатывать стандартными методами Kohana

return Kohana_Exception::handler($e);

break;

}

}

}

..\aplication\classes\loginverification.php

<?php defined('SYSPATH') or die('No direct script access.');

class Loginverification extends Controller_Template

{

public function before()

{

$session = Session::instance();

$session->set('auth_redirect', $_SERVER['REQUEST_URI']);

$auth=Auth::instance();

if($auth->logged_in() == 0 ) Request::initial()->redirect('authformer');

return parent::before();

}

}

..\aplication\classes\nstree.php (готовый модуль для работы категорий)

<?php defined('SYSPATH') or die('No direct script access.');

/*

CREATE TABLE `tree` (

`id` INT(10) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(255) NOT NULL,

`left_key` INT(10) NOT NULL,

`right_key` INT(10) NOT NULL,

`level` INT(10) NOT NULL,

PRIMARY KEY (`id`),

INDEX `key` (`left_key`, `right_key`, `level`)

)

COLLATE='utf8_general_ci'

ENGINE=InnoDB

*/

class NSTree

{

protected $table = NULL;

public function __construct($tablename)

{

$this->table = $tablename;

}

// Модифицирует ключи

protected function modifyNodes($key, $delta)

{

$query =

'UPDATE '.Database::instance()->quote_table($this->table).'

SET right_key = right_key + '.(int)$delta.'

WHERE right_key >= '.(int)$key;

DB::query(Database::UPDATE, $query)->execute();

$query =

'UPDATE '.Database::instance()->quote_table($this->table).'

SET left_key = left_key + '.(int)$delta.'

WHERE left_key >= '.(int)$key;

DB::query(Database::UPDATE, $query)->execute();

}

public function getNode($id)

{

$result = DB::select()

->from($this->table)

->where('id', '=', $id)

->execute();

if (count($result) == 0)

throw new Exception('Node id='.$id.' does not exist.');

return $result->current();

}

public function clear($extrafields=array())

{

if (!is_array($extrafields))

throw new Exception('$extrafields must be array.');

DB::query(NULL, 'TRUNCATE '.Database::instance()->quote_table($this->table))->execute();

DB::delete($this->table)->execute();

$data = array(

'id' => 1,

'name' => '<root>',

'left_key' => 1,

'right_key' => 2,

'level' => 0

);

$data = $data + $extrafields;

list($insert_id, $tmp) = DB::insert($this->table, array_keys($data))->values(array_values($data))->execute();

return $insert_id;

}

public function getTree($id=NULL)

{

$id = (int) $id;

$QTblName = Database::instance()->quote_table($this->table);

if ($id != 0)

{

$node = $this->getNode($id);

$query =

'SELECT *

FROM '.$QTblName.'

WHERE left_key >= '.(int)$node['left_key'].' AND right_key <= '.(int)$node['right_key'].'

ORDER BY left_key';

}

else

{

$query =

'SELECT *

FROM '.$QTblName.'

ORDER BY left_key';

}

$result = DB::query(Database::SELECT, $query)->execute();

return $result;

}

public function getPath($id)

{

$node = $this->getNode($id);

$query =

'SELECT *

FROM '.Database::instance()->quote_table($this->table).'

WHERE right_key > '.(int)$node['left_key'].' AND left_key < '.(int)$node['right_key'].'

ORDER BY left_key';

$result = DB::query(Database::SELECT, $query)->execute();

return $result;

}

public function insert($id, $extrafields=array())

{

if (!is_array($extrafields))

throw new Exception('$extrafields must be array.');

// Находим родителя

$parent = $this->getNode($id);

DB::query(NULL, 'START TRANSACTION')->execute();

// Обновляем ключи существующего дерева, узлы стоящие за родительским узлом

$this->modifyNodes((int)$parent['right_key'], 2);

// Добавляем новый узел

$node = array(

'id' => NULL,

'left_key' => $parent['right_key'],

'right_key' => $parent['right_key'] + 1,

'level' => $parent['level'] + 1

);

$node = $node + $extrafields;

list($insert_id, $tmp) = DB::insert($this->table, array_keys($node))->values(array_values($node))->execute();

DB::query(NULL, 'COMMIT')->execute();

return $insert_id;

}

public function delete($id)

{

$node = $this->getNode($id);

DB::query(NULL, 'START TRANSACTION')->execute();

// Удаляем узел (вместе с веткой)

$query =

'DELETE FROM '.Database::instance()->quote_table($this->table).'

WHERE left_key >= '.(int)$node['left_key'].' AND right_key <= '.(int)$node['right_key'];

DB::query(Database::DELETE, $query)->execute();

$width = $node['right_key'] - $node['left_key'] + 1;

// Обновление последующих узлов

$this->modifyNodes((int)$node['right_key'], -$width);

DB::query(NULL, 'COMMIT')->execute();

}

// Метод перемещает ноду $id в родительскую ноду $parentId

public function move($id, $parentId)

{

$node = $this->getNode($id);

DB::query(NULL, 'START TRANSACTION')->execute();

// Удаляем узел (вместе с веткой)

$query =

'DELETE FROM '.Database::instance()->quote_table($this->table).'

WHERE left_key >= '.(int)$node['left_key'].' AND right_key <= '.(int)$node['right_key'];

DB::query(Database::DELETE, $query)->execute();

$width = $node['right_key'] - $node['left_key'] + 1;

// Обновление последующих узлов

$this->modifyNodes((int)$node['right_key'], -$width);

//DB::query(NULL, 'COMMIT')->execute();

}

public function check($thorough=FALSE)

{

$QTblName = Database::instance()->quote_table($this->table);

// Тест 1

$query =

'SELECT id

FROM '.$QTblName.'

WHERE MOD(right_key - left_key, 2) = 0';

$result = DB::query(Database::SELECT, $query)->execute();

if (count($result) != 0)

throw new Exception('Test 1 integrity check failed.');

// Тест 2

$query =

'SELECT id

FROM '.$QTblName.'

WHERE MOD(left_key - level + 2, 2) = 0';

$result = DB::query(Database::SELECT, $query)->execute();

if (count($result) != 0)

throw new Exception('Test 2 integrity check failed.');

// Тест 3

if ($thorough)

{

$query =

'SELECT t1.id, COUNT(t1.id) AS rep, MAX(t3.right_key) AS max_right

FROM

'.$QTblName.' AS t1,

'.$QTblName.' AS t2,

'.$QTblName.' AS t3

WHERE

t1.left_key <> t2.left_key

AND

t1.left_key <> t2.right_key

AND

t1.right_key <> t2.left_key

AND

t1.right_key <> t2.right_key

GROUP BY

t1.id

HAVING

max_right <> SQRT( 4 * rep + 1 ) + 1';

$result = DB::query(Database::SELECT, $query)->execute();

if (count($result) != 0)

throw new Exception('Test 3 integrity check failed.');

}

// Тест 4, проверка level

$query =

'SELECT node.id as id, node.level as level

FROM

'.$QTblName.' AS node,

'.$QTblName.' AS parent

WHERE node.left_key BETWEEN parent.left_key AND parent.right_key

GROUP BY node.id

HAVING COUNT(parent.name) - 1 != level

ORDER BY node.left_key';

$result = DB::query(Database::SELECT, $query)->execute();

if (count($result) != 0)

throw new Exception('Test 4 integrity check failed.');

}

}

..\aplication\classes\valid.php

<?php defined('SYSPATH') or die('No direct script access.');

class Valid extends Kohana_Valid

{

public static function check_id($value, $tablename)

{

$id = (int) $value;

if (! preg_match("/^[a-z_]+$/i", $tablename)) return FALSE;

$count = DB::select(array('COUNT("*")', 'total_count'))

->from($tablename)

->where('id', '=', $id)

->execute()

->get('total_count');

if ($count != 1) return FALSE;

return TRUE;

}

}

..\aplication\classes\controller\account.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Account extends Loginverification

{

public $template = 'title';

public function action_index()

{

$data=array();

$myuser = new Model_Myuser();

$data['username'] = $myuser->displayusername(); // в поле username массива data сохранится имя текущего пользователя

if(isset($_POST['btnpassremove']))

{

$oldpass = Arr::get($_POST, 'oldpass', '');

$newpass1 = Arr::get($_POST, 'newpass1', '');

$newpass2 = Arr::get($_POST, 'newpass2', '');

if($myuser->saveNewPass($oldpass, $newpass1, $newpass2))

{

$data['ok']=''; // создание поля ok в массиве data в случае если функции saveNewPass вернулось true(1)

}

else

{

$data['errors']=$myuser->getErrors(); // создание поля errors в массиве и запись ошибок класса myuser в это поле

}

}

$this->template->content=View::factory('accountview', $data); // вывод выбранного вида и массива Data

}

}

..\aplication\classes\controller\ajax.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Ajax extends Controller {

public function action_emailunique()

{

$email = Arr::get($_POST, 'email', '');

$myuser = new Model_Myuser();

$res = $myuser->username_unique($email);

echo json_encode(array('result' => $res));

}

public function action_checkOldPass()

{

$oldpass = Arr::get($_POST, 'oldpass', ''); // передача значения поля oldpass в переменную

$myuser = new Model_Myuser(); // объявление класса Model_Myuser

$res = $myuser->checkOldPass($oldpass); // запись true или false в переменную res по результату проверки метода checkOldPass модели myuser

echo json_encode(array('result' => $res)); // вывод в формате json_encode true или false

}

}

..\aplication\classes\controller\authformer.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Authformer extends Controller_Template // контроллер управления авторизацией пользователей

//расширяется от контроллера Template (внутреннего файла инструкций Kohana)

{

public $template = 'title'; // подключение базового вида

public function action_index() // метод который будет выполнятся по умолчанию

{

$notcapture=Security::xss_clean(Arr::get($_POST, 'authbutton', '')); // берем значение нажатой кнопки входа, сделано это с главной форм ыили с быстрой формы

$captcha = Captcha::instance();

$captcha_image = $captcha->render();

$data=array(); // инициализация пустого массива

$auth = Auth::instance(); // объявление внутреннего класса авторизации

if($auth->logged_in()) // если пользователь авторизован

{

request::initial()->redirect(''); // переадресовать его на главную страницу

}

else // иначе

{

if(isset($_POST['authbutton'])) // если нажата кнопка authbutton

{

$login=Security::xss_clean(Arr::get($_POST, 'login', '')); // в переменную логин записать значение поля логин

$password=Security::xss_clean(Arr::get($_POST, 'password', '')); // в переменную пароль записать значение поля пароль

$capturenka=Captcha::valid(Security::xss_clean(Arr::get($_POST, 'captcha', '')));

if ($notcapture==" ") $capturenka=true; // если нажатие с быстрой формы входа, можно картинку не спрашивать

if(!$capturenka)

{

$data["badimagecode"]="";

}

else

{

if($auth->login($login, $password)) // проверка имени и пароля в базе данных таблицы users внутренним методом Kohana

{

$session = Session::instance(); // Создание эземпляра класса Session на основе метода Instance

$auth_redirect = $session->get('auth_redirect',''); // чтение записанного адреса(котнроллера childrenbefore)

$session->delete('auth_redirect'); // удаление сессии

Request::initial()->redirect($auth_redirect); // переадресация пользователя на страницу которую он хотел посетить до авторизации

}

else

{

$data["errors"]= ""; // если пользователь не ввел логин и пароль либо ввел но их нету в базе запистаь пустую строку в массив

}

}

}

}

$this->template->content = View::factory('authview', $data)->bind('captcha_image', $captcha_image); // вывод вида

}

public function action_logout() // функция разлогирования

{

$auth=Auth::instance(); // объявление класса авторизации

if($auth->logout()); // выполнение внутреннего метода kohana logout

{

$this->template->content="Вы вышли из системы"; // вывод в качестве контента сообщения

request::initial()->redirect(''); // передаресация на главную страницу

}

}

public function action_form()

{

//Закрываем доступ к данному методу из адресной строки

if($this->request->is_initial())

{

throw new HTTP_Exception_404('File not found!');

}

$this->auto_render = FALSE; //не использовать главный шаблон вида "title"

$auth = Auth::instance();

if($auth->logged_in())

{

$this->response->body(View::factory('formloginout'));

}

else

{

$this->response->body(View::factory('formloginin'));

}

}

public function action_reg() // функция регистрации

{

$data = array(); // инициализация пустого массива

$captcha = Captcha::instance();

$captcha_image = $captcha->render();

if(isset($_POST['regbutton'])) // елси нажата кнопка regbutton

{

$email =Security::xss_clean(Arr::get($_POST, 'email', '')); // считать значение из поля email

$password = Security::xss_clean(Arr::get($_POST, 'password', '')); // аналогично

$regcodevalue = Security::xss_clean(Arr::get($_POST, 'regcodevalue', ''));

$capturenka=Captcha::valid(Security::xss_clean(Arr::get($_POST, 'captcha', '')));

if(!$capturenka) {$data["badimagecode"]="";}

else

{

$register = new Model_Reg(); // объявление модели регистрации

if($register->reg($email, $password, $regcodevalue)) // запись в переменную результата функции reg в модели регистрации

// и отправка на вход функции введенных значений

{

$data["regok"] = ""; // елси функция вернула true создадим пустую строку в поле массива regok

}

else

{

$data["errors"] = $register-> errors; // если функция вернула ошибку валидации записать ошибку в массив

}

}

}

// $view_my_form = View::factory('v_myform')->bind('captcha_image', $captcha_image);

// $this->template->content = $view_my_form;

$this->template->content = View::factory('regview', $data)->bind('captcha_image', $captcha_image); // вывод вида regview и массива data

}

public function action_wantnewpassword()

{

$data = array();

if(isset($_POST['passubmit']))

{

$email = Security::xss_clean(Arr::get($_POST, 'email', ''));

$register = new Model_Reg();

if($register->wantnewpassword($email))

{

$data["ok"] = "";

}

else

{

$data["error"] = "";

}

}

$this->template->content = View::factory('rempassview', $data);

}

public function action_checkreg()

{

$kolan = $this->request->param('id');

$data = array();

$register = new Model_Reg();

if($register->regcomplete($kolan))

{

$data["ok"]="";

}

else

{

$data["error"]="";

}

$this->template->content = View::factory('completeregisterview', $data);

}

public function action_checkcode($code)

{

$data = array();

$register = new Model_Reg();

if($register->updatepassword($code))

{

$data["ok"]="";

}

else

{

$data["error"]="";

}

$this->template->content = View::factory('checkcodeview', $data);

}

}

..\aplication\classes\controller\category.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Category extends Childrenbefore

{

public $template = 'title';

public function action_show()

{

$url = $this->request->param('id'); // запись параметра из url

$data = array(); // инициализация пустого массива data

$tree = new Model_Tree(); // объявление экземпляра класса(model_tree)

$data['category'] = $tree->categoryInfoByUrl($url);

// использование метода categoryInfoByUrl модели tree

// метод определит идентификатор и название категории по введенной пользователем ссылке и присвоит их массиву дата

// --образуя многомерный массив--

if(!$data['category']) // проверка существования категории, если ее нету вывести ошибку 404

{

throw new HTTP_Exception_404('Запрашиваемая категория не найдена');

return;

}

$data['materials'] = $tree->contentСategoryById($data['category']['id']);

// создать поле materials и запистаь туда результат обработки метода contentСategoryById

// contentСategoryById получате значение многомерного массива=идентификатору категории(результата обработки categoryInfoByUrl)

// все материалы введенной категории записываются по описанным методам в массив data поле materials

$this->template->content = View::factory('catview', $data);

}

}

..\aplication\classes\controller\materials.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Materials extends Childrenbefore

{

public $template = 'title';

public function action_category()

{

$nametrans = $this->request->param('id'); // передача параметра из ссылки, id будет являтся название категории

// причина названия катогории как идентификатора кроется в маршрутизации Kohana файлом bootstrap

$data = array();

$category = new Model_Category('tree');

$material = new Model_Material();

$category_id = $category->getCategoryIdByUrl($nametrans);

if(!$category_id)

{

// если категории нету, то подключить класс HTTP_Exception_404, его путь использования в bootstrap(настройки)

throw new HTTP_Exception_404('Страница не найдена!');

return; // завершить выполнение функции

}

$data['materials'] = $material->getMaterialsByCategory($category_id);

$this->template->content = View::factory('materialsview', $data);

}

public function action_showcontent()

{

$data = array();

$id = $this->request->param('id'); // звпись последней части url в переменную id

$material = new Model_Material(); // создания экземпляра класса модели material

$data = $material->showMaterialById($id); // запись в массив data результата работы метода showMaterialById

//(на который передаем ид материала) модели material

if(!$data) // если дата передана false она становится true и выдает ошибку ненайденной страницы 404

{

throw new HTTP_Exception_404('Запрашиваемая статья не найдена');

return;

}

$this->template->content = View::factory('contentview', $data);

}

}

..\aplication\classes\controller\netprav.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Netprav extends Childrenbefore

{

public $template = 'title';

public function action_index()

{

$this->template->content = View::factory('dontaccess');

}

}

..\aplication\classes\controller\one.php

<?php defined('SYSPATH') or die('No direct script access.');

// контроллер загружаемый по умолчанию ONE(согласно конфигу коханы 'bootstrap') расширяется от контроллера Template(Внутренний файл инструкций Kohana)

class Controller_One extends Controller_Template

{

public $template = 'title'; // загрузка базового вида

public function action_index() // функция по умолчанию

{

$this->template->content = View::factory('titleview'); // добавление к базовому виду вида страницы titleview

}

}

..\aplication\classes\controller\page.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Page extends Childrenbefore // обычная страница, расширяется от Childrenbefore

{

public $template = 'title'; // испоьзование базового вида страницы

public function action_index() // функция выполняемая по умолчанию

{

$this->template->content = View::factory('pageview'); // вывод вида pageview, добавит вид страницы к базовому

}

}

..\aplication\classes\controller\tag.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tag extends Childrenbefore

{

public $template = 'title';

public function action_showtag()

{

$url = $this->request->param('id'); // $url присваеваем последнее слово из адреса

$data = array(); // инициализация пустого массива

$tag = new Model_Tag(); // создание экземпляра класса модели_tag

$data['tag'] = $tag->tagInfoByUrl($url); // запись в массив дата поле tag результата работы метода tagInfoByUrl

if(!$data['tag']) // елси тег не найден вывести ошибку

{

throw new HTTP_Exception_404('Запрашиваемый тег не найден!');

return;

}

// если тег найден записать в массив data поле materials результат функции contentTagById в моделе tag

$data['materials'] = $tag->contentTagById($data['tag']['id']); // на вход функции приходит найденный идентификатор тега.

// запись материалов по данному тегу в массив data c полем material и вывод в файл вида tagview

$this->template->content = View::factory('tagview', $data);

}

}

..\aplication\classes\controller\admin\edit.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Admin_Edit extends Adminverification // главный контроллер, наследуется от Adminverification

{

public $template = 'admin/title'; // основной вид страницы

public function action_index() // функция выполняемая по умолчанию index

{

$data = array(); // пустой массив

$category = new Model_Category('tree'); // соединяемся с таблицей категорий

$data['categories'] = $category->getTree(); // получаем их список

$editmatcat = new Model_Editmatcat; // подключаем модель верстки материалов

if(isset($_POST['iscategory'])) // если категория выбрана

{

unset($data['categories']); // чтоб не отображалить категории когда материал уже выбран

$categoryId = Arr::get($_POST, 'SelectCat', ''); // записать ее идентификатор

if($data['matnames'] = $editmatcat->ShowMatNameList($categoryId)); // вывести имена материалов принадлежащих этой категории

}

if(isset($_POST['delcategory'])) // если категория выбрана

{

$categoryId = Security::xss_clean(Arr::get($_POST, 'SelectCat', '')); // записать ее идентификатор

if(($categoryId == "1")and($categoryId == "-1")and($categoryId == ";")and($categoryId == "all")) {$data["main"]="";}

else

{

if($editmatcat->Delmatsfromcategory($categoryId));

Request::initial()->redirect("admin/edit");

}

}

if(isset($_POST['delmaterial'])) // если категория выбрана

{

$SelectMat = Security::xss_clean(Arr::get($_POST, 'SelectMat', '')); // записать ее идентификатор

$midtemp = ORM::factory('material', array('name'=>$SelectMat)); // наследует ОРМ связь с таблицей материал и вынимаем строчку этого материала

$mid = $midtemp->id;

if(($mid == "1")and($mid == "-1")and($mid == ";")and($mid == "all")) {$data["mainm"]="";}

else

{

if($editmatcat->Delmat($mid));

Request::initial()->redirect("admin/edit");

}

}

if(isset($_POST['ismaterial'])) // если материал выбран

{

unset($data['categories']); // чтоб не отображалить категории когда материал уже выбран

$SelectMat = Arr::get($_POST, 'SelectMat', ''); // вынимаем из селекта русское имя материала

$midtemp = ORM::factory('material', array('name'=>$SelectMat)); // наследует ОРМ связь с таблицей материал и вынимаем строчку этого материала

$mid = $midtemp->id;

Request::initial()->redirect("admin/edit/rewrite/$mid");

//$data['content'] = $editmatcat-Show($categoryId,$SelectMat);

//if($editmatcat->)

}

$this->template->content = View::factory('admin/editview', $data);

}

public function action_rewrite()

{

$mid = Security::xss_clean($this->request->param('id'));

$data = array();

$midtemp = ORM::factory('material', array('id'=>$mid));

$data['mn'] = $midtemp->name; // возьмем имя материала

$data['textik'] = $midtemp->content; // и его текстовое содержание

if(isset($_POST['savem']))

{

$newname = Arr::get($_POST, 'mn', '');

$newtextik = Arr::get($_POST, 'content', '');

if(!$midtemp->loaded())

{

return FALSE;

}

$midtemp->name = $newname;

$midtemp->content =$newtextik;

$midtemp->save();

Request::initial()->redirect("admin/edit");

}

$this->template->content = View::factory('admin/editview', $data);

}

}

..\aplication\classes\controller\admin\one.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Admin_One extends Adminverification // главный контроллер, наследуется от Adminverification

{

public $template = 'admin/title'; // основной вид страницы

public function action_index() // функция выполняемая по умолчанию index

{

$category = new Model_Category('tree');

$data['categories'] = $category->getTree();

if(isset($_POST['addcategory']))

{

$categoryName = html::chars( Arr::get($_POST, 'categoryName', ''), false);

$parentId = Arr::get($_POST, 'parentId', '');

$res = $category->catInsert($parentId, array('name'=>$categoryName));

if($res)

{

Request::initial()->redirect('admin');

}

else

{

$data['errors'] = $category->getErrors();

}

}

if(isset($_POST['materialsavebtn'])) // если нажата кнопка materialsavebtn

{

$categoryId = Arr::get($_POST, 'categoryId', ''); // выбранную категорию записать в переменную $categoryId

$content = Arr::get($_POST, 'content', ''); // а содержание текстового поля в $content

$materialname = html::chars(Arr::get($_POST, 'materialname', ''), false);

$tags = html::chars( Arr::get($_POST, 'tagnames', ''), false);

$tagnames = explode(",", $tags); // разбить строку на массив используя запятые

// пример string=one,two,three;

// result[0]=one; result[1]=two; result[2]=three;

//html::chars ($string, false); фильтрация от html тегов в поле

$namevalid = new Model_Namevalid;

if($resu=$namevalid->MatNameValid($materialname)) // если имя материала введено

{

if($resu=$namevalid->TagNameValid($tags))

{

$material = ORM::factory('material'); // то добавим его в базу данных в таблицу materials

$material->addMaterial($categoryId, $content, $materialname);

$matid=$material->ShowIdFromAddMaterial($materialname); // получим идентификтаор добавленного материала

$result = count($tagnames);

for ($x=0; $x<$result;)

{

$tag = new Model_Tag;

$name=$tagnames[$x];

$tag->tagadd($matid, $name);

unset($name);

$x++;

}

Request::initial()->redirect('admin');

}

else

{

$data['errors']=$namevalid->getErrors();

}

// пошлем идентификатор и введенный тег к материалу функции сохранения их в теговые таблицы

// переадрисуем обратно в админку

}

else

{

$data['errors']=$namevalid->getErrors(); // обработка ошибок в имени материала

}

}

$this->template->content = View::factory('admin/adminview', $data);

}

}

..\aplication\classes\controller\admin\users.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Admin_Users extends Adminverification // главный контроллер, наследуется от Adminverification

{

public $template = 'admin/title'; // основной вид страницы

public function action_index() // функция выполняемая по умолчанию index

{

$data=array();

$Searchuser = new Model_Searchuser();

if(isset($_POST['SearchGo']))

{

$SearchUsername = Security::xss_clean(Arr::get($_POST, 'username', ''));

if($names=$Searchuser->find($SearchUsername)and($SearchUsername<>""))

{

$data['name']= $names;

$data['findok'] = "";

}

else

{

$data["findno"] = "";

}

}

$data['usercount']=$Searchuser->usercount();

$data['admincount']=$Searchuser->admincount();

$this->template->content = View::factory('admin/usersview', $data);

}

}

..\aplication\classes\model\addrole.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Addrole extends ORM

{

protected $_table_name = 'roles_users';

}

..\aplication\classes\model\category.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Category

{

protected $nstree;

protected $tableName;

protected $errors = array();

public function __construct($tableName)

{

$this->nstree = new NSTree($tableName);

$this->tableName = $tableName;

}

public function getTree()

{

return $this->nstree->getTree();

}

public function catInsert($parentId, $data = array())

{

$data = Arr::extract($data, array('name'));

$text=$data['name'];

$generation = new Model_Generation;

$data['nametrans']=$generation->TanslitGeneration($text);

$vData = $data;

$vData['parentId'] = $parentId;

$nametrans=$data['nametrans'];

$validation = Validation::factory($vData);

$validation->rule('name', 'not_empty');

$validation->rule('name', 'regex', array(':value', '/^[A-я0-9]++$/iD'));

$validation->rule('name', 'min_length', array(':value', '3'));

$validation->rule('name', 'max_length', array(':value', '200'));

$validation->rule('parentId', 'check_id', array(':value', $this->tableName));

$validation->rule('nametrans', array($this, 'unique_url'));

if(!$validation->check())

{

$this->errors = $validation->errors('catErrors');

return FALSE;

}

// Транслит для правильного исопльзования в url

$this->nstree->insert($parentId, $data);

return TRUE;

}

public function getErrors()

{

return $this->errors;

}

public function unique_url($nametrans)

{

return ! DB::select(array(DB::expr('COUNT(nametrans)'), 'total'))

->from($this->tableName)

->where('nametrans', '=', $nametrans)

->execute()

->get('total');

}

public function getCategoryIdByUrl($nametrans)

{

$data = DB::select('id')

->from($this->tableName)

->where('nametrans', '=', $nametrans)

->execute()

->current();

if(!isset($data['id'])) return FALSE;

return $data['id'];

}

}

..\aplication\classes\model\editmatcat.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Editmatcat

{

public function Delmatsfromcategory($categoryId)

{

$query = DB::delete('materials')

->where('category_id', '=', $categoryId);

$result = $query->as_object()->execute();

$query = DB::delete('tree')

->where('id', '=', $categoryId);

$result = $query->as_object()->execute();

return true;

}

public function Delmat($mid)

{

$query = DB::delete('materials')

->where('id', '=', $mid);

$result = $query->as_object()->execute();

return true;

}

public function ShowMatNameList($category_id)

{

$query = DB::select('name')

->from('materials')

->where('category_id', '=', $category_id);

$result = $query->execute()->as_array();

return $result;

}

}

..\aplication\classes\model\generation.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Generation

{

public function PasswordGeneration ($symbols)//кол-во символов в пароле

{

$arr = array('a','b','c','d','e','f',

'g','h','i','j','k','l',

'w','q','s','n','o','v',

't','u','m','x','y','z',

'A','B','C','D','E','F',

'G','H','I','J','K','L',

'W','Q','M','P','R','S',

'U','T','V','I','Y','Z',

'0','2','6','4','5','3',

'7','8','9','1');

//генерируем пасс

$pass = "";

for($a=0; $a<$symbols; $a++)

{

//вычисляем случайный индекс массива

$index = rand(0, count($arr) - 1);

$pass.= $arr[$index];

}

return $pass;

}

public function TanslitGeneration($str)

{

$arr = array(

"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",

"Д"=>"D","Е"=>"E","Ё"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",

"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",

"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",

"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",

"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",

"Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",

"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",

"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",

"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",

"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",

"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",

"ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"

);

return strtr($str,$arr);

}

}

..\aplication\classes\model\material.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Material extends ORM // работает с таблицей Materials поскольку метод ORM всегда добавляет в конце букву s.

{protected $_created_column = array('column' => 'createtime', 'format' => TRUE); // внутренний метод kohana

protected $_updated_column = array('column' => 'modtime', 'format' => TRUE); // добавляет в поля время изменения, редактирования

protected $_belongs_to = array( // связь -один к одному- // внутренняя функция kohana // отвечает за то, какой параметр с чем связан с бд

'tree' => array( // название поля --таблицы А--

// 'model' => 'tree', // название связываемой модели()если совпадает с названием массива, то можно не писать строчку)

'foreign_key' => 'category_id', // название связующего поля --таблицы Б--

), );

protected $_has_many = array(

'tag'=>array(

'through'=>'tags_materials', // связь -многие ко многим-

// идентификаторы таблицы tags с tags_id таблицы tags_materials

// не указываются поскольку кохана понимает говорящие названия данных полей

),

);

public function getMaterialsByCategory($category_id)

{

return DB::select()

->from('materials')

->where('category_id', '=', $category_id)

->execute()

->as_array();

}

public function addMaterial($categoryId, $content, $materialname) // получение выбранной категории и введенного контента(текста)

{

$this->category_id = $categoryId;

$this->content = Security::xss_clean($content);

$this->name = Security::xss_clean($materialname); // Security::xss_clean вырежит из содержимого все javascript'ы

// с помощью подключенного модуля purifier(внешняя библиотека)

$this->save(); // запись в базу идентификатора и контента

}

public function ShowIdFromAddMaterial($materialname)

{

$id = ORM::factory('material', array('name'=>$materialname)); // загрузка строки из бд где id = записанному в переменную $userId

$materialname=$id->id; // запишем в переменную $materialname идентификатор найденной строчки только что сохданного материала

return $materialname; // вернем идентификатор в качестве результата функции

}

public function showMaterialById($id) // нам приходит url пользователя(ид материала)

{

$material = ORM::factory('material', array('id'=>$id)); // создание экземпляра класса material для работы с бд (таблица materials)

// ищется и записывается строка с переданным идентификатором

if($material->loaded()) // проверка загруженна ли строка вообще

{

$res = $material->tag->find_all(); // создать массив res в который запистаь действие метода find_all над дополнительным полем tag

foreach($res as $item)

{

$taginfo[] = array('name' => $item->name); // с каждой итерацией цикла записываем

// в массив $taginfo с полями 1,2,...n имена наших материалов

}

$result['content'] = $material->content; // в массив result поле контент записать контент таблицы materials по найденному идентификатору

$result['name'] = $material->name; // аналогично

$result['category'] = $material->tree->name; // получаем доступ к таблице трии и берем от туда название категории с текущим идентификтаором

$result['tag'] = $taginfo; // запись массива taginfo в массив result с полем tag получается многомерный массив

// поля массива $result станут полями массива $data(только если дата не имела полей до этого)

return $result; // функция вернет значения массива result

}

else // если нет, то возвращаем false и заверщаем функцию

{

return FALSE;

}

}

}

..\aplication\classes\model\myuser.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Myuser extends ORM

{

protected $_table_name = 'users';

protected $errors=array(); // защищенное свойство доступ только у наследников

public function rules()

{

return array(

'password' => array(

array('not_empty'),

array('min_length', array(':value', 7)),

),

'username' => array(

array('not_empty'),

array('min_length', array(':value', 8)),

array('max_length', array(':value', 80)),

array('email'),

array(array($this, 'username_unique')),

),

);

}

public function username_unique($username)

{

$db = Database::instance();

if ($this->id)

{

$query =

'SELECT id

FROM users

WHERE id != '.$this->id.' AND username = '.$db->escape($username);

}

else

{

$query =

'SELECT id

FROM users

WHERE username = '.$db->escape($username);

}

$result = $db->query(Database::SELECT, $query, FALSE)->as_array();

if (count($result) > 0)

{

return FALSE;

}

else

{

return TRUE;

}

}

public function displayusername() // возвращает --имя пользователя-- по методу сравнения с его идентификатором

{

$auth = Auth::instance(); // объявление класса авторизации

$userId = $auth->get_user(); // get_user возвращает идентификатор авторизованного пользователя

$usertemp = ORM::factory('myuser', array('id'=>$userId)); // загрузка строки из бд где id = записанному в переменную $userId

return $usertemp->username; // из этой строки берем имя пользователя

}

public function checkOldPass($oldpass) // проверяет введенный в поле пароль с оригиналом вернет --true или false--

{

$auth = Auth::instance(); // объявление класса авторизации

return $auth->check_password($oldpass); // функция check_password(внутренний метод Kohana) получает введенный пароль и сверяет его с паролем в базе у текущего пользователя

}

public function saveNewPass($oldpass, $newpass1, $newpass2)

{

$vData = array("oldpass" => $oldpass, "newpass1" => $newpass1, "newpass2" => $newpass2,); //(для удобства ассоциативен) записываем введенные пароли (старый и новые в массив)

// массив нужен для использования внутреннего метода kohana валидации полей и значений

$validation = Validation::factory($vData); // создание экземпляра класса валидации Kohana и на его вход передается наш ассоциативный массив

$validation->rule('oldpass', 'not_empty'); // внутренняя функция Kohana не дающаяя полю быть пустым

$validation->rule('oldpass', 'alpha_numeric'); // внутренняя функция Kohana допускает только цифры и англ буквы

$validation->rule('oldpass', array($this, 'checkOldPass')); // введенное в поле значение будет отправлено методу checkOldPass выше

$validation->rule('newpass1', 'not_empty');

$validation->rule('newpass1', 'regex', array(':value', '/^[A-z0-9_]++$/iD'));

$validation->rule('newpass1', 'matches', array(':validation', 'newpass1', 'newpass2')); // сравнение newpass1 и newpass2 на идентичность

$validation->rule('newpass1', 'min_length', array(':value', '7'));

$validation->rule('newpass1', 'max_length', array(':value', '16'));

if(!$validation->check()) // запуск внуртеннего метода проверки валидации. Если ошибочно вернет false и превратится в true

{

$this->errors = $validation->errors('catErrors'); // у текущего класса(myuser) в свойство errors (объявлено выше) записываются ошибки по причине которых не прошла валидация

return FALSE; // вернет методу saveNewPass тем самым завершит выполнение

}

$auth = Auth::instance(); // действие описано в комментариях метода displayusername

$userId = $auth->get_user();

$usertemp = ORM::factory('myuser', array('id'=>$userId)); // поиск пользователя с текущим идентификатором

$usertemp->password = $auth->hash_password($newpass1); // запись на место его пароля нового в зашифрованном виде

$usertemp->save(); // сохранение действия записи

return TRUE; // прекращение выполнения функции и передача ей true(1)

}

public function getErrors()

{

return $this->errors; // вовращении функции существующих ошибок в model Myuser

}

}

..\aplication\classes\model\namevalid.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Namevalid

{

protected $errors=array();

public function MatNameValid($materialname)

{

$vData = array("materialname" => $materialname,);

$validation = Validation::factory($vData);

$validation->rule('materialname', 'not_empty');

$validation->rule('materialname', 'min_length', array(':value', '3'));

$validation->rule('materialname', 'max_length', array(':value', '20'));

if(!$validation->check())

{

$this->errors = $validation->errors('addmatErrors');

return FALSE;

}

return TRUE;

}

public function TagNameValid($tags)

{

$vData = array("tags" => $tags,);

$validation = Validation::factory($vData);

$validation->rule('tags', 'not_empty');

if(!$validation->check())

{

$this->errors = $validation->errors('addmatErrors');

return FALSE;

}

return TRUE;

}

public function getErrors()

{return $this->errors;}}

..\aplication\classes\model\reg.php

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Reg

{

public function getErrors() // функция обработки ошибок валидации

{

return $this->errors; // функция вернет записанную ошибку

}

public function reg($email, $password, $regcodevalue, $data = array()) // получаем введенные значения и пустой массив

{

$data['password'] = $password; // в массив data поле пароля записываем введенный пароль

$data = Arr::extract($data, array('password')); // извлекаем пароль из массива

$validation = Validation::factory($data); // объявляем метод вализации переменной data

$validation->rule('password', 'not_empty');

$validation->rule('password', 'regex', array(':value', '/^[A-z0-9_]++$/iD'));

$validation->rule('password', 'min_length', array(':value', '7'));

$validation->rule('password', 'max_length', array(':value', '16'));

if(!$validation->check())

{

$this->errors = $validation->errors('catErrors');

return FALSE;

}

$regcode = new Model_Regcode();

$myuser = new Model_Myuser();

$regcode->code = $regcodevalue;

try

{

$regcode->check(); // метод чек проверяет параметры на правила

}

catch(ORM_Validation_Exception $e)

{

$this->errors = $e->errors('validation');

return FALSE;

}

// создание пользователя

$myuser->username = $email;

$myuser->email = $email;

// берем сгенерированный пароль в размере 16 символов

$generation = new Model_Generation();


Подобные документы

  • Обзор существующих решений и обоснование выбора языка программирования. Разработка структурной схемы, интерфейса программного продукта. Технические требования к оборудованию, тест программного продукта, руководство системного программиста и оператора.

    дипломная работа [2,0 M], добавлен 10.07.2012

  • Техническое задание на разработку программного продукта и требования к программе. Написание алгоритма работы и разработка интерфейса программы. Руководство системного программиста и оператора. Основные методы и принципы тестирования базы данных.

    дипломная работа [2,7 M], добавлен 27.01.2013

  • Проектирование программного обеспечения для классифицирования выпускников высшего учебного заведения. Выбор системы управления базами данных и языка программирования. Разработка структуры данных, схема базы данных. Реализация программного комплекса.

    дипломная работа [2,4 M], добавлен 27.03.2013

  • Функциональная структура приложения. Спецификация и структурная диаграмма программного комплекса. Блок-схемы алгоритмов ряда модулей. Данные для тестирования программных модулей и программного комплекса в целом, инструкция пользователя по работе с ним.

    курсовая работа [58,5 K], добавлен 25.02.2012

  • Обзор систем управления сайтом, регистрации и отслеживания ошибок. Создание проекта "Senet" в системе регистрации и отслеживания проблем Mantis. Расчет затрат на разработку и эксплуатацию программного обеспечения. Охрана труда и техника безопасности.

    дипломная работа [1,7 M], добавлен 24.06.2015

  • Методика и этапы проектирования ядра системы управления сайтом с помощью среды Zend Studio 8. Разработка обработчиков событий, для управления этой системой. Создание каскадных таблиц стилей для оформления панели администрирования с помощью Notepad++.

    дипломная работа [4,6 M], добавлен 30.06.2011

  • Исследование организационной структуры ООО "Трансэнергосервис". Обзор методологий проектирования интернет-представительства. Инструментальные средства разработки и реализации системы управления сайтом: разработка интерфейса пользователя и web-сайта.

    дипломная работа [1,7 M], добавлен 10.08.2014

  • Обоснование выбора программно-технических средств. Надежность программы и состав технических средств. Разработка структурной схемы программы, алгоритмического и программного интерфейса. Технология разработки интерфейса пользователя и программных модулей.

    дипломная работа [3,2 M], добавлен 22.01.2013

  • Описание алгоритмов работы программного блока, тестирования, сохранения результатов, просмотра статистики и построения графика. Разработка пользовательского интерфейса. Анализ тестовых испытаний программного блока. Руководство оператора. Охрана труда.

    дипломная работа [4,4 M], добавлен 06.03.2013

  • Программный комплекс автоматизации телефонных соединений. Разработка графического интерфейса пользователя, технологической инструкции для пользователя программы, контроля и аттестации программ. Расчет затрат при автоматизации телефонных соединений.

    дипломная работа [4,7 M], добавлен 15.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.