%PDF- %PDF-
Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/ |
Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Sitemap.php |
<?php /** * TorrentPier – Bull-powered BitTorrent tracker engine * * @copyright Copyright (c) 2005-2018 TorrentPier (https://torrentpier.com) * @link https://github.com/torrentpier/torrentpier for the canonical source repository * @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License */ namespace TorrentPier\Legacy; use samdark\sitemap\Sitemap as STM; use samdark\sitemap\Index as IDX; /** * Class Sitemap * @package TorrentPier\Legacy */ class Sitemap { /** * Получение списка URL разделов * * @return array */ private function getForumUrls() { global $datastore; $forumUrls = []; if (!$forums = $datastore->get('cat_forums')) { $datastore->update('cat_forums'); $forums = $datastore->get('cat_forums'); } $not_forums_id = $forums['not_auth_forums']['guest_view']; $ignore_forum_sql = $not_forums_id ? "WHERE forum_id NOT IN($not_forums_id)" : ''; $sql = DB()->sql_query("SELECT forum_id, forum_name FROM " . BB_FORUMS . " " . $ignore_forum_sql . " ORDER BY forum_id ASC"); while ($row = DB()->sql_fetchrow($sql)) { $forumUrls[] = [ 'url' => FORUM_URL . $row['forum_id'], ]; } return $forumUrls; } /** * Получение списка URL тем * * @return array */ private function getTopicUrls() { global $datastore; $topicUrls = []; if (!$forums = $datastore->get('cat_forums')) { $datastore->update('cat_forums'); $forums = $datastore->get('cat_forums'); } $not_forums_id = $forums['not_auth_forums']['guest_view']; $ignore_forum_sql = $not_forums_id ? "WHERE forum_id NOT IN($not_forums_id)" : ''; $sql = DB()->sql_query("SELECT topic_id, topic_title, topic_time FROM " . BB_TOPICS . " " . $ignore_forum_sql . " ORDER BY topic_time ASC"); while ($row = DB()->sql_fetchrow($sql)) { $topicUrls[] = [ 'url' => TOPIC_URL . $row['topic_id'], 'time' => $row['topic_time'], ]; } return $topicUrls; } /** * Получение списка статичных URL * * @return array */ private function getStaticUrls() { global $bb_cfg; $staticUrls = []; if (isset($bb_cfg['static_sitemap'])) { /** @var array $urls разбиваем строку по переносам */ $urls = explode("\n", $bb_cfg['static_sitemap']); foreach ($urls as $url) { /** @var string $url проверяем что адрес валиден и с указанными протоколом */ if (filter_var(trim($url), FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) { $staticUrls[] = [ 'url' => trim($url), ]; } } } return $staticUrls; } /** * Генерация карты сайта (динамичные URL) * * @return array * * @throws \InvalidArgumentException */ private function buildDynamicSitemap() { $sitemap = new STM(SITEMAP_DIR . '/sitemap_dynamic.xml'); foreach ($this->getForumUrls() as $forum) { $sitemap->addItem(make_url($forum['url']), time(), STM::HOURLY, 0.7); } foreach ($this->getTopicUrls() as $topic) { $sitemap->addItem(make_url($topic['url']), $topic['time'], STM::DAILY, 0.5); } $sitemap->write(); return $sitemap->getSitemapUrls(make_url('/sitemap') . '/'); } /** * Генерация карты сайта (статичные URL) * * @return array * * @throws \InvalidArgumentException */ private function buildStaticSitemap() { $staticSitemap = new STM(SITEMAP_DIR . '/sitemap_static.xml'); foreach ($this->getStaticUrls() as $url) { $staticSitemap->addItem($url['url'], time(), STM::WEEKLY, 0.5); } $staticSitemap->write(); return $staticSitemap->getSitemapUrls(make_url('/sitemap') . '/'); } /** * Генерация карты сайта * * @return bool * * @throws \InvalidArgumentException */ public function createSitemap() { $index = new IDX(SITEMAP_DIR . '/sitemap.xml'); foreach ($this->buildDynamicSitemap() as $sitemapUrl) { $index->addSitemap($sitemapUrl); } foreach ($this->buildStaticSitemap() as $sitemapUrl) { $index->addSitemap($sitemapUrl); } $index->write(); /** обновляем время генерации карты сайта в конфиге */ bb_update_config(['sitemap_time' => TIMENOW]); return true; } /** * Отправка карты сайта на указанный URL * * @param $url * @param $map * * @return string */ public function sendSitemap($url, $map) { $file = $url . urlencode($map); if (\function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $file); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6); $data = curl_exec($ch); curl_close($ch); return $data; } return file_get_contents($file); } }