Skip to content
Merged
58 changes: 16 additions & 42 deletions com.woltlab.wcf/objectType.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1621,48 +1621,6 @@
<classname>wcf\system\category\MediaCategoryType</classname>
</type>
<!-- /media -->
<!-- sitemap -->
<type>
<name>com.woltlab.wcf.sitemap.object.user</name>
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
<classname>wcf\system\sitemap\object\UserSitemapObject</classname>
<priority>0.5</priority>
<changeFreq>monthly</changeFreq>
<rebuildTime>259200</rebuildTime>
</type>
<type>
<name>com.woltlab.wcf.sitemap.object.articleCategory</name>
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
<classname>wcf\system\sitemap\object\ArticleCategorySitemapObject</classname>
<priority>0.5</priority>
<changeFreq>weekly</changeFreq>
<rebuildTime>2592000</rebuildTime>
</type>
<type>
<name>com.woltlab.wcf.sitemap.object.article</name>
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
<classname>wcf\system\sitemap\object\ArticleSitemapObject</classname>
<priority>0.5</priority>
<changeFreq>monthly</changeFreq>
<rebuildTime>259200</rebuildTime>
</type>
<type>
<name>com.woltlab.wcf.sitemap.object.simplePage</name>
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
<classname>wcf\system\sitemap\object\SimplePageSitemapObject</classname>
<priority>0.5</priority>
<changeFreq>monthly</changeFreq>
<rebuildTime>604800</rebuildTime>
</type>
<type>
<name>com.woltlab.wcf.sitemap.object.multilingualPage</name>
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
<classname>wcf\system\sitemap\object\MultilingualPageSitemapObject</classname>
<priority>0.5</priority>
<changeFreq>monthly</changeFreq>
<rebuildTime>604800</rebuildTime>
</type>
<!-- /sitemap -->
<!-- trophy -->
<type>
<name>com.woltlab.wcf.trophy.category</name>
Expand Down Expand Up @@ -1798,6 +1756,22 @@
<!-- /deprecated -->
</import>
<delete>
<!-- sitemap objects are registered through `wcf\event\sitemap\SitemapObjectCollecting` since 6.3 -->
<type name="com.woltlab.wcf.sitemap.object.user">
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
</type>
<type name="com.woltlab.wcf.sitemap.object.articleCategory">
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
</type>
<type name="com.woltlab.wcf.sitemap.object.article">
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
</type>
<type name="com.woltlab.wcf.sitemap.object.simplePage">
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
</type>
<type name="com.woltlab.wcf.sitemap.object.multilingualPage">
<definitionname>com.woltlab.wcf.sitemap.object</definitionname>
</type>
<type name="com.woltlab.wcf.like">
<definitionname>com.woltlab.wcf.rebuildData</definitionname>
</type>
Expand Down
1 change: 1 addition & 0 deletions com.woltlab.wcf/objectTypeDefinition.xml
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@
<interfacename>wcf\system\condition\IObjectListCondition</interfacename>
</definition>
<!-- /box conditions -->
<!-- deprecated 6.3, use `wcf\event\sitemap\SitemapObjectCollecting` instead -->
<definition>
<name>com.woltlab.wcf.sitemap.object</name>
<interfacename>wcf\system\sitemap\object\ISitemapObjectObjectType</interfacename>
Expand Down
2 changes: 0 additions & 2 deletions com.woltlab.wcf/templates/shared_sitemapEntry.tpl
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
<url>
<loc>{$link}</loc>
{if $lastModifiedTime}<lastmod>{$lastModifiedTime}</lastmod>{/if}
<changefreq>{$changeFreq}</changefreq>
<priority>{$priority}</priority>
</url>
19 changes: 10 additions & 9 deletions wcfsetup/install/files/acp/templates/sitemapEdit.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@

<header class="contentHeader">
<div class="contentHeaderTitle">
<h1 class="contentTitle">{lang}wcf.acp.sitemap.edit{/lang}</h1>
<p class="contentHeaderDescription">{lang}wcf.acp.sitemap.objectType.{$formObject->objectType}{/lang}</p>
<h1 class="contentTitle">{lang}wcf.acp.sitemap.edit{/lang}: {$sitemapObject->getName()}</h1>
</div>

<nav class="contentHeaderNavigation">
<ul>
<li><a href="{link controller='SitemapList'}{/link}" class="button">{icon name='list'} <span>{lang}wcf.acp.menu.link.maintenance.sitemap{/lang}</span></a></li>

