oDb = &$oDb; $this->iUserId = 0; $this->asUserInfo = array(Db::getId(self::USER_TABLE)=>0, 'name'=>'', 'email'=>'', 'language'=>'', 'timezone'=>'', 'active'=>'0'); $this->checkUserCookie(); } public function getLang() { return $this->asUserInfo['language']; } public function addUser($sEmail, $sLang, $sTimezone) { $bSuccess = false; $sDesc = ''; $sEmail = trim($sEmail); //Check Email availability $iUserId = $this->oDb->selectValue(self::USER_TABLE, Db::getId(self::USER_TABLE), array('email'=>$sEmail, 'active'=>'1')); if($iUserId > 0) { //Log user in $sDesc = 'lang:nl_email_exists'; $bSuccess = true; } else { //Add/Reactivate user $iUserId = $this->oDb->insertUpdateRow(self::USER_TABLE, array('email'=>$sEmail, 'language'=>$sLang, 'timezone'=>$sTimezone, 'active'=>'1'), array('email')); if($iUserId==0) $sDesc = 'lang:error_commit_db'; else { $sDesc = 'lang:nl_subscribed'; $bSuccess = true; } } //Set Cookie (valid 1 year) if($bSuccess) { $this->setUserId($iUserId); $this->updateCookie(self::COOKIE_DURATION); } return Spot::getResult($bSuccess, $sDesc); } public function removeUser() { $bSuccess = false; $sDesc = ''; if($this->iUserId > 0) { $iUserId = $this->oDb->updateRow(self::USER_TABLE, $this->iUserId, array('active'=>'0')); if($iUserId==0) $sDesc = 'lang:error_commit_db'; else { $sDesc = 'lang:nl_unsubscribed'; $this->updateCookie(-60 * 60); //Set Cookie in the past, deleting it $bSuccess = true; } } else $sDesc = 'lang:nl_unknown_email'; return Spot::getResult($bSuccess, $sDesc); } public function updateNickname($sNickname) { if($this->iUserId > 0 && $sNickname!='') $this->oDb->updateRow(self::USER_TABLE, $this->iUserId, array('name'=>$sNickname)); } private function checkUserCookie() { if(isset($_COOKIE[self::COOKIE_ID_USER])){ $this->setUserId($_COOKIE[self::COOKIE_ID_USER]); //Extend cookie life if($this->iUserId > 0) $this->updateCookie(self::COOKIE_DURATION); } } public function getUserId() { return $this->iUserId; } public function setUserId($iUserId) { $this->iUserId = 0; $asUser = $this->getActiveUsersInfo($iUserId); if(!empty($asUser)) { $this->iUserId = $iUserId; $this->asUserInfo = array_shift($asUser); } } public function getUserInfo() { return $this->asUserInfo; } public function getActiveUsersInfo($iUserId=-1) { $asInfo = array( 'select' => array_keys($this->asUserInfo), 'from' => self::USER_TABLE, 'constraint'=> array('active'=>'1') ); if($iUserId != -1) $asInfo['constraint'][Db::getId(self::USER_TABLE)] = $iUserId; return $this->oDb->selectRows($asInfo); } private function updateCookie($iDeltaTime) { setcookie(self::COOKIE_ID_USER, ($iDeltaTime < 0)?'':$this->iUserId, array('samesite' => 'Lax', 'expires' => time() + $iDeltaTime)); } }