From 99efc1e46697392b906e3ee47d940da901eda439 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Thu, 2 Jun 2016 00:06:54 +0200 Subject: [PATCH 01/10] Define correct translation --- .../modules/hofff_robots-txt-editor/languages/de/tl_page.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php index 4413612..3757374 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php @@ -4,6 +4,6 @@ $GLOBALS['TL_LANG']['tl_page']['createRobotsTxt'] = array("Eine robots.txt erstellen", "Eine individuelle robots.txt erstellen."); $GLOBALS['TL_LANG']['tl_page']['robotsTxtContent'] = array("Inhalt der robots.txt", "Geben Sie den Inhalt der robots.txt an."); -$GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'] = array("Add absolute sitemap path to robots.txt", "Add the absolute path of the sitemap to the robots.txt"); +$GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'] = array("Absoluten Sitemap Pfad zu robots.txt hinzufügen", "Den absoluten Pfad der Sitemap zur robots.txt hinzufügen."); $GLOBALS['TL_LANG']['tl_page']['robotsTxtContentImport'] = array("Default robots.txt importieren", "Die default robots.txt importieren (überschreibt vorhandene Daten)."); From a001cd063726f1f1fa16e2985059fd4275e34a09 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 24 Aug 2016 23:47:07 +0200 Subject: [PATCH 02/10] Add suggestion of hofff/contao-htaccess --- composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer.json b/composer.json index 25ef4c0..1675a2d 100644 --- a/composer.json +++ b/composer.json @@ -30,6 +30,9 @@ "conflict": { "contao/core":"3.4.0,3.4.1,3.4.2" }, + "suggest" : { + "hofff/contao-htaccess" : "To use different custom robots.txt files in a multi site installation." + }, "extra" : { "contao" : { "sources" : { From 83ba189932ce2ec02aef8fa72caddf12259fdb9f Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 24 Aug 2016 23:48:08 +0200 Subject: [PATCH 03/10] Add hint for new feature `Creating different custom robots.txt files in a multi site installation` --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b0d0102..101430f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Provides an editor for auto creation and modification of robots.txt inside a Con - Define content of robots.txt in root page - Add absolute path to sitemap +- If the extension [hofff/contao-htaccess](https://packagist.org/packages/hofff/contao-htaccess) is installed it is possible to create different custom robots.txt files in a multi site installation. ## Compatibility @@ -30,6 +31,8 @@ If you prefer to install it manually, download the latest release here: https:// There are no dependencies to other extensions, that have to be installed. +The extension [hofff/contao-htaccess](https://packagist.org/packages/hofff/contao-htaccess) is suggested to use different custom robots.txt files in a multi site installation. + ## Screenshots From 680d2ad1f99f41ad383818002ff6e164e9394c32 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 24 Aug 2016 23:48:31 +0200 Subject: [PATCH 04/10] Updating screenshot with new fields of feature `Creating different custom robots.txt files in a multi site installation` --- screenshot-backend.png | Bin 1071483 -> 1363572 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshot-backend.png b/screenshot-backend.png index 267a33a595f6d8ac74cce3c8fd6e028214194dd5..8c2df5773fb748fe06dcd14d5edd63983919f43a 100644 GIT binary patch literal 1363572 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 literal 1071483 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%0D#th?foWMN#GZ2I1zYYEvf?f;mB@=rUl^rf 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 Z#PDlptAB6 Date: Wed, 24 Aug 2016 23:49:50 +0200 Subject: [PATCH 05/10] Add general functionality of new feature `Creating different custom robots.txt files in a multi site installation` - writing htaccess ist still missing - cleaning up unused robots.txt files is missing --- .../classes/RobotsTxtEditor.php | 22 ++++++++++++-- .../hofff_robots-txt-editor/config/config.php | 5 +++- .../hofff_robots-txt-editor/dca/tl_page.php | 30 +++++++++++++++++-- .../languages/de/default.php | 1 + .../languages/de/tl_page.php | 7 +++-- .../languages/en/default.php | 1 + .../languages/en/tl_page.php | 8 +++-- 7 files changed, 63 insertions(+), 11 deletions(-) diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php index 4a8a279..1b6864d 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php @@ -63,10 +63,10 @@ public function createRobotsTxt(\DataContainer $dc) { $filepath = TL_ROOT . "/" . FILE_ROBOTS_TXT; - if (!is_writable($filepath)) + if (static::isHtaccessEnabled() && $dc->activeRecord->useDomainSpecificRobotsTxt) { - return false; - } + $filepath = TL_ROOT . "/" . static::getDomainSpecificFilePath($dc->activeRecord->alias); + } $objPage = $dc->activeRecord; @@ -94,4 +94,20 @@ public function createRobotsTxt(\DataContainer $dc) return false; } + + /** + * Checks whether the extension 'htaccess' is installed and not inactive. + */ + public static function isHtaccessEnabled () + { + return in_array('htaccess', \ModuleLoader::getActive()); + } + + /** + * Returns the file path to the domain specific robots.txt file. + */ + public static function getDomainSpecificFilePath ($strAlias) + { + return FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_Folder . "/" . FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_PREFIX . $strAlias . FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_SUFFIX;; + } } \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php index 6128d49..f4bb72d 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php @@ -9,4 +9,7 @@ * File constants */ define('FILE_ROBOTS_TXT', 'robots.txt'); -define('FILE_ROBOTS_TXT_DEFAULT', 'robots.txt.default'); \ No newline at end of file +define('FILE_ROBOTS_TXT_DEFAULT', 'robots.txt.default'); +define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_Folder', 'share'); +define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_PREFIX', 'robots_'); +define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_SUFFIX', '.txt'); \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php index 35fb25c..e46868e 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php @@ -16,7 +16,7 @@ $GLOBALS['TL_DCA']['tl_page']['palettes']['root'] = implode(";", $arrLegends); $GLOBALS['TL_DCA']['tl_page']['palettes']['__selector__'][] = "createRobotsTxt"; -$GLOBALS['TL_DCA']['tl_page']['subpalettes']['createRobotsTxt'] = "robotsTxtContent"; +$GLOBALS['TL_DCA']['tl_page']['subpalettes']['createRobotsTxt'] = "robotsTxtContent,useDomainSpecificRobotsTxt"; $GLOBALS['TL_DCA']['tl_page']['fields']['createRobotsTxt'] = array ( @@ -38,6 +38,14 @@ ), 'sql' => "text NULL" ); +$GLOBALS['TL_DCA']['tl_page']['fields']['useDomainSpecificRobotsTxt'] = array +( + 'label' => Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isHtaccessEnabled() ? $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'] : $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessNotInstalled'], + 'exclude' => true, + 'inputType' => 'checkbox', + 'eval' => array('tl_class'=>'w50', 'submitOnChange'=>true, 'disabled'=>!Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isHtaccessEnabled()), + 'sql' => "char(1) NOT NULL default ''" +); $GLOBALS['TL_DCA']['tl_page']['fields']['robotsTxtAddAbsoluteSitemapPath'] = array ( 'label' => &$GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'], @@ -51,6 +59,7 @@ * Table tl_page */ $GLOBALS['TL_DCA']['tl_page']['config']['onsubmit_callback'][] = array('tl_page_hofff_robots_txt_editor', 'updateRobotsTxt'); +$GLOBALS['TL_DCA']['tl_page']['config']['onsubmit_callback'][] = array('tl_page_hofff_robots_txt_editor', 'updateHtaccess'); /** * Class tl_page_hofff_robots_txt_editor @@ -77,9 +86,14 @@ public function modifyPaletteAndFields($dc) { $objPage = \PageModel::findById((int) $dc->id); - if ($objPage != null && $objPage->createSitemap && $objPage->createRobotsTxt) + if ($objPage != null) { - $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] = $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] . ',robotsTxtAddAbsoluteSitemapPath'; + if ($objPage->createSitemap && $objPage->createRobotsTxt) + { + $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] = $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] . ',robotsTxtAddAbsoluteSitemapPath'; + } + + $GLOBALS['TL_DCA']['tl_page']['fields']['dns']['eval']['mandatory'] = $objPage->useDomainSpecificRobotsTxt; } } @@ -103,6 +117,16 @@ public function updateRobotsTxt(DataContainer $dc) } } + public function updateHtaccess(DataContainer $dc) + { + if (Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isHtaccessEnabled() && $dc->activeRecord->useDomainSpecificRobotsTxt) + { + \System::log("Updating .htaccess file. Create RewriteRule from '".$dc->activeRecord->dns."/".Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::getDomainSpecificFilePath($dc->activeRecord->alias)."' to '".$dc->activeRecord->dns."/".FILE_ROBOTS_TXT."'.", __METHOD__, 'TL_INFO'); + \Message::addInfo($GLOBALS['TL_LANG']['MSC']['htaccess_updated']); + //$objHtaccess = Bit3\Contao\Htaccess\Htaccess::getInstance(); + //$objHtaccess->update(); + } + } /** * Add a link to the robots.txt import wizard diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php index 9e83ee6..e35cbd1 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php @@ -4,3 +4,4 @@ $GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "Die " . FILE_ROBOTS_TXT . " konnte nicht neu geschrieben werden (ggf. ist der Zugriff auf die Datei gesperrt)."; $GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "Die " . FILE_ROBOTS_TXT . " wurde neu geschrieben."; +$GLOBALS['TL_LANG']['MSC']['htaccess_updated'] = "Die .htaccess wurde aktualisiert."; diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php index 3757374..7080148 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php @@ -1,8 +1,11 @@ share Verzeichnis angelegt und in die .htaccess Datei wird eine entsprechende Rewrite Regel eingetragen."); +$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessNotInstalled'] = array($GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][0], "Für dieses Feature muss die Erweiterung hofff/contao-htaccess installiert und aktiv sein.

" . $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][1]); $GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'] = array("Absoluten Sitemap Pfad zu robots.txt hinzufügen", "Den absoluten Pfad der Sitemap zur robots.txt hinzufügen."); diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php index a977403..42871f8 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php @@ -4,3 +4,4 @@ $GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "The " . FILE_ROBOTS_TXT . " has not been recreated (possibly, the access to the file is locked)."; $GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "The " . FILE_ROBOTS_TXT . " has been recreated."; +$GLOBALS['TL_LANG']['MSC']['htaccess_updated'] = "The .htaccess has been updated."; diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php index 356d9be..8734bbd 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php @@ -1,8 +1,12 @@ share folder and in the .htaccess file a corresponding rewrite rule is added."); +$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessNotInstalled'] = array($GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][0], "To use this feature the extension hofff/contao-htaccess has to be installed and must be active.

" . $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][1]); + $GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'] = array("Add absolute sitemap path to robots.txt", "Add the absolute path of the sitemap to the robots.txt"); From cd8a1d46faeca827558b9a51b138bec8862da2a7 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Fri, 26 Aug 2016 00:30:42 +0200 Subject: [PATCH 06/10] Create the .htaccess entires (for #1) --- .../classes/RobotsTxtEditor.php | 15 ++++- .../classes/RobotsTxtEditorHtaccessWriter.php | 64 +++++++++++++++++++ .../config/autoload.php | 3 +- .../hofff_robots-txt-editor/config/config.php | 16 ++++- .../hofff_robots-txt-editor/dca/tl_page.php | 10 ++- .../languages/de/default.php | 5 +- .../languages/de/tl_page.php | 2 +- .../languages/en/default.php | 5 +- .../languages/en/tl_page.php | 2 +- 9 files changed, 104 insertions(+), 18 deletions(-) create mode 100644 CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php index 1b6864d..b903f11 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php @@ -63,7 +63,7 @@ public function createRobotsTxt(\DataContainer $dc) { $filepath = TL_ROOT . "/" . FILE_ROBOTS_TXT; - if (static::isHtaccessEnabled() && $dc->activeRecord->useDomainSpecificRobotsTxt) + if (static::isDomainSpecicCreationAllowed($dc->activeRecord->useDomainSpecificRobotsTxt)) { $filepath = TL_ROOT . "/" . static::getDomainSpecificFilePath($dc->activeRecord->alias); } @@ -96,13 +96,24 @@ public function createRobotsTxt(\DataContainer $dc) } /** - * Checks whether the extension 'htaccess' is installed and not inactive. + * Checks whether the extension 'htaccess' is installed and active. + * @return True, if the extension 'htaccess' is installed and active. */ public static function isHtaccessEnabled () { return in_array('htaccess', \ModuleLoader::getActive()); } + /** + * Checks whether creation of a domain specific robots.txt is allowed. + * @param $blnUseDomainSpecificRobotsTxt The value from the DataContainer. + * @return True, if the extension 'htaccess' is installed and the parametrized value in the page is checked. + */ + public static function isDomainSpecicCreationAllowed ($blnUseDomainSpecificRobotsTxt) + { + return static::isHtaccessEnabled() && $blnUseDomainSpecificRobotsTxt; + } + /** * Returns the file path to the domain specific robots.txt file. */ diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php new file mode 100644 index 0000000..083f64f --- /dev/null +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php @@ -0,0 +1,64 @@ + + * @package Hofff_robots-txt-editor + */ +class RobotsTxtEditorHtaccessWriter implements \Symfony\Component\EventDispatcher\EventSubscriberInterface +{ + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() + { + return array( + \Bit3\Contao\Htaccess\HtaccessEvents::GENERATE_REWRITES => 'generateRewrites', + ); + } + + /** + * Generate this sub module code. + * + * @return string + */ + public function generateRewrites(\Bit3\Contao\Htaccess\Event\GenerateRewritesEvent $event) + { + $objPages = \Contao\Database::getInstance()->prepare("SELECT alias, dns FROM tl_page WHERE createRobotsTxt = 1 AND useDomainSpecificRobotsTxt = 1 AND published = 1")->execute(); + + while ($objPages->next()) + { + $strRewriteRule = sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'], $this->prepareUrl($objPages->dns))//"domain-a\.tld") + . "\n" + . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'], $this->prepareUrl(FILE_ROBOTS_TXT)/*"robots\.txt"*/, $this->prepareUrl(RobotsTxtEditor::getDomainSpecificFilePath($objPages->alias))/*"share/robots_alias\.txt"*/); + $pre = $event->getPre(); + $pre->append(PHP_EOL . $strRewriteRule); + } + } + + private function prepareUrl($strUrl) + { + $strUrl = str_replace('.', '\.', $strUrl); + return $strUrl; + } +} \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/autoload.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/autoload.php index cd85e90..c00b6c0 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/autoload.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/autoload.php @@ -24,5 +24,6 @@ ClassLoader::addClasses(array ( // Classes - 'Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor' => 'system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php', + 'Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor' => 'system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php', + 'Hofff\Contao\RobotsTxtEditor\RobotsTxtEditorHtaccessWriter' => 'system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php', )); diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php index f4bb72d..246981e 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/config/config.php @@ -12,4 +12,18 @@ define('FILE_ROBOTS_TXT_DEFAULT', 'robots.txt.default'); define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_Folder', 'share'); define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_PREFIX', 'robots_'); -define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_SUFFIX', '.txt'); \ No newline at end of file +define('FILE_ROBOTS_TXT_DOMAIN_SPECIFIC_SUFFIX', '.txt'); + +/** + * Configuration + */ +// Rewrite condition and rule (escape % with %% !!!): +// RewriteCond %{HTTP_HOST} ^(www\.)?domain-a\.tld$ +// RewriteRule ^robots\.txt share/robots_alias\.txt +$GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'] = "RewriteCond %%{HTTP_HOST} ^(www\.)?%s$"; +$GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'] = "RewriteRule ^%s %s"; + +if (Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isHtaccessEnabled()) +{ + $GLOBALS['TL_EVENT_SUBSCRIBERS'][] = 'Hofff\Contao\RobotsTxtEditor\RobotsTxtEditorHtaccessWriter'; +} \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php index e46868e..f950b43 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php @@ -108,7 +108,7 @@ public function updateRobotsTxt(DataContainer $dc) $robotsTxtEditor = new Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor(); if ($robotsTxtEditor->createRobotsTxt($dc)) { - \Message::addInfo($GLOBALS['TL_LANG']['MSC']['robotstxt_updated']); + \Message::addConfirmation($GLOBALS['TL_LANG']['MSC']['robotstxt_updated']); } else { @@ -119,12 +119,10 @@ public function updateRobotsTxt(DataContainer $dc) public function updateHtaccess(DataContainer $dc) { - if (Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isHtaccessEnabled() && $dc->activeRecord->useDomainSpecificRobotsTxt) + if (Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::isDomainSpecicCreationAllowed($dc->activeRecord->useDomainSpecificRobotsTxt)) { - \System::log("Updating .htaccess file. Create RewriteRule from '".$dc->activeRecord->dns."/".Hofff\Contao\RobotsTxtEditor\RobotsTxtEditor::getDomainSpecificFilePath($dc->activeRecord->alias)."' to '".$dc->activeRecord->dns."/".FILE_ROBOTS_TXT."'.", __METHOD__, 'TL_INFO'); - \Message::addInfo($GLOBALS['TL_LANG']['MSC']['htaccess_updated']); - //$objHtaccess = Bit3\Contao\Htaccess\Htaccess::getInstance(); - //$objHtaccess->update(); + $objHtaccess = Bit3\Contao\Htaccess\Htaccess::getInstance(); + $objHtaccess->update(); } } diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php index e35cbd1..9c15c00 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php @@ -1,7 +1,6 @@ " . FILE_ROBOTS_TXT_DEFAULT . " in ihrem Contao Root.
Diese Datei hätte bei der Installation der Erweiterung initial erstellt werden sollen.

Der Import wurde abgebrochen.

Bitte installieren Sie die Erweiterung erneut."; -$GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "Die " . FILE_ROBOTS_TXT . " konnte nicht neu geschrieben werden (ggf. ist der Zugriff auf die Datei gesperrt)."; +$GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "Die " . FILE_ROBOTS_TXT . " Datei konnte nicht neu erstellt werden (ggf. ist der Zugriff auf die Datei gesperrt)."; -$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "Die " . FILE_ROBOTS_TXT . " wurde neu geschrieben."; -$GLOBALS['TL_LANG']['MSC']['htaccess_updated'] = "Die .htaccess wurde aktualisiert."; +$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "Die " . FILE_ROBOTS_TXT . " Datei wurde neu erstellt."; \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php index 7080148..6e0ec50 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/tl_page.php @@ -4,7 +4,7 @@ $GLOBALS['TL_LANG']['tl_page']['createRobotsTxt'] = array("Eine robots.txt erstellen", "Eine individuelle robots.txt erstellen."); $GLOBALS['TL_LANG']['tl_page']['robotsTxtContent'] = array("Inhalt der robots.txt", "Geben Sie den Inhalt der robots.txt an."); -$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'] = array("Domainspezifische robots.txt verwenden", "Wählen Sie, ob die robots.txt domainspezifisch sein soll, d.h. für die Domain dieses Seitenbaums wird eine individuelle robots.txt im share Verzeichnis angelegt und in die .htaccess Datei wird eine entsprechende Rewrite Regel eingetragen."); +$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'] = array("Domainspezifische robots.txt verwenden", "Wählen Sie, ob die robots.txt domainspezifisch sein soll, d.h. für die Domain dieses Seitenbaums wird eine individuelle robots.txt im share Verzeichnis angelegt und in die .htaccess Datei wird eine entsprechende Rewrite Regel eingetragen.

Erstellt folgenden .htaccess Eintrag (beispielhaft):

" . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'], "domain-a\.tld") . "
" . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'], "robots\.txt", "share/robots_alias\.txt") . "
"); $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessNotInstalled'] = array($GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][0], "Für dieses Feature muss die Erweiterung hofff/contao-htaccess installiert und aktiv sein.

" . $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][1]); $GLOBALS['TL_LANG']['tl_page']['robotsTxtAddAbsoluteSitemapPath'] = array("Absoluten Sitemap Pfad zu robots.txt hinzufügen", "Den absoluten Pfad der Sitemap zur robots.txt hinzufügen."); diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php index 42871f8..6d9e50c 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php @@ -1,7 +1,6 @@ " . FILE_ROBOTS_TXT_DEFAULT . " in your Contao root.
This file should be created initially when you installed the extension.

The import was aborted.

Please install the extension again."; -$GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "The " . FILE_ROBOTS_TXT . " has not been recreated (possibly, the access to the file is locked)."; +$GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "The " . FILE_ROBOTS_TXT . " file has not been recreated (possibly, the access to the file is locked)."; -$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "The " . FILE_ROBOTS_TXT . " has been recreated."; -$GLOBALS['TL_LANG']['MSC']['htaccess_updated'] = "The .htaccess has been updated."; +$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "The " . FILE_ROBOTS_TXT . " file has been recreated."; \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php index 8734bbd..b161d43 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/tl_page.php @@ -4,7 +4,7 @@ $GLOBALS['TL_LANG']['tl_page']['createRobotsTxt'] = array("Create a robots.txt", "Create a custom robots.txt file."); $GLOBALS['TL_LANG']['tl_page']['robotsTxtContent'] = array("Content of the robots.txt", "Please enter the content of the robots.txt file."); -$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'] = array("Use domain specific robots.txt", "Please select, if the robots.txt should be domain specific, i.e. for the domain of this page tree a custom robots.txt will be created in the share folder and in the .htaccess file a corresponding rewrite rule is added."); +$GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'] = array("Use domain specific robots.txt", "Please select, if the robots.txt should be domain specific, i.e. for the domain of this page tree a custom robots.txt will be created in the share folder and in the .htaccess file a corresponding rewrite rule is added.

Creates the following .htaccess entry (exemplary):

" . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'], "domain-a\.tld") . "
" . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'], "robots\.txt", "share/robots_alias\.txt") . "
"); $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessNotInstalled'] = array($GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][0], "To use this feature the extension hofff/contao-htaccess has to be installed and must be active.

" . $GLOBALS['TL_LANG']['tl_page']['useDomainSpecificRobotsTxt_htaccessInstalled'][1]); From 021728e7ad01dd5cd1439a5f05e4f6bfb45111ca Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 31 Aug 2016 22:42:11 +0200 Subject: [PATCH 07/10] Adding cleanup of old domain specific robots.txt when the page alias changed. --- .../classes/RobotsTxtEditor.php | 32 ++++++++++++++----- .../languages/de/default.php | 4 ++- .../languages/en/default.php | 4 ++- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php index b903f11..887c730 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditor.php @@ -61,17 +61,33 @@ public function importRobotsTxt(\DataContainer $dc) */ public function createRobotsTxt(\DataContainer $dc) { - $filepath = TL_ROOT . "/" . FILE_ROBOTS_TXT; - - if (static::isDomainSpecicCreationAllowed($dc->activeRecord->useDomainSpecificRobotsTxt)) - { - $filepath = TL_ROOT . "/" . static::getDomainSpecificFilePath($dc->activeRecord->alias); - } + $filePath = TL_ROOT . "/" . FILE_ROBOTS_TXT; $objPage = $dc->activeRecord; - + if ($objPage != null) { + if (static::isDomainSpecicCreationAllowed($dc->activeRecord->useDomainSpecificRobotsTxt)) + { + $filePath = TL_ROOT . "/" . static::getDomainSpecificFilePath($dc->activeRecord->alias); + + // delete the old file, if the alias was changed + $objOldPage = \Contao\Database::getInstance()->prepare("SELECT * FROM tl_version WHERE fromTable=? AND pid=? ORDER BY version DESC") + ->limit(1) + ->execute('tl_page', $dc->id); + + if ($objOldPage != null && ($strAliasOld = deserialize($objOldPage->data)['alias']) && $strAliasOld!= $objPage->alias) + { + \Message::addInfo($GLOBALS['TL_LANG']['MSC']['DomainSpecificRobotsTxt_cleared']); + $filePathOld = TL_ROOT . "/" . static::getDomainSpecificFilePath($strAliasOld); + + if (file_exists($filePathOld)) + { + unlink($filePathOld); + } + } + } + $fileContent = $objPage->robotsTxtContent; if ($objPage->createSitemap && $objPage->sitemapName != '' && $objPage->robotsTxtAddAbsoluteSitemapPath) @@ -82,7 +98,7 @@ public function createRobotsTxt(\DataContainer $dc) $fileContent .= "Sitemap: " . $strDomain . "share/" . $objPage->sitemapName . ".xml"; } - if (file_put_contents($filepath, $fileContent) === FALSE) + if (file_put_contents($filePath, $fileContent) === FALSE) { return false; } diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php index 9c15c00..e48a07f 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/de/default.php @@ -3,4 +3,6 @@ $GLOBALS['TL_LANG']['ERR']['no_robotstxt_default'] = "Es befindet sich keine " . FILE_ROBOTS_TXT_DEFAULT . " in ihrem Contao Root.
Diese Datei hätte bei der Installation der Erweiterung initial erstellt werden sollen.

Der Import wurde abgebrochen.

Bitte installieren Sie die Erweiterung erneut."; $GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "Die " . FILE_ROBOTS_TXT . " Datei konnte nicht neu erstellt werden (ggf. ist der Zugriff auf die Datei gesperrt)."; -$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "Die " . FILE_ROBOTS_TXT . " Datei wurde neu erstellt."; \ No newline at end of file +$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "Die " . FILE_ROBOTS_TXT . " Datei wurde neu erstellt."; + +$GLOBALS['TL_LANG']['MSC']['DomainSpecificRobotsTxt_cleared'] = "Der Seitenalias wurde geändert, deshalb wurde die alte domainspezifische robots.txt gelöscht."; \ No newline at end of file diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php index 6d9e50c..eba4db8 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/languages/en/default.php @@ -3,4 +3,6 @@ $GLOBALS['TL_LANG']['ERR']['no_robotstxt_default'] = "There is no " . FILE_ROBOTS_TXT_DEFAULT . " in your Contao root.
This file should be created initially when you installed the extension.

The import was aborted.

Please install the extension again."; $GLOBALS['TL_LANG']['ERR']['robotstxt_not_updated'] = "The " . FILE_ROBOTS_TXT . " file has not been recreated (possibly, the access to the file is locked)."; -$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "The " . FILE_ROBOTS_TXT . " file has been recreated."; \ No newline at end of file +$GLOBALS['TL_LANG']['MSC']['robotstxt_updated'] = "The " . FILE_ROBOTS_TXT . " file has been recreated."; + +$GLOBALS['TL_LANG']['MSC']['DomainSpecificRobotsTxt_cleared'] = "The page alias has been changed, so the old domain specific robots.txt was deleted."; \ No newline at end of file From 83268f8bbf27d2b08026a8a10d25d259e0ea7ee3 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 31 Aug 2016 22:52:19 +0200 Subject: [PATCH 08/10] Clean up code (for #1) --- .../classes/RobotsTxtEditorHtaccessWriter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php index 083f64f..5ecb922 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/classes/RobotsTxtEditorHtaccessWriter.php @@ -48,9 +48,9 @@ public function generateRewrites(\Bit3\Contao\Htaccess\Event\GenerateRewritesEve while ($objPages->next()) { - $strRewriteRule = sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'], $this->prepareUrl($objPages->dns))//"domain-a\.tld") + $strRewriteRule = sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteCond'], $this->prepareUrl($objPages->dns)) . "\n" - . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'], $this->prepareUrl(FILE_ROBOTS_TXT)/*"robots\.txt"*/, $this->prepareUrl(RobotsTxtEditor::getDomainSpecificFilePath($objPages->alias))/*"share/robots_alias\.txt"*/); + . sprintf($GLOBALS['TL_CONFIG']['RobotsTxtEditorRewriteRule'], $this->prepareUrl(FILE_ROBOTS_TXT), $this->prepareUrl(RobotsTxtEditor::getDomainSpecificFilePath($objPages->alias))); $pre = $event->getPre(); $pre->append(PHP_EOL . $strRewriteRule); } From 378f02cb5f74fa44cfb72ed45cb98d72846a444a Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 31 Aug 2016 23:23:12 +0200 Subject: [PATCH 09/10] Improves extending `sitemap` section in BE (closes #2) --- .../system/modules/hofff_robots-txt-editor/dca/tl_page.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php index f950b43..83bbaed 100644 --- a/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php +++ b/CT_ROOT/system/modules/hofff_robots-txt-editor/dca/tl_page.php @@ -84,11 +84,10 @@ public function __construct() */ public function modifyPaletteAndFields($dc) { - $objPage = \PageModel::findById((int) $dc->id); - - if ($objPage != null) + $objPage = \Database::getInstance()->prepare("SELECT * FROM tl_page WHERE id = ?")->execute($dc->id); + if ($objPage->next()) { - if ($objPage->createSitemap && $objPage->createRobotsTxt) + if ($objPage->createRobotsTxt) { $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] = $GLOBALS['TL_DCA']['tl_page']['subpalettes']['createSitemap'] . ',robotsTxtAddAbsoluteSitemapPath'; } From 2cb162fffeec4cb7069e1d3da113fcb5b5b3f701 Mon Sep 17 00:00:00 2001 From: Cliff Parnitzky Date: Wed, 31 Aug 2016 23:23:25 +0200 Subject: [PATCH 10/10] Updating changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb0905..e92cae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Contao Extension "hofff/contao-robots-txt-editor" ------------------------------------------------- +### Version 1.0.0-beta2 (2016-08-31) ### +- Adds Multi-Site-Installation (see #1) +- Improves extending `sitemap` section in BE (see #2) + ### Version 1.0.0-beta1 (2016-06-02) ### - Initial release \ No newline at end of file