Skip to content
Snippets Groups Projects
Commit aa91c1e3 authored by PavelBegunkov's avatar PavelBegunkov
Browse files

model account: static methods

parent 2f256970
Branches
Tags
No related merge requests found
......@@ -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
......@@ -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
......@@ -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']);
}
......
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