/** * @see wcf\system\ICronjob::execute() */ public function execute(Cronjob $cronjob) { $filename = FileUtil::downloadFileFromHttp('http://www.woltlab.com/spiderlist/spiderlist.xml', 'spiders'); $xml = new XML(); $xml->load($filename); $xpath = $xml->xpath(); // fetch spiders $spiders = $xpath->query('/spiderlist/spider'); if (count($spiders)) { // delete old entries $sql = "DELETE FROM wcf" . WCF_N . "_spider"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $statementParameters = array(); foreach ($spiders as $spider) { $identifier = StringUtil::toLowerCase($spider->getAttribute('ident')); $name = $xpath->query('name', $spider)->item(0); $info = $xpath->query('info', $spider)->item(0); $statementParameters[$identifier] = array('spiderIdentifier' => $identifier, 'spiderName' => $name->nodeValue, 'spiderURL' => $info ? $info->nodeValue : ''); } if (!empty($statementParameters)) { $sql = "INSERT INTO\twcf" . WCF_N . "_spider\n\t\t\t\t\t\t\t(spiderIdentifier, spiderName, spiderURL)\n\t\t\t\t\tVALUES\t\t(?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); foreach ($statementParameters as $parameters) { $statement->execute(array($parameters['spiderIdentifier'], $parameters['spiderName'], $parameters['spiderURL'])); } } // clear spider cache CacheHandler::getInstance()->clear(WCF_DIR . 'cache', 'cache.spiders.php'); } // delete tmp file @unlink($filename); }
/** * Fetches a user from the database. */ protected function getObject() { $sql = "SELECT\t\tuserID, registrationDate\n\t\t\tFROM\t\twcf" . WCF_N . "_user\n\t\t\tORDER BY\tuserID ASC"; $statement = \wcf\system\WCF::getDB()->prepareStatement($sql, 1, $this->generator->numberBetween(0, $this->userCount - 1)); $statement->execute(); $this->receiver = $statement->fetchObject('\\wcf\\data\\user\\User'); }
/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ protected function rebuild(array $parameters) { $data = array('boxes' => array(), 'pages' => array()); // load boxes $boxList = new DashboardBoxList(); $boxList->readObjects(); foreach ($boxList as $box) { $data['boxes'][$box->boxID] = $box; } // load settings $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.user.dashboardContainer'); $objectTypeIDs = array(); foreach ($objectTypes as $objectType) { $objectTypeIDs[] = $objectType->objectTypeID; } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("objectTypeID IN (?)", array($objectTypeIDs)); $sql = "SELECT\t\t*\n\t\t\tFROM\t\twcf" . WCF_N . "_dashboard_option\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\tshowOrder ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); while ($row = $statement->fetchArray()) { if (!isset($data['pages'][$row['objectTypeID']])) { $data['pages'][$row['objectTypeID']] = array(); } $data['pages'][$row['objectTypeID']][] = $row['boxID']; } return $data; }
/** * @see \wcf\system\importer\IImporter::import() */ public function import($oldID, array $data, array $additionalData = array()) { $data['packageID'] = 1; // set temporary option name $data['optionName'] = StringUtil::getRandomID(); if ($data['optionType'] == 'boolean' || $data['optionType'] == 'integer') { if (isset($data['defaultValue'])) { $data['defaultValue'] = intval($data['defaultValue']); } } // create category $this->createCategory($data['categoryName']); // save option $action = new UserOptionAction(array(), 'create', array('data' => $data)); $returnValues = $action->executeAction(); $userOption = $returnValues['returnValues']; // update generic option name $editor = new UserOptionEditor($userOption); $editor->update(array('optionName' => 'option' . $userOption->optionID)); // save name $sql = "INSERT IGNORE INTO\twcf" . WCF_N . "_language_item\n\t\t\t\t\t\t(languageID, languageItem, languageItemValue, languageItemOriginIsSystem, languageCategoryID, packageID)\n\t\t\tVALUES\t\t\t(?, ?, ?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(LanguageFactory::getInstance()->getDefaultLanguageID(), 'wcf.user.option.option' . $userOption->optionID, $additionalData['name'], 0, $this->languageCategoryID, 1)); ImportHandler::getInstance()->saveNewID('com.woltlab.wcf.user.option', $oldID, $userOption->optionID); return $userOption->optionID; }
/** * Deletes the cronjob log. */ public static function clearLogs($packageID = PACKAGE_ID) { // delete logs $sql = "DELETE FROM\twcf" . WCF_N . "_cronjob_log\n\t\t\tWHERE\t\tcronjobID IN (\n\t\t\t\t\t\tSELECT\tcronjobID\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_cronjob cronjob,\n\t\t\t\t\t\t\twcf" . WCF_N . "_package_dependency package_dependency\n\t\t\t\t\t\tWHERE \tcronjob.packageID = package_dependency.dependency\n\t\t\t\t\t\t\tAND package_dependency.packageID = ?\n\t\t\t\t\t)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($packageID); }
/** * Enables this option. * * @param boolean $enable */ public function enable($enable = true) { $value = intval(!$enable); $sql = "UPDATE\twcf" . WCF_N . "_user_option\n\t\t\tSET\tdisabled = ?\n\t\t\tWHERE\toptionID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($value, $this->optionID)); }
/** * @see \wcf\system\like\IViewableLikeProvider::prepare() */ public function prepare(array $likes) { $responseIDs = array(); foreach ($likes as $like) { $responseIDs[] = $like->objectID; } // get objects type ids $responses = array(); $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('comment_response.responseID IN (?)', array($responseIDs)); $sql = "SELECT\t\tcomment.objectTypeID, comment_response.responseID\n\t\t\tFROM\t\twcf" . WCF_N . "_comment_response comment_response\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_comment comment\n\t\t\tON\t\t(comment.commentID = comment_response.commentID)\n\t\t\t" . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); while ($row = $statement->fetchArray()) { $responses[$row['responseID']] = $row['objectTypeID']; } // group likes by object type id $likeData = array(); foreach ($likes as $like) { if (isset($responses[$like->objectID])) { if (!isset($likeData[$responses[$like->objectID]])) { $likeData[$responses[$like->objectID]] = array(); } $likeData[$responses[$like->objectID]][] = $like; } } foreach ($likeData as $objectTypeID => $likes) { $objectType = CommentHandler::getInstance()->getObjectType($objectTypeID); if (CommentHandler::getInstance()->getCommentManager($objectType->objectType) instanceof IViewableLikeProvider) { CommentHandler::getInstance()->getCommentManager($objectType->objectType)->prepare($likes); } } }
/** * @see \wcf\data\DatabaseObjectList::countObjects() */ public function countObjects() { $sql = "SELECT\tCOUNT(*) AS count\n\t\t\tFROM\tcms" . WCF_N . "_file_to_category file_to_category,\n\t\t\t\tcms" . WCF_N . "_file file\n\t\t\t" . $this->sqlConditionJoins . "\n\t\t\t" . $this->getConditionBuilder(); $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($this->getConditionBuilder()->getParameters()); return $statement->fetchColumn(); }
/** * @see wcf\system\cache\ICacheBuilder::getData() */ public function getData(array $cacheResource) { list($cache, $packageID) = explode('-', $cacheResource['cache']); $data = array('actions' => array('user' => array(), 'admin' => array()), 'inheritedActions' => array('user' => array(), 'admin' => array())); // get all listeners and filter options with low priority $sql = "SELECT\t\tevent_listener.*\n\t\t\tFROM\t\twcf" . WCF_N . "_event_listener event_listener\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_package_dependency package_dependency\n\t\t\tON\t\t(package_dependency.dependency = event_listener.packageID)\n\t\t\tWHERE \t\tpackage_dependency.packageID = ?\n\t\t\tORDER BY\tpackage_dependency.priority ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($packageID)); while ($row = $statement->fetchArray()) { // distinguish between inherited actions and non-inherited actions if (!$row['inherit']) { $data['actions'][$row['environment']][EventHandler::generateKey($row['eventClassName'], $row['eventName'])][] = $row; } else { if (!isset($data['inheritedActions'][$row['environment']][$row['eventClassName']])) { $data['inheritedActions'][$row['environment']][$row['eventClassName']] = array(); } $data['inheritedActions'][$row['environment']][$row['eventClassName']][$row['eventName']][] = $row; } } // sort data by nice value and class name foreach ($data['actions'] as &$listenerMap) { foreach ($listenerMap as &$listeners) { uasort($listeners, array(__CLASS__, 'sortListeners')); } } foreach ($data['inheritedActions'] as &$listenerMap) { foreach ($listenerMap as &$listeners) { foreach ($listeners as &$val) { uasort($val, array(__CLASS__, 'sortListeners')); } } } return $data; }
/** * Loads style-specific variables. */ public function loadVariables() { if (!empty($this->variables)) { return; } $sql = "SELECT variable.variableName, variable.defaultValue, value.variableValue FROM wcf".WCF_N."_style_variable variable LEFT JOIN wcf".WCF_N."_style_variable_value value ON (value.variableID = variable.variableID AND value.styleID = ?) ORDER BY variable.variableID ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->styleID)); while ($row = $statement->fetchArray()) { $variableName = $row['variableName']; $variableValue = (isset($row['variableValue'])) ? $row['variableValue'] : $row['defaultValue']; if (empty($variableValue)) { $variableValue = '~""'; } $this->variables[$variableName] = $variableValue; // provide an empty value for LESS-compiler if (empty($this->variables[$variableName])) { $this->variables[$variableName] = "~''"; } } }
/** * @see \wcf\system\setup\IFileHandler::logFiles() */ public function logFiles(array $files) { $packageID = $this->packageInstallation->getPackageID(); // remove file extension foreach ($files as &$file) { $file = substr($file, 0, -4); } unset($file); // get existing templates $existingTemplates = $updateTemplateIDs = array(); $sql = "SELECT\ttemplateName, templateID\n\t\t\tFROM\twcf" . WCF_N . "_template\n\t\t\tWHERE\tpackageID = ?\n\t\t\t\tAND application = ?\n\t\t\t\tAND templateGroupID IS NULL"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($packageID, $this->application)); while ($row = $statement->fetchArray()) { $existingTemplates[$row['templateName']] = $row['templateID']; } // save new templates $sql = "INSERT INTO\twcf" . WCF_N . "_template\n\t\t\t\t\t(packageID, templateName, lastModificationTime, application)\n\t\t\tVALUES\t\t(?, ?, ?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); foreach ($files as $file) { if (isset($existingTemplates[$file])) { $updateTemplateIDs[] = $existingTemplates[$file]; continue; } $statement->execute(array($packageID, $file, TIME_NOW, $this->application)); } if (!empty($updateTemplateIDs)) { // update old templates $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('templateID IN (?)', array($updateTemplateIDs)); $sql = "UPDATE\twcf" . WCF_N . "_template\n\t\t\t\tSET\tlastModificationTime = ?\n\t\t\t\t" . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array(TIME_NOW), $conditionBuilder->getParameters())); } }
/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ protected function rebuild(array $parameters) { $data = array(); // number of entry $sql = "SELECT\tCOUNT(*) AS count\n\t\t\tFROM\tlinklist" . WCF_N . "_entry"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $data['entries'] = $statement->fetchColumn(); // number of comments $sql = "SELECT\tSUM(comments) AS count\n\t\t\tFROM\tlinklist" . WCF_N . "_entry\n\t\t\tWHERE\tcomments > 0"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $data['comments'] = $statement->fetchColumn(); // number of authors $sql = "SELECT\tCOUNT(DISTINCT userID) AS count\n\t\t\tFROM\tlinklist" . WCF_N . "_entry"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $data['authors'] = $statement->fetchColumn(); // entries per day $days = ceil((TIME_NOW - LINKLIST_INSTALL_DATE) / 86400); if ($days <= 0) { $days = 1; } $data['entriesPerDay'] = $data['entries'] / $days; return $data; }
/** * @see \wcf\system\faker\IFaker::fake() */ public function fake() { $likeableObjectID = $this->getLikeableObjectID(); $likeableObject = $this->objectTypeProvider->getObjectByID($likeableObjectID); $likeableObject->setObjectType($this->objectType); $sql = "SELECT\t\tuserID, username\n\t\t\tFROM\t\twcf" . WCF_N . "_user\n\t\t\tORDER BY\tuserID ASC"; $statement = WCF::getDB()->prepareStatement($sql, 1, $this->generator->numberBetween(0, $this->userCount - 1)); $statement->execute(); $liker = $statement->fetchObject('\\wcf\\data\\user\\User'); if (isset($this->parameters['likeValue'])) { switch ($this->parameters['likeValue']) { case '+': $value = \wcf\data\like\Like::LIKE; break; case '-': $value = \wcf\data\like\Like::DISLIKE; break; case '+-': if ($this->generator->boolean) { $value = \wcf\data\like\Like::LIKE; } else { $value = \wcf\data\like\Like::DISLIKE; } } } else { $value = \wcf\data\like\Like::LIKE; } \wcf\system\like\LikeHandler::getInstance()->like($likeableObject, $liker, $value); }
protected function getTopOptionCategories($packageID) { // get all option categories and filter categories with low priority $sql = "SELECT\t\tcategoryName, categoryID \n\t\t\tFROM\t\twcf" . WCF_N . "_option_category option_category\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_package_dependency package_dependency\n\t\t\tON\t\t(package_dependency.dependency = option_category.packageID)\n\t\t\tWHERE \t\tpackage_dependency.packageID = ?\n\t\t\tORDER BY\tpackage_dependency.priority ASC"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($packageID)); $optionCategories = array(); while ($row = $statement->fetchArray()) { $optionCategories[$row['categoryName']] = $row['categoryID']; } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("categoryID IN (?)", array($optionCategories)); $statementParameters = $conditions->getParameters(); array_unshift($statementParameters, $packageID); $sql = "SELECT \t\tcategoryID, parentCategoryName, categoryName,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT COUNT(*) FROM wcf" . WCF_N . "_option WHERE categoryName = category.categoryName AND packageID IN (\n\t\t\t\t\t\t\tSELECT dependency FROM wcf" . WCF_N . "_package_dependency WHERE packageID = ?\n\t\t\t\t\t\t)\n\t\t\t\t\t) AS count\n\t\t\tFROM\t\twcf" . WCF_N . "_option_category category\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($statementParameters); while ($row = $statement->fetchArray()) { if (!isset($this->optionCategoryStructure[$row['parentCategoryName']])) { $this->optionCategoryStructure[$row['parentCategoryName']] = array(); } $this->optionCategoryStructure[$row['parentCategoryName']][] = $row; } $topOptionCategories = array(); foreach ($this->optionCategoryStructure[''] as $optionCategory) { $count = $optionCategory['count'] + $this->countOptions($optionCategory['categoryName']); if ($count > 0) { $topOptionCategories[] = $optionCategory['categoryID']; } } return $topOptionCategories; }
/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ protected function rebuild(array $parameters) { $attributes = array(); $data = array('bbcodes' => array(), 'highlighters' => array()); // get attributes $sql = "SELECT\t\tattribute.*, bbcode.bbcodeTag\n\t\t\tFROM\t\twcf" . WCF_N . "_bbcode_attribute attribute\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_bbcode bbcode\n\t\t\tON\t\t(bbcode.bbcodeID = attribute.bbcodeID)\n\t\t\tWHERE\t\tbbcode.isDisabled = 0\n\t\t\tORDER BY\tattribute.attributeNo"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); while ($row = $statement->fetchArray()) { if (!isset($attributes[$row['bbcodeTag']])) { $attributes[$row['bbcodeTag']] = array(); } $attributes[$row['bbcodeTag']][$row['attributeNo']] = new BBCodeAttribute(null, $row); } // get bbcodes $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_bbcode\n\t\t\tWHERE\tisDisabled = 0"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); while ($row = $statement->fetchArray()) { $row['attributes'] = isset($attributes[$row['bbcodeTag']]) ? $attributes[$row['bbcodeTag']] : array(); $data['bbcodes'][$row['bbcodeTag']] = new BBCode(null, $row); } // get code highlighters $highlighters = glob(WCF_DIR . 'lib/system/bbcode/highlighter/*.class.php'); if (is_array($highlighters)) { foreach ($highlighters as $highlighter) { if (preg_match('~\\/([a-zA-Z]+)Highlighter\\.class\\.php$~', $highlighter, $matches)) { $data['highlighters'][] = strtolower($matches[1]); } } } return $data; }
/** * @see \wcf\system\moderation\queue\IModerationQueueHandler::assignQueues() */ public function assignQueues(array $queues) { $assignments = array(); // read comments and responses $responseIDs = array(); foreach ($queues as $queue) { $responseIDs[] = $queue->objectID; } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("comment_response.responseID IN (?)", array($responseIDs)); $sql = "SELECT\t\tcomment_response.responseID, comment.commentID, comment.objectTypeID, comment.objectID\n\t\t\tFROM\t\twcf" . WCF_N . "_comment_response comment_response\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_comment comment\n\t\t\tON\t\t(comment.commentID = comment_response.commentID)\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); $comments = $responses = array(); while ($row = $statement->fetchArray()) { $comments[$row['commentID']] = new Comment(null, $row); $responses[$row['responseID']] = new CommentResponse(null, $row); } $orphanedQueueIDs = array(); foreach ($queues as $queue) { $assignUser = false; if (!isset($responses[$queue->objectID]) || !isset($comments[$responses[$queue->objectID]->commentID])) { $orphanedQueueIDs[] = $queue->queueID; continue; } $comment = $comments[$responses[$queue->objectID]->commentID]; if ($this->getCommentManager($comment)->canModerate($comment->objectTypeID, $comment->objectID)) { $assignUser = true; } $assignments[$queue->queueID] = $assignUser; } ModerationQueueManager::getInstance()->removeOrphans($orphanedQueueIDs); ModerationQueueManager::getInstance()->setAssignment($assignments); }
/** * @see wcf\system\package\plugin\IPackageInstallationPlugin::install() */ public function install() { parent::install(); // get installation path of package $sql = "SELECT packageDir FROM wcf".WCF_N."_package WHERE packageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->installation->getPackageID())); $packageDir = $statement->fetchArray(); $packageDir = $packageDir['packageDir']; // get relative path of script $path = FileUtil::getRealPath(WCF_DIR.$packageDir); // reset WCF cache CacheHandler::getInstance()->flushAll(); // run script $this->run($path.$this->instruction['value']); // delete script if (@unlink($path.$this->instruction['value'])) { // delete file log entry $sql = "DELETE FROM wcf".WCF_N."_package_installation_file_log WHERE packageID = ? AND filename = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array( $this->installation->getPackageID(), $this->instruction['value'] )); } }
/** * @see \wcf\system\event\listener\IParameterizedEventListener::execute() */ public function execute($eventObj, $className, $eventName, array &$parameters) { // conversation $conditions = new PreparedStatementConditionBuilder(); $conditions->add("userID IN (?)", array($eventObj->mergedUserIDs)); $sql = "UPDATE\twcf" . WCF_N . "_conversation\n\t\t\tSET\tuserID = ?\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array($eventObj->destinationUserID), $conditions->getParameters())); // conversation_to_user $conditions = new PreparedStatementConditionBuilder(); $conditions->add("participantID IN (?)", array($eventObj->mergedUserIDs)); $sql = "UPDATE IGNORE\twcf" . WCF_N . "_conversation_to_user\n\t\t\tSET\t\tparticipantID = ?\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array($eventObj->destinationUserID), $conditions->getParameters())); // conversation_message $conditions = new PreparedStatementConditionBuilder(); $conditions->add("userID IN (?)", array($eventObj->mergedUserIDs)); $sql = "UPDATE\twcf" . WCF_N . "_conversation_message\n\t\t\tSET\tuserID = ?\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array($eventObj->destinationUserID), $conditions->getParameters())); // conversation_label $conditions = new PreparedStatementConditionBuilder(); $conditions->add("userID IN (?)", array($eventObj->mergedUserIDs)); $sql = "UPDATE\twcf" . WCF_N . "_conversation_label\n\t\t\tSET\tuserID = ?\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array($eventObj->destinationUserID), $conditions->getParameters())); }
/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ protected function rebuild(array $parameters) { $data = array(); // number of entry $sql = "SELECT\tCOUNT(*) AS count,\n\t\t\t\tSUM(downloads) AS downloads\n\t\t\tFROM\tfilebase" . WCF_N . "_entry"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $row = $statement->fetchArray(); $data['entries'] = $row['count']; $data['downloads'] = $row['downloads']; // number of comments $sql = "SELECT\tSUM(comments) AS count\n\t\t\tFROM\tfilebase" . WCF_N . "_entry\n\t\t\tWHERE\tcomments > 0"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $data['comments'] = $statement->fetchColumn(); // number of authors $sql = "SELECT\tCOUNT(DISTINCT userID) AS count\n\t\t\tFROM\tfilebase" . WCF_N . "_entry"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $data['authors'] = $statement->fetchColumn(); // files + total size $sql = "SELECT\tCOUNT(*) AS files,\n\t\t\t\tSUM(filesize) AS size\n\t\t\tFROM\tfilebase" . WCF_N . "_file"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $row = $statement->fetchArray(); $data['files'] = $row['files']; $data['size'] = $row['size']; // downloads per day $days = ceil((TIME_NOW - FILEBASE_INSTALL_DATE) / 86400); if ($days <= 0) { $days = 1; } $data['downloadsPerDay'] = $data['downloads'] / $days; return $data; }
/** * @see wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ public function rebuild(array $parameters) { // get object types $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.versionableObject'); $data = array( 'versions' => array(), 'versionIDs' => array() ); foreach ($objectTypes as $objectTypeID => $objectType) { $processorObject = $objectType->getProcessor(); $sql = "SELECT * FROM ".$processorObject::getDatabaseVersionTableName(); $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array()); while ($row = $statement->fetchArray()) { $object = new $objectType->className(null, $row); $data['versions'][$objectTypeID][$object->{$processorObject::getDatabaseIndexName()}] = $object; $data['versionIDs'][$objectTypeID][$object->{$processorObject::getDatabaseIndexName()}][] = $object->{$processorObject::getDatabaseVersionTableIndexName()}; } } return $data; }
/** * Returns the number of authentication failures for given user account. * * @param integer $userID * @return boolean */ public static function countUserFailures($userID) { $sql = "SELECT\tCOUNT(*) AS count\n\t\t\tFROM\twcf" . WCF_N . "_user_authentication_failure\n\t\t\tWHERE\tuserID = ?\n\t\t\t\tAND time > ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($userID, TIME_NOW - USER_AUTHENTICATION_FAILURE_TIMEOUT)); return $statement->fetchColumn(); }
/** * @see \wcf\system\cronjob\ICronjob::execute() */ public function execute(Cronjob $cronjob) { parent::execute($cronjob); $sql = "UPDATE\twcf" . WCF_N . "_user user_table,\n\t\t\t\twcf" . WCF_N . "_session session\n\t\t\tSET\tuser_table.lastActivityTime = session.lastActivityTime\n\t\t\tWHERE\tuser_table.userID = session.userID\n\t\t\t\tAND session.userID <> 0"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); }
/** * Fetches the information of the latest edit. * * @see \wcf\data\DatabaseObjectDecorator::__construct() */ public function __construct(DatabaseObject $object) { parent::__construct($object); $objectTypeID = ObjectTypeCache::getInstance()->getObjectTypeIDByName('com.woltlab.wcf.modifiableContent', 'de.incendium.cms.news.entry'); $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_modification_log\n\t\t\tWHERE\t\tobjectTypeID = ?\n\t\t\t\tAND\tobjectID = ?\n\t\t\t\tAND\taction = ?\n\t\t\tORDER BY time DESC"; $statement = WCF::getDB()->prepareStatement($sql, 1); $statement->execute(array($objectTypeID, $this->getDecoratedObject()->entryID, 'edit')); $row = $statement->fetchArray(); if ($row) { $this->userID = $row['userID']; $this->username = $row['username']; $this->time = $row['time']; $additionalData = @unserialize($row['additionalData']); if (isset($additionalData['reason'])) { $this->reason = $additionalData['reason']; } else { $this->reason = ''; } } else { $this->userID = $this->getDecoratedObject()->getUserID(); $this->username = $this->getDecoratedObject()->getUsername(); $this->time = $this->getDecoratedObject()->getTime(); $this->reason = ''; } }
/** * @inheritDoc */ public function getOutstandingItemCount($objectID = null) { if ($this->notifications === null) { $this->notifications = 0; if (WCF::getUser()->userID) { $data = UserStorageHandler::getInstance()->getField('filebaseUnreaWatchedEntries'); // cache does not exist or is outdated if ($data === null) { $categoryIDs = FilebaseCategory::getAccessibleCategoryIDs(); if (!empty($categoryIDs)) { $objectTypeID = UserObjectWatchHandler::getInstance()->getObjectTypeID('de.incendium.filebase.entry'); $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('user_object_watch.objectTypeID = ?', array($objectTypeID)); $conditionBuilder->add('user_object_watch.userID = ?', array(WCF::getUser()->userID)); $conditionBuilder->add('entry.lastChangeTime > ?', array(VisitTracker::getInstance()->getVisitTime('de.incendium.filebase.entry'))); $conditionBuilder->add('entry.entryID IN (SELECT entryID FROM filebase' . WCF_N . '_entry_to_category WHERE categoryID IN (?))', array($categoryIDs)); $conditionBuilder->add('entry.isDeleted = 0 AND entry.isDisabled = 0'); $conditionBuilder->add('(entry.lastChangeTime > tracked_file_visit.visitTime OR tracked_file_visit.visitTime IS NULL)'); $sql = "SELECT COUNT(*) AS count\n FROM wcf" . WCF_N . "_user_object_watch user_object_watch\n LEFT JOIN filebase" . WCF_N . "_entry entry\n ON (entry.entryID = user_object_watch.objectID)\n LEFT JOIN wcf" . WCF_N . "_tracked_visit tracked_file_visit\n ON (tracked_file_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('de.incendium.filebase.entry') . " AND tracked_file_visit.objectID = entry.entryID AND tracked_file_visit.userID = " . WCF::getUser()->userID . ")\n " . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); $row = $statement->fetchArray(); $this->notifications = $row['count']; } // update storage data UserStorageHandler::getInstance()->update(WCF::getUser()->userID, 'filebaseUnreadWatchedEntries', $this->notifications); } else { $this->notifications = $data; } } } return $this->notifications; }
/** * @see \wcf\system\event\listener\IParameterizedEventListener::execute() */ public function execute($eventObj, $className, $eventName, array &$parameters) { if (WCF::getUser()->userID && WCF::getSession()->getPermission('admin.general.canUseAcp') && !defined(get_class($eventObj) . '::DO_NOT_LOG')) { // try to find existing session log $sql = "SELECT\tsessionLogID\n\t\t\t\tFROM\twcf" . WCF_N . "_acp_session_log\n\t\t\t\tWHERE\tsessionID = ?\n\t\t\t\t\tAND lastActivityTime >= ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(WCF::getSession()->sessionID, TIME_NOW - SESSION_TIMEOUT)); $row = $statement->fetchArray(); if (!empty($row['sessionLogID'])) { $sessionLogID = $row['sessionLogID']; $sessionLogEditor = new ACPSessionLogEditor(new ACPSessionLog(null, array('sessionLogID' => $sessionLogID))); $sessionLogEditor->update(array('lastActivityTime' => TIME_NOW)); } else { // create new session log $sessionLog = ACPSessionLogEditor::create(array('sessionID' => WCF::getSession()->sessionID, 'userID' => WCF::getUser()->userID, 'ipAddress' => UserUtil::getIpAddress(), 'hostname' => @gethostbyaddr(WCF::getSession()->ipAddress), 'userAgent' => WCF::getSession()->userAgent, 'time' => TIME_NOW, 'lastActivityTime' => TIME_NOW)); $sessionLogID = $sessionLog->sessionLogID; } // format request uri $requestURI = WCF::getSession()->requestURI; // remove directories $URIComponents = explode('/', $requestURI); $requestURI = array_pop($URIComponents); // remove session url $requestURI = preg_replace('/(?:\\?|&)s=[a-f0-9]{40}/', '', $requestURI); // save access ACPSessionAccessLogEditor::create(array('sessionLogID' => $sessionLogID, 'ipAddress' => UserUtil::getIpAddress(), 'time' => TIME_NOW, 'requestURI' => $requestURI, 'requestMethod' => WCF::getSession()->requestMethod, 'className' => get_class($eventObj))); } }
/** * Counts the total number of rows. * * @param integer $date * @param string $tableName * @param string $dateColumnName * @return integer */ protected function getTotal($date, $tableName, $dateColumnName) { $sql = "SELECT\tCOUNT(*) AS count\n\t\t\tFROM\t" . $tableName . "\n\t\t\tWHERE\t" . $dateColumnName . " < ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($date + 86400)); return $statement->fetchColumn(); }
/** * Updates the values of the given options. * * @param array $options id to value */ public static function updateAll(array $options) { $sql = "SELECT\toptionID, optionValue\n\t\t\tFROM\twcf" . WCF_N . "_option\n\t\t\tWHERE\toptionName = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('cache_source_type')); $row = $statement->fetchArray(); $sql = "UPDATE\twcf" . WCF_N . "_option\n\t\t\tSET\toptionValue = ?\n\t\t\tWHERE\toptionID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $flushCache = false; WCF::getDB()->beginTransaction(); foreach ($options as $id => $value) { if ($id == $row['optionID'] && ($value != $row['optionValue'] || $value != CACHE_SOURCE_TYPE)) { $flushCache = true; } $statement->execute(array($value, $id)); } WCF::getDB()->commitTransaction(); // force a cache reset if options were changed self::resetCache(); // flush entire cache, as the CacheSource was changed if ($flushCache) { // flush caches (in case register_shutdown_function gets not properly called) CacheHandler::getInstance()->flushAll(); // flush cache before finishing request to flush caches created after this was executed register_shutdown_function(function () { CacheHandler::getInstance()->flushAll(); }); } }
/** * @see \wcf\page\IPage::readData() */ public function readData() { parent::readData(); // get object types $this->objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.rebuildData'); // sort object types uasort($this->objectTypes, function ($a, $b) { $niceValueA = $a->nicevalue ?: 0; $niceValueB = $b->nicevalue ?: 0; if ($niceValueA < $niceValueB) { return -1; } else { if ($niceValueA > $niceValueB) { return 1; } } return 0; }); $sql = "SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit'"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(); $row = $statement->fetchArray(); if ($row && $row['Value'] == 1) { $this->showInnoDBWarning = true; } }
/** * @see wcf\system\package\plugin\IPackageInstallationPlugin::uninstall() */ public function uninstall() { // create ACP-templates list $templates = array(); // get ACP-templates from log $sql = "SELECT * FROM wcf".WCF_N."_acp_template WHERE packageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->installation->getPackageID())); while ($row = $statement->fetchArray()) { // store acp template with suffix (_$packageID) $templates[] = 'acp/templates/'.$row['templateName'].'.tpl'; } if (!empty($templates)) { // delete template files $packageDir = FileUtil::addTrailingSlash(FileUtil::getRealPath(WCF_DIR.$this->installation->getPackage()->packageDir)); $deleteEmptyDirectories = $this->installation->getPackage()->isApplication; $this->installation->deleteFiles($packageDir, $templates, false, $deleteEmptyDirectories); // delete log entries parent::uninstall(); } }
/** * @see \wcf\system\search\acp\IACPSearchResultProvider::search() */ public function search($query) { if (!WCF::getSession()->getPermission('admin.system.package.canUpdatePackage') && !WCF::getSession()->getPermission('admin.system.package.canUninstallPackage')) { return array(); } $results = array(); // search by language item $conditions = new PreparedStatementConditionBuilder(); $conditions->add("languageID = ?", array(WCF::getLanguage()->languageID)); $conditions->add("languageItem LIKE ?", array('wcf.acp.package.packageName.package%')); $conditions->add("languageItemValue LIKE ?", array('%' . $query . '%')); $sql = "SELECT\t\tlanguageItem\n\t\t\tFROM\t\twcf" . WCF_N . "_language_item\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditions->getParameters()); $packageIDs = array(); while ($row = $statement->fetchArray()) { $packageIDs[] = str_replace('wcf.acp.package.packageName.package', '', $row['languageItem']); } $conditions = new PreparedStatementConditionBuilder(false); if (!empty($packageIDs)) { $conditions->add("packageID IN (?)", array($packageIDs)); } $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_package\n\t\t\tWHERE\tpackageName LIKE ?\n\t\t\t\tOR package LIKE ?\n\t\t\t\t" . (count($conditions->getParameters()) ? "OR " . $conditions : ""); $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge(array($query . '%', $query . '%'), $conditions->getParameters())); while ($package = $statement->fetchObject('wcf\\data\\package\\Package')) { $results[] = new ACPSearchResult($package->getName(), LinkHandler::getInstance()->getLink('Package', array('id' => $package->packageID, 'title' => $package->getName()))); } return $results; }