.\aplication\classes\model\material.php
.. \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 } }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|