/** * Complete the login for a account by incrementing the logins and setting * session data: account_id, accountname, groups * * @param object account model object * @return void */ public function complete_login(Model_Account $account) { // Update the number of logins $account->incrNumLogins(); $this->groups = array(); $this->permissions = array(); $groups = array(); array_push($groups, 1); // registered foreach ($account->Usergroups->find_all() as $group) { array_push($groups, intval($group->id)); } array_unique($groups); $query = DB::select(array('g.name', 'groupName'), array('p.pkey', 'pkey'))->from(array('usergroups', 'g'))->join(array('usergroups_permissions', 'up'))->on('g.id', '=', 'up.usergroup_id')->join(array('permissions', 'p'))->on('p.id', '=', 'up.permission_id')->where('g.id', 'IN', $groups); foreach ($query->execute() as $result) { $this->groups[$result['groupName']] = 1; $this->permissions[$result['pkey']] = 1; } // extra safety to prevent session fixation - http://en.wikipedia.org/wiki/Session_fixation $this->session->regenerate(); $this->account = serialize($account); $this->storeAccount($account); }