123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /**
- * @file
- * Provides tools for creating multilanguage aliases for taxonomy terms.
- */
- /**
- * Implements hook_form_BASE_FORM_ID_alter().
- */
- function pathauto_i18n_taxonomy_form_taxonomy_form_term_alter(&$form, &$form_state) {
- // Exclude elements from deletion confirm form.
- if ($form['#theme'] != 'confirm_form') {
- pathauto_i18n_configuration_form($form, $form_state['term'], 'term', $form_state['term']->vocabulary_machine_name);
- }
- }
- /**
- * Implements hook_form_BASE_FORM_ID_alter().
- */
- function pathauto_i18n_taxonomy_form_pathauto_patterns_form_alter(&$form, &$form_state) {
- $languages = language_list();
- $default_pattern_name = 'pathauto_taxonomy_term_pattern';
- $default_pattern = $form['taxonomy_term'][$default_pattern_name];
- // Remove parents handlers.
- unset($default_pattern['#parents']);
- $form['taxonomy_term']['token_help']['#weight'] = 1;
- foreach (element_children($form['taxonomy_term']) as $term_pattern_name) {
- if ($term_pattern_name != $default_pattern_name && $term_pattern_name != 'token_help') {
- foreach ($languages as $language) {
- $vocabulary = pathauto_i18n_taxonomy_get_vocabulary_name($term_pattern_name);
- if ($vocabulary) {
- $pattern_name = 'pathauto_taxonomy_term_' . $vocabulary . '_' . $language->language . '_pattern';
- $form['taxonomy_term'][$pattern_name] = $default_pattern;
- $form['taxonomy_term'][$pattern_name]['#title'] = t('Pattern for all @language @vocabulary paths', array('@language' => $language->name, '@vocabulary' => $vocabulary));
- $form['taxonomy_term'][$pattern_name]['#default_value'] = variable_get($pattern_name, '');
- }
- }
- }
- }
- }
- /**
- * Get vocabulary name from pattern name.
- */
- function pathauto_i18n_taxonomy_get_vocabulary_name($pattern_name) {
- $scope = str_replace(array('pathauto_taxonomy_term_', '_pattern'), array('', ''), $pattern_name);
- return !empty($scope) ? $scope : FALSE;
- }
- /**
- * Implements hook_taxonomy_term_insert().
- */
- function pathauto_i18n_taxonomy_taxonomy_term_insert($term) {
- pathauto_i18n_init_property($term, 'taxonomy', $term->vocabulary_machine_name);
- pathauto_i18n_process_entity_object($term, 'taxonomy_term', $term->path['pathauto_i18n_status'], 'insert');
- }
- /**
- * Implements hook_taxonomy_term_update().
- */
- function pathauto_i18n_taxonomy_taxonomy_term_update($term) {
- pathauto_i18n_init_property($term, 'taxonomy', $term->vocabulary_machine_name);
- pathauto_i18n_process_entity_object($term, 'taxonomy_term', $term->path['pathauto_i18n_status'], 'update');
- }
- /**
- * Implements hook_taxonomy_term_delete().
- */
- function pathauto_i18n_taxonomy_taxonomy_term_delete($term) {
- pathauto_i18n_delete_settings($term->tid, 'taxonomy_term');
- }
- /**
- * Implements hook_taxonomy_term_load().
- */
- function pathauto_i18n_taxonomy_taxonomy_term_load($terms) {
- // Attach pathauto i18n settings to taxonomy_term object.
- foreach ($terms as $term) {
- $tids[] = $term->tid;
- }
- if (!empty($tids)) {
- $result = pathauto_i18n_load_settings($tids, 'taxonomy_term');
- $settings = array();
- foreach ($result as $record) {
- $settings[$record->entity_id] = $record->path_status;
- }
- foreach ($terms as $tid => $term) {
- if (array_key_exists($tid, $settings)) {
- $terms[$tid]->path['pathauto_i18n_status'] = $settings[$tid];
- }
- else {
- $terms[$tid]->path['pathauto_i18n_status'] = 0;
- }
- }
- }
- }
- /**
- * Implements hook_pathauto_alias_alter().
- */
- function pathauto_i18n_taxonomy_pathauto_alias_alter(&$alias, &$context) {
- $operations = array('insert', 'update', 'bulkupdate');
- // Skip insert of alias for all languages.
- if (!empty($context['module']) && ($context['module'] == 'term' || $context['module'] == 'taxonomy_term') && in_array($context['op'], $operations)) {
- $entity = FALSE;
- // On creating taxonomy term has term key on updating taxonomy_term.
- if (!empty($context['data']['term'])) {
- $entity = $context['data']['term'];
- }
- if (!empty($context['data']['taxonomy_term'])) {
- $entity = $context['data']['taxonomy_term'];
- }
- // Run bulk update.
- if ($context['op'] == 'bulkupdate') {
- pathauto_i18n_taxonomy_taxonomy_term_update($entity);
- }
- if ($entity && isset($entity->path['pathauto_i18n_status']) && $entity->path['pathauto_i18n_status'] && $context['language'] == LANGUAGE_NONE) {
- $alias = '';
- }
- }
- }
- /**
- * Implements hook_form_alter().
- */
- function pathauto_i18n_taxonomy_form_alter(&$form, &$form_state, $form_id) {
- if ($form_id == 'taxonomy_form_term') {
- // Add pathauto value if pathauto_i18n_status TRUE.
- // Remove alias value to prevent overwriting.
- $term = FALSE;
- if (isset($form['#term'])) {
- $term = (object) $form['#term'];
- }
- if ($term && isset($term->path['pathauto_i18n_status']) && $term->path['pathauto_i18n_status']) {
- $form['path']['pathauto']['#default_value'] = TRUE;
- $form['path']['alias']['#default_value'] = '';
- }
- }
- }
- /**
- * Implements hook_module_implements_alter().
- */
- function pathauto_i18n_taxonomy_module_implements_alter(&$implementations, $hook) {
- // Move pathauto_i18n_taxonomy to the end of the list.
- // By default there not available pathauto value.
- if ($hook == 'form_alter') {
- $group = $implementations['pathauto_i18n_taxonomy'];
- unset($implementations['pathauto_i18n_taxonomy']);
- $implementations['pathauto_i18n_taxonomy'] = $group;
- }
- }
- /**
- * Implements hook_action_info().
- */
- function pathauto_i18n_taxonomy_action_info() {
- return array(
- 'pathauto_i18n_taxonomy_generate_alias' => array(
- 'type' => 'taxonomy_term',
- 'label' => t('Enable generation of aliases for all languages'),
- 'configurable' => FALSE,
- 'behavior' => array('changes_property'),
- 'triggers' => array(
- 'any',
- ),
- ),
- 'pathauto_i18n_taxonomy_remove_alias' => array(
- 'type' => 'taxonomy_term',
- 'label' => t('Disable generation of aliases for all languages'),
- 'configurable' => FALSE,
- 'behavior' => array('changes_property'),
- 'triggers' => array(
- 'any',
- ),
- ),
- );
- }
- /**
- * Sets the status of a pathauto_i18n_status to 1.
- *
- * @param object $term
- * A taxonomy term object.
- *
- * @param array $context
- * (optional) Array of additional information about what triggered the action.
- * Not used for this action.
- *
- * @ingroup actions
- */
- function pathauto_i18n_taxonomy_generate_alias($term, $context = array()) {
- $term->path['pathauto_i18n_status'] = 1;
- }
- /**
- * Sets the status of a pathauto_i18n_status to 0.
- *
- * @param object $term
- * A term object.
- *
- * @param array $context
- * (optional) Array of additional information about what triggered the action.
- * Not used for this action.
- *
- * @ingroup actions
- */
- function pathauto_i18n_taxonomy_remove_alias($term, $context = array()) {
- $term->path['pathauto_i18n_status'] = 0;
- }
|