{event name='contentHeaderNavigation'}
</ul>
</nav>
{hascontent}
<nav class="contentHeaderNavigation">
<ul>
{content}
{event name='contentHeaderNavigation'}
{/content}
</ul>
</nav>
{/hascontent}
</header>

{unsafe:$form->getHtml()}
Expand Down
54 changes: 3 additions & 51 deletions wcfsetup/install/files/acp/templates/sitemapList.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -16,57 +16,9 @@

<woltlab-core-notice type="info">{lang}wcf.acp.sitemap.submitToSearchEngines{/lang}</woltlab-core-notice>

<woltlab-core-notice type="info">{lang}wcf.acp.sitemap.cliInfo{/lang}</woltlab-core-notice>

{if $sitemapObjectTypes|count}
<div class="section tabularBox">
<table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\object\type\SitemapObjectTypeAction">
<thead>
<tr>
<th class="columnTitle columnSitemap" colspan="2">{lang}wcf.acp.sitemap{/lang}</th>
<th class="columnInteger columnPriority">{lang}wcf.acp.sitemap.priority{/lang}</th>
<th class="columnText columnChangeFreq">{lang}wcf.acp.sitemap.changeFreq{/lang}</th>
<th class="columnInteger columnRebuildTime">{lang}wcf.acp.sitemap.rebuildTime{/lang}</th>

{event name='headColumns'}
</tr>
</thead>

<tbody>
{foreach from=$sitemapObjectTypes item=object}
<tr class="sitemapObjectRow jsObjectActionObject" data-object-id="{$object->getObjectID()}">
<td class="columnIcon">
{if $sitemapData[$object->objectType]['isDisabled']}
{objectAction action="toggle" isDisabled=true}
{else}
{objectAction action="toggle" isDisabled=false}
{/if}
<a href="{link controller="SitemapEdit"}objectType={$object->objectType}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
</td>
<td class="columnTitle columnSitemap"><a href="{link controller="SitemapEdit"}objectType={$object->objectType}{/link}">{lang}wcf.acp.sitemap.objectType.{$object->objectType}{/lang}</a></td>
<td class="columnInteger columnPriority">{$object->priority}</td>
<td class="columnText columnChangeFreq">{lang}wcf.acp.sitemap.changeFreq.{$sitemapData[$object->objectType]['changeFreq']}{/lang}</td>
<td class="columnInteger columnRebuildTime">{dateInterval end=TIME_NOW+$sitemapData[$object->objectType]['rebuildTime'] full=true format='plain'}</td>

{event name='columns'}
</tr>
{/foreach}
</tbody>
</table>
</div>

<footer class="contentFooter">
{hascontent}
<nav class="contentFooterNavigation">
<ul>
{content}{event name='contentFooterNavigation'}{/content}
</ul>
</nav>
{/hascontent}
</footer>
{else}
<woltlab-core-notice type="info">{lang}wcf.global.noItems{/lang}</woltlab-core-notice>
{/if}
<div class="section">
{unsafe:$gridView->render()}
</div>

