diff --git a/CHANGELOG.md b/CHANGELOG.md index f93245a..34aa9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,40 +1,3 @@ # MetaSEO - Changelog -## MetaSEO 2.0.1 - -- Bugfixes - -## MetaSEO 2.0 - -- Added TYPO3 7.x support -- Implemented Signals -- Implemented blacklist of PAGE typeNum in SetupTS -- Implemented blacklist for index/noindex robots metatag -- Implemented blacklist for canonical url -- Implemented canonical url support for mounted pages, pointing to real page instead of mount path (disabled by default) -- Implemented expiry date for sitemap entries (customizable with SetupTS or Connector) -- Implemented pagetitle caching (if there is any USER_INT on the current page) -- Removed own caching solution, using TYPO3 caching framework now -- Fixed many bugs and issues -- Fixed coding style (added .editorconfig) -- Refactored whole extension -- Added protocol selection for canonical Urls in case protocol is undefined in page properties - (via plugin.metaseo.metaTags.canonicalUrl.fallbackProtocol) - -## Beta features - -- If you have any issues with cached pagetitle: set `plugin.metaseo.pageTitle.caching = 0` to disable this feature. - -### Migrate from 1.x to 2.x - -- TypoScript Constant `plugin.metaseo.metaTags.useCanonical` changed to `plugin.metaseo.metaTags.canonicalUrl` -- TypoScript Setup `plugin.metaseo.metaTags.useCanonical` changed to `plugin.metaseo.metaTags.canonicalUrl` -- Names of Hooks changed, now camelCase - - -## MetaSEO 1.0 (2014-04-20) - -- Version 1.0.0 -- Fork of metaseo -- Fixed several bugs and improved codebase -- Fixed and improved manual (now reStructuredText) +Latest version of the [changelog](https://github.com/mblaschke/TYPO3-metaseo/blob/develop/Documentation/ChangeLog/Index.rst) \ No newline at end of file diff --git a/Classes/Controller/Ajax/AbstractPageSeoController.php b/Classes/Controller/Ajax/AbstractPageSeoController.php index f221562..d8a1834 100644 --- a/Classes/Controller/Ajax/AbstractPageSeoController.php +++ b/Classes/Controller/Ajax/AbstractPageSeoController.php @@ -169,7 +169,7 @@ protected function executeUpdate() } $pid = (int)$this->postVar['pid']; - $fieldName = strtolower((string)$this->postVar['field']); + $fieldName = (string)$this->postVar['field']; $fieldValue = (string)$this->postVar['value']; $sysLanguage = (int)$this->postVar['sysLanguage']; @@ -195,6 +195,8 @@ protected function executeUpdate() // Security checks // ############################ + // generates the excludelist, based on TCA/exclude-flag and non_exclude_fields for the user: + $excludedTablesAndFields = array_flip($this->getDataHandler()->getExcludeListArray()); // check if user is able to modify pages if (!$this->getBackendUserAuthentication()->check('tables_modify', 'pages')) { @@ -221,8 +223,9 @@ protected function executeUpdate() } // check if user is able to modify the field of pages - if (!$this->getBackendUserAuthentication() - ->check('non_exclude_fields', 'pages:' . $fieldName) + if (isset($excludedTablesAndFields['pages-' . $fieldName]) + && !$this->getBackendUserAuthentication() + ->check('non_exclude_fields', 'pages:' . $fieldName) ) { // No access @@ -249,8 +252,9 @@ protected function executeUpdate() } // check if user is able to modify the field of pages - if (!$this->getBackendUserAuthentication() - ->check('non_exclude_fields', 'pages_language_overlay:' . $fieldName) + if (isset($excludedTablesAndFields['pages_language_overlay-' . $fieldName]) + && !$this->getBackendUserAuthentication() + ->check('non_exclude_fields', 'pages_language_overlay:' . $fieldName) ) { // No access @@ -267,7 +271,7 @@ protected function executeUpdate() // ############################ switch ($fieldName) { - case 'lastupdated': + case 'lastUpdated': // transform to unix timestamp $fieldValue = strtotime($fieldValue); break; diff --git a/Classes/Controller/Ajax/PageSeo/MetaDataController.php b/Classes/Controller/Ajax/PageSeo/MetaDataController.php index 209adce..3167246 100644 --- a/Classes/Controller/Ajax/PageSeo/MetaDataController.php +++ b/Classes/Controller/Ajax/PageSeo/MetaDataController.php @@ -40,7 +40,7 @@ protected function initFieldList() 'abstract', 'author', 'author_email', - 'lastupdated', + 'lastUpdated', ); } @@ -53,10 +53,10 @@ protected function getIndex(array $page, $depth, $sysLanguage) unset($row); foreach ($list as &$row) { - if (!empty($row['lastupdated'])) { - $row['lastupdated'] = date('Y-m-d', $row['lastupdated']); + if (!empty($row['lastUpdated'])) { + $row['lastUpdated'] = date('Y-m-d', $row['lastUpdated']); } else { - $row['lastupdated'] = ''; + $row['lastUpdated'] = ''; } } unset($row); diff --git a/Classes/Controller/BackendPageSeoController.php b/Classes/Controller/BackendPageSeoController.php index 6372142..16c5332 100644 --- a/Classes/Controller/BackendPageSeoController.php +++ b/Classes/Controller/BackendPageSeoController.php @@ -166,8 +166,7 @@ protected function handleSubAction($listType) // Flag (if available) if (!empty($langRow['flag'])) { - $flag .= ''; + $flag .= IconUtility::getSpriteIcon('flags-' . $langRow['flag']); $flag .= ' '; } @@ -216,9 +215,9 @@ protected function handleSubAction($listType) 'criteriaFulltext' => '', 'realurlAvailable' => $realUrlAvailable, 'sprite' => array( - 'edit' => IconUtility::getSpriteIcon('actions-document-open'), - 'info' => IconUtility::getSpriteIcon('actions-document-info'), - 'editor' => IconUtility::getSpriteIcon('actions-system-options-view'), + 'edit' => $this->getIcon('actions-document-open'), + 'info' => $this->getIcon('actions-document-info'), + 'editor' => $this->getIcon('actions-system-options-view'), ), ); @@ -244,7 +243,7 @@ protected function handleSubAction($listType) 'page_abstract' => 'header.sitemap.page_abstract', 'page_author' => 'header.sitemap.page_author', 'page_author_email' => 'header.sitemap.page_author_email', - 'page_lastupdated' => 'header.sitemap.page_lastupdated', + 'page_lastUpdated' => 'header.sitemap.page_lastUpdated', 'page_geo_lat' => 'header.sitemap.page_geo_lat', 'page_geo_long' => 'header.sitemap.page_geo_long', 'page_geo_place' => 'header.sitemap.page_geo_place', @@ -290,4 +289,28 @@ protected function handleSubAction($listType) ' ); } + + private function getIcon($iconName) + { + $html = IconUtility::getSpriteIcon($iconName); + //Ugly workaround to make icons clickable in TYPO3 7.6. + //It's deprecated anyways, therefore changes in the future when we drop support for 6.2. + if (stripos('svg', $html)) { + //not found + return $html; //Typo3 6.2. That works. + } else { + //found => TYPO3 7 workaround must be applied. + switch ($iconName) { + case 'actions-document-open': + return ''; + case 'actions-document-info': + return ''; + case 'actions-system-options-view': + return ''; + } + } + } } diff --git a/Classes/Controller/BackendSitemapController.php b/Classes/Controller/BackendSitemapController.php index 7ab3c1a..7b86e2e 100644 --- a/Classes/Controller/BackendSitemapController.php +++ b/Classes/Controller/BackendSitemapController.php @@ -222,13 +222,12 @@ public function sitemapAction() $this->translate('empty.search.page_language'), ); - foreach ($languageFullList as $langId => $langRow) { + foreach ($languageFullList as $langId => &$langRow) { $flag = ''; // Flag (if available) if (!empty($langRow['flag'])) { - $flag .= ''; + $flag.= IconUtility::getSpriteIcon('flags-' . $langRow['flag']); $flag .= ' '; } @@ -240,6 +239,7 @@ public function sitemapAction() $label, $flag ); + $langRow['flagHtml'] = $flag; } // Depth diff --git a/Classes/Hook/SitemapIndexHook.php b/Classes/Hook/SitemapIndexHook.php index b27cb80..adcd4b4 100644 --- a/Classes/Hook/SitemapIndexHook.php +++ b/Classes/Hook/SitemapIndexHook.php @@ -181,6 +181,16 @@ protected static function processLinkUrl($linkUrl) // remove abs ref prefix if ($absRefPrefix !== false && strpos($ret, $absRefPrefix) === 0) { + $parsedUrl = parse_url($linkUrl); + if ($parsedUrl !== false + && $parsedUrl['path'] === $absRefPrefix + && substr($absRefPrefix, -1) === '/' //sanity check: must end with / + ) { + //for root pages: treat '/' like a suffix, not like a prefix => don't remove last '/' in that case! + //This ensures that for an absRefPrefix = '/abc/' or '/' we return '/' instead of empty strings + $absRefPrefixLength--; + } + $ret = substr($ret, $absRefPrefixLength); } diff --git a/Classes/Page/Part/MetatagPart.php b/Classes/Page/Part/MetatagPart.php index 4576ae6..ef26608 100644 --- a/Classes/Page/Part/MetatagPart.php +++ b/Classes/Page/Part/MetatagPart.php @@ -633,10 +633,10 @@ protected function processMetaTags(array &$tags) foreach ($keyList as $key) { if (!empty($tags[$key]['attributes'])) { foreach ($markerList as $marker => $value) { - // only replace markers if they are present unset($metaTagAttribute); foreach ($tags[$key]['attributes'] as &$metaTagAttribute) { - if (strpos($metaTagAttribute, $marker)) { + // only replace markers if they are present + if (strpos($metaTagAttribute, $marker) !== false) { $metaTagAttribute = str_replace($marker, $value, $metaTagAttribute); } } @@ -811,25 +811,21 @@ protected function collectMetaDataFromConnector() // Std meta tags foreach ($storeMeta['meta'] as $metaKey => $metaValue) { - $metaValue = trim($metaValue); - if ($metaValue === null) { // Remove meta unset($this->tsSetupSeo[$metaKey]); } elseif (!empty($metaValue)) { - $this->tsSetupSeo[$metaKey] = $metaValue; + $this->tsSetupSeo[$metaKey] = trim($metaValue); } } // Custom meta tags foreach ($storeMeta['custom'] as $metaKey => $metaValue) { - $metaValue = trim($metaValue); - if ($metaValue === null) { // Remove meta unset($ret[$metaKey]); } elseif (!empty($metaValue)) { - $ret[$metaKey] = $metaValue; + $ret[$metaKey] = trim($metaValue); } } @@ -1248,16 +1244,16 @@ protected function generateLinkMetaTags() $currentIsRootpage = ($currentPage['uid'] === $rootPage['uid']); - // Generate rootpage url - $rootPageUrl = null; - if (!empty($rootPage)) { - $rootPageUrl = $this->generateLink($rootPage['uid']); - } - // Only generate up, prev and next if NOT rootpage // to prevent linking to other domains // see https://github.com/mblaschke/TYPO3-metaseo/issues/5 if (!$currentIsRootpage) { + $startPage = $GLOBALS['TSFE']->cObj->HMENU($this->tsSetupSeo['sectionLinks.']['start.']); + $startPageUrl = null; + if (!empty($startPage)) { + $startPageUrl = $this->generateLink($startPage); + } + $prevPage = $GLOBALS['TSFE']->cObj->HMENU($this->tsSetupSeo['sectionLinks.']['prev.']); $prevPageUrl = null; if (!empty($prevPage)) { @@ -1272,12 +1268,12 @@ protected function generateLinkMetaTags() } // Start (first page in rootline -> root page) - if (!empty($rootPageUrl)) { + if (!empty($startPageUrl)) { $this->metaTagList['link.rel.start'] = array( 'tag' => 'link', 'attributes' => array( 'rel' => 'start', - 'href' => $rootPageUrl, + 'href' => $startPageUrl, ), ); } @@ -1332,7 +1328,7 @@ protected function generateCanonicalUrl() { //User has specified a canonical URL in the page properties if (!empty($this->pageRecord['tx_metaseo_canonicalurl'])) { - return $this->pageRecord['tx_metaseo_canonicalurl']; + return $this->generateLink($this->pageRecord['tx_metaseo_canonicalurl']); } //Fallback to global settings to generate Url diff --git a/Classes/Utility/GeneralUtility.php b/Classes/Utility/GeneralUtility.php index 80f020f..c157fe6 100644 --- a/Classes/Utility/GeneralUtility.php +++ b/Classes/Utility/GeneralUtility.php @@ -392,7 +392,7 @@ public static function callHookAndSignal($class, $name, $obj, &$args = null) /** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */ $signalSlotDispatcher = $objectManager->get('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher'); } - $signalSlotDispatcher->dispatch($class, $name, array($args, $obj)); + list($args) = $signalSlotDispatcher->dispatch($class, $name, array($args, $obj)); } diff --git a/Classes/Utility/SitemapUtility.php b/Classes/Utility/SitemapUtility.php index 62d44b6..83fd113 100644 --- a/Classes/Utility/SitemapUtility.php +++ b/Classes/Utility/SitemapUtility.php @@ -56,6 +56,7 @@ class SitemapUtility PageRepository::DOKTYPE_SPACER, // Menu separator (TYPO3 CMS) PageRepository::DOKTYPE_SYSFOLDER, // Folder (TYPO3 CMS) PageRepository::DOKTYPE_RECYCLER, // Recycler (TYPO3 CMS) + PageRepository::DOKTYPE_LINK, // External Link (TYPO3 CMS) ); /** diff --git a/Configuration/TypoScript/setup.txt b/Configuration/TypoScript/setup.txt index 2b4c5a3..b1243a0 100644 --- a/Configuration/TypoScript/setup.txt +++ b/Configuration/TypoScript/setup.txt @@ -188,6 +188,23 @@ plugin.metaseo { # section links (start, up, next, prev) sectionLinks = sectionLinks { + + start = HMENU + start { + special = browse + special { + items = first + first.fields.title = + } + + 1 = TMENU + 1.NO { + wrapItemAndSub = {field:uid} + wrapItemAndSub.insertData = 1 + doNotLinkIt = 1 + } + } + prev = HMENU prev { special = browse diff --git a/Documentation/AdministratorManual/Index.rst b/Documentation/AdministratorManual/Index.rst index ed3d4d3..26dfc2c 100644 --- a/Documentation/AdministratorManual/Index.rst +++ b/Documentation/AdministratorManual/Index.rst @@ -249,3 +249,4 @@ If you want to activate a “real” sitemap.xml feature (eg. http://example.com ), ); + diff --git a/Documentation/ChangeLog/Index.rst b/Documentation/ChangeLog/Index.rst index 8dc02cb..e7eb6f5 100644 --- a/Documentation/ChangeLog/Index.rst +++ b/Documentation/ChangeLog/Index.rst @@ -11,13 +11,109 @@ Changelog ========= -============= ============================================================================== -Version Changes -============= ============================================================================== -1.0.0 **Fork of Fork of predecessor "tq_seo"** - - - Major improvements of features and codebase - - Fixed several major and minor bugs - - Fixed manual (now reStructuredText) - - Fixed sitemap url generation in TYPO3 scheduler -============= ============================================================================== + ++-------------+----------------------------------------------------------------------------------------------------+ +| Version | Changes | ++=============+====================================================================================================+ +| **2.0.2** | **Bugfix release** | +| | | +| | **Migration to 2.0.2:** | +| | | +| | - Non-admin backend users can now to edit page properties, if permission is given by TYPO3 | +| | - Link generation (start/prev/next) now uses first element of group for start | +| | | +| | `Milestone 2.0.2 `_ | +| | `Changes in 2.0.2 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **2.0.1** | **Bugfix release** (2016-11-06) | +| | | +| | `Milestone 2.0.1 `_ | +| | `Changes in 2.0.1 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **2.0.0** | **Major release** (2016-03-07) | +| | | +| | - Added TYPO3 CMS 7.6 support | +| | (still backwards compatible to TYPO3 CMS 6.2 and PHP 5.3) | +| | - Refactoring of Ajax Requests: PSR-7, Exception Handling, OOP | +| | - Changed coding style: Now uses PSR-2, added `.editorconfig` file | +| | - Refactored large portions of the codebase | +| | - Implemented signals | +| | - Implemented blacklist of PAGE typeNum in SetupTS | +| | - Implemented blacklist for index/noindex robots metatag | +| | - Implemented blacklist for canonical url | +| | - Implemented canonical url support for mounted pages, | +| | pointing to real page instead of mount path (disabled by default) | +| | - Implemented expiry date for sitemap entries (customizable with SetupTS or Connector) | +| | - Implemented pagetitle caching (if there is any `USER_INT` on the current page) | +| | - Removed own caching solution, using TYPO3 caching framework now | +| | - Added fallback for schema selection for canonical Urls in case protocol is undefined | +| | in page properties (via `plugin.metaseo.metaTags.canonicalUrl.fallbackProtocol`) | +| | - Bugfixes and improvements | +| | | +| | **Migration from 1.0.x to 2.0.0:** | +| | | +| | - Link generation (`start/prev/next`) is now disabled by default | +| | - TypoScript Constant `plugin.metaseo.metaTags.useCanonical` | +| | changed to `plugin.metaseo.metaTags.canonicalUrl` | +| | - TypoScript Setup `plugin.metaseo.metaTags.useCanonical` | +| | changed to `plugin.metaseo.metaTags.canonicalUrl` | +| | - Changed names of hooks, use camelCase now | +| | | +| | `Milestone 2.0.0 `_ | +| | `Changes in 2.0.0 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.8** | **Bugfix release** (2014-04-25) | +| | | +| | `Milestone 1.0.8 `_ | +| | `Changes in 1.0.8 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.7** | **Bugfix release** (2015-04-18) | +| | | +| | `Milestone 1.0.7 `_ | +| | `Changes in 1.0.7 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.6** | **Bugfix release** (2015-02-26) | +| | | +| | `Milestone 1.0.6 `_ | +| | `Changes in 1.0.6 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.5** | **Bugfix release** (2014-10-24) | +| | | +| | `Milestone 1.0.5 `_ | +| | `Changes in 1.0.5 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.4** | **Bugfix release** (2014-09-15) | +| | | +| | `Milestone 1.0.4 `_ | +| | `Changes in 1.0.4 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.3** | **Bugfix release** (2014-09-10) | +| | | +| | `Milestone 1.0.3 `_ | +| | `Changes in 1.0.3 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.2** | **Bugfix release** (2014-09-04) | +| | | +| | `Milestone 1.0.2 `_ | +| | `Changes in 1.0.2 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.1** | **Bugfix release** (2014-09-03) | +| | | +| | `Milestone 1.0.1 `_ | +| | `Changes in 1.0.1 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ +| **1.0.0** | **Major release** (2014-08-31) | +| | | +| | - Forked from predecessor "tq_seo" | +| | - Major improvements of features and codebase | +| | - Fixed several major and minor bugs | +| | - Fixed and improved documentation (now reStructuredText) | +| | - Fixed sitemap url generation in TYPO3 scheduler | +| | | +| | `Milestone 1.0.0 `_ | ++-------------+----------------------------------------------------------------------------------------------------+ + + +Latest information also is available in the list of +`milestones `_ and tagged +`releases `_. diff --git a/Documentation/Constants/Index.rst b/Documentation/Constants/Index.rst index 90fe4ed..af53b68 100644 --- a/Documentation/Constants/Index.rst +++ b/Documentation/Constants/Index.rst @@ -105,7 +105,7 @@ Following Markers are available: ============================== ========================================================== ================= Marker Description Example value ============================== ========================================================== ================= -%YEAR% Replacement for the current year 2014 +%YEAR% Replacement for the current year 2017 ============================== ========================================================== ================= UserAgent diff --git a/Documentation/DeveloperManual/Index.rst b/Documentation/DeveloperManual/Index.rst index c968dbf..36e74ee 100644 --- a/Documentation/DeveloperManual/Index.rst +++ b/Documentation/DeveloperManual/Index.rst @@ -107,6 +107,7 @@ Example for Google Analytics in TypoScript-Setup: ) } + Template customization (advanced) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -141,7 +142,6 @@ Example for your own Google Analytics Template: } - Sitemap ------- ========================================================== ========================================================== ====================== @@ -289,3 +289,4 @@ All hooks are also available as Extbase Signal. Please use signals instead of ho // ------------------------------------------------------------------------ } + diff --git a/Documentation/FaqManual/Index.rst b/Documentation/FaqManual/Index.rst index d3f4fb1..90f5447 100644 --- a/Documentation/FaqManual/Index.rst +++ b/Documentation/FaqManual/Index.rst @@ -28,7 +28,7 @@ Indexed Sitemap --------------- | **Problem:** -| When I want to open my sitemap I get an error "The page is not configured! [type=841131|841132|841133][]. This means that there is no TypoScript object of type PAGE with typeNum=841131|841132|841133 configured." +| When I want to open my sitemap I get an error "The page is not configured! `[type=841131|841132|841133][]`. This means that there is no TypoScript object of type PAGE with `typeNum=841131|841132|841133` configured." | **Solution:** | Make sure you have configured MetaSEO "Include static" as described in the installation manual. | diff --git a/Documentation/Index.rst b/Documentation/Index.rst index 05db1fe..3fcc174 100644 --- a/Documentation/Index.rst +++ b/Documentation/Index.rst @@ -33,7 +33,7 @@ MetaSEO metatag,metatags,seo,sitemap,google,searchengine,tqseo,tq_seo,metaseo,pagetitle :Copyright: - 2014 + 2014-2016 :Author: Markus Blaschke diff --git a/Documentation/Introduction/Index.rst b/Documentation/Introduction/Index.rst index 05047a6..b376042 100644 --- a/Documentation/Introduction/Index.rst +++ b/Documentation/Introduction/Index.rst @@ -40,8 +40,8 @@ The following metatags are supported: - Revisit - Geo-location information - Searchengine crawler instructions -- Google Analytics (with anonymized IP and download link tracking, asynchronous implementation since 4.0) -- Piwik integration (asynchronous implementation since 4.0) +- Google Analytics (asynchronous, with anonymized IP and download link tracking) +- Piwik integration (asynchronous) - Google, MSN, Yahoo and WebOfTrust Verification - Google+ Direct Connect - Canonical URL (custom URL or autogenerated for current page) @@ -127,6 +127,7 @@ Thanks to... - TEQneers GmbH & Co. KG for sponsoring the predecessor "tq_seo" - jweiland.net especially Wolfgang Wagner for all the tutorials +- Anton Danilov - Pierre Arlt - Riccardo De Contardi - Rico Sonntag @@ -139,5 +140,6 @@ Thanks to... - Georg Tiefenbrunn - Arne-Kolja Bachstein - Paul-Christian Volkmer +- Dominik Steinborn - all other contributors and bug reporters - famfamfam for these cool silk icons http://www.famfamfam.com/lab/icons/silk/ diff --git a/Documentation/Settings.yml b/Documentation/Settings.yml index 39d689a..1e560fa 100644 --- a/Documentation/Settings.yml +++ b/Documentation/Settings.yml @@ -4,10 +4,10 @@ --- conf.py: - copyright: 2014 + copyright: 2014-2016 project: MetaSEO - version: 1.0 - release: 1.0.0 + version: 2.0 + release: 2.0.0 html_theme_options: github_repository: mblaschke/TYPO3-metaseo github_branch: develop diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2e0d498 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,15 @@ + + +**MetaSEO version**: 0.0.0 + +**TYPO3 version**: 0.0.0 + +**PHP version**: 0.0.0 + + + + + + + + diff --git a/README.md b/README.md index d34f3b0..fe93143 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MetaSEO - Search Engine Optimization for TYPO3 -![stable v2.0.0](https://img.shields.io/badge/stable-v2.0.0-green.svg?style=flat) -![development v2.0.0](https://img.shields.io/badge/development-v2.0.0-red.svg?style=flat) +![stable v2.0.2](https://img.shields.io/badge/stable-v2.0.3-green.svg?style=flat) +![development v2.0.2](https://img.shields.io/badge/development-v2.0.2-red.svg?style=flat) ![License GPL3](https://img.shields.io/badge/license-GPL3-blue.svg?style=flat) @@ -12,71 +12,96 @@ [![SensioLabsInsight](https://insight.sensiolabs.com/projects/19914ab4-1f0f-4be0-9215-410fba880af2/big.png)](https://insight.sensiolabs.com/projects/19914ab4-1f0f-4be0-9215-410fba880af2) -This extension provides an indexed google/xml-sitemap, enhanced metatag-support and pagetitle-manipulations for TYPO3 CMS. -It's a replacement for the "metatag"-extension and the successor of "tq_seo". +MetaSEO is an extension for TYPO3 CMS and provides an indexed google/xml-sitemap, enhanced metatag support +and pagetitle manipulation. +It's a replacement for the "metatag" extension and the successor of the discontinued extension "tq_seo". -* Manual: https://docs.typo3.org/typo3cms/extensions/metaseo/ -* Git: https://github.com/mblaschke/TYPO3-metaseo -* Support: https://github.com/mblaschke/TYPO3-metaseo/issues +* Manual: https://docs.typo3.org/typo3cms/extensions/metaseo/ +* Support: https://github.com/mblaschke/TYPO3-metaseo/issues +* Source code: https://github.com/mblaschke/TYPO3-metaseo ## Version status -* Version **2.0.0**: +* Version **2.0.2**: + Branch **master** + TYPO3 Version: 6.2.x - 7.6.x + Composer: dev-master -* Version **2.x**: +* Version **2.0.2-dev**: + Branch **develop** + TYPO3 Version: 6.2.x - 7.6.x + Composer: dev-develop -For version specific information see [Changelog for MetaSEO](CHANGELOG.md) +For version specific information see [changelog for MetaSEO](CHANGELOG.md) ## Composer Support -MetaSEO (stable) is available **from TYPO3 TER** and also available with composer :: +The latest stable release of MetaSEO is available via [TYPO3 TER](https://typo3.org/extensions/repository/view/metaseo) +using TYPO3's extension manager or using composer: { - "repositories": [ - { "type": "composer", "url": "https://composer.typo3.org/" } - ], - ....... - "require": { - "typo3/cms": "6.2.*", - "typo3-ter/metaseo": "*" - } + "repositories": [ + { "type": "composer", "url": "https://composer.typo3.org/" } + ], + ....... + "require": { + "php": ">=5.3.0", + "typo3/cms-core": ">=6.2.0,<8.0", + "typo3-ter/metaseo": "*" + }, } -Or (unstable, don't blame me for bugs - but feel free to report bugs) directly **from Github** :: +As long as you are aware that our unstable branch can break at any time, feel free to preview coming releases by using +our unstable branch at Github: { - "repositories": [ - { "type": "composer", "url": "https://composer.typo3.org/" }, - { "type": "vcs", "url": "https://github.com/mblaschke/TYPO3-metaseo.git" }, - ], - ....... - "require": { - "typo3/cms": "6.2.*", - "mblaschke/metaseo": "dev-master" - } + "repositories": [ + { "type": "composer", "url": "https://composer.typo3.org/" }, + { "type": "vcs", "url": "https://github.com/mblaschke/TYPO3-metaseo.git" }, + ], + ....... + "require": { + "php": ">=5.3.0", + "typo3/cms-core": ">=6.2.0,<8.0", + "mblaschke/metaseo": "dev-master" + } } -## Found a bug? Got problems? +MetaSEO is also available via [packagist](https://packagist.org/packages/mblaschke/metaseo). -Please send us following information for easier bug hunting: +## Found a bug? Have questions? + +Please feel free to file an issue in our [Bugtracker](https://github.com/mblaschke/TYPO3-metaseo/issues). To avoid feedback loops we suggest to provide * MetaSEO version * TYPO3 version +* RealUrl version (if used) * PHP version -* Hoster and/or Linux distribution +* Web server and version (optional) +* Operating system and version (optional) +* Hoster name (in rare cases) + +In case of issues, please update to the latest version of MetaSEO first. We also strongly recommend to use recent +versions of TYPO3 CMS (6.2.28+, 7.6.12+) and RealUrl (2.1.5+) + +## Contribute + +MetaSEO is driven by the community and we're pleased to add new contributions. +If you want to provide improvements, please -## Contribution +- make sure that an [issue](https://github.com/mblaschke/TYPO3-metaseo/issues) exists so that it is clear what + your contribution is supposed to do. Eventually, open a new issue. +- add a `Fixes #123` to the message of your first commit, whereas `#123` should be the issue number. +- add yourself to the [list of contributors](https://github.com/mblaschke/TYPO3-metaseo/blob/develop/Documentation/Introduction/Index.rst) + when you send us your first pull request (PR). +- provide as many commits in your PR as necessary. There's no single-commit policy, but one PR should not affect more + than one issue (if possible). -If you want to contribute make sure you have an Editorconfig-Plugin installed in your IDE. +The coding style of MetaSEO's source code follows the +[PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) +standard. Please enable PSR-2 support in your IDE or enable the editorconfig plugin. See [.editorconfig](.editorconfig) for indentation. -This TYPO3 Extension is using [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) as coding style. diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf index 1690bb0..518bac8 100644 --- a/Resources/Private/Language/de.locallang.xlf +++ b/Resources/Private/Language/de.locallang.xlf @@ -328,7 +328,7 @@ Author E-Mail Autor E-Mail - + Last updated Letztes Update diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index b150587..144f97b 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -247,7 +247,7 @@ Author E-Mail - + Last updated diff --git a/Resources/Private/Templates/PageParts/ServiceGoogleAnalytics.html b/Resources/Private/Templates/PageParts/ServiceGoogleAnalytics.html index 9a4c4cd..de2c7c4 100644 --- a/Resources/Private/Templates/PageParts/ServiceGoogleAnalytics.html +++ b/Resources/Private/Templates/PageParts/ServiceGoogleAnalytics.html @@ -7,8 +7,8 @@ + @@ -17,11 +17,11 @@ - - - - + + + + diff --git a/Resources/Public/Backend/Css/Default.css b/Resources/Public/Backend/Css/Default.css index c7734c2..fae3435 100644 --- a/Resources/Public/Backend/Css/Default.css +++ b/Resources/Public/Backend/Css/Default.css @@ -104,5 +104,6 @@ th.center { } .x-window .x-window-body { + width: auto !important; padding: 10px 15px; } diff --git a/Resources/Public/Backend/JavaScript/MetaSeo.overview.js b/Resources/Public/Backend/JavaScript/MetaSeo.overview.js index 6f6ea8d..f7beba5 100644 --- a/Resources/Public/Backend/JavaScript/MetaSeo.overview.js +++ b/Resources/Public/Backend/JavaScript/MetaSeo.overview.js @@ -416,7 +416,7 @@ MetaSeo.overview.grid = { {name: 'abstract', type: 'string'}, {name: 'author', type: 'string'}, {name: 'author_email', type: 'string'}, - {name: 'lastupdated', type: 'string'} + {name: 'lastUpdated', type: 'string'} ); break; @@ -651,11 +651,11 @@ MetaSeo.overview.grid = { vtype: 'email' } }, { - id: 'lastupdated', - header: MetaSeo.overview.conf.lang.page_lastupdated, + id: 'lastUpdated', + header: MetaSeo.overview.conf.lang.page_lastUpdated, width: 'auto', sortable: false, - dataIndex: 'lastupdated', + dataIndex: 'lastUpdated', renderer: fieldRendererRaw, metaSeoClickEdit: { xtype: 'datefield', @@ -1051,7 +1051,6 @@ MetaSeo.overview.grid = { item.tooltip = item.header; } }); - return columnModel; }, @@ -1064,6 +1063,8 @@ MetaSeo.overview.grid = { return this._fieldRendererCallback(value, value, false, true, ''); }, + _fieldRendererTemplate: new Ext.XTemplate('
{value}{icon}
'), + _fieldRendererCallback: function (value, qtip, maxLength, escape, additionalClasses) { var classes = ''; var icon = ''; @@ -1101,9 +1102,13 @@ MetaSeo.overview.grid = { } qtip = qtip.replace(/\n/g, "
"); - return '
' + value + icon + '
'; + return this._fieldRendererTemplate.apply({ + classes: classes, + additionalClasses: additionalClasses, + qtip: qtip, + value: value, + icon: icon + }); } - - }; diff --git a/Resources/Public/Backend/JavaScript/MetaSeo.sitemap.js b/Resources/Public/Backend/JavaScript/MetaSeo.sitemap.js index 498a1d1..2fd8965 100644 --- a/Resources/Public/Backend/JavaScript/MetaSeo.sitemap.js +++ b/Resources/Public/Backend/JavaScript/MetaSeo.sitemap.js @@ -281,7 +281,7 @@ MetaSeo.sitemap.grid = { // Flag (if available) if (lang.flag) { - ret += ''; + ret += lang.flagHtml; ret += ' '; } diff --git a/Tests/Unit/Controller/Ajax/AbstractPageSeoControllerTest.php b/Tests/Unit/Controller/Ajax/AbstractPageSeoControllerTest.php index ae94f52..54edd90 100644 --- a/Tests/Unit/Controller/Ajax/AbstractPageSeoControllerTest.php +++ b/Tests/Unit/Controller/Ajax/AbstractPageSeoControllerTest.php @@ -158,7 +158,7 @@ protected function getPageSeoDaoMock() $listData = array( 1 => array( 'uid' => 1, - 'lastupdated' => 1 + 'lastUpdated' => 1 ) ); $mock = $this->getMock('Metaseo\\Metaseo\\Dao\\PageSeoDao'); diff --git a/composer.json b/composer.json index f77f45d..992b907 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ }, "license": ["GPL-3.0+"], "keywords": ["TYPO3 CMS"], - "version": "2.0.1", + "version": "2.0.2", "autoload": { "psr-4": { "Metaseo\\Metaseo\\": "Classes/" diff --git a/ext_emconf.php b/ext_emconf.php index c1d77e6..43587a9 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -5,7 +5,7 @@ 'description' => 'Search Engine Optimization (SEO), Indexed Google-Sitemap (TXT- and XML-Sitemap) for all Extensions (pibase, extbase), Metatags, Canonical-URL, Pagetitle manipulations, Crawler verification, Piwik and Google Analytics support and some more... multi-language- and multi-tree-support', 'category' => 'misc', 'shy' => 0, - 'version' => '2.0.1', + 'version' => '2.0.2', 'dependencies' => '', 'conflicts' => '', 'priority' => '', @@ -29,6 +29,11 @@ ), 'conflicts' => array(), 'suggests' => array(), + 'autoload' => array( + 'psr-4' => array( + 'Metaseo\\Metaseo\\' => 'Classes', + ), + ), ), '_md5_values_when_last_written' => 'a:31:{s:9:"ChangeLog";s:4:"95d7";s:10:"README.txt";s:4:"878d";s:16:"ext_autoload.php";s:4:"550a";s:21:"ext_conf_template.txt";s:4:"09c3";s:12:"ext_icon.gif";s:4:"6ce1";s:17:"ext_localconf.php";s:4:"4f36";s:14:"ext_tables.php";s:4:"6b22";s:14:"ext_tables.sql";s:4:"31cb";s:16:"locallang_db.xml";s:4:"a7ed";s:17:"locallang_tca.xml";s:4:"6623";s:7:"tca.php";s:4:"95ea";s:14:"doc/manual.pdf";s:4:"6b9f";s:14:"doc/manual.sxw";s:4:"0385";s:40:"hooks/sitemap/class.cache_controller.php";s:4:"b6d4";s:45:"hooks/sitemap/class.cache_controller_hook.php";s:4:"5b2d";s:27:"hooks/sitemap/locallang.xlf";s:4:"0c9f";s:19:"lib/class.cache.php";s:4:"2659";s:18:"lib/class.http.php";s:4:"5366";s:24:"lib/class.linkparser.php";s:4:"a2e1";s:22:"lib/class.metatags.php";s:4:"0067";s:24:"lib/class.pagefooter.php";s:4:"35b6";s:23:"lib/class.pagetitle.php";s:4:"1709";s:24:"lib/class.robots_txt.php";s:4:"e839";s:19:"lib/class.tools.php";s:4:"b67d";s:34:"lib/sitemap/class.sitemap_base.php";s:4:"0e0a";s:37:"lib/sitemap/class.sitemap_indexer.php";s:4:"3162";s:33:"lib/sitemap/class.sitemap_txt.php";s:4:"fcc3";s:33:"lib/sitemap/class.sitemap_xml.php";s:4:"10bc";s:24:"res/ga-track-download.js";s:4:"e80d";s:28:"static/default/constants.txt";s:4:"60b5";s:24:"static/default/setup.txt";s:4:"e6ff";}', 'suggests' => array(),