/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { $sql = "SELECT *\r\n\t\t\t\tFROM ugml_stat_type\r\n\t\t\t\tGROUP BY ugml_stat_type.statTypeID"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $sql = "SELECT DISTINCT `time`\r\n\t\t\t\t\tFROM ugml_stat_entry_archive\r\n\t\t\t\t\tWHERE statTypeID = " . $row['statTypeID']; $result2 = WCF::getDB()->sendQuery($sql); while ($row2 = WCF::getDB()->fetchArray($result2)) { $row['times'][] = $row2['time']; } // range $sql = "SELECT MAX(rank)\r\n\t\t\t\t\t\tAS max\r\n\t\t\t\t\tFROM ugml_stat_entry\r\n\t\t\t\t\tWHERE statTypeID = " . $row['statTypeID']; $row += WCF::getDB()->getFirstRow($sql); $this->data[$row['statTypeID']] = $row; } $this->data = array('byStatTypeID' => $this->data, 'byTypeName' => array()); foreach ($this->data['byStatTypeID'] as $statTypeID => $row) { $name = StringUtil::firstCharToUpperCase($row['type']) . StringUtil::firstCharToUpperCase($row['name']); $this->data['byTypeName'][$name] = $row; } // get the names and the types $sql = "SELECT GROUP_CONCAT(DISTINCT type)\r\n\t\t\t\t\t\t\tAS types,\r\n\t\t\t\t\t\tGROUP_CONCAT(DISTINCT name)\r\n\t\t\t\t\t\t\tAS names\r\n\t\t\t\tFROM ugml_stat_type\r\n\t\t\t\tGROUP BY NULL"; $row = WCF::getDB()->getFirstRow($sql); $this->data['types'] = explode(',', $row['types']); $this->data['names'] = explode(',', $row['names']); return $this->data; }
/** * Checks if a configuration is valid. * * @param string type * @param string name * @param bool check selectable flag * @return bool */ public static function checkTypeName($type, $name, $checkSelectable = true) { $className = StringUtil::firstCharToUpperCase($type) . StringUtil::firstCharToUpperCase($name); try { $cache = self::checkClassName($className); if (!$checkSelectable || $cache['selectable']) { return true; } return false; } catch (StatException $e) { return false; } }
/** * Returns a productor object. * * @param string $productorName * @return PlanetProduction */ public function getProductorObject($productorName) { if (!isset($this->productors[$productorName])) { $className = StringUtil::firstCharToUpperCase($productorName) . 'Production'; $fileName = LW_DIR . 'lib/data/planet/production/' . $className . '.class.php'; if (!file_exists($fileName)) { throw new PlanetException('can not find production class file ' . $fileName); } require_once $fileName; if (!class_exists($className)) { throw new PlanetException('production class ' . $className . ' does no exist'); } $this->productors[$productorName] = new $className($this->getObject()); } return $this->productors[$productorName]; }
/** * Returns the right file type icon for the given attachment. * * @return string */ public function getFileTypeIcon() { if ($this->fileTypeIcon === null) { $this->fileTypeIcon = ''; // get file extension $extension = StringUtil::firstCharToUpperCase(StringUtil::toLowerCase(StringUtil::substring($this->attachmentName, StringUtil::lastIndexOf($this->attachmentName, '.') + 1))); // get file type icon if (file_exists(WCF_DIR . 'icon/fileTypeIcon' . $extension . 'M.png')) { $this->fileTypeIcon = 'fileTypeIcon' . $extension . 'M.png'; } else { foreach (self::$fileTypeGroups as $key => $group) { if (in_array($extension, $group)) { $this->fileTypeIcon = 'fileTypeIcon' . $key . 'M.png'; break; } } if (empty($this->fileTypeIcon)) { $this->fileTypeIcon = 'fileTypeIconDefaultM.png'; } } } if (!class_exists('StyleManager')) { return RELATIVE_WCF_DIR . 'icon/' . $this->fileTypeIcon; } else { return StyleManager::getStyle()->getIconPath($this->fileTypeIcon); } }
/** * @see WOTAPIPServerClient::handleRequest() */ public function handleRequest($lines) { // get data $this->connection = 'Close'; $this->data = array(); $this->action = ''; $dataComing = false; $resumption = $this->started; foreach ($lines as $no => $line) { // not encrypted if (($no == 0 || $no == 1) && !$resumption) { // version if (substr($line, 0, 8) == 'WOTAPIP/') { $this->started = true; continue; } // initialization vector $iv = base64_decode($line); $this->crypter = new Mcrypt(); $this->crypter->init(CRYPTER_KEY, $iv); continue; } // encrypted $line = $this->crypter->decryptFromText($line); $parts = ArrayUtil::trim(explode(':', $line, 2)); if ($dataComing) { $this->data[StringUtil::toLowerCase($parts[0])] = $parts[1]; continue; } switch ($parts[0]) { case 'ACTION': $this->action = $parts[1]; break; case 'CONNECTION': if ($parts[1] !== 'Close' && $parts[1] !== 'Keep-Alive') { $this->send('unknown connection value ' . $parts[1], 206); return; } $this->connection = StringUtil::trim($parts[1]); break; case 'DATA': $dataComing = true; break; default: if (substr($parts[0], 0, 5) == 'DATA_') { $parts[0] = substr($parts[0], 5); } else { $this->send('unknown line ' . $parts[0], 204); return; } } } // validate if (empty($this->action)) { $this->send('no action specified', 202); return; } // execute $className = 'WOTAPI' . StringUtil::firstCharToUpperCase(StringUtil::toLowerCase($this->action)) . 'Action'; if (!file_exists(LW_DIR . 'lib/wotapi/' . $className . '.class.php')) { $this->send('classfile not found', 210); return; } require_once LW_DIR . 'lib/wotapi/' . $className . '.class.php'; if (!class_exists($className)) { $this->send('class \'' . $className . '\' not found', 211); return; } try { $action = new $className($this); } catch (Exception $e) { ob_start(); $e->show(); $output = ob_get_contents(); ob_end_clean(); $this->send('exception thrown while execution: ' . addcslashes($output, ":\n\r\\"), 220); } }
/** * Returns the right file type icon for the given attachment. * * @param array $data * @return string */ protected static function getFileTypeIcon($data) { // get file extension $extension = StringUtil::firstCharToUpperCase(StringUtil::toLowerCase(StringUtil::substring($data['attachmentName'], StringUtil::lastIndexOf($data['attachmentName'], '.') + 1))); // get file type icon if (file_exists(WCF_DIR . 'icon/fileTypeIcon' . $extension . 'M.png')) { return StyleManager::getStyle()->getIconPath('fileTypeIcon' . $extension . 'M.png'); } else { foreach (self::$fileTypeGroups as $key => $group) { if (in_array($extension, $group)) { return StyleManager::getStyle()->getIconPath('fileTypeIcon' . $key . 'M.png'); } } return StyleManager::getStyle()->getIconPath('fileTypeIconDefaultM.png'); } }
/** * @see WOTAPIPServerClient::handleRequest() */ public function handleRequest($lines) { // get data $this->connection = 'Close'; $this->data = array(); $this->key = ''; $this->salt = ''; $this->sendTime = 0; $this->action = ''; foreach ($lines as $no => $line) { if ($no == 0 && substr($line, 0, 8) == 'WOTAPIP/') { $this->protocolVersion = substr($line, 8, 3); continue; } $parts = ArrayUtil::trim(explode(':', $line, 2)); switch ($parts[0]) { case 'KEY': $this->key = StringUtil::trim($parts[1]); break; case 'SALT': $this->salt = StringUtil::trim($parts[1]); break; case 'ACTION': $this->action = StringUtil::trim($parts[1]); break; case 'SENDTIME': $this->sendTime = intval(StringUtil::trim($parts[1])); break; case 'CONNECTION': if ($parts[1] !== 'Close' && $parts[1] !== 'Keep-Alive') { $this->send('unkwown connection value ' . $parts[1], 206); return; } $this->connection = StringUtil::trim($parts[1]); break; default: if (substr($parts[0], 0, 5) == 'DATA_') { $parts[0] = substr($parts[0], 5); } else { $this->send('unkwown line ' . $parts[0], 204); return; } $this->data[StringUtil::toLowerCase($parts[0])] = $parts[1]; } } // validate if (empty($this->key)) { $this->send('no key found', 200); return; } if (empty($this->salt)) { $this->send('no salt found', 201); return; } if (empty($this->action)) { $this->send('no key found', 202); return; } if (empty($this->sendTime)) { $this->send('sendTime not given', 203); return; } if ($this->sendTime < time() - 60 * 60 || $this->sendTime > time()) { $this->send('invalid sendTime given', 207); return; } /*if(count($this->data) > 5) { $this->send('too many data given', 205); return; }*/ if (!$this->validateKey($this->data)) { return; } // execute $className = 'WOTAPI' . StringUtil::firstCharToUpperCase(StringUtil::toLowerCase($this->action)) . 'Action'; if (!file_exists(LW_DIR . 'lib/wotapi/' . $className . '.class.php')) { $this->send('classfile not found', 210); return; } require_once LW_DIR . 'lib/wotapi/' . $className . '.class.php'; if (!class_exists($className)) { $this->send('class \'' . $className . '\' not found', 211); return; } try { $action = new $className($this); } catch (Exception $e) { ob_start(); $e->show(); $output = ob_get_contents(); ob_end_clean(); $this->send('exception thrown while execution: ' . addcslashes($output, ":\n\r\\"), 220); } }
/** * Applies the prefilters to the given string. * * @param string $string * @return string */ public function applyPrefilters($string) { foreach ($this->template->getPrefilters() as $prefilter) { if (!is_object($prefilter)) { $filename = $this->template->getPluginFilename('prefilter', $prefilter); if (!file_exists($filename)) { throw new SystemException('unable to find class file ' . $filename, 11000); } require_once $filename; $className = 'TemplatePluginPrefilter' . StringUtil::firstCharToUpperCase(StringUtil::toLowerCase($prefilter)); if (!class_exists($className)) { throw new SystemException($this->formatSyntaxError('unable to find prefilter class ' . $className, $this->currentIdentifier), 11001); } $prefilter = new $className(); } if ($prefilter instanceof TemplatePluginPrefilter) { $string = $prefilter->execute($string, $this); } else { throw new SystemException($this->formatSyntaxError("Prefilter '" . $prefilter . "' does not implement the interface 'TemplatePluginPrefilter'", $this->currentIdentifier), 11010); } } return $string; }
/** * @see Template::getPluginFilename() */ public function getPluginFilename($type, $tag) { return $this->pluginDir . TMP_FILE_PREFIX . 'TemplatePlugin' . StringUtil::firstCharToUpperCase(StringUtil::toLowerCase($type)) . StringUtil::firstCharToUpperCase(StringUtil::toLowerCase($tag)) . '.class.php'; }
public function getAttachments($userID, $sortField, $sortOrder, $itemsPerPage, $pageNo, $isACP = false, $showThumbnails = 0, $showOnlyImages = 0, $showOnlyMessageType = '', $showOnlyFileType = '') { $ret = array(); $i = 0; if ($userID > 0) { $sortField2 = ''; if ($sortField == 'username') { $sortField = 'uploadTime'; } if ($sortField != 'attachmentName') { $sortField2 .= ', LOWER(attachmentName) ASC'; } $sql = "SELECT *" . "\n FROM wcf" . WCF_N . "_attachment" . "\n WHERE 1 = 1" . "\n AND userID = " . $userID; if (!empty($showOnlyImages)) { $sql .= "\n AND isImage = 1"; } if (!empty($showOnlyMessageType)) { $sql .= "\n AND messageType = '" . $showOnlyMessageType . "'"; } if (!empty($showOnlyFileType)) { $sql .= "\n AND fileType = '" . $showOnlyFileType . "'"; } $sql .= "\n ORDER BY " . $sortField . " " . $sortOrder . $sortField2 . "\n LIMIT " . $itemsPerPage . "\nOFFSET " . ($pageNo - 1) * $itemsPerPage; } else { if (!WCF::getUser()->getPermission('admin.general.attachmentManager.canView')) { return $ret; } $sortField2 = ''; if ($sortField == 'username') { $sortField = 'LOWER(' . $sortField . ')'; } else { $sortField2 .= ', LOWER(username) ASC'; } if ($sortField != 'attachmentName') { $sortField2 .= ', LOWER(attachmentName) ASC'; } $sql = "SELECT *" . "\n FROM wcf" . WCF_N . "_attachment at" . "\n LEFT JOIN wcf" . WCF_N . "_user us ON (us.userID = at.userID)" . "\n WHERE 1 = 1"; if (!empty($showOnlyImages)) { $sql .= "\n AND isImage = 1"; } if (!empty($showOnlyMessageType)) { $sql .= "\n AND messageType = '" . $showOnlyMessageType . "'"; } if (!empty($showOnlyFileType)) { $sql .= "\n AND fileType = '" . $showOnlyFileType . "'"; } $sql .= "\n ORDER BY " . $sortField . " " . $sortOrder . $sortField2 . "\n LIMIT " . $itemsPerPage . "\nOFFSET " . ($pageNo - 1) * $itemsPerPage; } $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { // username if (self::wbbExists() && empty($row['username']) && $row['messageType'] == 'post') { $tmp = WCF::getDB()->getFirstRow('SELECT username FROM wbb' . WBB_N . '_post WHERE postID = ' . $row['messageID']); if (isset($tmp['username'])) { $row['username'] = $tmp['username']; } } else { if (empty($row['username']) && $row['messageType'] == 'pm') { $tmp = WCF::getDB()->getFirstRow('SELECT username FROM wcf' . WCF_N . '_pm WHERE pmID = ' . $row['messageID']); if (isset($tmp['username'])) { $row['username'] = $tmp['username']; } } } if (!empty($row['username'])) { $row['username'] = StringUtil::encodeHTML($row['username']); } else { $row['username'] = '******'; } if (!empty($row['userID'])) { $row['username'] = '******' . $row['userID'] . '&packageID=' . PACKAGE_ID . SID_ARG_2ND_NOT_ENCODED . '" title="' . WCF::getLanguage()->get('wcf.acp.user.edit') . '">' . $row['username'] . '</a>'; } // pm $ownPM = false; if ($row['messageType'] == 'pm' && !empty($row['userID']) && ($row['userID'] == $userID || $row['userID'] == WCF::getUser()->userID)) { if (!empty($userID)) { $tUserID = $userID; } else { $tUserID = WCF::getUser()->userID; } $sql = "SELECT COUNT(*) AS cnt" . "\n FROM wcf" . WCF_N . "_pm" . "\n WHERE pmID = " . $row['messageID'] . "\n AND userID = " . $tUserID . "\n AND saveInOutbox != 0"; $tmp = WCF::getDB()->getFirstRow($sql); if (!empty($tmp['cnt'])) { $ownPM = true; } } if (!empty($row['attachmentSize'])) { $row['attachmentSize'] = round($row['attachmentSize'] / 1024, 2) . ' kB'; } // message type urls $row['messageTypeUrl'] = $row['messageType']; if (self::wbbExists() && preg_match('/^(post|pm)$/', $row['messageType'])) { if ($row['messageType'] == 'post') { $row['messageTypeUrl'] = '<a href="' . RELATIVE_WBB_DIR . 'index.php?page=Thread&postID=' . $row['messageID'] . '#post' . $row['messageID'] . '" target="' . ATTACHMENTMANAGER_TARGETWINDOW . '">' . $row['messageType'] . '</a>'; } else { if ($ownPM) { $row['messageTypeUrl'] = '<a href="' . RELATIVE_WBB_DIR . 'index.php?page=PMView&pmID=' . $row['messageID'] . '#pm' . $row['messageID'] . '" target="' . ATTACHMENTMANAGER_TARGETWINDOW . '">' . $row['messageType'] . '</a>'; } } } // thumbnails / files $maxLength = 0; $shortFileName = $row['attachmentName']; if ($isACP && ATTACHMENTMANAGER_MAXLENGTHACP > 0) { $maxLength = ATTACHMENTMANAGER_MAXLENGTHACP; } else { if (ATTACHMENTMANAGER_MAXLENGTHUCP > 0) { $maxLength = ATTACHMENTMANAGER_MAXLENGTHUCP; } } if ($maxLength > 0 && strlen($shortFileName) > $maxLength) { preg_match('/^(.*)(\\..*)$/', $shortFileName, $match); if (isset($match[2])) { $shortFileName = substr($match[1], 0, $maxLength - (strlen($match[2]) + 2)) . '..' . $match[2]; } else { $shortFileName = substr($shortFileName, 0, $maxLength); } } $row['attachmentUrl'] = '<span title="' . $row['attachmentName'] . '">' . $shortFileName . '</span>'; if (self::wbbExists()) { if ($row['messageType'] == 'pm' && !$ownPM) { $row['attachmentUrl'] = '<span title="' . $row['attachmentName'] . '">' . $shortFileName . '</span>'; } else { if (!empty($showThumbnails) && !empty($row['isImage'])) { if (!empty($row['thumbnailSize'])) { $row['attachmentUrl'] = '<a href="' . RELATIVE_WBB_DIR . 'index.php?page=Attachment&attachmentID=' . $row['attachmentID'] . '&h=' . $row['sha1Hash'] . '" target="' . ATTACHMENTMANAGER_TARGETWINDOW . '" style="width:' . ATTACHMENT_THUMBNAIL_WIDTH . 'px; height:' . ATTACHMENT_THUMBNAIL_HEIGHT . 'px;"><img src="' . RELATIVE_WBB_DIR . 'index.php?page=Attachment&attachmentID=' . $row['attachmentID'] . '&h=' . $row['sha1Hash'] . '&thumbnail=1" alt="' . $row['attachmentName'] . '" title="' . $row['attachmentName'] . '" style="max-width:' . ATTACHMENT_THUMBNAIL_WIDTH . 'px; max-height:' . ATTACHMENT_THUMBNAIL_HEIGHT . 'px;" /></a>'; } else { $row['attachmentUrl'] = '<a href="' . RELATIVE_WBB_DIR . 'index.php?page=Attachment&attachmentID=' . $row['attachmentID'] . '&h=' . $row['sha1Hash'] . '" target="' . ATTACHMENTMANAGER_TARGETWINDOW . '" style="width:' . ATTACHMENT_THUMBNAIL_WIDTH . 'px; height:' . ATTACHMENT_THUMBNAIL_HEIGHT . 'px;"><img src="' . RELATIVE_WBB_DIR . 'index.php?page=Attachment&attachmentID=' . $row['attachmentID'] . '&h=' . $row['sha1Hash'] . '" alt="' . $row['attachmentName'] . '" title="' . $row['attachmentName'] . '" style="max-width:' . ATTACHMENT_THUMBNAIL_WIDTH . 'px; max-height:' . ATTACHMENT_THUMBNAIL_HEIGHT . 'px;" /></a>'; } } else { $row['attachmentUrl'] = '<a href="' . RELATIVE_WBB_DIR . 'index.php?page=Attachment&attachmentID=' . $row['attachmentID'] . '&h=' . $row['sha1Hash'] . '" target="' . ATTACHMENTMANAGER_TARGETWINDOW . '" title="' . $row['attachmentName'] . '">' . $shortFileName . '</a>'; } } } $icon = RELATIVE_WCF_DIR . 'icon/fileTypeIconDefaultM.png'; // get file extension $extension = StringUtil::firstCharToUpperCase(StringUtil::toLowerCase(StringUtil::substring($row['attachmentName'], StringUtil::lastIndexOf($row['attachmentName'], '.') + 1))); // get file type icon if (file_exists(WCF_DIR . 'icon/fileTypeIcon' . $extension . 'M.png')) { $icon = RELATIVE_WCF_DIR . 'icon/fileTypeIcon' . $extension . 'M.png'; } else { foreach (self::$fileTypeGroups as $key => $group) { if (in_array($extension, $group)) { $icon = RELATIVE_WCF_DIR . 'icon/fileTypeIcon' . $key . 'M.png'; break; } } } $row['mimeIcon'] = '<img src="' . $icon . '"' . ($isACP ? ' height="16" width="16"' : '') . ' alt="' . $row['fileType'] . '" title="' . $row['fileType'] . '" />'; $ret[$i] = $row; $i++; } return $ret; }