From aa91c1e3746c5546b645d100519f2ec875492356 Mon Sep 17 00:00:00 2001 From: PavelBegunkov <asml.Silence@gmail.com> Date: Tue, 9 Jun 2015 12:33:30 +0300 Subject: [PATCH] model account: static methods --- ~dev_rating/application/classes/Account.php | 32 +++++------ .../application/classes/Model/Account.php | 55 ++++++++----------- ~dev_rating/application/classes/User.php | 32 +++++------ 3 files changed, 54 insertions(+), 65 deletions(-) diff --git a/~dev_rating/application/classes/Account.php b/~dev_rating/application/classes/Account.php index fcf48e90e..3f5b660d3 100644 --- a/~dev_rating/application/classes/Account.php +++ b/~dev_rating/application/classes/Account.php @@ -45,7 +45,6 @@ class Account { protected static $_instance; protected $_config; - protected $_model; /** * Вовзращает экземпляр класса (singleton-паттерн) @@ -61,7 +60,6 @@ class Account { private function __construct($config = array()) { $this->_config = $config; - $this->_model = new Model_Account; } private function generateActivationCode() { @@ -71,30 +69,30 @@ class Account { public function createTeacher($lastName, $firstName, $secondName, $degreeID, $departmentID) { $code = $this->generateActivationCode(); - $response = $this->_model->createTeacher($lastName, $firstName, $secondName, $degreeID, $departmentID, $code); + $response = Model_Account::createTeacher($lastName, $firstName, $secondName, $degreeID, $departmentID, $code); return $response == -1 ? -1 : $code; } public function createTeacherByDepName($lastName, $firstName, $secondName, $departmentName, $facultyID) { $code = $this->generateActivationCode(); - $response = $this->_model->createTeacherByDepName($lastName, $firstName, $secondName, $departmentName, $facultyID, $code); + $response = Model_Account::createTeacherByDepName($lastName, $firstName, $secondName, $departmentName, $facultyID, $code); return $response == -1 ? -1 : $code; } public function createStudent($lastName, $firstName, $secondName, $grade, $groupNum, $facultyID) { $code = $this->generateActivationCode(); - $response = $this->_model->createStudent($lastName, $firstName, $secondName, $grade, $groupNum, $facultyID, $code); + $response = Model_Account::createStudent($lastName, $firstName, $secondName, $grade, $groupNum, $facultyID, $code); return $response == -1 ? -1 : $code; } public function createStudentEx($lastName, $firstName, $secondName, $grade, $groupNum, $degree, $spec, $facultyID) { $code = $this->generateActivationCode(); - $response = $this->_model->createStudentEx($lastName, $firstName, $secondName, $grade, $groupNum, $degree, $spec, $facultyID, $code); + $response = Model_Account::createStudentEx($lastName, $firstName, $secondName, $grade, $groupNum, $degree, $spec, $facultyID, $code); return $response == -1 ? -1 : $code; } public function createSubject($name, $abbr, $facultyID) { - return $this->_model->createSubject($name, $abbr, $facultyID); + return Model_Account::createSubject($name, $abbr, $facultyID); } private function checkTokenLifetime($creationDate) { @@ -104,7 +102,7 @@ class Account { } public function checkToken($token) { - $recovery = $this->_model->getRecoveryInfoByToken($token)[0]; + $recovery = Model_Account::getRecoveryInfoByToken($token)[0]; $response = true; if ($recovery['isUsed']) { @@ -112,7 +110,7 @@ class Account { } else { $date = strtotime($recovery['Date']); if ($this->checkTokenLifetime($date)) { - $this->_model->useRecoveryToken($recovery['Token']); + Model_Account::useRecoveryToken($recovery['Token']); $response = false; } } @@ -122,7 +120,7 @@ class Account { public function createRecoveryRequest($email) { $requestToken = sha1($email.time().Cookie::$salt); - $UserFullName = $this->_model->createRecoveryToken($email, $requestToken); + $UserFullName = Model_Account::createRecoveryToken($email, $requestToken); if (!$UserFullName) { throw HTTP_Exception::factory(403, 'Пользователь с таким e-mail адресом не зарегистрирован в системе!'); } @@ -147,33 +145,33 @@ class Account { } public function changePasswordByToken($token, $password) { - $recovery = $this->_model->getRecoveryInfoByToken($token)[0]; + $recovery = Model_Account::getRecoveryInfoByToken($token)[0]; $this->changePassword($recovery['AccountID'], $password); - $this->_model->useRecoveryToken($token); + Model_Account::useRecoveryToken($token); } public function loginExists($login) { - $login_count = $this->_model->getAccNumByLogin($login); + $login_count = Model_Account::getAccNumByLogin($login); return $login_count > 0; } public function mailExists($email) { - $email_count = $this->_model->getAccNumByMail($email); + $email_count = Model_Account::getAccNumByMail($email); return $email_count > 0; } public function changeLogin($id, $newLogin) { - $response = $this->_model->changeLogin($id, $newLogin); + $response = Model_Account::changeLogin($id, $newLogin); return $response != -1; } public function changeEMail($id, $newEMail) { - $response = $this->_model->changeMail($id, $newEMail); + $response = Model_Account::changeMail($id, $newEMail); return $response != -1; } public function changePassword($id, $newPassword) { - $response = $this->_model->changePassword($id, $newPassword); + $response = Model_Account::changePassword($id, $newPassword); return $response != -1; } } \ No newline at end of file diff --git a/~dev_rating/application/classes/Model/Account.php b/~dev_rating/application/classes/Model/Account.php index 87607624c..321c78c4b 100644 --- a/~dev_rating/application/classes/Model/Account.php +++ b/~dev_rating/application/classes/Model/Account.php @@ -2,7 +2,7 @@ class Model_Account extends Model { - public function setHashKey($key) + public static function setHashKey($key) { $key = Database::instance()->escape($key); $sql = "SELECT `SetSettings`('HashKey', '', $key) AS `Key`;"; @@ -10,14 +10,14 @@ class Model_Account extends Model return $res->get('Key'); } - public function getHashKey() + public static function getHashKey() { $sql = "CALL `GetSettings`('HashKey');"; $key = DB::query(Database::SELECT, $sql)->execute(); return $key->get('ValS'); } - public function getMaintenanceInfo() + public static function getMaintenanceInfo() { $sql = "CALL `GetSettings`('maintenance_active');"; $key = DB::query(Database::SELECT, $sql)->execute(); @@ -28,7 +28,7 @@ class Model_Account extends Model return $result; } - public function checkAuth($login, $password) { + public static function checkAuth($login, $password) { $db = Database::instance(); $login = $db->escape($login); $password = $db->escape($password); @@ -38,8 +38,7 @@ class Model_Account extends Model } - public function ChangeTeacherInfo($id, $lastName, $firstName, $secondName, $degreeID, $departmentID) - + public static function ChangeTeacherInfo($id, $lastName, $firstName, $secondName, $degreeID, $departmentID) { $db = Database::instance(); $lastName = $db->escape($lastName); @@ -51,7 +50,7 @@ class Model_Account extends Model } - public function createTeacher($lastName, $firstName, $secondName, $degreeID, $departmentID, $activationCode) + public static function createTeacher($lastName, $firstName, $secondName, $degreeID, $departmentID, $activationCode) { $db = Database::instance(); $lastName = $db->escape($lastName); @@ -64,7 +63,7 @@ class Model_Account extends Model } - public function createTeacherByDepName($lastName, $firstName, $secondName, $departmentID, $facultyID, $activationCode) + public static function createTeacherByDepName($lastName, $firstName, $secondName, $departmentID, $facultyID, $activationCode) { if ($departmentID == '') { return -1; @@ -81,7 +80,7 @@ class Model_Account extends Model return $key->get('UserID'); } - public function createStudent($lastName, $firstName, $secondName, $grade, $groupNum, $facultyID, $activationCode) + public static function createStudent($lastName, $firstName, $secondName, $grade, $groupNum, $facultyID, $activationCode) { $db = Database::instance(); $lastName = $db->escape($lastName); @@ -93,7 +92,7 @@ class Model_Account extends Model return $key->get('UserID'); } - public function createStudentEx($lastName, $firstName, $secondName, $gradeNum, $groupNum, $degree, $specialization, $facultyID, $activationCode) + public static function createStudentEx($lastName, $firstName, $secondName, $gradeNum, $groupNum, $degree, $specialization, $facultyID, $activationCode) { $db = Database::instance(); $lastName = $db->escape($lastName); @@ -107,7 +106,7 @@ class Model_Account extends Model return $key->get('UserID'); } - public function createSubject($name, $abbr, $facultyID) + public static function createSubject($name, $abbr, $facultyID) { $db = Database::instance(); $name = $db->escape($name); @@ -131,7 +130,7 @@ class Model_Account extends Model return $query[0]; } - public function changeMail($id, $mail) + public static function changeMail($id, $mail) { $mail = Database::instance()->escape($mail); $sql = "SELECT `ChangeAccountData`('$id', $mail, 'email') AS Num;"; @@ -139,7 +138,7 @@ class Model_Account extends Model return $query->get('Num'); } - public function changeLogin($id, $login) + public static function changeLogin($id, $login) { $login = Database::instance()->escape($login); $sql = "SELECT `ChangeAccountData`('$id', $login, 'login') AS Num;"; @@ -147,7 +146,7 @@ class Model_Account extends Model return $query->get('Num'); } - public function changePassword($id, $password) + public static function changePassword($id, $password) { $password = Database::instance()->escape($password); $sql = "SELECT `ChangeAccountData`('$id', $password, 'password') AS Num;"; @@ -155,7 +154,7 @@ class Model_Account extends Model return $query->get('Num'); } - public function getAccNumByLogin($login) + public static function getAccNumByLogin($login) { $login = Database::instance()->escape($login); $sql = "SELECT `CheckAccountExistence`($login, 'login') AS Num;"; @@ -163,7 +162,7 @@ class Model_Account extends Model return $res->get('Num'); } - public function getAccNumByMail($email) + public static function getAccNumByMail($email) { $email = Database::instance()->escape($email); $sql = "SELECT `CheckAccountExistence`($email, 'email') AS Num;"; @@ -171,7 +170,7 @@ class Model_Account extends Model return $res->get('Num'); } - public function isActivationCodeValid($code) + public static function isActivationCodeValid($code) { $code = Database::instance()->escape($code); $sql = "SELECT `CheckAccountExistence`($code, 'code') AS Num;"; @@ -181,7 +180,7 @@ class Model_Account extends Model return $count == 1; } - public function createRecoveryToken($email, $token) + public static function createRecoveryToken($email, $token) { $db = Database::instance(); $email = $db->escape($email); @@ -191,7 +190,7 @@ class Model_Account extends Model return $res->get('UserName'); } - public function getRecoveryInfoByEMail($email) + public static function getRecoveryInfoByEMail($email) { $email = Database::instance()->escape($email); $sql = "CALL GetRecoveryInfoByEMail($email);"; @@ -199,7 +198,7 @@ class Model_Account extends Model return $query; } - public function getRecoveryInfoByToken($token) + public static function getRecoveryInfoByToken($token) { $token = Database::instance()->escape($token); $sql = "CALL GetRecoveryInfoByToken($token);"; @@ -207,7 +206,7 @@ class Model_Account extends Model return $query; } - public function useRecoveryToken($token) + public static function useRecoveryToken($token) { $token = Database::instance()->escape($token); $sql = "SELECT `UseRecoveryToken`($token) AS Num;"; @@ -215,7 +214,7 @@ class Model_Account extends Model return $email->get('Num'); } - public function activateAccount($login, $password, $email, $code) + public static function activateAccount($login, $password, $email, $code) { $db = Database::instance(); $login = $db->escape($login); @@ -224,20 +223,14 @@ class Model_Account extends Model $code = $db->escape($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; + return $res->get('Num'); } - public function getCurSemesterID() { + public static function getCurSemesterID() { $sql = "CALL `GetSettings`('SemesterID');"; $res = DB::query(Database::SELECT, $sql)->execute(); $id = null; - foreach ($res as $value) { - $id = $value['Val']; - } - return $id; + return $res->get('Val'); } } \ No newline at end of file diff --git a/~dev_rating/application/classes/User.php b/~dev_rating/application/classes/User.php index 181fe2902..f034f4f46 100644 --- a/~dev_rating/application/classes/User.php +++ b/~dev_rating/application/classes/User.php @@ -33,7 +33,6 @@ class User implements ArrayAccess protected static $_instance; protected $_session; protected $_config; - protected $_model; protected $_userInfo; protected static $_flag; @@ -55,14 +54,13 @@ class User implements ArrayAccess $this->_config = $config; $this->_session = Session::instance(); - $this->_model = new Model_Account; - $this->_config['hash_key'] = $this->_model->getHashKey(); + $this->_config['hash_key'] = Model_Account::getHashKey(); $this->_config['hash_method'] = 'sha256'; $isSignedIn = $this->isSignedIn(); if ($isSignedIn) { $id = $this->_session->get('ID'); - $this->_userInfo = $this->getInfoFromDB($id, $this->_model->getCurSemesterID()); + $this->_userInfo = $this->getInfoFromDB($id, Model_Account::getCurSemesterID()); if (self::$_flag != true) { $this->_session->regenerate(); @@ -117,7 +115,7 @@ class User implements ArrayAccess * и false, если данные являются некорректными. */ public function signIn($login, $password) { - $id = (int)$this->_model->checkAuth($login, $password); + $id = (int)Model_Account::checkAuth($login, $password); if ($id === -1) { return false; } else { @@ -131,7 +129,7 @@ class User implements ArrayAccess $passwordHash = $this->hash($passhash . $this->_config['hash_key']); Cookie::set('userhash', $passwordHash); - $semester = $this->_model->getCurSemesterID(); + $semester = Model_Account::getCurSemesterID(); $this->_userInfo = $this->getInfoFromDB($id, $semester); $this->_session->regenerate(); $this->_session->set('ID', $id); @@ -210,7 +208,7 @@ class User implements ArrayAccess if (!$this->checkPassword($old)) return false; - $this->_model->changePassword($this->ID, $new); + Model_Account::changePassword($this->ID, $new); $passhash = $this->hash($this->hash($new) . $this->_config['hash_key']); $this->_session->set('PasswordHash', $passhash); Cookie::set('userhash', $passhash); @@ -221,7 +219,7 @@ class User implements ArrayAccess if (!$this->isSignedIn() || Account::instance()->loginExists($login)) return false; - $this->_model->changeLogin($this->ID, $login); + Model_Account::changeLogin($this->ID, $login); return true; } @@ -238,7 +236,7 @@ class User implements ArrayAccess public function completeChangeMail($token) { $email = $this->_session->get('NewMail_Adress'); if ($token == $this->_session->get('NewMail_Token') AND !Account::instance()->mailExists($email)) { - $this->_model->changeMail($this->ID, $email); + Model_Account::changeMail($this->ID, $email); return true; } else { return false; @@ -247,7 +245,7 @@ class User implements ArrayAccess public function changeProfile($data) { if ($this->Type == 'teacher') { - $this->_model->ChangeTeacherInfo($this['TeacherID'], $data['lastName'], $data['firstName'], $data['secondName'], $data['jobPositionID'], $data['departmentID']); + Model_Account::ChangeTeacherInfo($this['TeacherID'], $data['lastName'], $data['firstName'], $data['secondName'], $data['jobPositionID'], $data['departmentID']); } } @@ -268,8 +266,8 @@ class User implements ArrayAccess } private function getInfoFromDB($id, $semesterID) { - $info = $this->_model->getPersonalInfo($id, $semesterID); - $info += $this->_model->getAccountInfo($id); + $info = Model_Account::getPersonalInfo($id, $semesterID); + $info += Model_Account::getAccountInfo($id); return $info; } @@ -284,19 +282,19 @@ class User implements ArrayAccess } public function offsetSet($offset, $value) { - if (array_key_exists($offset, $this->_userInfo)) { + if ($this->_userInfo && array_key_exists($offset, $this->_userInfo)) { $this->_userInfo[$offset] = $value; } elseif (isset($offset, $this->_session)) { $this->_session[$offset] = $value; - } else { + } else { // TODO: _userInfo may be null $this->_userInfo[$offset] = $value; } } public function offsetGet($offset) { - if (array_key_exists($offset, $this->_userInfo)) + if ($this->_userInfo && array_key_exists($offset, $this->_userInfo)) return $this->_userInfo[$offset]; - if (isset($offset, $this->_session)) + else if (isset($offset, $this->_session)) return $this->_session[$offset]; throw new ErrorException('No such field'); @@ -322,7 +320,7 @@ class User implements ArrayAccess protected function hash($str) { if (!$this->_config['hash_key']) { $this->_config['hash_key'] = $key = md5(time() . Request::$client_ip); - $this->_model->setHashKey($key); + Model_Account::setHashKey($key); } return hash_hmac($this->_config['hash_method'], $str, $this->_config['hash_key']); } -- GitLab