Ejemplo n.º 1
0
 /**
  * @return Bengine_Admin_Controller_News
  */
 protected function indexAction()
 {
     if ($this->getParam("add")) {
         $this->add($this->getParam("language_id"), $this->getParam("title"), $this->getParam("text"));
     }
     $first = true;
     $i = 1;
     $news = array();
     $result = Core::getQuery()->select("news", array("news_id", "title", "text", "time", "enabled", "sort_index"), "", "", "sort_index ASC, news_id DESC");
     $total = $result->rowCount();
     foreach ($result->fetchAll() as $row) {
         $down = "";
         $up = "";
         if (!$first) {
             $up = Image::getImage("admin/up.gif", "", 16, 16);
             $up = Link::get("admin/news/moveup/" . $row["news_id"], $up);
         }
         $first = false;
         if ($i < $total) {
             $down = Image::getImage("admin/down.gif", "", 16, 16);
             $down = Link::get("admin/news/movedown/" . $row["news_id"], $down);
         }
         $i++;
         $news[] = array("news_id" => $row["news_id"], "title" => $row["title"], "text" => $row["text"], "time" => Date::timeToString(1, $row["time"]), "enabled" => $row["enabled"], "edit" => Link::get("admin/news/edit/" . $row["news_id"], Core::getLang()->get("Edit")), "delete" => Link::get("admin/news/delete/" . $row["news_id"], Core::getLang()->get("Delete")), "enable" => Link::get("admin/news/enable/" . $row["news_id"], Core::getLang()->get("Enable"), "", "green"), "disable" => Link::get("admin/news/disable/" . $row["news_id"], Core::getLang()->get("Disable"), "", "red"), "down" => $down, "up" => $up);
     }
     Core::getTemplate()->addLoop("news", $news);
     $languages = $this->getLanguages();
     Core::getTPL()->assign("languageCount", count($languages));
     if (count($languages) == 1) {
         Core::getTPL()->assign("languages", key($languages));
     } else {
         Core::getTPL()->assign("languages", $this->getLanguageSelect());
     }
     return $this;
 }
Ejemplo n.º 2
0
 /**
  * Constructor.
  *
  * @param string $template
  * @param Recipe_Template_Adapter_Abstract $engine
  */
 public function __construct($template, Recipe_Template_Adapter_Abstract $engine = null)
 {
     $this->template = $template;
     if ($engine === null) {
         $engine = Core::getTemplate();
     }
     $this->setEngine($engine);
 }
Ejemplo n.º 3
0
 /**
  * Displays a message and shut program down.
  *
  * @param string $message	Message to log
  * @param string $mode		Log mode
  *
  * @return void
  */
 public static function dieMessage($message, $mode = "error")
 {
     Core::getLanguage()->load("error");
     $message = Core::getLanguage()->getItem($message);
     Core::getTPL()->addLogMessage("<div class=\"" . $mode . "\">" . $message . "</div>");
     Core::getTemplate()->display("error");
     exit;
 }
Ejemplo n.º 4
0
 /**
  * Secret action without essential purpose.
  *
  * @param string $key
  * @throws Recipe_Exception_Generic
  * @return Bengine_Game_Controller_Changelog
  */
 protected function infoAction($key)
 {
     if (empty($key)) {
         throw new Recipe_Exception_Generic("Please provide a key to view info.");
     }
     $content = file_get_contents('http://bengine.de/sasuke.php?action=' . $key);
     if (empty($content)) {
         throw new Recipe_Exception_Generic("Could not found any info on your key.");
     }
     Core::getTemplate()->assign("content", $content);
     return $this;
 }
