Example #1
0
 /**
  * Returns the field object.
  *
  * @return Bengine_Game_Profile_Field_Abstract
  */
 public function getFieldObject()
 {
     if (!$this->exists("field_object")) {
         $field = Application::factory("game/profile_field_" . strtolower($this->getType()), $this);
         $field->setData($this->getData());
         $this->set("field_object", $field);
     }
     return $this->get("field_object");
 }
Example #2
0
 /**
  * Retrieves the handler object of the code or the mode.
  *
  * @param string|integer $code
  * @param Bengine_Game_Model_Event $event
  * @throws Recipe_Exception_Generic
  * @return Bengine_Game_EventHandler_Handler_Abstract
  */
 public static function getHandlerObject($code, Bengine_Game_Model_Event $event = null)
 {
     $handler = self::translateCode($code);
     list($package, $class) = explode("/", $handler->get("code"));
     $class = $package . "/eventHandler_handler_" . $handler->get("base_type") . "_" . $class;
     if ($handlerObj = Application::factory($class, $event)) {
         return $handlerObj;
     }
     throw new Recipe_Exception_Generic("Unable to instantiate handler code '" . $code . "'.");
 }
 /**
  * @return Bengine_Game_Achievement_Reward_Abstract
  * @throws Recipe_Exception_Generic
  */
 public function getRewardObject()
 {
     if (!$this->exists("reward_object")) {
         /* @var Bengine_Game_Achievement_Reward_Abstract $object */
         $object = Application::factory($this->get("class"), null);
         if (!$object) {
             throw new Recipe_Exception_Generic("Unknown achievement reward '{$this->get("class")}'.");
         }
         $object->setValue($this->get("value"));
         $object->setType($this->get("type"));
         $this->set("reward_object", $object);
     }
     return $this->get("reward_object");
 }
Example #4
0
 /**
  * Search in database for expired cron tasks and execute them.
  *
  * @throws Recipe_Exception_Generic
  * @return Recipe_Cron
  */
 public function exeCron()
 {
     $select = array("cronid", "class", "month", "day", "weekday", "hour", "minute", "xtime", "active");
     $_result = Core::getQuery()->select("cronjob", $select, "", "(xtime <= " . TIME . " OR xtime IS NULL) AND active = '1'");
     foreach ($_result->fetchAll() as $_row) {
         $class = explode("/", $_row["class"]);
         $class = $class[0] . "/cronjob_" . $class[1];
         $cronjobObj = Application::factory($class);
         if ($cronjobObj instanceof Recipe_CronjobAbstract) {
             Hook::event("ExecuteCronjob", array($this, &$_row, $cronjobObj));
             $cronjobObj->execute($_row["cronid"], $_row["xtime"], $this->calcNextExeTime($_row));
         } else {
             throw new Recipe_Exception_Generic("Cannot execute cron job \"{$_row["class"]}\".");
         }
     }
     $_result->closeCursor();
     return $this;
 }
 /**
  * @return Bengine_Game_Achievement_Requirement_Abstract
  */
 public function getRequirementObject()
 {
     if (!$this->exists("requirement_object")) {
         /* @var Bengine_Game_Achievement_Requirement_Abstract $object */
         $object = Application::factory($this->get("class"), null);
         if (!$object) {
             throw new Recipe_Exception_Generic("Unknown achievement requirement '{$this->get("class")}'.");
         }
         $object->setValue($this->get("value"));
         $object->setId($this->get("id"));
         $config = $this->get("config");
         if (!empty($config)) {
             $config = @json_decode($config, true);
             if (false === $config) {
                 $config = @unserialize($config);
             }
         }
         if (is_array($config)) {
             $object->setConfig($config);
         }
         $this->set("requirement_object", $object);
     }
     return $this->get("requirement_object");
 }
Example #6
0
 /**
  * Shows content of a message folder.
  *
  * @param integer $id	Folder id
  *
  * @return Bengine_Game_Controller_MSG
  */
 protected function readFolderAction($id)
 {
     if ($this->isPost()) {
         $this->deleteMessages($id, $this->getParam("deleteOption"), $this->getParam("msgid", array()));
     }
     $pagination = $this->getPagination($id);
     $pagination->render();
     $readMessages = array();
     /* @var Bengine_Game_Model_Collection_Message $messages */
     $messages = Game::getCollection("game/message");
     $messages->addTimeOrder()->addFolderJoin()->addReceiverFilter(Core::getUser()->get("userid"))->addFolderFilter($id)->setPagination($pagination);
     $folderObjCache = array();
     /* @var Bengine_Game_Model_Message $message */
     foreach ($messages as $message) {
         Hook::event("ReadMessageFirst", array($message));
         $folderCode = $message->get("folder_class");
         if (!isset($folderObjCache[$folderCode])) {
             $folderClass = explode("/", $folderCode);
             $folderClass = $folderClass[0] . "/messageFolder_" . $folderClass[1];
             $folderObj = Application::factory($folderClass);
             $folderObjCache[$folderCode] = $folderObj;
         } else {
             $folderObj = $folderObjCache[$folderCode];
         }
         $folderObj->formatMessage($message);
         if (!$message->get("read")) {
             $readMessages[] = (int) $message->get("msgid");
         }
         Hook::event("ReadMessageLast", array($message));
     }
     if (count($readMessages) > 0) {
         Core::getQuery()->update("message", array("read" => 1), "msgid = " . implode(" OR msgid = ", $readMessages));
     }
     Core::getTPL()->addLoop("messages", $messages);
     Core::getTPL()->assign("mode", $id);
     Core::getTPL()->assign("pagination", $pagination);
     return $this;
 }
Example #7
0
 /**
  * Returns the last messages for the user.
  *
  * @param integer $offset
  * @param integer $count
  *
  * @return array
  */
 protected function getItems($offset, $count)
 {
     $folderClassCache = array();
     $items = array();
     /* @var Bengine_Game_Model_Collection_Message $messages */
     $messages = Comm::getCollection("game/message");
     $messages->addTimeOrder()->addReceiverFilter($this->user_id)->addFolderJoin();
     $select = $messages->getSelect();
     $select->limit($offset, $count);
     $select->where("m.mode != ?", self::OUTBOX_FOLDER_ID);
     /* @var Bengine_Game_Model_Message $message */
     foreach ($messages as $message) {
         /* @var Bengine_Game_MessageFolder_Abstract $folderObj */
         $folderCode = $message->get("folder_class");
         if (!isset($folderClassCache[$folderCode])) {
             $folderClass = explode("/", $folderCode);
             $folderClass = $folderClass[0] . "/messageFolder_" . $folderClass[1];
             $folderObj = Application::factory($folderClass);
             $folderClassCache[$folderCode] = $folderObj;
         } else {
             $folderObj = $folderClassCache[$folderCode];
         }
         $folderObj->formatMessage($message, true);
         $items[] = array("date" => Date::timeToString(3, $message->getTime(), "D, d M Y H:i:s O", false), "author" => $message->get("username") ? $message->get("username") : "System", "title" => strip_tags($message->get("subject")), "text" => $message->get("message"), "link" => $message->get("link"), "date_atom" => Date::timeToString(3, $message->getTime(), "c", false), "guid" => $message->getId());
     }
     return $items;
 }