Initial commit

This commit is contained in:
2018-04-02 08:07:38 +02:00
commit 7330c1ed3e
2054 changed files with 405203 additions and 0 deletions

View File

@@ -0,0 +1,349 @@
<?php
/*
* Copyright notice
*
* (c) 2015 Markus Blaschke <typo3@markus-blaschke.de> (metaseo)
* (c) 2013 Markus Blaschke (TEQneers GmbH & Co. KG) <blaschke@teqneers.de> (tq_seo)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script 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 General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
*/
namespace Metaseo\Metaseo\Controller;
use Metaseo\Metaseo\Backend\Module\AbstractStandardModule;
use Metaseo\Metaseo\Controller\Ajax\SitemapController;
use Metaseo\Metaseo\Utility\BackendUtility;
use Metaseo\Metaseo\Utility\DatabaseUtility;
use Metaseo\Metaseo\Utility\SitemapUtility;
use TYPO3\CMS\Backend\Utility\BackendUtility as Typo3BackendUtility;
use TYPO3\CMS\Backend\Utility\IconUtility;
use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* TYPO3 Backend module sitemap
*/
class BackendSitemapController extends AbstractStandardModule
{
// ########################################################################
// Attributes
// ########################################################################
// ########################################################################
// Methods
// ########################################################################
/**
* Main action
*/
public function mainAction()
{
// Init
$rootPageList = BackendUtility::getRootPageList();
$rootSettingList = BackendUtility::getRootPageSettingList();
// ############################
// Fetch
// ############################
// Get statistics
$query = 'SELECT s.page_rootpid,
COUNT(*) AS sum_total,
COUNT(s.page_uid) AS sum_pages
FROM tx_metaseo_sitemap s
INNER JOIN pages p
ON p.uid = s.page_uid
AND p.deleted = 0
AND ' . DatabaseUtility::conditionNotIn(
'p.doktype',
SitemapUtility::getDoktypeBlacklist()
) . '
GROUP BY page_rootpid';
$statsList = DatabaseUtility::getAllWithIndex($query, 'page_rootpid');
// Fetch domain name
$query = 'SELECT uid,
pid,
domainName,
forced
FROM sys_domain
WHERE hidden = 0
ORDER BY forced DESC,
sorting';
$rowList = DatabaseUtility::getAll($query);
$domainList = array();
foreach ($rowList as $row) {
$pid = $row['pid'];
if (!empty($row['forced'])) {
$domainList[$pid] = $row['domainName'];
} elseif (empty($domainList[$pid])) {
$domainList[$pid] = $row['domainName'];
}
}
// #################
// Build root page list
// #################
unset($page);
foreach ($rootPageList as $pageId => &$page) {
$stats = array(
'sum_pages' => 0,
'sum_total' => 0,
'sum_xml_pages' => 0,
);
// Setting row
$settingRow = array();
if (!empty($rootSettingList[$pageId])) {
$settingRow = $rootSettingList[$pageId];
}
// Calc stats
if (!empty($statsList[$pageId])) {
foreach ($statsList[$pageId] as $statsKey => $statsValue) {
$stats[$statsKey] = $statsValue;
}
}
$joinWhere = DatabaseUtility::conditionNotIn(
'p.doktype',
SitemapUtility::getDoktypeBlacklist()
);
// Root statistics
$query = 'SELECT COUNT(s.page_uid)
FROM tx_metaseo_sitemap s
INNER JOIN pages p
ON p.uid = s.page_uid
AND ' . $joinWhere . '
WHERE s.page_rootpid = ' . (int)$pageId;
$stats['sum_pages'] = DatabaseUtility::getOne($query);
$pagesPerXmlSitemap = 1000;
if (!empty($settingRow['sitemap_page_limit'])) {
$pagesPerXmlSitemap = $settingRow['sitemap_page_limit'];
}
$sumXmlPages = ceil($stats['sum_total'] / $pagesPerXmlSitemap);
$stats['sum_xml_pages'] = sprintf($this->translate('sitemap.xml.pages.total'), $sumXmlPages);
$page['stats'] = $stats;
}
unset($page);
// check if there is any root page
if (empty($rootPageList)) {
$this->addFlashMessage(
$this->translate('message.warning.noRootPage.message'),
$this->translate('message.warning.noRootPage.title'),
FlashMessage::WARNING
);
}
$this->view->assign('RootPageList', $rootPageList);
}
/**
* Sitemap action
*/
public function sitemapAction()
{
$params = GeneralUtility::_GP('tx_metaseo_metaseometaseo_metaseositemap');
$rootPid = $params['pageId'];
if (empty($rootPid)) {
return;
}
$rootPageList = BackendUtility::getRootPageList();
$rootPage = $rootPageList[$rootPid];
// ###############################
// Fetch
// ###############################
$pageTsConf = Typo3BackendUtility::getPagesTSconfig($rootPid);
$languageFullList = array(
0 => array(
'label' => $this->translate('default.language'),
'flag' => '',
),
);
if (!empty($pageTsConf['mod.']['SHARED.']['defaultLanguageFlag'])) {
$languageFullList[0]['flag'] = $pageTsConf['mod.']['SHARED.']['defaultLanguageFlag'];
}
if (!empty($pageTsConf['mod.']['SHARED.']['defaultLanguageLabel'])) {
$languageFullList[0]['label'] = $pageTsConf['mod.']['SHARED.']['defaultLanguageLabel'];
}
// Fetch domain name
$query = 'SELECT uid,
title,
flag
FROM sys_language
WHERE hidden = 0';
$rowList = DatabaseUtility::getAll($query);
foreach ($rowList as $row) {
$languageFullList[$row['uid']] = array(
'label' => htmlspecialchars($row['title']),
'flag' => htmlspecialchars($row['flag']),
);
}
// Languages
$languageList = array();
$languageList[] = array(
-1,
$this->translate('empty.search.page_language'),
);
foreach ($languageFullList as $langId => $langRow) {
$flag = '';
// Flag (if available)
if (!empty($langRow['flag'])) {
$flag .= '<span class="t3-icon t3-icon-flags t3-icon-flags-' . $langRow['flag']
. ' t3-icon-' . $langRow['flag'] . '"></span>';
$flag .= '&nbsp;';
}
// label
$label = $langRow['label'];
$languageList[] = array(
$langId,
$label,
$flag
);
}
// Depth
$depthList = array();
$depthList[] = array(
-1,
$this->translate('empty.search.page_depth'),
);
$query = 'SELECT DISTINCT page_depth
FROM tx_metaseo_sitemap
WHERE page_rootpid = ' . (int)$rootPid;
foreach (DatabaseUtility::getCol($query) as $depth) {
$depthList[] = array(
$depth,
$depth,
);
}
// ###############################
// Page/JS
// ###############################
$metaSeoConf = array(
'ajaxController' => SitemapController::AJAX_PREFIX,
'pid' => (int)$rootPid,
'renderTo' => 'tx-metaseo-sitemap-grid',
'pagingSize' => 50,
'sortField' => 'crdate',
'sortDir' => 'DESC',
'filterIcon' => IconUtility::getSpriteIcon(
'actions-system-tree-search-open'
),
'dataLanguage' => $languageList,
'dataDepth' => $depthList,
'criteriaFulltext' => '',
'criteriaPageUid' => '',
'criteriaPageLanguage' => '',
'criteriaPageDepth' => '',
'criteriaIsBlacklisted' => 0,
'languageFullList' => $languageFullList,
);
$metaSeoLang = array(
'title' => 'title.sitemap.list',
'pagingMessage' => 'pager.results',
'pagingEmpty' => 'pager.noresults',
'sitemap_page_uid' => 'header.sitemap.page_uid',
'sitemap_page_url' => 'header.sitemap.page_url',
'sitemap_page_type' => 'header.sitemap.page_type',
'sitemap_page_depth' => 'header.sitemap.page_depth',
'sitemap_page_language' => 'header.sitemap.page_language',
'sitemap_page_is_blacklisted' => 'header.sitemap.page_is_blacklisted',
'page_tx_metaseo_is_exclude' => 'header.sitemap.page_tx_metaseo_is_exclude',
'sitemap_tstamp' => 'header.sitemap.tstamp',
'sitemap_crdate' => 'header.sitemap.crdate',
'labelSearchFulltext' => 'label.search.fulltext',
'emptySearchFulltext' => 'empty.search.fulltext',
'labelSearchPageUid' => 'label.search.page_uid',
'emptySearchPageUid' => 'empty.search.page_uid',
'labelSearchPageLanguage' => 'label.search.page_language',
'emptySearchPageLanguage' => 'empty.search.page_language',
'labelSearchPageDepth' => 'label.search.page_depth',
'emptySearchPageDepth' => 'empty.search.page_depth',
'labelSearchIsBlacklisted' => 'label.search.is_blacklisted',
'labelYes' => 'label.yes',
'labelNo' => 'label.no',
'buttonYes' => 'button.yes',
'buttonNo' => 'button.no',
'buttonDelete' => 'button.delete',
'buttonDeleteHint' => 'button.delete.hint',
'buttonBlacklist' => 'button.blacklist',
'buttonBlacklistHint' => 'button.blacklist.hint',
'buttonWhitelist' => 'button.whitelist',
'buttonWhitelistHint' => 'button.whitelist.hint',
'buttonDeleteAll' => 'button.delete_all',
'messageDeleteTitle' => 'message.delete.title',
'messageDeleteQuestion' => 'message.delete.question',
'messageDeleteAllTitle' => 'message.delete_all.title',
'messageDeleteAllQuestion' => 'message.delete_all.question',
'messageBlacklistTitle' => 'message.blacklist.title',
'messageBlacklistQuestion' => 'message.blacklist.question',
'messageWhitelistTitle' => 'message.whitelist.title',
'messageWhitelistQuestion' => 'message.whitelist.question',
'errorDeleteFailedMessage' => 'message.delete.failed_body',
'errorNoSelectedItemsBody' => 'message.no_selected_items',
'today' => 'today',
'yesterday' => 'yesterday',
'sitemapPageType' => array(
0 => 'sitemap.pagetype.0',
1 => 'sitemap.pagetype.1',
),
);
// translate list
$metaSeoLang = $this->translateList($metaSeoLang);
$metaSeoLang['title'] = sprintf($metaSeoLang['title'], $rootPage['title'], $rootPid);
$this->view->assign(
'JavaScript',
'Ext.namespace("MetaSeo.sitemap");
MetaSeo.sitemap.conf = ' . json_encode($metaSeoConf) . ';
MetaSeo.sitemap.conf.lang = ' . json_encode($metaSeoLang) . ';
'
);
}
}