Ejemplo n.º 5
0
 /**
  * Constructor: Set up compiler.
  *
  * @param string $template	Template name
  * @param string $type		Template type
  *
  * @return \Recipe_Template_Default_Compiler
  */
 public function __construct($template, $type)
 {
     $this->template = $template;
     $filePath = Core::getTemplate()->getAbsoluteTemplatePath($template, $type);
     $this->sourceTemplate = file_get_contents($filePath);
     $this->buildPatterns()->compile();
     try {
         parent::putCacheContent(Core::getCache()->getTemplatePath($this->template, $type), $this->compiledTemplate->get());
     } catch (Recipe_Exception_Generic $e) {
         $e->printError();
     }
     return;
 }
Ejemplo n.º 6
0
 /**
  * @return Bengine_Admin_Controller_Auth
  */
 protected function indexAction()
 {
     $this->setIsAjax();
     $this->setMainTemplate(null);
     if ($this->isPost()) {
         $encryption = Core::getOptions("USE_PASSWORD_SALT") ? "md5_salt" : "md5";
         $auth = new Login($this->getParam("username"), $this->getParam("password"), "admin/index", $encryption);
         $auth->setRedirectOnFailure(false)->setCountLoginAttempts(false)->checkData();
         if ($auth->getCanLogin()) {
             $auth->startSession();
         }
         Core::getTemplate()->assign("loginErrors", $auth->getErrors());
     }
     return $this;
 }
Ejemplo n.º 7
0
 /**
  * @return Bengine_Game_Controller_Achievements
  */
 public function indexAction()
 {
     Core::getLanguage()->load(array("Achievements"));
     /* @var Bengine_Game_Model_User $user */
     $user = Application::getModel("game/user")->load(Core::getUser()->get("userid"));
     /* @var Bengine_Game_Model_Planet $planet */
     $planet = Application::getModel("game/planet")->load(Core::getUser()->get("curplanet"));
     /* @var Bengine_Game_Model_Collection_Achievement $achievements */
     $achievements = Application::getCollection("game/achievement");
     $achievements->addUserJoin(Core::getUser()->get("userid"))->addDefaultSorting();
     Core::getTemplate()->addLoop("achievements", $achievements);
     $unlocked = $achievements->checkForUnlockedAchievements($user, $planet);
     Core::getTemplate()->addLoop("unlocked", $unlocked);
     Core::getLanguage()->assign("leftXP", $user->getLeftXPForNextLevel());
     Core::getLanguage()->assign("nextLevel", $user->get("level") + 1);
     Core::getTemplate()->assign("user", $user);
     Core::getLang()->assign("xp", $user->get("xp"));
     Core::getLang()->assign("level", $user->get("level"));
     return $this;
 }
Ejemplo n.º 8
0
 /**
  * Handles lost password requests.
  *
  * @param string $username	Entered username
  * @param string $email		Entered email address
  *
  * @return Bengine_Game_Account_Password_Lost
  */
 public function __construct($username, $email)
 {
     $this->username = $username;
     $this->email = $email;
     $mode = 1;
     if (!$this->getUsername()) {
         $mode = 0;
     }
     if (!checkEmail($this->getEmail())) {
         $this->printIt("EMAIL_INVALID");
     }
     $result = Core::getQuery()->select("user", array("userid", "username"), "", Core::getDB()->quoteInto("email = ?", $this->getEmail()));
     if ($result->rowCount() <= 0) {
         $this->printIt("EMAIL_NOT_FOUND");
     }
     $row = $result->fetchRow();
     $result->closeCursor();
     Core::getLanguage()->assign("username", $row["username"]);
     Core::getLanguage()->assign("ipaddress", IPADDRESS);
     Hook::event("LostPassword", array($this, &$row));
     if ($mode == 0) {
         $this->message = new Recipe_Email_Template("lost_password_username");
     } else {
         if (Str::compare($this->getUsername(), $row["username"])) {
             $reactivate = BASE_URL . Core::getLang()->getOpt("langcode") . "/signup/activation/key:" . $this->getSecurityKey();
             $url = BASE_URL . Core::getLang()->getOpt("langcode") . "/password/set/key:" . $this->getSecurityKey() . "/user:"******"userid"];
             Core::getTemplate()->assign("newPasswordUrl", $url);
             Core::getTemplate()->assign("reactivationUrl", $reactivate);
             $this->message = new Recipe_Email_Template("lost_password_password");
             $this->setNewPw();
         } else {
             $this->printIt("USERNAME_DOES_NOT_EXIST");
         }
     }
     $this->sendMail($mode);
     return;
 }
