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

reducing the number of queries to the database

parent 14c51fb9
Branches
Tags
No related merge requests found
...@@ -307,6 +307,12 @@ CREATE PROCEDURE `GetFullInfo` ( ...@@ -307,6 +307,12 @@ CREATE PROCEDURE `GetFullInfo` (
BEGIN BEGIN
DECLARE vAccountType enum('student', 'teacher'); DECLARE vAccountType enum('student', 'teacher');
DECLARE vSemesterID INT DEFAULT -1; DECLARE vSemesterID INT DEFAULT -1;
SET vSemesterID = (
SELECT general_settings.Val
FROM `general_settings`
WHERE general_settings.Name = 'SemesterID'
LIMIT 1
);
SELECT user_roles.Type INTO vAccountType SELECT user_roles.Type INTO vAccountType
FROM `accounts` FROM `accounts`
...@@ -318,13 +324,6 @@ BEGIN ...@@ -318,13 +324,6 @@ BEGIN
# 2: teacher # 2: teacher
IF vAccountType = 'student' THEN IF vAccountType = 'student' THEN
SET vSemesterID = (
SELECT general_settings.Val
FROM `general_settings`
WHERE general_settings.Name = 'SemesterID'
LIMIT 1
);
SELECT # student info SELECT # student info
view_students.LastName, view_students.LastName,
view_students.FirstName, view_students.FirstName,
...@@ -351,7 +350,9 @@ BEGIN ...@@ -351,7 +350,9 @@ BEGIN
user_roles.Mark AS 'RoleMark', user_roles.Mark AS 'RoleMark',
accounts.IsEnabled, accounts.IsEnabled,
accounts.ActivationCode AS 'Code', accounts.ActivationCode AS 'Code',
accounts.UserAgent accounts.UserAgent,
# extra
vSemesterID AS 'SemesterID'
FROM `view_students` FROM `view_students`
INNER JOIN `accounts` ON accounts.ID = view_students.AccountID INNER JOIN `accounts` ON accounts.ID = view_students.AccountID
INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID
...@@ -379,7 +380,9 @@ BEGIN ...@@ -379,7 +380,9 @@ BEGIN
user_roles.Mark AS 'RoleMark', user_roles.Mark AS 'RoleMark',
accounts.IsEnabled, accounts.IsEnabled,
accounts.ActivationCode AS 'Code', accounts.ActivationCode AS 'Code',
accounts.UserAgent accounts.UserAgent,
# extra
vSemesterID AS 'SemesterID'
FROM `view_teachers` FROM `view_teachers`
INNER JOIN `accounts` ON accounts.ID = view_teachers.AccountID INNER JOIN `accounts` ON accounts.ID = view_teachers.AccountID
INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID
......
...@@ -35,7 +35,7 @@ class Controller_Authentication extends Controller { ...@@ -35,7 +35,7 @@ class Controller_Authentication extends Controller {
if(!User::instance()->isSignedIn()) if(!User::instance()->isSignedIn())
{ {
$type = $this->request->param('type'); $type = $this->request->param('type');
if(empty($type)) $type = 'in'; $type = empty($type)? 'in': $type;
$twig = Twig::factory('sign/'.$type); $twig = Twig::factory('sign/'.$type);
$twig->Updates = Model_System::getChangeLog(); $twig->Updates = Model_System::getChangeLog();
...@@ -50,20 +50,16 @@ class Controller_Authentication extends Controller { ...@@ -50,20 +50,16 @@ class Controller_Authentication extends Controller {
public function action_enter_frontdoor() public function action_enter_frontdoor()
{ {
$check = false; $admission = true;
try {
$role = (int)User::instance()->RoleMark;
} catch (Exception $e) {
$role = (int)1;
}
$isNotSigned = !User::instance()->isSignedIn(); $isNotSigned = !User::instance()->isSignedIn();
$isNotAdmin = !User::instance()->isAdmin();
if($isNotSigned || ($role & 8) == 0) // if not signed or not admin if($isNotSigned || $isNotAdmin)
{ {
$check = $this->check_maintenance(); $admission = !$this->check_maintenance();
} }
if (!$check) { if ($admission) {
$this->sign(); $this->sign();
} else } else
User::instance()->signOut(); User::instance()->signOut();
...@@ -104,8 +100,7 @@ class Controller_Authentication extends Controller { ...@@ -104,8 +100,7 @@ class Controller_Authentication extends Controller {
private function check_maintenance() private function check_maintenance()
{ {
$model = new Model_Account; $maintenance_info = Model_Account::getMaintenanceInfo();
$maintenance_info = $model->getMaintenanceInfo();
if ($maintenance_info['active']) { if ($maintenance_info['active']) {
$this->response->status(503); $this->response->status(503);
$twig = Twig::factory('errors/http'); $twig = Twig::factory('errors/http');
......
...@@ -116,7 +116,7 @@ class Model_Account extends Model ...@@ -116,7 +116,7 @@ class Model_Account extends Model
} }
# TODO: deprecated # TODO: deprecated (see getUserInfo)
public static function getPersonalInfo($id, $semesterID = null) { public static function getPersonalInfo($id, $semesterID = null) {
$semesterID = $semesterID ? $semesterID : User::instance()->SemesterID; $semesterID = $semesterID ? $semesterID : User::instance()->SemesterID;
$sql = "CALL `GetPersonalInfo`(:id, :semester);"; $sql = "CALL `GetPersonalInfo`(:id, :semester);";
...@@ -126,7 +126,7 @@ class Model_Account extends Model ...@@ -126,7 +126,7 @@ class Model_Account extends Model
->execute()[0]; ->execute()[0];
} }
# TODO: deprecated # TODO: deprecated (see getUserInfo)
public static function getAccountInfo($id) { public static function getAccountInfo($id) {
return DB::query(Database::SELECT, "CALL GetAccountInfo(:id);") return DB::query(Database::SELECT, "CALL GetAccountInfo(:id);")
->param(':id', (int) $id)->execute()[0]; ->param(':id', (int) $id)->execute()[0];
......
...@@ -19,6 +19,7 @@ class Model_Student extends Model_Container ...@@ -19,6 +19,7 @@ class Model_Student extends Model_Container
*/ */
protected function create() { protected function create() {
// todo: implement later // todo: implement later
throw new BadMethodCallException('Method is not implemented yet!');
} }
/** @return Model_Discipline[] */ /** @return Model_Discipline[] */
......
...@@ -53,6 +53,7 @@ class User implements ArrayAccess ...@@ -53,6 +53,7 @@ class User implements ArrayAccess
private function __construct($config = array()) { private function __construct($config = array()) {
$this->_config = $config; $this->_config = $config;
$this->_session = Session::instance(); $this->_session = Session::instance();
$this->_userInfo['RoleMark'] = (int)1;
$this->_config['hash_key'] = Model_Account::getHashKey(); $this->_config['hash_key'] = Model_Account::getHashKey();
$this->_config['hash_method'] = 'sha256'; $this->_config['hash_method'] = 'sha256';
...@@ -162,16 +163,16 @@ class User implements ArrayAccess ...@@ -162,16 +163,16 @@ class User implements ArrayAccess
$passwordHash = $this->hash($passHash . $this->_config['hash_key']); $passwordHash = $this->hash($passHash . $this->_config['hash_key']);
Cookie::set('userhash', $passwordHash); Cookie::set('userhash', $passwordHash);
$semester = Model_Account::getCurSemesterID(); $userInfo = Model_Account::getUserInfo($id);
$this->_session->set('UserInfo', Model_Account::getUserInfo($id)); $this->_session->set('UserInfo', $userInfo);
$this->_session->regenerate(); $this->_session->regenerate();
$this->_session->set('ID', $id); $this->_session->set('ID', $id);
$this->_session->set('LoggedIn', true); $this->_session->set('LoggedIn', true);
$this->_session->set('UserHash', $this->hash($userHash)); $this->_session->set('UserHash', $this->hash($userHash));
$this->_session->set('PasswordHash', $passwordHash); $this->_session->set('PasswordHash', $passwordHash);
$this->_session->set('start_time', time()); $this->_session->set('start_time', time());
$this->_session->set('SemesterID', $semester); $this->_session->set('SemesterID', $userInfo['SemesterID']);
return true; return true;
} }
......
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