X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fpathauto%2Fsrc%2FForm%2FPathautoSettingsForm.php;fp=web%2Fmodules%2Fcontrib%2Fpathauto%2Fsrc%2FForm%2FPathautoSettingsForm.php;h=281edb248e8fe0767f038e0ce7f056d6e8ddd23a;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/pathauto/src/Form/PathautoSettingsForm.php b/web/modules/contrib/pathauto/src/Form/PathautoSettingsForm.php new file mode 100644 index 000000000..281edb248 --- /dev/null +++ b/web/modules/contrib/pathauto/src/Form/PathautoSettingsForm.php @@ -0,0 +1,266 @@ +entityTypeManager = $entity_type_manager; + $this->entityFieldManager = $entity_field_manager; + $this->aliasTypeManager = $alias_type_manager; + } + + /** + * {@inheritDoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('config.factory'), + $container->get('entity_type.manager'), + $container->get('entity_field.manager'), + $container->get('plugin.manager.alias_type') + ); + } + + /** + * {@inheritdoc} + */ + public function getFormId() { + return 'pathauto_settings_form'; + } + + /** + * {@inheritdoc} + */ + protected function getEditableConfigNames() { + return ['pathauto.settings']; + } + + /** + * {@inheritdoc} + */ + public function buildForm(array $form, FormStateInterface $form_state) { + $config = $this->config('pathauto.settings'); + + $form['enabled_entity_types'] = [ + '#type' => 'details', + '#open' => TRUE, + '#title' => $this->t('Enabled entity types'), + '#description' => $this->t('Enable to add a path field and allow to define alias patterns for the given type. Disabled types already define a path field themselves or currently have a pattern.'), + '#tree' => TRUE, + ]; + + // Get all applicable entity types. + foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) { + // Disable a checkbox if it already exists and if the entity type has + // patterns currently defined or if it isn't defined by us. + $patterns_count = \Drupal::entityQuery('pathauto_pattern') + ->condition('type', 'canonical_entities:' . $entity_type_id) + ->count() + ->execute(); + + if (is_subclass_of($entity_type->getClass(), FieldableEntityInterface::class) && $entity_type->hasLinkTemplate('canonical')) { + $field_definitions = $this->entityFieldManager->getBaseFieldDefinitions($entity_type_id); + $form['enabled_entity_types'][$entity_type_id] = [ + '#type' => 'checkbox', + '#title' => $entity_type->getLabel(), + '#default_value' => isset($field_definitions['path']) || in_array($entity_type_id, $config->get('enabled_entity_types')), + '#disabled' => isset($field_definitions['path']) && ($field_definitions['path']->getProvider() != 'pathauto' || $patterns_count), + ]; + } + } + + $form['verbose'] = array( + '#type' => 'checkbox', + '#title' => $this->t('Verbose'), + '#default_value' => $config->get('verbose'), + '#description' => $this->t('Display alias changes (except during bulk updates).'), + ); + + $form['separator'] = array( + '#type' => 'textfield', + '#title' => $this->t('Separator'), + '#size' => 1, + '#maxlength' => 1, + '#default_value' => $config->get('separator'), + '#description' => $this->t('Character used to separate words in titles. This will replace any spaces and punctuation characters. Using a space or + character can cause unexpected results.'), + ); + + $form['case'] = array( + '#type' => 'checkbox', + '#title' => $this->t('Character case'), + '#default_value' => $config->get('case'), + '#description' => $this->t('Convert token values to lowercase.'), + ); + + $max_length = \Drupal::service('pathauto.alias_storage_helper')->getAliasSchemaMaxlength(); + + $help_link = ''; + if (\Drupal::moduleHandler()->moduleExists('help')) { + $help_link = ' ' . $this->t('See Pathauto help for details.', [':pathauto-help' => Url::fromRoute('help.page', ['name' => 'pathauto'])->toString()]); + } + + $form['max_length'] = array( + '#type' => 'number', + '#title' => $this->t('Maximum alias length'), + '#size' => 3, + '#maxlength' => 3, + '#default_value' => $config->get('max_length'), + '#min' => 1, + '#max' => $max_length, + '#description' => $this->t('Maximum length of aliases to generate. 100 is the recommended length. @max is the maximum possible length.', array('@max' => $max_length)) . $help_link, + ); + + $form['max_component_length'] = array( + '#type' => 'number', + '#title' => $this->t('Maximum component length'), + '#size' => 3, + '#maxlength' => 3, + '#default_value' => $config->get('max_component_length'), + '#min' => 1, + '#max' => $max_length, + '#description' => $this->t('Maximum text length of any component in the alias (e.g., [title]). 100 is the recommended length. @max is the maximum possible length.', ['@max' => $max_length]) . $help_link, + ); + + $description = $this->t('What should Pathauto do when updating an existing content item which already has an alias?'); + if (\Drupal::moduleHandler()->moduleExists('redirect')) { + $description .= ' ' . $this->t('The Redirect module settings affect whether a redirect is created when an alias is deleted.', array(':url' => Url::fromRoute('redirect.settings')->toString())); + } + else { + $description .= ' ' . $this->t('Considering installing the Redirect module to get redirects when your aliases change.', array(':url' => 'http://drupal.org/project/redirect')); + } + + $form['update_action'] = array( + '#type' => 'radios', + '#title' => $this->t('Update action'), + '#default_value' => $config->get('update_action'), + '#options' => array( + PathautoGeneratorInterface::UPDATE_ACTION_NO_NEW => $this->t('Do nothing. Leave the old alias intact.'), + PathautoGeneratorInterface::UPDATE_ACTION_LEAVE => $this->t('Create a new alias. Leave the existing alias functioning.'), + PathautoGeneratorInterface::UPDATE_ACTION_DELETE => $this->t('Create a new alias. Delete the old alias.'), + ), + '#description' => $description, + ); + + $form['transliterate'] = array( + '#type' => 'checkbox', + '#title' => $this->t('Transliterate prior to creating alias'), + '#default_value' => $config->get('transliterate'), + '#description' => $this->t('When a pattern includes certain characters (such as those with accents) should Pathauto attempt to transliterate them into the US-ASCII alphabet?'), + ); + + $form['reduce_ascii'] = array( + '#type' => 'checkbox', + '#title' => $this->t('Reduce strings to letters and numbers'), + '#default_value' => $config->get('reduce_ascii'), + '#description' => $this->t('Filters the new alias to only letters and numbers found in the ASCII-96 set.'), + ); + + $form['ignore_words'] = array( + '#type' => 'textarea', + '#title' => $this->t('Strings to Remove'), + '#default_value' => $config->get('ignore_words'), + '#description' => $this->t('Words to strip out of the URL alias, separated by commas. Do not use this to remove punctuation.'), + '#wysiwyg' => FALSE, + ); + + $form['punctuation'] = array( + '#type' => 'fieldset', + '#title' => $this->t('Punctuation'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#tree' => TRUE, + ); + + $punctuation = \Drupal::service('pathauto.alias_cleaner')->getPunctuationCharacters(); + + foreach ($punctuation as $name => $details) { + // Use the value from config if it exists. + if ($config->get('punctuation.' . $name) !== NULL) { + $details['default'] = $config->get('punctuation.' . $name); + } + else { + // Otherwise use the correct default. + $details['default'] = $details['value'] == $config->get('separator') ? PathautoGeneratorInterface::PUNCTUATION_REPLACE : PathautoGeneratorInterface::PUNCTUATION_REMOVE; + } + $form['punctuation'][$name] = array( + '#type' => 'select', + '#title' => $details['name'] . ' (' . Html::escape($details['value']) . ')', + '#default_value' => $details['default'], + '#options' => array( + PathautoGeneratorInterface::PUNCTUATION_REMOVE => $this->t('Remove'), + PathautoGeneratorInterface::PUNCTUATION_REPLACE => $this->t('Replace by separator'), + PathautoGeneratorInterface::PUNCTUATION_DO_NOTHING => $this->t('No action (do not replace)'), + ), + ); + } + + return parent::buildForm($form, $form_state); + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) { + + $config = $this->config('pathauto.settings'); + + $form_state->cleanValues(); + + $original_entity_types = $config->get('enabled_entity_types'); + foreach ($form_state->getValues() as $key => $value) { + if ($key == 'enabled_entity_types') { + $enabled_entity_types = []; + foreach ($value as $entity_type_id => $enabled) { + $field_definitions = $this->entityFieldManager->getBaseFieldDefinitions($entity_type_id); + // Verify that the entity type is enabled and that it is not defined + // or defined by us before adding it to the configuration, so that + // we do not store an entity type that cannot be enabled or disabled. + if ($enabled && (!isset($field_definitions['path']) || ($field_definitions['path']->getProvider() === 'pathauto'))) { + $enabled_entity_types[] = $entity_type_id; + } + } + $value = $enabled_entity_types; + } + $config->set($key, $value); + } + $config->save(); + + parent::submitForm($form, $form_state); + } + +}