function tl_rescan_p()
 {
     global $wpdb, $sitepress_settings;
     set_time_limit(0);
     if (preg_replace('#M$#', '', ini_get('memory_limit')) < 128) {
         ini_set('memory_limit', '128M');
     }
     $plugins = array();
     if (!empty($_POST['plugin'])) {
         foreach ($_POST['plugin'] as $plugin) {
             $plugins[] = array('file' => $plugin, 'mu' => 0);
             // regular plugins
         }
     }
     if (!empty($_POST['mu-plugin'])) {
         foreach ($_POST['mu-plugin'] as $plugin) {
             $plugins[] = array('file' => $plugin, 'mu' => 1);
             //mu plugins
         }
     }
     $scan_stats = '';
     foreach ($plugins as $p) {
         $plugin = $p['file'];
         if (false !== strpos($plugin, '/') && !$p['mu']) {
             $plugin = dirname($plugin);
         }
         if ($p['mu']) {
             $plugin_path = WPMU_PLUGIN_DIR . '/' . $plugin;
         } else {
             $plugin_path = WP_PLUGIN_DIR . '/' . $plugin;
         }
         $scan_stats .= icl_st_scan_plugin_files($plugin_path);
         if ($_POST['icl_load_mo'] && !$p['mu']) {
             $mo_files = icl_st_get_mo_files($plugin_path);
             foreach ($mo_files as $m) {
                 $i = preg_match('#[-]([a-z_]+)\\.mo$#i', $m, $matches);
                 if ($i && ($lang = $wpdb->get_var("SELECT code FROM {$wpdb->prefix}icl_locale_map WHERE locale='" . $matches[1] . "'"))) {
                     $tr_pairs = icl_st_load_translations_from_mo($m);
                     foreach ($tr_pairs as $original => $translation) {
                         $string_id = icl_get_string_id($original, 'plugin ' . basename($plugin_path));
                         if (!$wpdb->get_var("SELECT id FROM {$wpdb->prefix}icl_string_translations WHERE string_id={$string_id} AND language='{$lang}'")) {
                             icl_add_string_translation($string_id, $lang, $translation, ICL_STRING_TRANSLATION_COMPLETE);
                         }
                     }
                 }
             }
         }
     }
     echo '1|' . $scan_stats;
     exit;
 }