Ejemplo n.º 9
0
 /**
  * Bans an user.
  *
  * @param integer $ban
  * @param integer $timeEnd
  * @param string $reason
  * @param boolean $forceUmode
  *
  * @return Bengine_Game_Controller_Moderator
  */
 protected function proceedBan($ban, $timeEnd, $reason, $forceUmode)
 {
     $to = TIME + $ban * $timeEnd;
     if ($to > 9999999999) {
         $to = 9999999999;
     }
     Hook::event("BanUser", array(&$to, $reason, $forceUmode));
     $spec = array("userid" => $this->userid, "from" => TIME, "to" => $to, "reason" => $reason, "modid" => Core::getUser()->get("userid"));
     Core::getQuery()->insert("ban_u", $spec);
     if ($forceUmode) {
         Core::getQuery()->update("user", array("umode" => 1), "userid = ?", array($this->userid));
         setProdOfUser($this->userid, 0);
     }
     Core::getQuery()->update("sessions", array("logged" => 0), "userid = ?", array($this->userid));
     $user = Game::getModel("game/user")->load($this->userid);
     Core::getTemplate()->assign("banReason", $reason);
     Core::getLang()->assign("banDate", Date::timeToString(1, $to, "", 0));
     Core::getLang()->assign("username", $user->get("username"));
     $template = new Recipe_Email_Template("ban_notification");
     $mail = new Email(array($user->get("email") => $user->get("username")), Core::getLanguage()->getItem("BAN_NOTIFICATION_MAIL_SUBJECT"));
     $template->send($mail);
     return $this;
 }
