/** * Set user's status * * @param integer $userId * @param boolean $approved * @param array $userInfo * @param string $selfUserName * @return boolean|string */ public function setUserStatus($userId, $approved = true, array $userInfo, $selfUserName = null) { try { $this->adapter->getDriver()->getConnection()->beginTransaction(); $update = $this->update()->table('user_list')->set(['status' => $approved ? self::STATUS_APPROVED : self::STATUS_DISAPPROVED, 'activation_code' => null, 'date_edited' => date('Y-m-d')])->where(['user_id' => $userId])->where([new NotInPredicate('user_id', [self::DEFAULT_USER_ID])]); $statement = $this->prepareStatementForSqlObject($update); $statement->execute(); // clear caches $this->removeUserCache($userId); $this->clearActiveUsersCache(); $this->adapter->getDriver()->getConnection()->commit(); } catch (Exception $e) { $this->adapter->getDriver()->getConnection()->rollback(); ApplicationErrorLogger::log($e); return $e->getMessage(); } true === $approved ? UserEvent::fireUserApproveEvent($userId, $userInfo, $selfUserName) : UserEvent::fireUserDisapproveEvent($userId, $userInfo); return true; }