/** * {@inheritdoc} */ public function createAlias($module, $op, $source, $data, $type = NULL, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED) { $config = $this->configFactory->get('pathauto.settings'); // Retrieve and apply the pattern for this content type. $pattern = $this->getPatternByEntity($module, $type, $langcode); // Allow other modules to alter the pattern. $context = array('module' => $module, 'op' => $op, 'source' => $source, 'data' => $data, 'type' => $type, 'language' => &$langcode); $this->moduleHandler->alter('pathauto_pattern', $pattern, $context); if (empty($pattern)) { // No pattern? Do nothing (otherwise we may blow away existing aliases...) return NULL; } // Special handling when updating an item which is already aliased. $existing_alias = NULL; if ($op == 'update' || $op == 'bulkupdate') { if ($existing_alias = $this->aliasStorageHelper->loadBySource($source, $langcode)) { switch ($config->get('update_action')) { case PathautoManagerInterface::UPDATE_ACTION_NO_NEW: // If an alias already exists, // and the update action is set to do nothing, // then gosh-darn it, do nothing. return NULL; } } } // Replace any tokens in the pattern. // Uses callback option to clean replacements. No sanitization. $alias = $this->token->replace($pattern, $data, array('sanitize' => FALSE, 'clear' => TRUE, 'callback' => array($this, 'cleanTokenValues'), 'langcode' => $langcode, 'pathauto' => TRUE)); // Check if the token replacement has not actually replaced any values. If // that is the case, then stop because we should not generate an alias. // @see token_scan() $pattern_tokens_removed = preg_replace('/\\[[^\\s\\]:]*:[^\\s\\]]*\\]/', '', $pattern); if ($alias === $pattern_tokens_removed) { return NULL; } $alias = $this->aliasCleaner->cleanAlias($alias); // Allow other modules to alter the alias. $context['source'] =& $source; $context['pattern'] = $pattern; $this->moduleHandler->alter('pathauto_alias', $alias, $context); // If we have arrived at an empty string, discontinue. if (!Unicode::strlen($alias)) { return NULL; } // If the alias already exists, generate a new, hopefully unique, variant. $original_alias = $alias; $this->aliasUniquifier->uniquify($alias, $source, $langcode); if ($original_alias != $alias) { // Alert the user why this happened. $this->messenger->addMessage($this->t('The automatically generated alias %original_alias conflicted with an existing alias. Alias changed to %alias.', array('%original_alias' => $original_alias, '%alias' => $alias)), $op); } // Return the generated alias if requested. if ($op == 'return') { return $alias; } // Build the new path alias array and send it off to be created. $path = array('source' => $source, 'alias' => $alias, 'language' => $langcode); return $this->aliasStorageHelper->save($path, $existing_alias, $op); }
/** * {@inheritdoc} */ public function resetCaches() { $this->patterns = array(); $this->aliasCleaner->resetCaches(); }
/** * {@inheritdoc} */ public function resetCaches() { $this->patterns = []; $this->patternsByEntityType = []; $this->aliasCleaner->resetCaches(); }