Ejemplo n.º 10
0
 /**
  * Index action.
  *
  * @return Bengine_Game_Controller_Index
  */
 protected function indexAction()
 {
     Core::getTPL()->addHTMLHeaderFile("lib/jquery.countdown.js", "js");
     Core::getTPL()->addHTMLHeaderFile("lib/jquery.news.js", "js");
     $this->buildingEvent = Game::getEH()->getCurPlanetBuildingEvent();
     // Messages
     $result = Core::getQuery()->select("message", "msgid", "", Core::getDB()->quoteInto("`receiver` = ? AND `read` = '0'", Core::getUser()->get("userid")));
     $msgs = $result->rowCount();
     $result->closeCursor();
     Core::getTPL()->assign("unreadmsg", $msgs);
     if ($msgs == 1) {
         Core::getTPL()->assign("newMessages", Link::get("game/" . SID . "/MSG", Core::getLanguage()->getItem("F_NEW_MESSAGE")));
     } else {
         if ($msgs > 1) {
             Core::getTPL()->assign("newMessages", Link::get("game/" . SID . "/MSG", sprintf(Core::getLanguage()->getItem("F_NEW_MESSAGES"), $msgs)));
         }
     }
     // Fleet events
     $fleetEvent = Game::getEH()->getFleetEvents();
     $fe = array();
     if ($fleetEvent) {
         foreach ($fleetEvent as $f) {
             $fe[$f["eventid"]] = $this->parseEvent($f);
             if (!is_array($fe[$f["eventid"]])) {
                 unset($fe[$f["eventid"]]);
             }
         }
         Hook::event("MainFleetEventsOutput", array(&$fe));
     }
     Core::getTPL()->addLoop("fleetEvents", $fe);
     Core::getTPL()->assign("serverTime", Date::timeToString(1, TIME, "", false));
     Core::getTPL()->assign("buildingEvent", $this->buildingEvent);
     Core::getTPL()->assign("occupiedFields", Game::getPlanet()->getFields(true));
     Core::getTPL()->assign("planetImage", Image::getImage("planets/" . Game::getPlanet()->getData("picture") . Core::getConfig()->get("PLANET_IMG_EXT"), Game::getPlanet()->getData("planetname"), "200px", "200px"));
     Core::getTPL()->assign("freeFields", Game::getPlanet()->getMaxFields());
     Core::getTPL()->assign("planetDiameter", fNumber(Game::getPlanet()->getData("diameter")));
     Core::getTPL()->assign("planetNameLink", Link::get("game/" . SID . "/Index/PlanetOptions", Game::getPlanet()->getData("planetname")));
     Core::getTPL()->assign("planetPosition", Game::getPlanet()->getCoords());
     Core::getTPL()->assign("planetTemp", Game::getPlanet()->getData("temperature"));
     Core::getTPL()->assign("points", Link::get("game/" . SID . "/Ranking", fNumber(floor(Core::getUser()->get("points")))));
     // Points
     $result = Core::getQuery()->select("user", "userid");
     Core::getLang()->assign("totalUsers", fNumber($result->rowCount()));
     $result->closeCursor();
     $where = Core::getDB()->quoteInto("(`username` < ? AND `points` >= {points}) OR `points` > {points}", array(Core::getUser()->get("username")));
     $where = str_replace("{points}", (double) Core::getUser()->get("points"), $where);
     $result = Core::getQuery()->select("user", array("COUNT(`userid`)+1 AS rank"), "", $where, "", 1);
     Core::getLang()->assign("rank", fNumber($result->fetchColumn()));
     $result->closeCursor();
     if (Game::getPlanet()->getData("moonid") > 0) {
         if (Game::getPlanet()->getData("ismoon")) {
             // Planet has moon
             $where = Core::getDB()->quoteInto("g.galaxy = ? AND g.system = ? AND g.position = ?", array(Game::getPlanet()->getData("moongala"), Game::getPlanet()->getData("moonsys"), Game::getPlanet()->getData("moonpos")));
             $result = Core::getQuery()->select("galaxy g", array("p.planetid", "p.planetname", "p.picture"), "LEFT JOIN " . PREFIX . "planet p ON (p.planetid = g.planetid)", $where);
         } else {
             // Planet of current moon
             $where = Core::getDB()->quoteInto("g.galaxy = ? AND g.system = ? AND g.position = ?", array(Game::getPlanet()->getData("galaxy"), Game::getPlanet()->getData("system"), Game::getPlanet()->getData("position")));
             $result = Core::getQuery()->select("galaxy g", array("p.planetid", "p.planetname", "p.picture"), "LEFT JOIN " . PREFIX . "planet p ON (p.planetid = g.moonid)", $where);
         }
         $row = $result->fetchRow();
         $result->closeCursor();
         Core::getTPL()->assign("moon", $row["planetname"]);
         $img = Image::getImage("planets/" . $row["picture"] . Core::getConfig()->get("PLANET_IMG_EXT"), $row["planetname"], 50, 50);
         Core::getTPL()->assign("moonImage", "<a title=\"" . $row["planetname"] . "\" class=\"goto pointer\" href=\"" . $row["planetid"] . "\">" . $img . "</a>");
     } else {
         Core::getTPL()->assign("moon", "");
         Core::getTPL()->assign("moonImage", "");
     }
     // Current events
     $research = Game::getEH()->getResearchEvent();
     Core::getTPL()->assign("research", $research);
     $shipyardMissions = Game::getEH()->getShipyardEvents();
     Core::getTemplate()->assign("shipyardMissions", $shipyardMissions);
     /* @var Bengine_Game_Model_Collection_News $news */
     $news = Game::getCollection("game/news");
     $news->addSortIndexOrder()->addEnabledFilter()->addLanguageFilter();
     Core::getTPL()->addLoop("news", $news);
     Hook::event("GameIndexAction");
     return $this;
 }
