/**
  * @covers WPGlobus_Core::has_translations
  */
 public function test_has_translations()
 {
     /** @var string[] $positives */
     $positives = array('{:en}EN{:}{:ru}RU{:}', '[:en]EN[:ru]RU', '<!--:en-->EN<!--:--><!--:ru-->RU<!--:-->', "Multi-line\n\n {:en}E\nN{:}\n\n{:ru}RU{:}", '{:xx', 'Lead {:xx', 'Lead {:xx trail');
     foreach ($positives as $_) {
         self::assertTrue(WPGlobus_Core::has_translations($_), 'Has translation: ' . $_);
     }
     /** @var string[] $negatives */
     $negatives = array('', 'No delimiters', 'Wrong delimiter {xx:}', 'One-character locale {:e}', 'Non-alpha locale {:e1}EN{:}{:r2}RU{:}', 'Non-latin locale {:ан}EN{:}{:ру}RU{:}', 'Uppercase locale {:EN}EN{:}{:RU}RU{:}');
     foreach ($negatives as $_) {
         self::assertFalse(WPGlobus_Core::has_translations($_), 'Has no translation: ' . $_);
     }
 }
Exemplo n.º 2
0
 /**
  * Filter @see get_terms_to_edit()
  * @since 1.6.4
  *
  * @param string
  *
  * @return string
  */
 public static function filter__terms_to_edit($terms_to_edit)
 {
     if (!WPGlobus_Core::has_translations($terms_to_edit)) {
         return $terms_to_edit;
     }
     $terms = explode(',', $terms_to_edit);
     foreach ($terms as $k => $term) {
         $terms[$k] = WPGlobus_Core::text_filter($term, WPGlobus::Config()->language);
     }
     return implode(',', $terms);
 }
Exemplo n.º 3
0
 /**
  * Generate title
  *
  * @see get_title_from_options()
  * @scope front
  * @since 1.1.1		 
  *
  * @param string $text
  *
  * @return string
  */
 public static function filter__title($text)
 {
     global $post;
     if (!empty($post)) {
         $yoast_wpseo_title = get_post_meta($post->ID, '_yoast_wpseo_title', true);
     }
     if (empty($yoast_wpseo_title)) {
         if (WPGlobus::Config()->language == WPGlobus::Config()->default_language) {
             /**
              * When meta '_yoast_wpseo_title' is empty 
              * for default language we get autogenerated $text like 'Title - WPGlobus'
              */
             /** do nothing */
             /** 
              * but sometimes (noted for pages) we get title like '{:en}Title{:}{:ru}Заголовок{:} - WPGlobus'
              * @since 1.4.1		 
              */
             if (WPGlobus_Core::has_translations($text)) {
                 $text = self::extract_title($text);
             }
         } else {
             /**
              * When meta '_yoast_wpseo_title' is empty 
              * for extra languages we get autogenerated $text like '{:en}Title{:}{:ru}Заголовок{:} - ВПГлобус'
              */
             $text = self::extract_title($text);
         }
     } else {
         /**
          * When meta '_yoast_wpseo_title' is not empty
          */
         $text = WPGlobus_Core::text_filter($text, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY);
         if (WPGlobus::Config()->language == WPGlobus::Config()->default_language) {
             /** do nothing */
         } else {
             if (empty($text)) {
                 $opts = WPSEO_Options::get_all();
                 $replace_vars = $opts['title-post'];
                 if (!empty($opts['title-' . $post->post_type])) {
                     $replace_vars = $opts['title-' . $post->post_type];
                 }
                 $post->post_title = WPGlobus_Core::text_filter($post->post_title, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY);
                 $text = wpseo_replace_vars($replace_vars, $post);
                 /**
                 					@todo investigate generation title with WPSEO_Frontend
                 					remove_filter( 'wpseo_title', array( 'WPGlobus_YoastSEO', 'filter__title' ), 0 );
                 					$f = WPSEO_Frontend::get_instance();
                 					$t = $f->title('');
                 					// */
             }
         }
     }
     return $text;
 }
