use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\system\MenuInterface;
+use Drupal\language\ConfigurableLanguageInterface;
/**
- * Implements hook_help.
+ *Implements hook_help.
+ *
+ * @param $route_name
+ * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+ * @return \Drupal\Component\Render\MarkupInterface|null
*/
function simple_sitemap_help($route_name, RouteMatchInterface $route_match) {
return $route_name === 'help.page.simple_sitemap' ?
* Implements hook_form_alter.
*
* Adds sitemap settings to entity types that are supported via plugins.
+ *
+ * @param $form
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
+ * @param $form_id
*/
function simple_sitemap_form_alter(&$form, FormStateInterface $form_state, $form_id) {
/**
* @var Drupal\simple_sitemap\Form\FormHelper $f
*/
- $f = \Drupal::service('simple_sitemap.form_helper')->processForm($form_state);
- if (!$f->alteringForm()) {
+ $f = \Drupal::service('simple_sitemap.form_helper');
+ if (!$f->processForm($form_state)) {
return;
}
'#type' => 'details',
'#group' => isset($form['additional_settings']) ? 'additional_settings' : 'advanced',
'#title' => t('Simple XML sitemap'),
- '#description' => $f->getEntityCategory() == 'instance' ? t('Settings for this entity can be overridden here.') : '',
+ '#description' => $f->getEntityCategory() === 'instance' ? t('Settings for this entity can be overridden here.') : '',
];
// Attach some js magic to forms.
// todo: JS not working on comment entity form, hence disabling.
- if ($f->getEntityTypeId() != 'comment' || $f->getEntityCategory() != 'instance') {
+ if ($f->getEntityTypeId() !== 'comment' || $f->getEntityCategory() !== 'instance') {
$form['#attached']['library'][] = 'simple_sitemap/form';
}
// Add submission handler.
if (isset($form['actions']['submit']['#submit'])) {
foreach (array_keys($form['actions']) as $action) {
- if ($action != 'preview'
+ if ($action !== 'preview'
&& isset($form['actions'][$action]['#type'])
&& $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'simple_sitemap_entity_form_submit';
/**
* Form submission handler called in hook_form_alter.
+ *
+ * @param $form
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function simple_sitemap_entity_form_submit($form, FormStateInterface &$form_state) {
/**
* @var Drupal\simple_sitemap\Form\FormHelper $f
*/
- $f = \Drupal::service('simple_sitemap.form_helper')->processForm($form_state);
+ $f = \Drupal::service('simple_sitemap.form_helper');
+ if (!$f->processForm($form_state)) {
+ return;
+ }
$values = $form_state->getValues();
*/
$generator = \Drupal::service('simple_sitemap.generator');
+ $settings = [
+ 'index' => $values['simple_sitemap_index_content'],
+ 'priority' => $values['simple_sitemap_priority'],
+ 'changefreq' => $values['simple_sitemap_changefreq'],
+ 'include_images' => $values['simple_sitemap_include_images'],
+ ];
+
switch ($f->getEntityCategory()) {
case 'bundle':
$generator->setBundleSettings(
$f->getEntityTypeId(),
!empty($f->getBundleName()) ? $f->getBundleName() : $f->getFormEntityId(),
- [
- 'index' => $values['simple_sitemap_index_content'],
- 'priority' => $values['simple_sitemap_priority']
- ]
+ $settings
);
break;
$generator->setEntityInstanceSettings(
$f->getEntityTypeId(),
!empty($f->getInstanceId()) ? $f->getInstanceId() : $f->getFormEntityId(),
- [
- 'index' => $values['simple_sitemap_index_content'],
- 'priority' => $values['simple_sitemap_priority']
- ]
+ $settings
);
break;
}
*/
$generator = \Drupal::service('simple_sitemap.generator');
if ($generator->getSetting('cron_generate')) {
- $generator->generateSitemap('backend');
+ $interval = (int) $generator->getSetting('cron_generate_interval', 0) * 60 * 60;
+ $requestTime = \Drupal::service('datetime.time')->getRequestTime();
+ if ($interval === 0 || ((\Drupal::state()->get('simple_sitemap.last_cron_generate', 0) + $interval) <= $requestTime)) {
+ \Drupal::state()->set('simple_sitemap.last_cron_generate', $requestTime);
+ $generator->generateSitemap('backend');
+ }
+ }
+}
+
+/**
+ * Implements hook_ENTITY_TYPE_delete().
+ *
+ * When a language is removed from the system remove it also from settings.
+ */
+function simple_sitemap_configurable_language_delete(ConfigurableLanguageInterface $language) {
+
+ /**
+ * @var \Drupal\simple_sitemap\Simplesitemap $generator
+ */
+ $generator = \Drupal::service('simple_sitemap.generator');
+ $excluded_languages = $generator->getSetting('excluded_languages');
+ if (isset($excluded_languages[$language->id()])) {
+ unset($excluded_languages[$language->id()]);
+ $generator->saveSetting('excluded_languages', $excluded_languages);
}
}
* Implements hook_entity_bundle_delete().
*
* Removes settings of the removed bundle.
+ *
+ * @param string $entity_type_id
+ * @param string $bundle
*/
function simple_sitemap_entity_bundle_delete($entity_type_id, $bundle) {
simple_sitemap_delete_bundle_config($entity_type_id, $bundle);
// Delete bundle settings.
\Drupal::service('config.factory')->getEditable("simple_sitemap.bundle_settings.$entity_type_id.$bundle")->delete();
- $message = "You may want to <a href='@url'>regenerate</a> your XML sitemap now.";
+ $message = 'You may want to <a href="@url">regenerate</a> your XML sitemap now.';
if ($generator->getSetting('cron_generate')) {
- $message .= ' Otherwise the sitemap will be regenerated on the next cron run.';
+ $message .= ' Otherwise the sitemap will be regenerated during a future cron run.';
}
drupal_set_message(t($message, ['@url' => $GLOBALS['base_url'] . '/admin/config/search/simplesitemap']));
}
function simple_sitemap_robotstxt() {
return [
'# XML sitemap',
- 'Sitemap: ' . $GLOBALS['base_url'] . '/sitemap.xml',
+ 'Sitemap: ' . $GLOBALS['base_url'] . '/sitemap.xml', //todo: Use base URL setting?
];
}