/**
  * @param String $slug
  * @param String $taxonomy
  * Filters slug input, so to ensure uniqueness of term slugs.
  *
  * @return String Either the original slug or a new slug that has been generated from the original one in order to
  *                ensure slug uniqueness.
  */
 public function pre_term_slug_filter($slug, $taxonomy)
 {
     if ((isset($_REQUEST['tag-name']) || isset($_REQUEST['name'])) && (isset($_REQUEST['action']) && $_REQUEST['action'] === 'add-tag')) {
         $lang = $this->lang_term_slug_save($taxonomy);
         if ($slug === '') {
             if (isset($_REQUEST['tag-name'])) {
                 $slug = sanitize_title($_REQUEST['tag-name']);
             } elseif (isset($_REQUEST['name'])) {
                 $slug = sanitize_title($_REQUEST['name']);
             }
         }
         $slug = $slug !== '' ? WPML_Terms_Translations::term_unique_slug($slug, $taxonomy, $lang) : $slug;
     }
     return $slug;
 }
 /**
  * Manages the creation of new taxonomy terms from metadata values
  *
  * @since 2.20
  *
  * @param	mixed 	string or array value returned by the rule
  * @param	string 	field name or taxonomy name
  * @param	integer post ID to be evaluated
  * @param	string 	category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping
  * @param	array 	attachment_metadata, default NULL
  *
  * @return	array	updated rule EXIF/Template value
  */
 public static function mla_mapping_new_text($new_text, $setting_key, $post_id, $category, $attachment_metadata)
 {
     global $sitepress;
     static $replicate = NULL, $current_language, $taxonomies, $other_languages;
     if ('iptc_exif_taxonomy_mapping' !== $category) {
         return $new_text;
     }
     if (is_null($replicate)) {
         $replicate = 'checked' == MLACore::mla_get_option('term_mapping_replication', false, false, MLA_WPML::$mla_language_option_definitions);
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $replicate = ' . var_export( $replicate, true ), 0 );
         //$term_utils = new WPML_Terms_Translations();
         $current_language = $sitepress->get_current_language();
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $current_language = ' . var_export( $current_language, true ), 0 );
         $taxonomies = $sitepress->get_translatable_taxonomies(true, 'attachment');
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $taxonomies = ' . var_export( $taxonomies, true ), 0 );
         $other_languages = $sitepress->get_active_languages();
         unset($other_languages[$current_language]);
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $other_languages = ' . var_export( $other_languages, true ), 0 );
     }
     if (!empty($new_text) && in_array($setting_key, $taxonomies)) {
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text mapping rule = ' . var_export( self::$current_mapping_rule, true ), 0 );
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $new_text = ' . var_export( $new_text, true ), 0 );
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $setting_key = ' . var_export( $setting_key, true ), 0 );
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $post_id = ' . var_export( $post_id, true ), 0 );
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $category = ' . var_export( $category, true ), 0 );
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $attachment_metadata = ' . var_export( $attachment_metadata, true ), 0 );
         $language_details = $sitepress->get_element_language_details($post_id, 'post_attachment');
         $item_language = $language_details->language_code;
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $language_details = ' . var_export( $language_details, true ), 0 );
         /*
          * Find the parent term and its translations
          */
         if (isset(self::$current_mapping_rule['parent'])) {
             if ($parent_term = absint(self::$current_mapping_rule['parent'])) {
                 $parent_term = self::_get_relevant_term('id', $parent_term, $setting_key);
             }
         } else {
             $parent_term = 0;
         }
         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $parent_term = ' . var_export( $parent_term, true ), 0 );
         $new_terms = array();
         foreach ($new_text as $new_name) {
             $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key);
             //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 );
             if ($relevant_term) {
                 if (isset($relevant_term['translations'][$item_language])) {
                     $new_terms[] = absint($relevant_term['translations'][$item_language]->term_id);
                 }
             } else {
                 /*
                  * Always create the new term in the current language
                  */
                 if ($parent_term && isset($parent_term['translations'][$current_language])) {
                     $parent = $parent_term['translations'][$current_language]->term_id;
                 } else {
                     $parent = 0;
                 }
                 //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 );
                 $args = array('taxonomy' => $setting_key, 'lang_code' => $current_language, 'term' => $new_name, 'parent' => $parent);
                 $res = WPML_Terms_Translations::create_new_term($args);
                 //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 );
                 /*
                  * Add translations in the other languages?
                  */
                 if ($replicate) {
                     $trid = $sitepress->get_element_trid($res['term_taxonomy_id'], 'tax_' . $setting_key);
                     //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $trid = ' . var_export( $trid, true ), 0 );
                     $original_term = get_term($res['term_id'], $setting_key, OBJECT, 'no');
                     //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $original_term = ' . var_export( $original_term, true ), 0 );
                     $args = array('trid' => $trid, 'source_language' => $current_language, 'term' => $new_name, 'original_id' => $res['term_id'], 'original_tax_id' => $res['term_taxonomy_id'], 'taxonomy' => $setting_key, 'update_translations' => true);
                     foreach ($other_languages as $language => $language_details) {
                         if ($parent_term && isset($parent_term['translations'][$language])) {
                             $parent = $parent_term['translations'][$language]->term_id;
                         } else {
                             $parent = 0;
                         }
                         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 );
                         $translated_slug = apply_filters('icl_duplicate_generic_string', $original_term->slug, $language, array('context' => 'taxonomy_slug', 'attribute' => $setting_key, 'key' => $original_term->term_id));
                         $translated_slug = WPML_Terms_Translations::term_unique_slug($translated_slug, $setting_key, $language);
                         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $translated_slug = ' . var_export( $translated_slug, true ), 0 );
                         $args['slug'] = $translated_slug;
                         $args['parent'] = $parent;
                         $args['lang_code'] = $language;
                         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $args = ' . var_export( $args, true ), 0 );
                         $res = WPML_Terms_Translations::create_new_term($args);
                         //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 );
                     }
                 }
                 // replicate
                 /*
                  * Reload the term with all of its new translations
                  */
                 $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key, NULL, false, true);
                 //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 );
                 if (isset($relevant_term['translations'][$item_language])) {
                     $new_terms[] = absint($relevant_term['translations'][$item_language]->term_id);
                 }
             }
             // new term
         }
         // foreach new_name
         MLACore::mla_debug_add(__LINE__ . " MLA_WPML::mla_mapping_new_text( {$setting_key}, {$post_id} ) \$new_terms = " . var_export($new_terms, true), MLACore::MLA_DEBUG_CATEGORY_AJAX);
         return $new_terms;
     }
     // translated taxonomy
     return $new_text;
 }
 public function __construct($args)
 {
     /**
      * Actual name of the term. Same as the name input argument to \wp_update_term or \wp_insert_term
      * @var string|bool
      */
     $term = false;
     $slug = '';
     $taxonomy = '';
     /** @var string $lang_code */
     $lang_code = '';
     $trid = null;
     /** @var int|bool $original_tax_id */
     $original_tax_id = false;
     /**
      * Taxonomy_term_id of the parent element
      * @var int
      */
     $parent = 0;
     $description = false;
     $term_group = false;
     $source_language = null;
     extract($args, EXTR_OVERWRITE);
     // We cannot create a term unless we at least know its name
     if ($term && $taxonomy) {
         $this->wp_new_term_args['name'] = $term;
         $this->taxonomy = $taxonomy;
     } else {
         $this->is_valid = false;
         return;
     }
     if ($parent) {
         $this->wp_new_term_args['parent'] = $parent;
     }
     if ($description) {
         $this->wp_new_term_args['description'] = $description;
     }
     if ($term_group) {
         $this->wp_new_term_args['term_group'] = $term_group;
     }
     $this->wp_new_term_args['term_group'] = $term_group;
     $this->is_valid = $this->set_language_information($trid, $original_tax_id, $lang_code, $source_language);
     $this->set_action_type();
     if (!$this->is_update || $this->is_update && $slug != '' && $slug != $this->old_slug) {
         if (trim($slug) == '') {
             $slug = sanitize_title($term);
         }
         $slug = WPML_Terms_Translations::term_unique_slug($slug, $taxonomy, $lang_code);
         $this->wp_new_term_args['slug'] = $slug;
     }
 }
 function trbl_duplicate_terms()
 {
     $nonce = filter_input(INPUT_POST, 'wcml_nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
     if (!$nonce || !wp_verify_nonce($nonce, 'trbl_duplicate_terms')) {
         die('Invalid nonce');
     }
     global $sitepress;
     $attr = isset($_POST['attr']) ? $_POST['attr'] : false;
     $terms = get_terms($attr, 'hide_empty=0');
     $i = 0;
     $languages = $sitepress->get_active_languages();
     foreach ($terms as $term) {
         foreach ($languages as $language) {
             $tr_id = apply_filters('translate_object_id', $term->term_id, $attr, false, $language['code']);
             if (is_null($tr_id)) {
                 $term_args = array();
                 // hierarchy - parents
                 if (is_taxonomy_hierarchical($attr)) {
                     // fix hierarchy
                     if ($term->parent) {
                         $original_parent_translated = apply_filters('translate_object_id', $term->parent, $attr, false, $language['code']);
                         if ($original_parent_translated) {
                             $term_args['parent'] = $original_parent_translated;
                         }
                     }
                 }
                 if (version_compare(ICL_SITEPRESS_VERSION, '3.1.8.2', '<=')) {
                     $term_name = $term->name . ' @' . $language['code'];
                 } else {
                     $term_name = $term->name;
                     $slug = $term->name . '-' . $language['code'];
                     $slug = WPML_Terms_Translations::term_unique_slug($slug, $attr, $language['code']);
                     $term_args['slug'] = $slug;
                 }
                 $new_term = wp_insert_term($term_name, $attr, $term_args);
                 if ($new_term && !is_wp_error($new_term)) {
                     $tt_id = $sitepress->get_element_trid($term->term_taxonomy_id, 'tax_' . $attr);
                     $sitepress->set_element_language_details($new_term['term_taxonomy_id'], 'tax_' . $attr, $tt_id, $language['code']);
                 }
             }
         }
     }
     echo 1;
     die;
 }