Exemplo n.º 4
0
 /**
  * Handle ajax process
  */
 public function on_process_ajax()
 {
     $ajax_return = array();
     $order = $_POST['order'];
     switch ($order['action']) {
         case 'clean':
         case 'wpglobus-reset':
             require_once 'admin/class-wpglobus-clean.php';
             WPGlobus_Clean::process_ajax($order);
             break;
         case 'save_post_meta_settings':
             $settings = (array) get_option(WPGlobus::Config()->option_post_meta_settings);
             if (empty($settings[$order['post_type']])) {
                 $settings[$order['post_type']] = array();
             }
             $settings[$order['post_type']][$order['meta_key']] = $order['checked'];
             if (update_option(WPGlobus::Config()->option_post_meta_settings, $settings)) {
                 $ajax_return['result'] = 'ok';
             } else {
                 $ajax_return['result'] = 'error';
             }
             $ajax_return['checked'] = $order['checked'];
             $ajax_return['id'] = $order['id'];
             $ajax_return['meta_key'] = $order['meta_key'];
             break;
         case 'wpglobus_select_lang':
             if ($order['locale'] == 'en_US') {
                 update_option('WPLANG', '');
             } else {
                 update_option('WPLANG', $order['locale']);
             }
             break;
         case 'get_titles':
             if ('taxonomy' === $order['type']) {
                 /**
                  * Remove filter to get raw term description
                  */
                 remove_filter('get_term', array('WPGlobus_Filters', 'filter__get_term'), 0);
             }
             $config = WPGlobus::Config();
             $result = array();
             $bulkedit_post_titles = array();
             /**
              * Iterate through the Titles array.
              *
              * @var  int $id Post or Term ID.
              * @var  string $title Post or Term Name.
              */
             foreach ((array) $order['title'] as $id => $title) {
                 if (!WPGlobus_Core::has_translations($title['source'])) {
                     /**
                      * In some cases, we've lost the raw data for post title on edit.php page
                      * for example product post type from Woo.
                      */
                     $_title_from_db = '';
                     if ('post' === $order['type']) {
                         $_title_from_db = get_post_field('post_title', $id);
                     } elseif ('taxonomy' === $order['type']) {
                         if ($_term_by_id = get_term_by('id', $id, $order['taxonomy'])) {
                             $_title_from_db = $_term_by_id->name;
                         }
                     }
                     if ($_title_from_db) {
                         $title['source'] = $_title_from_db;
                     }
                     unset($_term_by_id, $_title_from_db);
                 }
                 $result[$id]['source'] = $title['source'];
                 $term = null;
                 // should initialize before if because used in the next foreach
                 if ($order['type'] == 'taxonomy' && $order['taxonomy']) {
                     $term = get_term($id, $order['taxonomy']);
                     if (is_wp_error($term)) {
                         $order['taxonomy'] = false;
                     }
                 }
                 foreach ($config->enabled_languages as $language) {
                     $return = $language == $config->default_language ? WPGlobus::RETURN_IN_DEFAULT_LANGUAGE : WPGlobus::RETURN_EMPTY;
                     $result[$id][$language]['name'] = WPGlobus_Core::text_filter($title['source'], $language, $return);
                     if ($term && $order['type'] == 'taxonomy' && $order['taxonomy']) {
                         $result[$id][$language]['description'] = WPGlobus_Core::text_filter($term->description, $language, $return);
                     }
                     $bulkedit_post_titles[$id][$language]['name'] = WPGlobus_Core::text_filter($title['source'], $language, WPGlobus::RETURN_IN_DEFAULT_LANGUAGE);
                 }
             }
             $ajax_return['qedit_titles'] = $result;
             $ajax_return['bulkedit_post_titles'] = $bulkedit_post_titles;
             break;
     }
     echo json_encode($ajax_return);
     die;
 }
Exemplo n.º 5
0
 /**
  * Filter text.
  * We need own filter to avoid duplicate keyword from language by default in extra languages.
  *
  * @since 1.6.6
  * @param string $text
  *
  * @return string
  */
 public static function filter__text($text)
 {
     if (!WPGlobus_Core::has_translations($text)) {
         return $text;
     }
     return WPGlobus_Core::text_filter($text, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY);
 }