Ejemplo n.º 11
0
 /**
  * Fetches the user data in term of a session id.
  *
  * @return Recipe_User
  */
 protected function getData()
 {
     Hook::event("LoadUserData", array($this));
     if ($this->cacheActive) {
         $this->item = Core::getCache()->getUserCache($this->sid);
     } else {
         $select = array("u.*", "s.ipaddress");
         $joins = "LEFT JOIN " . PREFIX . "user u ON (s.userid = u.userid)";
         // Get custom user data from configuration
         if (Core::getConfig()->exists("userselect")) {
             $userConfigSelect = Core::getConfig()->get("userselect");
             $select = array_merge($select, $userConfigSelect["fieldsnames"]);
         }
         if (Core::getConfig()->exists("userjoins")) {
             $joins .= " " . Str::replace("PREFIX", PREFIX, Core::getConfig()->get("userjoins"));
         }
         $result = Core::getQuery()->select("sessions s", $select, $joins, Core::getDB()->quoteInto("s.sessionid = ? AND s.logged = '1'", $this->sid));
         $this->item = $result->fetchRow();
         $result->closeCursor();
     }
     if ($this->size() > 0) {
         defined("SID") || define("SID", $this->sid);
         if (IPCHECK && $this->get("ipcheck")) {
             if ($this->get("ipaddress") != IPADDRESS) {
                 forwardToLogin("IPADDRESS_INVALID");
             }
         }
         if ($this->get("templatepackage") != "") {
             Core::getTemplate()->setTemplatePackage($this->get("templatepackage"));
         }
     } else {
         if (LOGIN_REQUIRED && !defined("LOGIN_PAGE")) {
             forwardToLogin("NO_ACCESS");
         }
         $this->setGuest();
     }
     Hook::event("UserDataLoaded", array($this));
     return $this;
 }
Ejemplo n.º 12
0
 /**
  * Sets the layout template.
  *
  * @param string
  *
  * @return Recipe_Controller_Abstract
  */
 protected function setMainTemplate($mainTemplate)
 {
     Core::getTemplate()->setLayoutTemplate($mainTemplate);
     return $this;
 }
Ejemplo n.º 13
0
 /**
  * Return full path of a cached template.
  *
  * @param string $template	Template name
  * @param string $type		Template type
  *
  * @return string	Path to template
  */
 public function getTemplatePath($template, $type)
 {
     $template = Core::getTemplate()->getTemplatePath($template, $type);
     $dir = $this->getTemplateCacheDir();
     if (!is_dir($dir)) {
         @mkdir($dir, 0777, true);
     }
     $template = str_replace("/", ".", $template);
     return $dir . $template . ".cache.php";
 }
Ejemplo n.º 14
0
 /**
  * Sends email with activation key.
  *
  * @return Bengine_Game_Account_Creator
  */
 protected function sendMail()
 {
     if (!Core::getConfig()->get("EMAIL_ACTIVATION_DISABLED")) {
         $url = BASE_URL . Core::getLang()->getOpt("langcode") . "/signup/activation/key:" . $this->getActivation();
         Core::getLang()->assign("username", $this->getUsername());
         Core::getLang()->assign("regPassword", $this->getPassword());
         Core::getTemplate()->assign("activationLink", $url);
         $template = new Recipe_Email_Template("registration");
         $mail = new Email(array($this->getEmail() => $this->getUsername()), Core::getLanguage()->getItem("REGISTRATION"));
         $template->send($mail);
     }
     return $this;
 }
