294 lines
12 KiB
PHP
294 lines
12 KiB
PHP
<?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\AbstractPageSeoController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\GeoController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\MetaDataController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\PageTitleController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\PageTitleSimController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\SearchEnginesController;
|
|
use Metaseo\Metaseo\Controller\Ajax\PageSeo\UrlController;
|
|
use Metaseo\Metaseo\Utility\DatabaseUtility;
|
|
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
|
use TYPO3\CMS\Backend\Utility\IconUtility;
|
|
use TYPO3\CMS\Core\Messaging\FlashMessage;
|
|
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
|
|
/**
|
|
* TYPO3 Backend module page seo
|
|
*/
|
|
class BackendPageSeoController extends AbstractStandardModule
|
|
{
|
|
// ########################################################################
|
|
// Attributes
|
|
// ########################################################################
|
|
|
|
// ########################################################################
|
|
// Methods
|
|
// ########################################################################
|
|
|
|
/**
|
|
* Main action
|
|
*/
|
|
public function mainAction()
|
|
{
|
|
$this->handleSubAction(MetaDataController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* Geo action
|
|
*/
|
|
public function geoAction()
|
|
{
|
|
$this->handleSubAction(GeoController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* searchengines action
|
|
*/
|
|
public function searchenginesAction()
|
|
{
|
|
$this->handleSubAction(SearchEnginesController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* url action
|
|
*/
|
|
public function urlAction()
|
|
{
|
|
$this->handleSubAction(UrlController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* pagetitle action
|
|
*/
|
|
public function pagetitleAction()
|
|
{
|
|
$this->handleSubAction(PageTitleController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* pagetitlesim action
|
|
*/
|
|
public function pagetitlesimAction()
|
|
{
|
|
$this->handleSubAction(PageTitleSimController::LIST_TYPE);
|
|
}
|
|
|
|
/**
|
|
* @param string $listType
|
|
*/
|
|
protected function handleSubAction($listType)
|
|
{
|
|
$pageId = (int) GeneralUtility::_GP('id');
|
|
|
|
if (empty($pageId)) {
|
|
$this->addFlashMessage(
|
|
$this->translate('message.warning.no_valid_page.message'),
|
|
$this->translate('message.warning.no_valid_page.title'),
|
|
FlashMessage::WARNING
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
// Load PageTS
|
|
$pageTsConf = BackendUtility::getPagesTSconfig($pageId);
|
|
|
|
// Build language list
|
|
$defaultLanguageText = $this->translate('default.language');
|
|
|
|
$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'])) {
|
|
$label = $pageTsConf['mod.']['SHARED.']['defaultLanguageLabel'];
|
|
|
|
$languageFullList[0]['label'] = $this->translate('default.language.named', array($label));
|
|
|
|
$defaultLanguageText = $pageTsConf['mod.']['SHARED.']['defaultLanguageLabel'];
|
|
}
|
|
|
|
// Fetch other flags
|
|
$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();
|
|
|
|
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 .= ' ';
|
|
}
|
|
|
|
// label
|
|
$label = $langRow['label'];
|
|
|
|
$languageList[] = array(
|
|
$langId,
|
|
$label,
|
|
$flag
|
|
);
|
|
}
|
|
|
|
$sysLanguageDefault = (int)$GLOBALS['BE_USER']->getSessionData('MetaSEO.sysLanguage');
|
|
|
|
if (empty($sysLanguageDefault)) {
|
|
$sysLanguageDefault = 0;
|
|
}
|
|
|
|
// ############################
|
|
// HTML
|
|
// ############################
|
|
|
|
$realUrlAvailable = ExtensionManagementUtility::isLoaded('realurl');
|
|
|
|
$ajaxController = AbstractPageSeoController::AJAX_PREFIX . $listType;
|
|
|
|
if (!array_key_exists($ajaxController, AbstractPageSeoController::getBackendAjaxClassNames())) {
|
|
throw new \RuntimeException('Ajax controller with this name was not registered by MetaSEO.');
|
|
}
|
|
|
|
$metaSeoConf = array(
|
|
'ajaxController' => $ajaxController,
|
|
'pid' => (int)$pageId,
|
|
'renderTo' => 'tx-metaseo-sitemap-grid',
|
|
'pagingSize' => 50,
|
|
'depth' => 2,
|
|
'sortField' => 'crdate',
|
|
'sortDir' => 'DESC',
|
|
'filterIcon' => IconUtility::getSpriteIcon(
|
|
'actions-system-tree-search-open'
|
|
),
|
|
'dataLanguage' => $languageList,
|
|
'sysLanguage' => $sysLanguageDefault,
|
|
'listType' => $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'),
|
|
),
|
|
);
|
|
|
|
|
|
$metaSeoLang = array(
|
|
'pagingMessage' => 'pager.results',
|
|
'pagingEmpty' => 'pager.noresults',
|
|
'boolean_yes' => 'boolean.yes',
|
|
'boolean_no' => 'boolean.no',
|
|
'button_save' => 'button.save',
|
|
'button_saverecursively' => 'button.saverecursively',
|
|
'button_saverecursively_tooltip' => 'button.saverecursively.tooltip',
|
|
'button_cancel' => 'button.cancel',
|
|
'labelDepth' => 'label.depth',
|
|
'labelSearchFulltext' => 'label.search.fulltext',
|
|
'emptySearchFulltext' => 'empty.search.fulltext',
|
|
'labelSearchPageLanguage' => 'label.search.page_language',
|
|
'emptySearchPageLanguage' => '',
|
|
'page_uid' => 'header.sitemap.page_uid',
|
|
'page_title' => 'header.sitemap.page_title',
|
|
'page_keywords' => 'header.sitemap.page_keywords',
|
|
'page_description' => 'header.sitemap.page_description',
|
|
'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_geo_lat' => 'header.sitemap.page_geo_lat',
|
|
'page_geo_long' => 'header.sitemap.page_geo_long',
|
|
'page_geo_place' => 'header.sitemap.page_geo_place',
|
|
'page_geo_region' => 'header.sitemap.page_geo_region',
|
|
'page_tx_metaseo_pagetitle' => 'header.sitemap.page_tx_metaseo_pagetitle',
|
|
'page_tx_metaseo_pagetitle_rel' => 'header.sitemap.page_tx_metaseo_pagetitle_rel',
|
|
'page_tx_metaseo_pagetitle_prefix' => 'header.sitemap.page_tx_metaseo_pagetitle_prefix',
|
|
'page_tx_metaseo_pagetitle_suffix' => 'header.sitemap.page_tx_metaseo_pagetitle_suffix',
|
|
'page_title_simulated' => 'header.pagetitlesim.title_simulated',
|
|
'page_searchengine_canonicalurl' => 'header.searchengine_canonicalurl',
|
|
'page_searchengine_is_exclude' => 'header.searchengine_is_excluded',
|
|
'searchengine_is_exclude_disabled' => 'searchengine.is_exclude_disabled',
|
|
'searchengine_is_exclude_enabled' => 'searchengine.is_exclude_enabled',
|
|
'page_sitemap_priority' => 'header.sitemap.priority',
|
|
'page_url_scheme' => 'header.url_scheme',
|
|
'page_url_scheme_default' => 'page.url_scheme_default',
|
|
'page_url_scheme_http' => 'page.url_scheme_http',
|
|
'page_url_scheme_https' => 'page.url_scheme_https',
|
|
'page_url_alias' => 'header.url_alias',
|
|
'page_url_realurl_pathsegment' => 'header.url_realurl_pathsegment',
|
|
'page_url_realurl_pathoverride' => 'header.url_realurl_pathoverride',
|
|
'page_url_realurl_exclude' => 'header.url_realurl_exclude',
|
|
'qtip_pagetitle_simulate' => 'qtip.pagetitle_simulate',
|
|
'qtip_url_simulate' => 'qtip.url_simulate',
|
|
'metaeditor_title' => 'metaeditor.title',
|
|
'metaeditor_tab_opengraph' => 'metaeditor.tab.opengraph',
|
|
'metaeditor_button_hin' => 'metaeditor.button.hint',
|
|
'value_from_base' => 'value.from_base',
|
|
'value_from_overlay' => 'value.from_overlay',
|
|
'value_only_base' => 'value.only_base',
|
|
'value_default' => 'value_default',
|
|
);
|
|
|
|
// translate list
|
|
$metaSeoLang = $this->translateList($metaSeoLang);
|
|
$metaSeoLang['emptySearchPageLanguage'] = $defaultLanguageText;
|
|
|
|
$this->view->assign(
|
|
'JavaScript',
|
|
'Ext.namespace("MetaSeo.overview");
|
|
MetaSeo.overview.conf = ' . json_encode($metaSeoConf) . ';
|
|
MetaSeo.overview.conf.lang = ' . json_encode($metaSeoLang) . ';
|
|
'
|
|
);
|
|
}
|
|
}
|