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; }
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); } } } } }