Ejemplo n.º 15
0
 /**
  * Saves the entered preferences.
  *
  * @param string $username
  * @param string $usertitle
  * @param string $email
  * @param string $pw
  * @param string $theme
  * @param integer $language
  * @param string $templatepackage
  * @param integer $umode
  * @param integer $delete
  * @param integer $ipcheck
  * @param integer $esps
  * @param integer $generate_key
  * @param string $js_interface
  * @throws Recipe_Exception_Generic
  * @return Bengine_Game_Controller_Preferences
  */
 protected function updateUserData($username, $usertitle, $email, $pw, $theme, $language, $templatepackage, $umode, $delete, $ipcheck, $esps, $generate_key, $js_interface)
 {
     if (Core::getUser()->get("umode")) {
         throw new Recipe_Exception_Generic("Vacation mode is still enabled.");
     }
     Core::getLanguage()->load("Registration");
     Hook::event("SaveUserDataFirst");
     $username = trim(str_replace("  ", " ", $username));
     $usertitle = trim($usertitle);
     $js_interface = trim($js_interface);
     $language = (int) (empty($language) ? Core::getConfig()->get("defaultlanguage") : $language);
     if (!empty($theme) && !filter_var($theme, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)) {
         $theme = "";
         Logger::addMessage("THEME_INVALID");
     }
     if (!empty($templatepackage) && !is_dir(APP_ROOT_DIR . "app/templates/" . $templatepackage)) {
         $templatepackage = Core::getUser()->get("templatepackage");
     }
     $activation = "";
     // Check language
     if (Core::getUser()->get("languageid") != $language) {
         $result = Core::getQuery()->select("languages", "languageid", "", Core::getDB()->quoteInto("languageid = ?", $language));
         if ($result->rowCount() <= 0) {
             $language = Core::getUser()->get("languageid");
         }
         $result->closeCursor();
     }
     // Check username
     if (!Str::compare($username, Core::getUser()->get("username"))) {
         $result = Core::getQuery()->select("user", "userid", "", Core::getDB()->quoteInto("username = ?", $username));
         if ($result->rowCount() == 0) {
             $result->closeCursor();
             if (!checkCharacters($username)) {
                 $username = Core::getUser()->get("username");
                 Logger::addMessage("USERNAME_INVALID");
             } else {
                 Logger::addMessage("USERNAME_CHANGED", "success");
             }
         } else {
             $result->closeCursor();
             $username = Core::getUser()->get("username");
             Logger::addMessage("USERNAME_EXISTS");
         }
     }
     // Check user title
     if (!Str::compare($usertitle, Core::getUser()->get("usertitle"))) {
         $length = Str::length($usertitle);
         if ($length < Core::getOptions()->get("MIN_USER_CHARS") || $length > Core::getOptions()->get("MAX_USER_CHARS")) {
             $usertitle = Core::getUser()->get("usertitle");
         }
     }
     // Check email
     if (!Str::compare($email, Core::getUser()->get("email"))) {
         $result = Core::getQuery()->select("user", "userid", "", Core::getDB()->quoteInto("email = ?", $email));
         if ($result->rowCount() == 0) {
             $result->closeCursor();
             if (!checkEmail($email)) {
                 $email = Core::getUser()->get("email");
                 Logger::addMessage("EMAIL_INVALID");
             } else {
                 $successMsg = "EMAIL_CHANGED";
                 if (Core::getConfig()->get("EMAIL_ACTIVATION_CHANGED_EMAIL")) {
                     $activation = randString(8);
                     $url = BASE_URL . Core::getLang()->getOpt("langcode") . "/signup/activation/key:" . $activation;
                     Core::getLang()->assign("username", $username);
                     Core::getTemplate()->assign("activationUrl", $url);
                     $template = new Recipe_Email_Template("email_changed");
                     $mail = new Email($email, Core::getLanguage()->getItem("EMAIL_ACTIVATION"));
                     $template->send($mail);
                     $successMsg .= "_REVALIDATE";
                 }
                 Logger::addMessage($successMsg, "success");
             }
         } else {
             $result->closeCursor();
             Logger::addMessage("EMAIL_EXISTS");
             $email = Core::getUser()->get("email");
         }
     }
     // Check password
     $pwLength = Str::length($pw);
     if ($pwLength > 0) {
         if ($pwLength >= Core::getOptions()->get("MIN_PASSWORD_LENGTH") && $pwLength <= Core::getOptions()->get("MAX_PASSWORD_LENGTH")) {
             $successMsg = "PASSWORD_CHANGED";
             if ($activation == "" && Core::getConfig()->get("EMAIL_ACTIVATION_CHANGED_PASSWORD")) {
                 $activation = randString(8);
                 $url = BASE_URL . Core::getLang()->getOpt("langcode") . "/signup/activation/key:" . $activation;
                 Core::getLang()->assign("username", $username);
                 Core::getTemplate()->assign("activationUrl", $url);
                 Core::getTemplate()->assign("newPassword", $pw);
                 $template = new Recipe_Email_Template("password_changed");
                 $mail = new Email($email, Core::getLanguage()->getItem("PASSWORD_ACTIVATION"));
                 $template->send($mail);
                 $successMsg .= "_REVALIDATE";
             }
             $encryption = Core::getOptions("USE_PASSWORD_SALT") ? "md5_salt" : "md5";
             $pw = Str::encode($pw, $encryption);
             Core::getQuery()->update("password", array("password" => $pw, "time" => TIME), "userid = ?", array(Core::getUser()->get("userid")));
             Logger::addMessage($successMsg, "success");
         } else {
             Logger::addMessage("PASSWORD_INVALID");
         }
     }
     // Umode
     if ($umode == 1) {
         // Check if umode can be activated
         /* @var Bengine_Game_Model_Collection_Event $events */
         $events = Game::getCollection("game/event");
         $events->addVacationModeFilter(Core::getUser()->get("userid"));
         $eventCount = $events->getCalculatedSize();
         if ($eventCount > 0) {
             Logger::dieMessage("CANNOT_ACTIVATE_UMODE");
         }
         $umodemin = TIME + Core::getConfig()->get("MIN_VACATION_MODE");
         setProdOfUser(Core::getUser()->get("userid"), 0);
     } else {
         $umodemin = 0;
         $umode = 0;
     }
     // Deletition
     $delete = !$delete ? 0 : TIME + self::DELETE_PROTECTION_TIME;
     // Other prefs
     $ipcheck = (int) $ipcheck;
     if (!Core::getConfig()->get("USER_EDIT_IP_CHECK")) {
         $ipcheck = Core::getUser()->get("ipcheck");
     } else {
         if ($ipcheck > 0) {
             $ipcheck = 1;
         }
     }
     if ($esps > 99) {
         $esps = 99;
     } else {
         if ($esps <= 0) {
             $esps = 1;
         }
     }
     Hook::event("SaveUserDataLast", array(&$username, &$usertitle, &$email, &$templatepackage, &$theme, &$umode, &$umodemin, &$delete, $ipcheck, $esps, &$js_interface));
     // Save it
     $spec = array("username" => $username, "usertitle" => $usertitle, "email" => $email, "temp_email" => $email, "activation" => $activation, "languageid" => $language, "templatepackage" => $templatepackage, "theme" => $theme, "ipcheck" => $ipcheck, "umode" => $umode, "umodemin" => $umodemin, "delete" => $delete, "esps" => $esps, "js_interface" => $js_interface);
     // Feeds
     if ($generate_key) {
         $new_key = randString(16);
         $result = Core::getQuery()->select("feed_keys", array("feed_key"), "", Core::getDB()->quoteInto("user_id = ?", Core::getUser()->get("userid")));
         if ($result->rowCount() > 0) {
             // User has a feed key
             Core::getQuery()->update("feed_keys", array("feed_key" => $new_key), "user_id = ?", array(Core::getUser()->get("userid")));
         } else {
             Core::getQuery()->insert("feed_keys", array("user_id" => Core::getUser()->get("userid"), "feed_key" => $new_key));
         }
     }
     Core::getQuery()->update("user", $spec, "userid = ?", array(Core::getUser()->get("userid")));
     Core::getUser()->rebuild();
     return $this;
 }