/** * Parse a rss feed. * * @param string $sourceURL * @return array */ public static function parseFeed($sourceURL) { $newsItems = array(); $filename = FileUtil::downloadFileFromHttp($sourceURL, 'feed'); // open & parse file $xml = new XML($filename); $data = $xml->getElementTree('channel'); $items = $data['children'][0]['children']; foreach ($items as $item) { if ($item['name'] != 'item') { continue; } $newsItem = array('title' => '', 'author' => '', 'link' => '', 'guid' => '', 'pubDate' => '', 'description' => ''); foreach ($item['children'] as $child) { if (!isset($child['cdata'])) { continue; } $newsItem[$child['name']] = $child['cdata']; } // convert encodings if (CHARSET != 'UTF-8') { $newsItem['title'] = StringUtil::convertEncoding('UTF-8', CHARSET, $newsItem['title']); $newsItem['author'] = StringUtil::convertEncoding('UTF-8', CHARSET, $newsItem['author']); $newsItem['link'] = StringUtil::convertEncoding('UTF-8', CHARSET, $newsItem['link']); $newsItem['guid'] = StringUtil::convertEncoding('UTF-8', CHARSET, $newsItem['guid']); $newsItem['description'] = StringUtil::convertEncoding('UTF-8', CHARSET, $newsItem['description']); } @($newsItem['pubDate'] = intval(strtotime($newsItem['pubDate']))); $newsItems[] = $newsItem; } // delete tmp file @unlink($filename); return $newsItems; }
/** * callback function for adding the title to external urls * * @param array $matches */ protected function makeURLTitle($matches) { $url = $matches[1]; // add protocol if necessary if (!preg_match("/[a-z]:\\/\\//si", $url)) { $url = 'http://' . $url; } if (!$this->isInternalURL($url)) { // found an external url (using url bbocdes detection method) if (!isset(self::$cachedURLs[$url])) { self::$cachedURLs[$url] = $url; try { @ini_set("default_socket_timeout ", 10); //set timeout if possible /* Get the MIME type and character set */ $headers = get_headers($url, 1); $contentType = $headers['Content-Type']; preg_match('@([\\w/+]+)(;\\s+charset=(\\S+))?@i', $contentType, $matches); $mime = ''; $charset = 'auto'; if (isset($matches[1])) { $mime = $matches[1]; } if (isset($matches[3])) { $charset = $matches[3]; } if ($mime = 'text/html') { $filePath = FileUtil::downloadFileFromHttp($url, 'fetch_hyperlink'); $fileContent = file_get_contents($filePath); @unlink($filePath); if (preg_match("/<title>(.*?)<\\/title>/is", $fileContent, $titleMatches)) { // cache title self::$cachedURLs[$url] = self::normalizeTitle($titleMatches[1], $charset); } } } catch (Exception $e) { /* if fetching the title fails for whatever reason, simply do nothing */ } } return '[url=\'' . $url . '\']' . self::$cachedURLs[$url] . '[/url]'; } return '[url]' . $url . '[/url]'; }
/** * Sends a request. */ protected static function sendRequest($worldID, $args) { self::getAccessableServers(); $server = self::$servers[$worldID]; // build query string $queryStr = $server['url'] . 'board_reg.php'; foreach ($args as $argName => $argValue) { if (isset($arg)) { $queryStr .= '&'; } else { $queryStr .= '?'; $arg = true; } $queryStr .= rawurlencode($argName) . '=' . rawurlencode($argValue); } // send request $fileName = FileUtil::downloadFileFromHttp($queryStr, 'lost-worlds'); //if($args['action'] == 2) include($fileName); // update wcf self::updateWCF($worldID); }
/** * @see DisplayableAvatar::getURL() */ public function getURL() { if ($this->url === null) { // try to use cached gravatar $cachedFilename = sprintf(self::GRAVATAR_CACHE_LOCATION, md5($this->gravatar), $this->size); if (file_exists(WCF_DIR . $cachedFilename) && filemtime(WCF_DIR . $cachedFilename) > TIME_NOW - self::GRAVATAR_CACHE_EXPIRE * 86400) { $this->url = RELATIVE_WCF_DIR . $cachedFilename; } else { $gravatarURL = sprintf(self::GRAVATAR_BASE, md5($this->gravatar), $this->size, rawurlencode(RELATIVE_WCF_DIR . 'images/avatars/avatar-default.png')); try { $tmpFile = FileUtil::downloadFileFromHttp($gravatarURL, 'gravatar'); copy($tmpFile, WCF_DIR . $cachedFilename); @unlink($tmpFile); @chmod(WCF_DIR . $cachedFilename, 0777); $this->url = RELATIVE_WCF_DIR . $cachedFilename; } catch (SystemException $e) { $this->url = RELATIVE_WCF_DIR . 'images/avatars/avatar-default.png'; } } } return $this->url; }
/** * @see Cronjob::execute() */ public function execute($data) { $filename = FileUtil::downloadFileFromHttp('http://www.woltlab.com/spiderlist/spiderlist.xml', 'spiders'); $xml = new XML($filename); $spiders = $xml->getElementTree('spiderlist'); if (count($spiders['children'])) { // delete old entries $sql = "TRUNCATE TABLE wcf" . WCF_N . "_spider"; WCF::getDB()->sendQuery($sql); $inserts = ''; foreach ($spiders['children'] as $spider) { $identifier = $spider['attrs']['ident']; // get attributes foreach ($spider['children'] as $values) { $spider[$values['name']] = $values['cdata']; } $name = $spider['name']; $info = ''; if (isset($spider['info'])) { $info = $spider['info']; } if (!empty($inserts)) { $inserts .= ','; } $inserts .= "('" . escapeString(StringUtil::toLowerCase($identifier)) . "', '" . escapeString($name) . "', '" . escapeString($info) . "')"; } if (!empty($inserts)) { $sql = "INSERT IGNORE INTO\twcf" . WCF_N . "_spider\n\t\t\t\t\t\t\t\t(spiderIdentifier, spiderName, spiderURL)\n\t\t\t\t\tVALUES\t\t\t" . $inserts; WCF::getDB()->sendQuery($sql); } // clear spider cache WCF::getCache()->clear(WCF_DIR . 'cache', 'cache.spiders.php'); } // delete tmp file @unlink($filename); }
<?php /* This file is part of WOT Game. WOT Game is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WOT Game is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with WOT Game. If not, see <http://www.gnu.org/licenses/>. */ define('INSIDE', true); $ugamela_root_path = '../'; include $ugamela_root_path . 'extension.inc'; include $ugamela_root_path . 'common.' . $phpEx; if (!check_user()) { header("Location: login.php"); die; } $fileName = FileUtil::downloadFileFromHttp('http://neu.lost-worlds.de/game/index.php?page=XMLStatistics', 'statistics'); $xmlObj = new XML($fileName); $arr = $xmlObj->xpath('./*[@userID="156"]'); var_dump($arr);
/** * @see Form::validate() */ public function validate() { parent::validate(); if ($this->avatarID) { if ($this->avatarID == -1) { if (empty($this->gravatar)) { // check permission WCF::getUser()->checkPermission('user.profile.avatar.canUploadAvatar'); // upload or download avatar if ($this->avatarUpload && $this->avatarUpload['error'] != 4) { if ($this->avatarUpload['error'] != 0) { throw new UserInputException('avatarUpload', 'uploadFailed'); } $this->avatarID = AvatarEditor::create($this->avatarUpload['tmp_name'], $this->avatarUpload['name'], 'avatarUpload', WCF::getUser()->userID); } else { if ($this->avatarURL != 'http://') { if (StringUtil::indexOf($this->avatarURL, 'http://') !== 0) { throw new UserInputException('avatarURL', 'downloadFailed'); } try { $tmpName = FileUtil::downloadFileFromHttp($this->avatarURL, 'avatar'); } catch (SystemException $e) { throw new UserInputException('avatarURL', 'downloadFailed'); } $this->avatarID = AvatarEditor::create($tmpName, $this->avatarURL, 'avatarURL', WCF::getUser()->userID); } else { throw new UserInputException('avatarUpload'); } } } else { $this->avatarID = 0; } } else { // check permission WCF::getUser()->checkPermission('user.profile.avatar.canUseDefaultAvatar'); // use a default avatar $avatar = new AvatarEditor($this->avatarID); if (!$avatar->avatarID || $avatar->userID || $avatar->groupID && !in_array($avatar->groupID, WCF::getUser()->getGroupIDs()) || $avatar->neededPoints > WCF::getUser()->activityPoints) { throw new UserInputException('availableAvatars', 'invalid'); } // check category permissions if ($avatar->avatarCategoryID) { $category = new AvatarCategory($avatar->avatarCategoryID); if ($category->groupID && !in_array($category->groupID, WCF::getUser()->getGroupIDs()) || $category->neededPoints > WCF::getUser()->activityPoints) { throw new UserInputException('availableAvatars', 'invalid'); } } } } }
/** * @see Form::validate() */ public function validate() { parent::validate(); if (!empty($this->filename)) { // import style $this->style = StyleEditor::import($this->filename, PACKAGE_ID, $this->destinationStyle !== null && $this->destinationStyle->styleID ? $this->destinationStyle : null); } else { // import destination if ($this->destinationStyle !== null && !$this->destinationStyle->styleID) { throw new UserInputException('destinationStyleID'); } // upload style if ($this->styleUpload && $this->styleUpload['error'] != 4) { if ($this->styleUpload['error'] != 0) { throw new UserInputException('styleUpload', 'uploadFailed'); } $this->newFilename = $this->styleUpload['tmp_name']; try { $this->styleData = StyleEditor::getStyleData($this->styleUpload['tmp_name']); } catch (SystemException $e) { throw new UserInputException('styleUpload', 'invalid'); } // copy file $newFilename = FileUtil::getTemporaryFilename('style_'); if (@move_uploaded_file($this->styleUpload['tmp_name'], $newFilename)) { $this->newFilename = $newFilename; } } else { if ($this->styleURL != 'http://') { if (StringUtil::indexOf($this->styleURL, 'http://') !== 0) { throw new UserInputException('styleURL', 'downloadFailed'); } try { $this->newFilename = FileUtil::downloadFileFromHttp($this->styleURL, 'style'); } catch (SystemException $e) { throw new UserInputException('styleURL', 'downloadFailed'); } try { $this->styleData = StyleEditor::getStyleData($this->newFilename); } catch (SystemException $e) { throw new UserInputException('styleURL', 'invalid'); } } else { throw new UserInputException('styleUpload'); } } } }
/** * Validates the download file input. * * @throws UserInputException */ protected function validateDownloadFile() { if (FileUtil::isURL($this->downloadFile)) { //download file $parsedUrl = parse_url($this->downloadFile); $prefix = 'importSubscriber'; try { // file transfer via hypertext transfer protocol. if ($parsedUrl['scheme'] == 'http') { $this->downloadFile = FileUtil::downloadFileFromHttp($this->downloadFile, $prefix); } elseif ($parsedUrl['scheme'] == 'ftp') { $this->downloadFile = FTPUtil::downloadFileFromFtp($this->downloadFile, $prefix); } } catch (SystemException $e) { throw new UserInputException('downloadFile', 'notFound'); } } else { // probably local path if (!file_exists($this->downloadFile)) { throw new UserInputException('downloadFile', 'notFound'); } } }
/** * @see EventListener::execute() */ public function execute($eventObj, $className, $eventName) { if (MODULE_AVATAR == 1) { if ($eventName == 'readFormParameters') { if (isset($_POST['avatarID'])) { $this->avatarID = intval($_POST['avatarID']); } if (isset($_POST['disableAvatar'])) { $this->disableAvatar = intval($_POST['disableAvatar']); } if (isset($_POST['disableAvatarReason'])) { $this->disableAvatarReason = $_POST['disableAvatarReason']; } if (isset($_POST['useAvatar'])) { $this->useAvatar = intval($_POST['useAvatar']); } if (isset($_POST['avatarURL'])) { $this->avatarURL = StringUtil::trim($_POST['avatarURL']); } if (isset($_FILES['avatarUpload'])) { $this->avatarUpload = $_FILES['avatarUpload']; } if (MODULE_GRAVATAR == 1 && isset($_POST['gravatar'])) { $this->gravatar = StringUtil::trim($_POST['gravatar']); } } else { if ($eventName == 'validate') { try { if ($this->useAvatar == 1) { if (empty($this->gravatar)) { // upload or download avatar if ($this->avatarUpload && $this->avatarUpload['error'] != 4) { if ($this->avatarUpload['error'] != 0) { throw new UserInputException('avatarUpload', 'uploadFailed'); } $this->avatarID = AvatarEditor::create($this->avatarUpload['tmp_name'], $this->avatarUpload['name'], 'avatarUpload', $eventObj->userID); } else { if ($this->avatarURL != 'http://') { if (StringUtil::indexOf($this->avatarURL, 'http://') !== 0) { throw new UserInputException('avatarURL', 'downloadFailed'); } try { $tmpName = FileUtil::downloadFileFromHttp($this->avatarURL, 'avatar'); } catch (SystemException $e) { throw new UserInputException('avatarURL', 'downloadFailed'); } $this->avatarID = AvatarEditor::create($tmpName, $this->avatarURL, 'avatarURL', $eventObj->userID); } else { $this->avatarID = $eventObj->user->avatarID; } } } } else { if ($this->useAvatar == 2) { // use a default avatar $avatar = new AvatarEditor($this->avatarID); if (!$avatar->avatarID || $avatar->userID || $avatar->groupID && !in_array($avatar->groupID, $eventObj->user->getGroupIDs()) || $avatar->neededPoints > $eventObj->user->activityPoints) { throw new UserInputException('availableAvatars', 'invalid'); } } else { $this->avatarID = 0; } } } catch (UserInputException $e) { $eventObj->errorType[$e->getField()] = $e->getType(); } } else { if ($eventName == 'save') { // delete old avatar if necessary if ($eventObj->user->avatarID) { $currentAvatar = new AvatarEditor($eventObj->user->avatarID); if ($currentAvatar->userID && $this->avatarID != $currentAvatar->avatarID) { $currentAvatar->delete(); } } // update user $eventObj->additionalFields['avatarID'] = $this->avatarID; $eventObj->additionalFields['disableAvatar'] = $this->disableAvatar; $eventObj->additionalFields['disableAvatarReason'] = $this->disableAvatarReason; $eventObj->additionalFields['gravatar'] = $this->gravatar; } else { if ($eventName == 'show') { // get default values if (!count($_POST)) { $this->avatarID = $eventObj->user->avatarID; $this->disableAvatar = $eventObj->user->disableAvatar; $this->disableAvatarReason = $eventObj->user->disableAvatarReason; $this->gravatar = $eventObj->user->gravatar; } $currentAvatar = null; if ($this->avatarID) { $currentAvatar = new AvatarEditor($this->avatarID); $this->useAvatar = $currentAvatar->userID ? 1 : 2; } else { if ($this->gravatar) { require_once WCF_DIR . 'lib/data/user/avatar/Gravatar.class.php'; $currentAvatar = new Gravatar($this->gravatar); $this->useAvatar = 1; } } $availableAvatarCategories = $this->getAvailableAvatars(implode(',', $eventObj->user->getGroupIDs()), intval($eventObj->user->activityPoints)); $avatarCount = 0; foreach ($availableAvatarCategories as $availableAvatarCategory) { $avatarCount += count($availableAvatarCategory['avatars']); } WCF::getTPL()->assign(array('avatarID' => $this->avatarID, 'disableAvatar' => $this->disableAvatar, 'disableAvatarReason' => $this->disableAvatarReason, 'avatarURL' => $this->avatarURL, 'currentAvatar' => $currentAvatar, 'avatarCategories' => $availableAvatarCategories, 'items' => $avatarCount, 'useAvatar' => $this->useAvatar, 'gravatar' => $this->gravatar)); WCF::getTPL()->append(array('additionalTabs' => '<li id="avatar"><a onclick="tabMenu.showSubTabMenu(\'avatar\');"><span>' . WCF::getLanguage()->get('wcf.user.avatar') . '</span></a></li>', 'additionalTabContents' => WCF::getTPL()->fetch('userEditAvatar'))); } } } } } }
/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { list($cache, $instanceID) = explode('-', $cacheResource['cache']); // create array (0 => commits, 1 => api errors) $data = array(0 => array(), 1 => ''); try { // create instance $instance = new InstanceableModule($instanceID); // create api url $apiUrl = 'http://github.com/api/v2/xml/commits/list/' . $instance->getOptions()->getGroup('general')->getOption('username')->getValue() . '/' . $instance->getOptions()->getGroup('general')->getOption('repository')->getValue() . '/' . $instance->getOptions()->getGroup('general')->getOption('branch')->getValue(); // download xml $filename = FileUtil::downloadFileFromHttp($apiUrl); // create new xml instance $xml = new XML($filename); // load tree $commitXML = $xml->getElementTree('commits'); // check for errors if (isset($commitXML['children'][0]) and $commitXML['children'][0]['name'] == 'error') { $data[1] = $commitXML['children'][0]['cdata']; return $data; } // all ok .. loop througt array foreach ($commitXML['children'] as $commit) { // create commit array $tmp = array('url' => 'https://github.com', 'id' => '', 'message' => '', 'author' => '', 'authorEmail' => '', 'date' => 0); // create information array $tmpInfo = array(); // loop througt children foreach ($commit['children'] as $child) { if ($child['name'] == 'committer') { // create array for information $tmpInfo['committer'] = array(); // loop througt children foreach ($child['children'] as $cChild) { // no cdata field found ... exit if (!isset($cChild['cdata'])) { continue; } // write value $tmpInfo['committer'][$cChild['name']] = $cChild['cdata']; } // end loop continue; } // no cdata field found ... exit if (!isset($child['cdata'])) { continue; } // write value $tmpInfo[$child['name']] = $child['cdata']; } // write values $tmp['url'] .= $tmpInfo['url']; $tmp['id'] = $tmpInfo['id']; $tmp['message'] = $tmpInfo['message']; $tmp['author'] = $tmpInfo['committer']['name']; $tmp['authorEmail'] = $tmpInfo['committer']['email']; $tmp['date'] = strtotime($tmpInfo['committed-date']); // write tmp array $data[0][] = $tmp; // remove old tmp array unset($tmp); } } catch (SystemException $ex) { $data[1] = $ex->getMessage(); } // return parsed commits return $data; }
/** * Downloads the package archive. * * @return string path to the dowloaded file */ public function downloadArchive() { $parsedUrl = parse_url($this->archive); $prefix = 'package'; // file transfer via hypertext transfer protocol. if ($parsedUrl['scheme'] == 'http') { $this->archive = FileUtil::downloadFileFromHttp($this->archive, $prefix); } elseif ($parsedUrl['scheme'] == 'ftp') { $this->archive = FTPUtil::downloadFileFromFtp($this->archive, $prefix); } // unzip tar $this->archive = self::unzipPackageArchive($this->archive); return $this->archive; }
/** * @see MessageForm::validateText() */ protected function validateText() { if (empty($this->text)) { return; } parent::validateText(); // check image count $imageCount = preg_match_all('!\\[img=.+?\\]!i', $this->text, $m) + preg_match_all('!\\[img\\].+?(\\[/img\\]|$)!is', $this->text, $m); if ($imageCount > WCF::getUser()->getPermission('user.profile.signature.maxImages')) { throw new UserInputException('text', 'tooManyImages'); } if (WCF::getUser()->getPermission('user.profile.signature.maxImageSize') > 0 || WCF::getUser()->getPermission('user.profile.signature.maxImageWidth') > 0 || WCF::getUser()->getPermission('user.profile.signature.maxImageHeight') > 0) { // get images $images = array(); // [img=path][/img] syntax preg_match_all("!\\[img=(?:'([^'\\\\]+|\\\\.)*'|(.+?))(?:,(?:'(?:left|right)'|(?:left|right)))?\\]!i", $this->text, $matches); $images = array_merge($images, ArrayUtil::trim($matches[1]), ArrayUtil::trim($matches[2])); // [img]path[/img] syntax preg_match_all("!\\[img\\](.+?)(\\[/img\\]|\$)!is", $this->text, $matches); $images = array_merge($images, ArrayUtil::trim($matches[1])); $errors = array(); foreach ($images as $image) { // download file try { if (@($tmpFile = FileUtil::downloadFileFromHttp($image, 'image_'))) { if (WCF::getUser()->getPermission('user.profile.signature.maxImageSize') > 0) { // get remote image size (byte) if (filesize($tmpFile) > WCF::getUser()->getPermission('user.profile.signature.maxImageSize')) { $errors[] = array('errorType' => 'tooLarge', 'image' => $image); continue; } } // get remote image size (pixel) if (WCF::getUser()->getPermission('user.profile.signature.maxImageWidth') > 0 || WCF::getUser()->getPermission('user.profile.signature.maxImageHeight') > 0) { if ($size = @getImageSize($tmpFile)) { $width = $size[0]; $height = $size[1]; if ($width > WCF::getUser()->getPermission('user.profile.signature.maxImageWidth') || $height > WCF::getUser()->getPermission('user.profile.signature.maxImageHeight')) { $errors[] = array('errorType' => 'tooLarge', 'image' => $image); } } } } } catch (SystemException $e) { } } if (count($errors) > 0) { throw new UserInputException('text', $errors); } } }
/** * @see Form::validate() */ public function validate() { parent::validate(); // use default value for unset variables foreach ($this->defaultVariables as $name => $value) { if (!isset($this->variables[$name])) { $this->variables[$name] = $value; } } // unset unnecessary variables foreach ($this->variables as $name => $value) { if (!isset($this->defaultVariables[$name])) { unset($this->variables[$name]); } } if (empty($this->styleName)) { throw new UserInputException('styleName'); } // upload image if ($this->imageUpload && $this->imageUpload['error'] != 4) { if ($this->imageUpload['error'] != 0) { throw new UserInputException('imageUpload', 'uploadFailed'); } $newImage = WCF_DIR . 'images/' . basename($this->imageUpload['name']); if (@getImageSize($this->imageUpload['tmp_name']) !== false && @move_uploaded_file($this->imageUpload['tmp_name'], $newImage)) { $this->image = 'images/' . basename($this->imageUpload['name']); @chmod($newImage, 0777); } } else { if (!empty($this->image) && FileUtil::isURL($this->image)) { $newImage = WCF_DIR . 'images/' . basename($this->image); $tmpFile = FileUtil::downloadFileFromHttp($this->image, 'image'); if (@getImageSize($tmpFile) !== false && @copy($tmpFile, $newImage)) { $this->image = 'images/' . basename($this->image); @chmod($newImage, 0777); } } } // template pack if ($this->templatePackID) { $templatePack = new TemplatePackEditor($this->templatePackID); if (!$templatePack->templatePackID) { throw new UserInputException('templatePackID'); } } }