/** * @see wcf\system\template\IModifierTemplatePlugin::execute() */ public function execute($tagArgs, TemplateEngine $tplObj) { // default values $length = 80; $etc = '...'; $breakWords = false; // get values $string = $tagArgs[0]; if (isset($tagArgs[1])) { $length = intval($tagArgs[1]); } if (isset($tagArgs[2])) { $etc = $tagArgs[2]; } if (isset($tagArgs[3])) { $breakWords = $tagArgs[3]; } // execute plugin if ($length == 0) { return ''; } if (StringUtil::length($string) > $length) { $length -= StringUtil::length($etc); if (!$breakWords) { $string = preg_replace('/\\s+?(\\S+)?$/', '', StringUtil::substring($string, 0, $length + 1)); } return StringUtil::substring($string, 0, $length) . $etc; } else { return $string; } }
/** * @see wcf\system\option\IOptionType::validate() */ public function validate(Option $option, $newValue) { if ($option->minlength !== null && $option->minlength > StringUtil::length($newValue)) { throw new UserInputException($option->optionName, 'tooShort'); } if ($option->maxlength !== null && $option->maxlength < StringUtil::length($newValue)) { throw new UserInputException($option->optionName, 'tooLong'); } }
/** * Returns true, if the given name is a valid username. * * @param string $name username * @return boolean */ public static function isValidUsername($name) { // check illegal characters if (!preg_match('!^[^,\\n]+$!', $name)) { return false; } // check long words $words = preg_split('!\\s+!', $name, -1, PREG_SPLIT_NO_EMPTY); foreach ($words as $word) { if (StringUtil::length($word) > 20) { return false; } } return true; }
/** * @see wcf\form\IForm::validate() */ public function validate() { ACPForm::validate(); if (empty($this->masterPassword)) { throw new UserInputException('masterPassword'); } // check password security if (StringUtil::length($this->masterPassword) < 8) { throw new UserInputException('masterPassword', 'notSecure'); } // digits if (!Regex::compile('\\d')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // latin characters (lower-case) if (!Regex::compile('[a-z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // latin characters (upper-case) if (!Regex::compile('[A-Z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // special characters if (!Regex::compile('[^0-9a-zA-Z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // password equals username if ($this->masterPassword == WCF::getUser()->username) { throw new UserInputException('masterPassword', 'notSecure'); } // search for identical admin passwords $sql = "SELECT\tpassword, salt\n\t\t\tFROM\twcf" . WCF_N . "_user\n\t\t\tWHERE\tuserID IN (\n\t\t\t\t\tSELECT\tuserID\n\t\t\t\t\tFROM\twcf" . WCF_N . "_user_to_group\n\t\t\t\t\tWHERE\tgroupID = 4\n\t\t\t\t)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); while ($row = $statement->fetchArray()) { if (StringUtil::getDoubleSaltedHash($this->masterPassword, $row['salt']) == $row['password']) { throw new UserInputException('masterPassword', 'notSecure'); } } // confirm master password if (empty($this->confirmMasterPassword)) { throw new UserInputException('confirmMasterPassword'); } if ($this->confirmMasterPassword != $this->masterPassword) { throw new UserInputException('confirmMasterPassword', 'notEqual'); } }
/** * @see wcf\form\IForm::validate() */ public function validate() { AbstractForm::validate(); if (empty($this->masterPassword)) { throw new UserInputException('masterPassword'); } // check password security if (StringUtil::length($this->masterPassword) < 8) { throw new UserInputException('masterPassword', 'notSecure'); } // digits if (!Regex::compile('\d')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // latin characters (lower-case) if (!Regex::compile('[a-z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // latin characters (upper-case) if (!Regex::compile('[A-Z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // special characters if (!Regex::compile('[^0-9a-zA-Z]')->match($this->masterPassword)) { throw new UserInputException('masterPassword', 'notSecure'); } // password equals username if ($this->masterPassword == WCF::getUser()->username) { throw new UserInputException('masterPassword', 'notSecure'); } // confirm master password if (empty($this->confirmMasterPassword)) { throw new UserInputException('confirmMasterPassword'); } if ($this->confirmMasterPassword != $this->masterPassword) { throw new UserInputException('confirmMasterPassword', 'notEqual'); } }
/** * add private conversation message * * @param Object $oMbqEtPcMsg * @param Object $oMbqEtPc */ public function addMbqEtPcMsg($oMbqEtPcMsg, $oMbqEtPc) { $oConversation = $oMbqEtPc->mbqBind['oViewableConversation']->getDecoratedObject(); //ref wcf\form\MessageForm,wcf\form\ConversationMessageAddForm $oMbqEtPcMsg->msgContent->setOriValue(MessageUtil::stripCrap(StringUtil::trim($oMbqEtPcMsg->msgContent->oriValue))); $attachmentObjectType = 'com.woltlab.wcf.conversation.message'; $attachmentObjectID = 0; $tmpHash = StringUtil::getRandomID(); $attachmentParentObjectID = 0; //settings $preParse = $enableSmilies = $enableBBCodes = $showSignature = $enableHtml = 0; $preParse = 1; if (WCF::getSession()->getPermission('user.message.canUseSmilies')) { $enableSmilies = 1; } //if (WCF::getSession()->getPermission('user.message.canUseHtml')) $enableHtml = 1; if (WCF::getSession()->getPermission('user.message.canUseBBCodes')) { $enableBBCodes = 1; } $showSignature = 1; // get max text length $maxTextLength = WCF::getSession()->getPermission('user.conversation.maxLength'); //!!! use this,is better than 0 //begin validate $allowedBBCodesPermission = 'user.message.allowedBBCodes'; //validateText if (empty($oMbqEtPcMsg->msgContent->oriValue)) { MbqError::alert('', "Need message content.", '', MBQ_ERR_APP); } // check text length if ($maxTextLength != 0 && StringUtil::length($oMbqEtPcMsg->msgContent->oriValue) > $maxTextLength) { MbqError::alert('', "Message content is too long.", '', MBQ_ERR_APP); } if ($enableBBCodes && $allowedBBCodesPermission) { $disallowedBBCodes = BBCodeParser::getInstance()->validateBBCodes($oMbqEtPcMsg->msgContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission)))); if (!empty($disallowedBBCodes)) { MbqError::alert('', "Message content included disallowed bbcodes.", '', MBQ_ERR_APP); } } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtPcMsg->msgContent->oriValue); if ($result) { MbqError::alert('', "Found censored words in message content.", '', MBQ_ERR_APP); } } //language $languageID = NULL; //attachment if (MODULE_ATTACHMENT && $attachmentObjectType) { $attachmentHandler = new AttachmentHandler($attachmentObjectType, $attachmentObjectID, $tmpHash, $attachmentParentObjectID); } //save if ($preParse) { // BBCodes are enabled if ($enableBBCodes) { if ($allowedBBCodesPermission) { $oMbqEtPcMsg->msgContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPcMsg->msgContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission))))); } else { $oMbqEtPcMsg->msgContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPcMsg->msgContent->oriValue)); } } else { $oMbqEtPcMsg->msgContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPcMsg->msgContent->oriValue, array())); } } // save message $data = array('conversationID' => $oConversation->conversationID, 'message' => $oMbqEtPcMsg->msgContent->oriValue, 'time' => TIME_NOW, 'userID' => WCF::getUser()->userID, 'username' => WCF::getUser()->username, 'enableBBCodes' => $enableBBCodes, 'enableHtml' => $enableHtml, 'enableSmilies' => $enableSmilies, 'showSignature' => $showSignature); $messageData = array('data' => $data, 'attachmentHandler' => $attachmentHandler); $objectAction = new ConversationMessageAction(array(), 'create', $messageData); $resultValues = $objectAction->executeAction(); if ($resultValues['returnValues']->messageID) { $oMbqEtPcMsg->msgId->setOriValue($resultValues['returnValues']->messageID); } else { MbqError::alert('', "Can not create topic.", '', MBQ_ERR_APP); } return $oMbqEtPcMsg; }
/** * @see wcf\form\IForm::validate() */ public function validate() { // remove user doubles $this->user = array_unique($this->user); foreach ($this->user as $id => $user) { if ($user === null) { unset($this->user[$id]); } } if ($this->sum < 1 && !$this->isModerativ) { throw new UserInputException('sum', 'tooLess'); } if (StringUtil::length($this->reason) > 255) { throw new UserInputException('reason', 'tooLong'); } if (StringUtil::length($this->reason) < 3) { throw new UserInputException('reason', 'tooShort'); } if (count($this->user) == 0) { throw new UserInputException('username', 'empty'); } foreach ($this->user as $user) { if ($user->isIgnoredUser(WCF::getUser()->userID)) { WCF::getTPL()->assign(array('ignoredUsername' => $user->username)); throw new UserInputException('user', 'isIgnored'); } } if (WCF::getUser()->jCoinsBalance < $this->sum * count($this->user) && !$this->isModerativ) { throw new UserInputException('sum', 'tooMuch'); } parent::validate(); }
/** * Returns html entities of all characters in the given string. * * @param string $string * @return string */ public static function encodeAllChars($string) { $result = ''; for ($i = 0, $j = StringUtil::length($string); $i < $j; $i++) { $char = StringUtil::substring($string, $i, 1); $result .= '&#' . StringUtil::getCharValue($char) . ';'; } return $result; }
/** * @see \wcf\system\event\listener\IParameterizedEventListener::execute() */ public function execute($eventObj, $className, $eventName, array &$parameters) { if (MODULE_JCOINS == 0 || MODULE_LIKE == 0) { return; } switch ($eventObj->getActionName()) { case 'like': case 'dislike': break; default: return; } $returnValues = $eventObj->getReturnValues(); $returnValues = $returnValues['returnValues']; $objectID = $eventObj->getParameters(); $like = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.like.likeableObject', $objectID['data']['objectType'])->getProcessor()->getObjectByID($objectID['data']['objectID']); // the object-user-id is unknown if (!$like->userID) { return; } $addtionalData = array('username' => \wcf\system\WCF::getUser()->username); if ($like->getObjectID() != 0) { $addtionalData['title'] = $like->getTitle(); } // because a title which is to long is uncool (profile-comments) if (isset($addtionalData['title']) && StringUtil::length($addtionalData['title']) > 30) { $addtionalData['title'] = StringUtil::substring($addtionalData['title'], 0, 26); $addtionalData['title'] .= '...'; } switch ($returnValues['oldValue']) { case Like::LIKE: if (JCOINS_RECEIVECOINS_LIKE != 0) { $this->statementAction = new UserJcoinsStatementAction(array(), 'create', array('data' => array('userID' => $like->userID, 'reason' => 'wcf.jcoins.statement.like.revoke', 'sum' => JCOINS_RECEIVECOINS_LIKE * -1, 'link' => $like->getURL(), 'additionalData' => $addtionalData), 'changeBalance' => 1)); $this->statementAction->validateAction(); $this->statementAction->executeAction(); } break; case Like::DISLIKE: if (JCOINS_RECEIVECOINS_DISLIKE != 0) { $this->statementAction = new UserJcoinsStatementAction(array(), 'create', array('data' => array('userID' => $like->userID, 'reason' => 'wcf.jcoins.statement.dislike.revoke', 'sum' => JCOINS_RECEIVECOINS_DISLIKE * -1, 'link' => $like->getURL(), 'additionalData' => $addtionalData), 'changeBalance' => 1)); $this->statementAction->validateAction(); $this->statementAction->executeAction(); } break; } switch ($returnValues['newValue']) { case Like::LIKE: if (JCOINS_RECEIVECOINS_LIKE != 0) { $this->statementAction = new UserJcoinsStatementAction(array(), 'create', array('data' => array('userID' => $like->userID, 'reason' => 'wcf.jcoins.statement.like.recive', 'sum' => JCOINS_RECEIVECOINS_LIKE, 'link' => $like->getURL(), 'additionalData' => $addtionalData), 'changeBalance' => 1)); $this->statementAction->validateAction(); $this->statementAction->executeAction(); } break; case Like::DISLIKE: if (JCOINS_RECEIVECOINS_DISLIKE != 0) { $this->statementAction = new UserJcoinsStatementAction(array(), 'create', array('data' => array('userID' => $like->userID, 'reason' => 'wcf.jcoins.statement.dislike.recive', 'sum' => JCOINS_RECEIVECOINS_DISLIKE, 'link' => $like->getURL(), 'additionalData' => $addtionalData), 'changeBalance' => 1)); $this->statementAction->validateAction(); $this->statementAction->executeAction(); } break; } }
/** * add forum topic * * @param $oMbqEtForumTopic */ public function addMbqEtForumTopic($oMbqEtForumTopic) { $oMbqRdEtForum = MbqMain::$oClk->newObj('MbqRdEtForum'); $objsMbqEtForum = $oMbqRdEtForum->getObjsMbqEtForum(array($oMbqEtForumTopic->forumId->oriValue), array('case' => 'byForumIds')); if ($oMbqEtForum = $objsMbqEtForum[0]) { $oBoard = $oMbqEtForum->mbqBind['oDetailedBoardNode']->getBoard(); } else { MbqError::alert('', "Need valid forum.", '', MBQ_ERR_APP); } //ref wcf\form\MessageForm,wbb\form\ThreadAddForm $oMbqEtForumTopic->topicTitle->setOriValue(StringUtil::trim($oMbqEtForumTopic->topicTitle->oriValue)); $oMbqEtForumTopic->topicContent->setOriValue(MessageUtil::stripCrap(StringUtil::trim($oMbqEtForumTopic->topicContent->oriValue))); $attachmentObjectType = 'com.woltlab.wbb.post'; $attachmentObjectID = 0; $tmpHash = $oMbqEtForumTopic->groupId->oriValue ? $oMbqEtForumTopic->groupId->oriValue : StringUtil::getRandomID(); $attachmentParentObjectID = $oBoard->boardID; //settings $preParse = $enableSmilies = $enableBBCodes = $showSignature = $subscribeThread = $enableHtml = 0; $preParse = 1; if (WCF::getSession()->getPermission('user.message.canUseSmilies')) { $enableSmilies = 1; } //if (WCF::getSession()->getPermission('user.message.canUseHtml')) $enableHtml = 1; if (WCF::getSession()->getPermission('user.message.canUseBBCodes')) { $enableBBCodes = 1; } $showSignature = 1; $subscribeThread = 1; $type = Thread::TYPE_DEFAULT; // get max text length $maxTextLength = WCF::getSession()->getPermission('user.board.maxPostLength'); $minCharLength = WBB_THREAD_MIN_CHAR_LENGTH; $minWordCount = WBB_THREAD_MIN_WORD_COUNT; //begin validate $allowedBBCodesPermission = 'user.message.allowedBBCodes'; //validateSubject if (empty($oMbqEtForumTopic->topicTitle->oriValue)) { MbqError::alert('', "Need topic title.", '', MBQ_ERR_APP); } if (StringUtil::length($oMbqEtForumTopic->topicTitle->oriValue) > 255) { MbqError::alert('', "Topic title is too long.", '', MBQ_ERR_APP); } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtForumTopic->topicTitle->oriValue); if ($result) { MbqError::alert('', "Found censored words in topic title.", '', MBQ_ERR_APP); } } //validateText if (empty($oMbqEtForumTopic->topicContent->oriValue)) { MbqError::alert('', "Need topic content.", '', MBQ_ERR_APP); } // check text length if ($maxTextLength != 0 && StringUtil::length($oMbqEtForumTopic->topicContent->oriValue) > $maxTextLength) { MbqError::alert('', "Topic content is too long.", '', MBQ_ERR_APP); } if ($enableBBCodes && $allowedBBCodesPermission) { $disallowedBBCodes = BBCodeParser::getInstance()->validateBBCodes($oMbqEtForumTopic->topicContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission)))); if (!empty($disallowedBBCodes)) { MbqError::alert('', "Topic content included disallowed bbcodes.", '', MBQ_ERR_APP); } } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtForumTopic->topicContent->oriValue); if ($result) { MbqError::alert('', "Found censored words in topic content.", '', MBQ_ERR_APP); } } if ($minCharLength && StringUtil::length($oMbqEtForumTopic->topicContent->oriValue) < $minCharLength) { MbqError::alert('', "Topic content is too short.", '', MBQ_ERR_APP); } if ($minWordCount && count(explode(' ', $oMbqEtForumTopic->topicContent->oriValue)) < $minWordCount) { MbqError::alert('', "Need more words in topic content", '', MBQ_ERR_APP); } //language //$languageID = LanguageFactory::getInstance()->getUserLanguage()->languageID; $languageID = NULL; //attachment if (MODULE_ATTACHMENT && $attachmentObjectType) { $attachmentHandler = new AttachmentHandler($attachmentObjectType, $attachmentObjectID, $tmpHash, $attachmentParentObjectID); } //save if ($preParse) { // BBCodes are enabled if ($enableBBCodes) { if ($allowedBBCodesPermission) { $oMbqEtForumTopic->topicContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumTopic->topicContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission))))); } else { $oMbqEtForumTopic->topicContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumTopic->topicContent->oriValue)); } } else { $oMbqEtForumTopic->topicContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumTopic->topicContent->oriValue, array())); } } // save thread $data = array('boardID' => $oMbqEtForumTopic->forumId->oriValue, 'languageID' => $languageID, 'topic' => $oMbqEtForumTopic->topicTitle->oriValue, 'time' => TIME_NOW, 'userID' => MbqMain::$oCurMbqEtUser->userId->oriValue, 'username' => MbqMain::$oCurMbqEtUser->loginName->oriValue, 'hasLabels' => 0); $data['isClosed'] = 0; if (!$oBoard->getPermission('canStartThreadWithoutModeration')) { $data['isDisabled'] = 1; } $threadData = array('data' => $data, 'board' => $oBoard, 'attachmentHandler' => $attachmentHandler, 'postData' => array('message' => $oMbqEtForumTopic->topicContent->oriValue, 'enableBBCodes' => $enableBBCodes, 'enableHtml' => $enableHtml, 'enableSmilies' => $enableSmilies, 'showSignature' => $showSignature), 'tags' => array(), 'subscribeThread' => $subscribeThread); $oThreadAction = new ThreadAction(array(), 'create', $threadData); $resultValues = $oThreadAction->executeAction(); if ($resultValues['returnValues']->threadID) { $oMbqEtForumTopic->topicId->setOriValue($resultValues['returnValues']->threadID); $oMbqRdEtForumTopic = MbqMain::$oClk->newObj('MbqRdEtForumTopic'); $oMbqEtForumTopic = $oMbqRdEtForumTopic->initOMbqEtForumTopic($oMbqEtForumTopic->topicId->oriValue, array('case' => 'byTopicId')); //for get state /* mark forum topic read */ $this->markForumTopicRead($oMbqEtForumTopic); } else { MbqError::alert('', "Can not create topic.", '', MBQ_ERR_APP); } }
/** * modify forum post * * @param $oMbqEtForumPost */ public function mdfMbqEtForumPost($oMbqEtForumPost, $mbqOpt) { $oBoard = $oMbqEtForumPost->oMbqEtForumTopic->oMbqEtForum->mbqBind['oDetailedBoardNode']->getBoard(); $oThread = $oMbqEtForumPost->oMbqEtForumTopic->mbqBind['oViewableThread']->getDecoratedObject(); $oPost = $oMbqEtForumPost->mbqBind['oViewablePost']->getDecoratedObject(); //ref wbb\form\PostEditForm,wcf\form\MessageForm,wbb\form\ThreadAddForm $oMbqEtForumPost->postTitle->setOriValue(StringUtil::trim($oMbqEtForumPost->postTitle->oriValue)); $oMbqEtForumPost->postContent->setOriValue(MessageUtil::stripCrap(StringUtil::trim($oMbqEtForumPost->postContent->oriValue))); $editReason = ''; $attachmentObjectType = 'com.woltlab.wbb.post'; $attachmentObjectID = $oMbqEtForumPost->postId->oriValue; if ($oThread->firstPostID == $oMbqEtForumPost->postId->oriValue) { $enableMultilingualism = true; $isFirstPost = true; } $tmpHash = StringUtil::getRandomID(); $attachmentParentObjectID = $oBoard->boardID; //$attachmentParentObjectID = 0; //settings $preParse = $enableSmilies = $enableBBCodes = $showSignature = $subscribeThread = $enableHtml = 0; $preParse = 1; if (WCF::getSession()->getPermission('user.message.canUseSmilies')) { $enableSmilies = 1; } //if (WCF::getSession()->getPermission('user.message.canUseHtml')) $enableHtml = 1; if (WCF::getSession()->getPermission('user.message.canUseBBCodes')) { $enableBBCodes = 1; } $showSignature = 1; $subscribeThread = 1; $type = Thread::TYPE_DEFAULT; if ($oThread->isSticky) { $type = Thread::TYPE_STICKY; } elseif ($oThread->isAnnouncement) { MbqError::alert('', __METHOD__ . ',line:' . __LINE__ . '.' . 'Sorry,do not support announcement type.'); } if ($oBoard->getPermission('canHideEditNote')) { $hideEditNote = true; } else { $hideEditNote = false; } // get max text length $maxTextLength = WCF::getSession()->getPermission('user.board.maxPostLength'); $minCharLength = WBB_POST_MIN_CHAR_LENGTH; $minWordCount = WBB_POST_MIN_WORD_COUNT; //begin validate $allowedBBCodesPermission = 'user.message.allowedBBCodes'; //validateSubject if (StringUtil::length($oMbqEtForumPost->postTitle->oriValue) > 255) { MbqError::alert('', "Post title is too long.", '', MBQ_ERR_APP); } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtForumPost->postTitle->oriValue); if ($result) { MbqError::alert('', "Found censored words in post title.", '', MBQ_ERR_APP); } } //validateText if (empty($oMbqEtForumPost->postContent->oriValue)) { MbqError::alert('', "Need post content.", '', MBQ_ERR_APP); } // check text length if ($maxTextLength != 0 && StringUtil::length($oMbqEtForumPost->postContent->oriValue) > $maxTextLength) { MbqError::alert('', "Post content is too long.", '', MBQ_ERR_APP); } if ($enableBBCodes && $allowedBBCodesPermission) { $disallowedBBCodes = BBCodeParser::getInstance()->validateBBCodes($oMbqEtForumPost->postContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission)))); if (!empty($disallowedBBCodes)) { MbqError::alert('', "Post content included disallowed bbcodes.", '', MBQ_ERR_APP); } } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtForumPost->postContent->oriValue); if ($result) { MbqError::alert('', "Found censored words in post content.", '', MBQ_ERR_APP); } } if ($minCharLength && StringUtil::length($oMbqEtForumPost->postContent->oriValue) < $minCharLength) { MbqError::alert('', "Post content is too short.", '', MBQ_ERR_APP); } if ($minWordCount && count(explode(' ', $oMbqEtForumPost->postContent->oriValue)) < $minWordCount) { MbqError::alert('', "Need more words in Post content", '', MBQ_ERR_APP); } //attachment if (MODULE_ATTACHMENT && $attachmentObjectType) { $attachmentHandler = new AttachmentHandler($attachmentObjectType, $attachmentObjectID, $tmpHash, $attachmentParentObjectID); } //save if ($preParse) { // BBCodes are enabled if ($enableBBCodes) { if ($allowedBBCodesPermission) { $oMbqEtForumPost->postContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumPost->postContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission))))); } else { $oMbqEtForumPost->postContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumPost->postContent->oriValue)); } } else { $oMbqEtForumPost->postContent->setOriValue(PreParser::getInstance()->parse($oMbqEtForumPost->postContent->oriValue, array())); } } // save post $data = array('subject' => $oMbqEtForumPost->postTitle->oriValue, 'message' => $oMbqEtForumPost->postContent->oriValue, 'enableBBCodes' => $enableBBCodes, 'enableHtml' => $enableHtml, 'enableSmilies' => $enableSmilies, 'showSignature' => $showSignature); if (!$hideEditNote && (WCF::getUser()->userID != $oPost->userID || $oPost->time <= TIME_NOW - WBB_POST_EDIT_HIDE_EDIT_NOTE_PERIOD * 60)) { $data['editCount'] = $oPost->editCount + 1; $data['editReason'] = $editReason; $data['editor'] = WCF::getUser()->username; $data['editorID'] = WCF::getUser()->userID; $data['lastEditTime'] = TIME_NOW; } $oPostAction = new PostAction(array($oPost), 'update', array('attachmentHandler' => $attachmentHandler, 'data' => $data, 'isEdit' => true)); $oPostAction->executeAction(); $threadData = array(); if (isset($isFirstPost) && $isFirstPost) { // update title if ($oMbqEtForumPost->postTitle->oriValue != $oMbqEtForumPost->oMbqEtForumTopic->topicTitle->oriValue) { $threadData['topic'] = $oMbqEtForumPost->postTitle->oriValue; } // handle thread type switch ($type) { case Thread::TYPE_DEFAULT: $threadData['isSticky'] = 0; $threadData['isAnnouncement'] = 0; break; case Thread::TYPE_STICKY: $threadData['isSticky'] = 1; $threadData['isAnnouncement'] = 0; break; case Thread::TYPE_ANNOUNCEMENT: $threadData['isSticky'] = 0; $threadData['isAnnouncement'] = 1; break; } } if (isset($isFirstPost) && $isFirstPost || !empty($threadData)) { $threadData = array('data' => $threadData); if ($isFirstPost) { $threadData['announcementBoardIDs'] = array(); } //!!! $threadAction = new ThreadAction(array($oThread), 'update', $threadData); $threadAction->executeAction(); } // save subscription if (WCF::getUser()->userID) { if ($subscribeThread && !$oThread->isSubscribed()) { $action = new UserObjectWatchAction(array(), 'subscribe', array('data' => array('objectID' => $oPost->threadID, 'objectType' => 'com.woltlab.wbb.thread'), 'enableNotification' => UserNotificationHandler::getInstance()->getEventSetting('com.woltlab.wbb.post', 'post') !== false ? 1 : 0)); $action->executeAction(); } else { if (!$subscribeThread && $oThread->isSubscribed()) { $action = new UserObjectWatchAction(array(), 'unsubscribe', array('data' => array('objectID' => $oPost->threadID, 'objectType' => 'com.woltlab.wbb.thread'))); $action->executeAction(); } } } return $oMbqEtForumPost; }
/** * add private conversation * * @param Object $oMbqEtPc */ public function addMbqEtPc($oMbqEtPc) { //ref wcf\form\MessageForm,wcf\form\ConversationAddForm $oMbqEtPc->convTitle->setOriValue(StringUtil::trim($oMbqEtPc->convTitle->oriValue)); $oMbqEtPc->convContent->setOriValue(MessageUtil::stripCrap(StringUtil::trim($oMbqEtPc->convContent->oriValue))); $attachmentObjectType = 'com.woltlab.wcf.conversation.message'; $attachmentObjectID = 0; $tmpHash = StringUtil::getRandomID(); $attachmentParentObjectID = 0; // check max pc permission if (ConversationHandler::getInstance()->getConversationCount() >= WCF::getSession()->getPermission('user.conversation.maxConversations')) { MbqError::alert('', 'Sorry.You can not create more conversations.', '', MBQ_ERR_APP); } //settings $preParse = $enableSmilies = $enableBBCodes = $showSignature = $enableHtml = 0; $preParse = 1; if (WCF::getSession()->getPermission('user.message.canUseSmilies')) { $enableSmilies = 1; } //if (WCF::getSession()->getPermission('user.message.canUseHtml')) $enableHtml = 1; if (WCF::getSession()->getPermission('user.message.canUseBBCodes')) { $enableBBCodes = 1; } $showSignature = 1; // get max text length $maxTextLength = WCF::getSession()->getPermission('user.conversation.maxLength'); //begin validate try { $participantIDs = Conversation::validateParticipants(implode(",", $oMbqEtPc->userNames->oriValue)); } catch (UserInputException $e) { MbqError::alert('', $e->getMessage(), '', MBQ_ERR_APP); } catch (Exception $e) { MbqError::alert('', $e->getMessage(), '', MBQ_ERR_APP); } if (empty($participantIDs)) { MbqError::alert('', 'Need valid participant user ids.', '', MBQ_ERR_APP); } // check number of participants if (count($participantIDs) > WCF::getSession()->getPermission('user.conversation.maxParticipants')) { MbqError::alert('', 'Too many participants.', '', MBQ_ERR_APP); } $allowedBBCodesPermission = 'user.message.allowedBBCodes'; //validateSubject if (empty($oMbqEtPc->convTitle->oriValue)) { MbqError::alert('', "Need conversation title.", '', MBQ_ERR_APP); } if (StringUtil::length($oMbqEtPc->convTitle->oriValue) > 255) { MbqError::alert('', "Conversation title is too long.", '', MBQ_ERR_APP); } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtPc->convTitle->oriValue); if ($result) { MbqError::alert('', "Found censored words in conversation title.", '', MBQ_ERR_APP); } } //validateText if (empty($oMbqEtPc->convContent->oriValue)) { MbqError::alert('', "Need conversation content.", '', MBQ_ERR_APP); } // check text length if ($maxTextLength != 0 && StringUtil::length($oMbqEtPc->convContent->oriValue) > $maxTextLength) { MbqError::alert('', "Conversation content is too long.", '', MBQ_ERR_APP); } if ($enableBBCodes && $allowedBBCodesPermission) { $disallowedBBCodes = BBCodeParser::getInstance()->validateBBCodes($oMbqEtPc->convContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission)))); if (!empty($disallowedBBCodes)) { MbqError::alert('', "Conversation content included disallowed bbcodes.", '', MBQ_ERR_APP); } } // search for censored words if (ENABLE_CENSORSHIP) { $result = Censorship::getInstance()->test($oMbqEtPc->convContent->oriValue); if ($result) { MbqError::alert('', "Found censored words in conversation content.", '', MBQ_ERR_APP); } } //language $languageID = NULL; //attachment if (MODULE_ATTACHMENT && $attachmentObjectType) { $attachmentHandler = new AttachmentHandler($attachmentObjectType, $attachmentObjectID, $tmpHash, $attachmentParentObjectID); } //save if ($preParse) { // BBCodes are enabled if ($enableBBCodes) { if ($allowedBBCodesPermission) { $oMbqEtPc->convContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPc->convContent->oriValue, ArrayUtil::trim(explode(',', WCF::getSession()->getPermission($allowedBBCodesPermission))))); } else { $oMbqEtPc->convContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPc->convContent->oriValue)); } } else { $oMbqEtPc->convContent->setOriValue(PreParser::getInstance()->parse($oMbqEtPc->convContent->oriValue, array())); } } // save conversation $data = array('subject' => $oMbqEtPc->convTitle->oriValue, 'time' => TIME_NOW, 'userID' => WCF::getUser()->userID, 'username' => WCF::getUser()->username, 'isDraft' => 0, 'participantCanInvite' => 0); $conversationData = array('data' => $data, 'attachmentHandler' => $attachmentHandler, 'messageData' => array('message' => $oMbqEtPc->convContent->oriValue, 'enableBBCodes' => $enableBBCodes, 'enableHtml' => $enableHtml, 'enableSmilies' => $enableSmilies, 'showSignature' => $showSignature)); $conversationData['participants'] = $participantIDs; $conversationData['invisibleParticipants'] = array(); $objectAction = new ConversationAction(array(), 'create', $conversationData); $resultValues = $objectAction->executeAction(); if ($resultValues['returnValues']->conversationID) { $convId = $resultValues['returnValues']->conversationID; $messageId = $resultValues['returnValues']->messageID; $oMbqRdEtPc = MbqMain::$oClk->newObj('MbqRdEtPc'); $oMbqEtPc = $oMbqRdEtPc->initOMbqEtPc($convId, array('case' => 'byConvId')); } else { MbqError::alert('', "Can not create topic.", '', MBQ_ERR_APP); } return $oMbqEtPc; }
/** * Compiles a template tag. * * @param string $tag * @param string $identifier * @param array $metaData */ protected function compileTag($tag, $identifier, array &$metaData) { if (preg_match('~^'.$this->outputPattern.'~s', $tag)) { // variable output return $this->compileOutputTag($tag); } $match = array(); // replace 'else if' with 'elseif' $tag = preg_replace('~^else\s+if(?=\s)~i', 'elseif', $tag); if (preg_match('~^(/?\w+)~', $tag, $match)) { // build in function or plugin $tagCommand = $match[1]; $tagArgs = StringUtil::substring($tag, StringUtil::length($tagCommand)); switch ($tagCommand) { case 'if': $this->pushTag('if'); return $this->compileIfTag($tagArgs); case 'elseif': list($openTag) = end($this->tagStack); if ($openTag != 'if' && $openTag != 'elseif') { throw new SystemException($this->formatSyntaxError('unxepected {elseif}', $this->currentIdentifier, $this->currentLineNo)); } else if ($openTag == 'if') { $this->pushTag('elseif'); } return $this->compileIfTag($tagArgs, true); case 'else': list($openTag) = end($this->tagStack); if ($openTag != 'if' && $openTag != 'elseif') { throw new SystemException($this->formatSyntaxError('unexpected {else}', $this->currentIdentifier, $this->currentLineNo)); } $this->pushTag('else'); return '<?php } else { ?>'; case '/if': list($openTag) = end($this->tagStack); if ($openTag != 'if' && $openTag != 'elseif' && $openTag != 'else') { throw new SystemException($this->formatSyntaxError('unexpected {/if}', $this->currentIdentifier, $this->currentLineNo)); } $this->popTag('if'); return '<?php } ?>'; case 'include': return $this->compileIncludeTag($tagArgs, $identifier, $metaData); case 'foreach': $this->pushTag('foreach'); return $this->compileForeachTag($tagArgs); case 'foreachelse': list($openTag) = end($this->tagStack); if ($openTag != 'foreach') { throw new SystemException($this->formatSyntaxError('unexpected {foreachelse}', $this->currentIdentifier, $this->currentLineNo)); } $this->pushTag('foreachelse'); return '<?php } } else { { ?>'; case '/foreach': list($openTag) = end($this->tagStack); if ($openTag != 'foreach' && $openTag != 'foreachelse') { throw new SystemException($this->formatSyntaxError('unexpected {/foreach}', $this->currentIdentifier, $this->currentLineNo)); } $this->popTag('foreach'); return "<?php } } ?>"; case 'section': $this->pushTag('section'); return $this->compileSectionTag($tagArgs); case 'sectionelse': list($openTag) = end($this->tagStack); if ($openTag != 'section') { throw new SystemException($this->formatSyntaxError('unexpected {sectionelse}', $this->currentIdentifier, $this->currentLineNo)); } $this->pushTag('sectionelse'); return '<?php } } else { { ?>'; case '/section': list($openTag) = end($this->tagStack); if ($openTag != 'section' && $openTag != 'sectionelse') { throw new SystemException($this->formatSyntaxError('unexpected {/section}', $this->currentIdentifier, $this->currentLineNo)); } $this->popTag('section'); return "<?php } } ?>"; case 'capture': $this->pushTag('capture'); return $this->compileCaptureTag(true, $tagArgs); case '/capture': list($openTag) = end($this->tagStack); if ($openTag != 'capture') { throw new SystemException($this->formatSyntaxError('unexpected {/capture}', $this->currentIdentifier, $this->currentLineNo)); } $this->popTag('capture'); return $this->compileCaptureTag(false); case 'ldelim': return $this->leftDelimiter; case 'rdelim': return $this->rightDelimiter; default: // 1) compiler functions first if ($phpCode = $this->compileCompilerPlugin($tagCommand, $tagArgs)) { return $phpCode; } // 2) block functions if ($phpCode = $this->compileBlockPlugin($tagCommand, $tagArgs)) { return $phpCode; } // 3) functions if ($phpCode = $this->compileFunctionPlugin($tagCommand, $tagArgs)) { return $phpCode; } } } throw new SystemException($this->formatSyntaxError('unknown tag {'.$tag.'}', $this->currentIdentifier, $this->currentLineNo)); }
/** * Read available packages. */ protected function readPackages() { $sql = "SELECT * FROM wcf".WCF_N."_package ORDER BY packageName"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->languageID)); while ($row = $statement->fetchArray()) { $row['packageNameLength'] = StringUtil::length(WCF::getLanguage()->get($row['packageName'])); $this->packages[] = new Package(null, $row); if ($row['packageNameLength'] > $this->packageNameLength) { $this->packageNameLength = $row['packageNameLength']; } } }