/** * Creates a new message and returns the parsed template. * * @param \wcf\data\IMessageQuickReplyAction $object * @param array<array> $parameters * @param string $containerActionClassName * @param string $sortOrder * @param string $templateName * @param string $application * @return array */ public function createMessage(IMessageQuickReplyAction $object, array &$parameters, $containerActionClassName, $sortOrder, $templateName, $application = 'wcf') { $additionalFields = array(); EventHandler::getInstance()->fireAction($this, 'createMessage', $additionalFields); $tableIndexName = call_user_func(array($this->container, 'getDatabaseTableIndexName')); $parameters['data'][$tableIndexName] = $parameters['objectID']; $parameters['data']['time'] = TIME_NOW; $parameters['data']['userID'] = WCF::getUser()->userID ?: null; $parameters['data']['username'] = WCF::getUser()->username; // pre-parse message text if ($parameters['data']['preParse']) { $parameters['data']['message'] = PreParser::getInstance()->parse($parameters['data']['message'], $this->allowedBBodes); } unset($parameters['data']['preParse']); $parameters['data'] = array_merge($additionalFields, $parameters['data']); // attachment support if (MODULE_ATTACHMENT && !empty($parameters['tmpHash']) && $object instanceof IAttachmentMessageQuickReplyAction) { $parameters['attachmentHandler'] = $object->getAttachmentHandler($this->container); } $message = $object->create(); $eventParameters = array('message' => $message); EventHandler::getInstance()->fireAction($this, 'createdMessage', $eventParameters); if ($message instanceof IMessage && !$message->isVisible()) { return array('isVisible' => false); } // resolve the page no list($pageNo, $count) = $object->getPageNo($this->container); // we're still on current page if ($pageNo == $parameters['pageNo']) { // check for additional messages $messageList = $object->getMessageList($this->container, $parameters['lastPostTime']); // calculate start index $startIndex = $count - (count($messageList) - 1); WCF::getTPL()->assign(array('attachmentList' => $messageList->getAttachmentList(), 'container' => $this->container, 'objects' => $messageList, 'startIndex' => $startIndex, 'sortOrder' => $sortOrder)); // assign 'to top' link if (isset($parameters['anchor'])) { WCF::getTPL()->assign('anchor', $parameters['anchor']); } // update visit time (messages shouldn't occur as new upon next visit) if (ClassUtil::isInstanceOf($containerActionClassName, 'wcf\\data\\IVisitableObjectAction')) { $containerAction = new $containerActionClassName(array($this->container instanceof DatabaseObjectDecorator ? $this->container->getDecoratedObject() : $this->container), 'markAsRead'); $containerAction->executeAction(); } return array('lastPostTime' => $message->time, 'template' => WCF::getTPL()->fetch($templateName, $application)); } else { // redirect return array('url' => $object->getRedirectUrl($this->container, $message)); } }
/** * Returns the child categories of the given category. * * @param wcf\data\DatabaseObject $category * @return array<wcf\data\category\Category> */ public function getChildCategories(DatabaseObject $category) { if (!($category instanceof Category) && (!($category instanceof DatabaseObjectDecorator) || !($category->getDecoratedObject() instanceof Category))) { throw new SystemException("Invalid object given (class: ".get_class($category).")"); } $categories = array(); foreach ($this->categories as $__category) { if ($__category->parentCategoryID == $category->categoryID && ($category->categoryID || $category->objectTypeID == $__category->objectTypeID)) { $categories[$__category->categoryID] = $__category; } } return $categories; }