<script data-relocate="true">
require(['WoltLabSuite/Core/Acp/Ui/Worker'], function (AcpUiWorker) {
Expand Down
109 changes: 29 additions & 80 deletions wcfsetup/install/files/lib/acp/form/SitemapEditForm.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,18 @@
namespace wcf\acp\form;

use CuyZ\Valinor\Mapper\MappingError;
use wcf\data\IStorableObject;
use wcf\data\object\type\ObjectType;
use wcf\data\object\type\ObjectTypeCache;
use wcf\form\AbstractForm;
use wcf\form\AbstractFormBuilderForm;
use wcf\http\Helper;
use wcf\system\exception\IllegalLinkException;
use wcf\system\form\builder\container\FormContainer;
use wcf\system\form\builder\data\processor\CustomFormDataProcessor;
use wcf\system\form\builder\field\BooleanFormField;
use wcf\system\form\builder\field\IntegerFormField;
use wcf\system\form\builder\field\SingleSelectionFormField;
use wcf\system\form\builder\IFormDocument;
use wcf\system\registry\RegistryHandler;
use wcf\system\request\LinkHandler;
use wcf\system\sitemap\object\RegisteredSitemapObject;
use wcf\system\sitemap\SitemapHandler;
use wcf\system\WCF;
use wcf\system\worker\SitemapRebuildWorker;

/**
* Shows the sitemap edit form.
Expand All @@ -28,7 +23,7 @@
* @copyright 2001-2024 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
*
* @extends AbstractFormBuilderForm<ObjectType>
* @extends AbstractFormBuilderForm<null>
*/
class SitemapEditForm extends AbstractFormBuilderForm
{
Expand All @@ -48,9 +43,9 @@ class SitemapEditForm extends AbstractFormBuilderForm
public $neededPermissions = ['admin.management.canRebuildData'];

/**
* @inheritDoc
* @since 6.3
*/
public $formAction = 'edit';
public RegisteredSitemapObject $sitemapObject;

#[\Override]
public function readParameters()
Expand All @@ -70,116 +65,70 @@ public function readParameters()
throw new IllegalLinkException();
}

$this->formObject = ObjectTypeCache::getInstance()->getObjectTypeByName(
'com.woltlab.wcf.sitemap.object',
$queryParameters['objectType']
);

if ($this->formObject === null) {
$sitemapObject = SitemapHandler::getInstance()->getObject($queryParameters['objectType']);
if ($sitemapObject === null) {
throw new IllegalLinkException();
}

$this->sitemapObject = $sitemapObject;
}

#[\Override]
protected function createForm()
{
parent::createForm();

$this->form->formMode(IFormDocument::FORM_MODE_UPDATE);

$this->form->appendChildren([
FormContainer::create('section')
->appendChildren([
SingleSelectionFormField::create('changeFreq')
->label('wcf.acp.sitemap.changeFreq')
->options([
'always' => 'wcf.acp.sitemap.changeFreq.always',
'hourly' => 'wcf.acp.sitemap.changeFreq.hourly',
'daily' => 'wcf.acp.sitemap.changeFreq.daily',
'weekly' => 'wcf.acp.sitemap.changeFreq.weekly',
'monthly' => 'wcf.acp.sitemap.changeFreq.monthly',
'yearly' => 'wcf.acp.sitemap.changeFreq.yearly',
'never' => 'wcf.acp.sitemap.changeFreq.never',
])
->value('monthly')
->required(),
IntegerFormField::create('rebuildTime')
->label('wcf.acp.sitemap.rebuildTime')
->description('wcf.acp.sitemap.rebuildTime.description')
->suffix('wcf.acp.option.suffix.seconds')
->minimum(0)
->value(172800)
->value(SitemapHandler::getInstance()->getRebuildTime($this->sitemapObject))
->addFieldClass('short'),
BooleanFormField::create('isDisabled')
->label('wcf.acp.sitemap.isDisabled')
->value(SitemapHandler::getInstance()->isDisabled($this->sitemapObject))
])
]);
}

#[\Override]
protected function finalizeForm()
{
parent::finalizeForm();

$this->form->getDataHandler()
->addProcessor(
new CustomFormDataProcessor(
'registryDataProcessor',
null,
function (IFormDocument $document, array $data, IStorableObject $object) {
\assert($object instanceof ObjectType);
$sitemapData = RegistryHandler::getInstance()->get(
'com.woltlab.wcf',
SitemapRebuildWorker::REGISTRY_PREFIX . $object->objectType
);
$sitemapData = @\unserialize($sitemapData);

if (\is_array($sitemapData)) {
$data["changeFreq"] = $sitemapData['changeFreq'];
$data["rebuildTime"] = $sitemapData['rebuildTime'];
$data["isDisabled"] = $sitemapData['isDisabled'];
} else {
if ($object->changeFreq !== null) {
$data["changeFreq"] = $object->changeFreq;
}
if ($object->rebuildTime !== null) {
$data["rebuildTime"] = $object->rebuildTime;
}
if ($object->isDisabled !== null) {
$data["isDisabled"] = $object->isDisabled;
}
}

return $data;
}
)
);
}

#[\Override]
public function save()
{
AbstractForm::save();

$formData = $this->form->getData();
if (!isset($formData['data'])) {
$formData['data'] = [];
}
$formData['data'] = \array_merge($this->additionalFields, $formData['data']);
$formData = $this->form->getData()['data'] ?? [];

RegistryHandler::getInstance()->set(
'com.woltlab.wcf',
SitemapRebuildWorker::REGISTRY_PREFIX . $this->formObject->objectType,
\serialize($formData['data'])
SitemapHandler::getInstance()->setConfiguration(
$this->sitemapObject,
(int)$formData['rebuildTime'],
(bool)$formData['isDisabled']
);

$this->saved();
WCF::getTPL()->assign('success', true);
}

#[\Override]
public function assignVariables()
{
parent::assignVariables();

WCF::getTPL()->assign([
'sitemapObject' => $this->sitemapObject,
]);
}

#[\Override]
protected function setFormAction()
{
$this->form->action(LinkHandler::getInstance()->getControllerLink(static::class, [
'objectType' => $this->formObject->objectType
'objectType' => $this->sitemapObject->getObjectName()
]));
}
}
Loading
Loading