Esempio n. 2
0
function icl_st_scan_plugin_files($plugin, $recursion = 0)
{
    require_once ICL_PLUGIN_PATH . '/inc/potx.php';
    static $recursion, $scanned_files = array();
    static $scan_stats = false;
    global $icl_scan_plugin_found_domains, $icl_st_p_scan_plugin_id, $sitepress, $sitepress_settings;
    if (!$recursion) {
        $icl_st_p_scan_plugin_id = str_replace(WP_PLUGIN_DIR . '/', '', $plugin);
        $icl_st_p_scan_plugin_id = str_replace(WPMU_PLUGIN_DIR . '/', '', $icl_st_p_scan_plugin_id);
    }
    if (is_file($plugin) && !$recursion) {
        // case of one-file plugins
        $scan_stats = sprintf(__('Scanning file: %s', 'wpml-string-translation'), $plugin) . PHP_EOL;
        _potx_process_file($plugin, 0, '__icl_st_scan_plugin_files_store_results', '_potx_save_version', POTX_API_7);
        $scanned_files[] = $plugin;
    } else {
        $dh = opendir($plugin);
        while (false !== ($file = readdir($dh))) {
            if (0 === strpos($file, '.')) {
                continue;
            }
            if (is_dir($plugin . "/" . $file)) {
                $recursion++;
                $scan_stats .= str_repeat("\t", $recursion - 1) . sprintf(__('Opening folder: %s', 'wpml-string-translation'), "/" . $file) . PHP_EOL;
                icl_st_scan_plugin_files($plugin . "/" . $file, $recursion);
                $recursion--;
            } elseif (preg_match('#(\\.php|\\.inc)$#i', $file)) {
                $scan_stats .= str_repeat("\t", $recursion) . sprintf(__('Scanning file: %s', 'wpml-string-translation'), "/" . $file) . PHP_EOL;
                $scanned_files[] = "/" . $file;
                _potx_process_file($plugin . "/" . $file, 0, '__icl_st_scan_plugin_files_store_results', '_potx_save_version', POTX_API_7);
            } else {
                $scan_stats .= str_repeat("\t", $recursion) . sprintf(__('Skipping file: %s', 'wpml-string-translation'), "/" . $file) . PHP_EOL;
            }
        }
    }
    if (!$recursion) {
        global $__icl_registered_strings;
        if (is_null($__icl_registered_strings)) {
            $__icl_registered_strings = array();
        }
        $scan_stats .= __('Done scanning files', 'wpml-string-translation') . PHP_EOL;
        /*
        if(is_array($icl_scan_plugin_found_domains)){
            $existing_domains = $sitepress_settings['st']['plugins_localization_domains'];
            if(is_array($existing_domains)){
                $sitepress_settings['st']['plugins_localization_domains'] = array_unique(array_merge(array_keys($icl_scan_plugin_found_domains), $existing_domains));
            }else{
                $sitepress_settings['st']['plugins_localization_domains'] = array_keys($icl_scan_plugin_found_domains);
            }
            $sitepress->save_settings($sitepress_settings);
        }
        */
        unset($icl_st_p_scan_plugin_id);
        $scan_stats = '<textarea style="width:100%;height:150px;font-size:10px;">' . $scan_stats . "\n" . count($scanned_files) . ' scanned files' . "\n";
        if (count($__icl_registered_strings)) {
            $scan_stats .= sprintf(__('WPML found %s strings. They were added to the string translation table.', 'wpml-string-translation'), count($__icl_registered_strings)) . "\n";
        } else {
            $scan_stats .= __('No strings found.', 'wpml-string-translation') . "\n";
        }
        $scan_stats .= '</textarea>';
        $scan_stats_ret = $scan_stats;
        $scan_stats = false;
        return $scan_stats_ret;
    }
}
 foreach ((array) $_POST['mu-plugin'] as $plugin) {
     $plugins[] = array('file' => $plugin, 'mu' => 1);
     //mu plugins
 }
 $scan_stats = '';
 foreach ($plugins as $p) {
     $plugin = $p['file'];
     if (false !== strpos($plugin, '/') && !$p['mu']) {
         $plugin = dirname($plugin);
     }
     if ($p['mu']) {
         $plugin_path = WPMU_PLUGIN_DIR . '/' . $plugin;
     } else {
         $plugin_path = WP_PLUGIN_DIR . '/' . $plugin;
     }
     $scan_stats .= icl_st_scan_plugin_files($plugin_path);
     if ($_POST['icl_load_mo'] && !$p['mu']) {
         $mo_files = icl_st_get_mo_files($plugin_path);
         foreach ($mo_files as $m) {
             $i = preg_match('#[-]([a-z_]+)\\.mo$#i', $m, $matches);
             if ($i && ($lang = $wpdb->get_var("SELECT code FROM {$wpdb->prefix}icl_locale_map WHERE locale='" . $matches[1] . "'"))) {
                 $tr_pairs = icl_st_load_translations_from_mo($m);
                 foreach ($tr_pairs as $original => $translation) {
                     $string_id = icl_get_string_id($original, 'plugin ' . basename($plugin_path));
                     if (!$wpdb->get_var["SELECT id FROM {$wpdb->prefix}icl_string_translations WHERE string_id={$string_id} AND language='{$lang}'"]) {
                         icl_add_string_translation($string_id, $lang, $translation, ICL_STRING_TRANSLATION_COMPLETE);
                     }
                 }
             }
         }
     }