From 9007cffc866bddfda2c0a0a2ca8f86e665b50c2f Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Thu, 28 Sep 2017 11:16:48 +0200 Subject: [PATCH] add sitemap --- .gitignore | 1 + src/composer.json | 3 +- src/composer.lock | 46 +++++++++++++++++++++++++++++- src/config/config.example.php | 7 ++++- src/helpers/Issue.php | 11 +++++++ src/helpers/Page.php | 5 ++++ src/helpers/SitemapHelper.php | 46 ++++++++++++++++++++++++++++++ src/tasks/import_github_issues.php | 1 + 8 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 src/helpers/SitemapHelper.php diff --git a/.gitignore b/.gitignore index 0ace00a..bae12d7 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ src/composer.phar src/config/config.php src/node_modules/ src/public/css/style.* +src/tmp/sitemap-index.xml diff --git a/src/composer.json b/src/composer.json index 832cac3..539a4c6 100644 --- a/src/composer.json +++ b/src/composer.json @@ -8,7 +8,8 @@ "knplabs/github-api": "^2.5", "php-http/guzzle6-adapter": "^1.1", "cache/filesystem-adapter": "^1.0", - "monolog/monolog": "^1.23" + "monolog/monolog": "^1.23", + "evert/sitemap-php": "^1.2" }, "autoload":{ "psr-0":{ diff --git a/src/composer.lock b/src/composer.lock index 5dd32b3..79ead49 100644 --- a/src/composer.lock +++ b/src/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "14a0b7b897b18b882ea252fcf4b478bd", + "content-hash": "173d5101b6c7ef41ef8167acc05029fc", "packages": [ { "name": "cache/adapter-common", @@ -315,6 +315,50 @@ ], "time": "2017-05-14T14:47:48+00:00" }, + { + "name": "evert/sitemap-php", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/evert/sitemap-php.git", + "reference": "be07a062943401067bf0ba62710ca733c838bc24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/evert/sitemap-php/zipball/be07a062943401067bf0ba62710ca733c838bc24", + "reference": "be07a062943401067bf0ba62710ca733c838bc24", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "SitemapPHP": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Osman Ungur", + "email": "osmanungur@gmail.com" + }, + { + "name": "Evert Pot", + "email": "evert@rooftopsolutions.nl" + } + ], + "description": "Lightweight library for generating Google sitemap XML files", + "homepage": "http://code.google.com/p/sabredav/", + "keywords": [ + "Sitemap" + ], + "time": "2015-04-17T21:45:50+00:00" + }, { "name": "ezyang/htmlpurifier", "version": "v4.9.3", diff --git a/src/config/config.example.php b/src/config/config.example.php index 8a8a572..c4c712a 100644 --- a/src/config/config.example.php +++ b/src/config/config.example.php @@ -49,4 +49,9 @@ define('PIWIK_ID', false); * Number of pages to show before and after the current page in the pagination. e.g. default (5) on page 37: * < 1 ... 32 33 34 35 36 *37** 38 39 40 40 42 ... 115 > */ -define("PAGINATION_PADDING", 5); \ No newline at end of file +define("PAGINATION_PADDING", 5); + +/** + * used in sitemap (without trailing slash) + */ +define("BASE_DOMAIN", "https://issues.piwik.org"); \ No newline at end of file diff --git a/src/helpers/Issue.php b/src/helpers/Issue.php index 54a0d4b..00f2b68 100755 --- a/src/helpers/Issue.php +++ b/src/helpers/Issue.php @@ -25,6 +25,17 @@ class Issue { return json_decode($serialized, true); } + public static function getAllIssues() { + $Directory = new \RecursiveDirectoryIterator(dirname(__FILE__) . "/../data/issues/"); + $Iterator = new \RecursiveIteratorIterator($Directory); + $issues = []; + foreach ($Iterator as $name => $object) { + $filename = $object->getFilename(); + $issues[] = str_replace(".json", "", $filename); + } + return $issues; + } + /** * Verify whether the given issue exists. * @param int $issueNumber diff --git a/src/helpers/Page.php b/src/helpers/Page.php index 88efa53..6bf1369 100755 --- a/src/helpers/Page.php +++ b/src/helpers/Page.php @@ -25,6 +25,11 @@ class Page return json_decode($content, true); } + public static function getAllPages() { + $files = scandir(dirname(__FILE__) . "/../data/pages/"); + return str_replace(".json", "", array_diff($files, array('..', '.', '.gitkeep'))); + } + /** * Verify whether the given page number exists. * @param int $pageNumber diff --git a/src/helpers/SitemapHelper.php b/src/helpers/SitemapHelper.php new file mode 100644 index 0000000..f4c10a9 --- /dev/null +++ b/src/helpers/SitemapHelper.php @@ -0,0 +1,46 @@ +setPath('../tmp/'); + + $logger->info("fetching all pages for sitemap"); + $pages = Page::getAllPages(); + natsort($pages); + foreach ($pages as $pageNumber) { + $url = $app->getContainer()->get('router')->pathFor('page', [], [ + 'page' => $pageNumber + ]); + $sitemap->addItem($url, 0.2); + } + + $logger->info("fetching all issues for sitemap"); + $issues = Issue::getAllIssues(); + natsort($issues); + foreach ($issues as $issueNumber) { + $url = $app->getContainer()->get('router')->pathFor('issue', [ + 'number' => $issueNumber + ]); + $sitemap->addItem($url, 0.5); + } + + $logger->info("generating sitemap"); + $sitemap->createSitemapIndex(BASE_DOMAIN . "/", 'Today'); + } +} \ No newline at end of file diff --git a/src/tasks/import_github_issues.php b/src/tasks/import_github_issues.php index ec0630b..74ea4f9 100644 --- a/src/tasks/import_github_issues.php +++ b/src/tasks/import_github_issues.php @@ -29,6 +29,7 @@ $importer = new helpers\GithubImporter($client, $logger); try { $logger->info("starting import"); $importer->import(GITHUB_ORGANIZATION, GITHUB_REPOSITORY, NUMBER_OF_ISSUES_PER_PAGE); + helpers\SitemapHelper::createSitemap($logger); } catch (Exception $e) { helpers\Mail::sendEmail('Import error', $e->getMessage(), PROJECT_EMAIL, PROJECT_EMAIL);