/**
  * @see EventListener::execute()
  */
 public function execute($eventObj, $className, $eventName)
 {
     if (empty(URLParser::$text)) {
         return;
     }
     // reset data
     $this->postIDToThreadID = $this->threads = array();
     $threadIDs = $postIDs = array();
     // get page urls
     $pageURLs = URLBBCode::getPageURLs();
     $pageURLs = '(?:' . implode('|', array_map(create_function('$a', 'return preg_quote($a, \'~\');'), $pageURLs)) . ')';
     // build search pattern
     $threadIDPattern = "~\\[url\\](" . $pageURLs . "/?" . $this->threadURLPattern . ".*?)\\[/url\\]~i";
     $postIDPattern = "~\\[url\\](" . $pageURLs . "/?" . $this->postURLPattern . ".*?)\\[/url\\]~i";
     // find thread ids
     if (preg_match_all($threadIDPattern, URLParser::$text, $matches)) {
         $threadIDs = $matches[2];
     }
     // find post ids
     if (preg_match_all($postIDPattern, URLParser::$text, $matches)) {
         $postIDs = $matches[2];
     }
     if (count($threadIDs) > 0 || count($postIDs) > 0) {
         // get thread ids
         if (count($postIDs)) {
             $sql = "SELECT\tpostID, threadID\n\t\t\t\t\tFROM \twbb" . WBB_N . "_post\n\t\t\t\t\tWHERE \tpostID IN (" . implode(",", $postIDs) . ")";
             $result = WCF::getDB()->sendQuery($sql);
             while ($row = WCF::getDB()->fetchArray($result)) {
                 $this->postIDToThreadID[$row['postID']] = $row['threadID'];
                 $threadIDs[] = $row['threadID'];
             }
         }
         // get accessible boards
         require_once WBB_DIR . 'lib/data/board/Board.class.php';
         $boardIDs = Board::getAccessibleBoards();
         if (empty($boardIDs)) {
             return;
         }
         // get topics and prefixes :)
         if (count($threadIDs)) {
             // remove duplicates
             $threadIDs = array_unique($threadIDs);
             $sql = "SELECT\tthreadID, prefix, topic\n\t\t\t\t\tFROM \twbb" . WBB_N . "_thread\n\t\t\t\t\tWHERE \tthreadID IN (" . implode(",", $threadIDs) . ")\n\t\t\t\t \t\tAND boardid IN (0" . $boardIDs . ")";
             $result = WCF::getDB()->sendQuery($sql);
             while ($row = WCF::getDB()->fetchArray($result)) {
                 $this->threads[$row['threadID']] = $row;
             }
         }
         if (count($this->threads) > 0) {
             // insert topics
             URLParser::$text = preg_replace_callback($threadIDPattern, array($this, 'buildThreadURLCallback'), URLParser::$text);
             URLParser::$text = preg_replace_callback($postIDPattern, array($this, 'buildPostURLCallback'), URLParser::$text);
         }
     }
 }
 /**
  * @see EventListener::execute()
  */
 public function execute($eventObj, $className, $eventName)
 {
     if (!MODULE_CONTEST || empty(URLParser::$text)) {
         return;
     }
     // reset data
     $this->classes = $this->entries = array();
     $classIDArray = $contestIDArray = array();
     // get page urls
     $pageURLs = URLBBCode::getPageURLs();
     $pageURLs = '(?:' . implode('|', array_map('preg_quote', $pageURLs)) . ')';
     // build search pattern
     $classIDPattern = "!\\[url\\](" . $pageURLs . "/?" . $this->classURLPattern . ".*?)\\[/url\\]!i";
     $contestIDPattern = "!\\[url\\](" . $pageURLs . "/?" . $this->entryURLPattern . ".*?)\\[/url\\]!i";
     // find class ids
     if (preg_match_all($classIDPattern, URLParser::$text, $matches)) {
         $classIDArray = $matches[2];
     }
     // find entry ids
     if (preg_match_all($contestIDPattern, URLParser::$text, $matches)) {
         $contestIDArray = $matches[2];
     }
     // get classes
     if (count($classIDArray) > 0) {
         // remove duplicates
         $classIDArray = array_unique($classIDArray);
         $sql = "SELECT\tclassID, title\n\t\t\t\tFROM \twcf" . WCF_N . "_contest_class\n\t\t\t\tWHERE \tclassID IN (" . implode(",", $classIDArray) . ")";
         $result = WCF::getDB()->sendQuery($sql);
         while ($row = WCF::getDB()->fetchArray($result)) {
             $this->classes[$row['classID']] = $row['title'];
         }
         if (count($this->classes) > 0) {
             // insert classes
             URLParser::$text = preg_replace_callback($classIDPattern, array($this, 'buildClassURLTagCallback'), URLParser::$text);
         }
     }
     // get entries
     if (count($contestIDArray) > 0) {
         // remove duplicates
         $contestIDArray = array_unique($contestIDArray);
         $sql = "SELECT\tcontestID, subject\n\t\t\t\tFROM \twcf" . WCF_N . "_contest\n\t\t\t\tWHERE \tcontestID IN (" . implode(",", $contestIDArray) . ")";
         $result = WCF::getDB()->sendQuery($sql);
         while ($row = WCF::getDB()->fetchArray($result)) {
             $this->entries[$row['contestID']] = $row['subject'];
         }
         if (count($this->entries) > 0) {
             // insert classes
             URLParser::$text = preg_replace_callback($contestIDPattern, array($this, 'buildEntryURLTagCallback'), URLParser::$text);
         }
     }
 }