/** * Logs in user. * * @param string $user user's login * @param string $passe user's password * * @return boolean */ public function logIn($user, $passe) { global $zdb, $i18n, $session; try { $select = $zdb->select(self::TABLE, 'a'); $select->columns(array('id_adh', 'bool_admin_adh', 'nom_adh', 'prenom_adh', 'mdp_adh', 'pref_lang', 'activite_adh', 'bool_exempt_adh', 'date_echeance'))->join(array('b' => PREFIX_DB . Status::TABLE), 'a.' . Status::PK . '=b.' . Status::PK, array('priorite_statut')); $select->where(array(self::PK => $user)); $results = $zdb->execute($select); if ($results->count() == 0) { Analog::log('No entry found for login `' . $user . '`', Analog::WARNING); return false; } else { $row = $results->current(); //check if pawwsord matches $pw_checked = password_verify($passe, $row->mdp_adh); if (!$pw_checked) { //if password did not match, we try old md5 method $pw_checked = md5($passe) === $row->mdp_adh; } if ($pw_checked === false) { //Passwords mismatch. Log and return. Analog::log('Passwords mismatch for login `' . $user . '`', Analog::WARNING); return false; } Analog::log('User `' . $user . '` logged in.', Analog::INFO); $this->id = $row->id_adh; $this->login = $user; $this->passe = $row->mdp_adh; $this->admin = $row->bool_admin_adh; $this->name = $row->nom_adh; $this->surname = $row->prenom_adh; $this->lang = $row->pref_lang; $i18n->changeLanguage($this->lang); $session['lang'] = serialize($i18n); $this->active = $row->activite_adh; $this->logged = true; if ($row->priorite_statut < Members::NON_STAFF_MEMBERS) { $this->staff = true; } //check if member is up to date if ($row->bool_exempt_adh == true) { //member is due free, he's up to date. $this->uptodate = true; } else { //let's check from end date, if present if ($row->date_echeance == null) { $this->uptodate = false; } else { $ech = new \DateTime($row->date_echeance); $now = new \DateTime(); $now->setTime(0, 0, 0); $this->uptodate = $ech >= $now; } } //staff members and admins are de facto groups managers. For all //others, get managed groups if (!$this->isSuperAdmin() && !$this->isAdmin() && !$this->isStaff()) { $this->managed_groups = Groups::loadManagedGroups($this->id, false); } return true; } } catch (AdapterException $e) { Analog::log('An error occured: ' . $e->getChainedException()->getMessage(), Analog::WARNING); Analog::log($e->getTrace(), Analog::ERROR); return false; } catch (\Exception $e) { Analog::log('An error occured: ' . $e->getMessage(), Analog::WARNING); Analog::log($e->getTrace(), Analog::ERROR); return false; } }
/** * Load member groups * * @return void */ public function loadGroups() { $this->_groups = Groups::loadGroups($this->_id); $this->_managed_groups = Groups::loadManagedGroups($this->_id); }