/** * filters i18n configurations for the current page */ function qtranxf_parse_page_config($config, $url_path, $url_query) { global $q_config; //$q_config['i18n-log-dir'] = WP_CONTENT_DIR.'/i18n-config'; //qtranxf_dbg if (isset($q_config['i18n-log-dir'])) { if (!file_exists($q_config['i18n-log-dir'])) { if (!mkdir($q_config['i18n-log-dir'])) { unset($q_config['i18n-log-dir']); } } if (isset($q_config['i18n-log-dir'])) { qtranxf_write_config_log($config, 'all-pages'); } } //qtranxf_dbg_log('qtranxf_parse_page_config: $url_path: "'.$url_path.'"; $url_query: "'.$url_query.'"'); //qtranxf_dbg_log('qtranxf_parse_page_config: $config: ', $config); $page_configs = array(); foreach ($config as $pgkey => $pgcfg) { $d = isset($pgcfg['preg_delimiter']) ? $pgcfg['preg_delimiter'] : '!'; $matched = qtranxf_match_page($pgcfg, $url_path, $url_query, $d); //qtranxf_dbg_log('qtranxf_parse_page_config: $pgcfg: ', $pgcfg); //qtranxf_dbg_log('qtranxf_parse_page_config: $matched: ', $matched); if ($matched === false) { continue; } $post_type_key = ''; if (isset($pgcfg['post_type'])) { if (is_string($pgcfg['post_type'])) { $post_type_key = $d . $pgcfg['post_type'] . $d; unset($pgcfg['post_type']); } else { $post_type_key = serialize($pgcfg['post_type']); foreach ($pgcfg['post_type'] as $k => $item) { $pgcfg['post_type'][$k] = $d . $item . $d; } } } if (!isset($page_configs[$post_type_key])) { $page_configs[$post_type_key] = array(); } $page_config =& $page_configs[$post_type_key]; foreach ($pgcfg as $key => $cfg) { if (empty($cfg)) { continue; } if ($key === 'anchors') { //Anchor elements are defined by id only. //Merge unique id values only: foreach ($cfg as $k => $anchor) { $id = qtranxf_standardize_config_anchor($anchor); if (is_null($id)) { continue; } if (!is_string($id)) { $id = $k; } if (!isset($page_config['anchors'])) { $page_config['anchors'] = array(); } $page_config['anchors'][$id] = $anchor; } } else { if ($key === 'forms') { if (!isset($page_config['forms'])) { $page_config['forms'] = array(); } foreach ($cfg as $form_id => $pgcfg_form) { if (!isset($pgcfg_form['fields'])) { continue; } // convert obsolete format for 'fields' foreach ($pgcfg_form['fields'] as $k => $f) { if (!isset($f['id'])) { continue; } $id = $f['id']; unset($f['id']); $pgcfg_form['fields'][$id] = $f; if ($id !== $k) { unset($pgcfg_form['fields'][$k]); } } //figure out obsolete id of form/collection if (is_string($form_id)) { $id = $form_id; } else { if (isset($pgcfg_form['form']['id'])) { $id = $pgcfg_form['form']['id']; unset($pgcfg_form['form']['id']); if (empty($pgcfg_form['form'])) { unset($pgcfg_form['form']); } } else { $id = ''; } } if (!isset($page_config['forms'][$id])) { $page_config['forms'][$id] = $pgcfg_form; } else { $page_config['forms'][$id] = qtranxf_merge_config($page_config['forms'][$id], $pgcfg_form); } } } else { if (!isset($page_config[$key])) { $page_config[$key] = $cfg; } else { $page_config[$key] = qtranxf_merge_config($page_config[$key], $cfg); } } } } } //qtranxf_dbg_log('qtranxf_parse_page_config: $page_configs: ', $page_configs); foreach ($page_configs as $post_type_key => &$page_config) { if (!empty($post_type_key)) { //qtranxf_dbg_log('qtranxf_parse_page_config: $post_type_key="'.$post_type_key.'"; page_config: ', $page_config); if (!empty($page_config)) { //clean up 'fields' if (!empty($page_config['forms'])) { foreach ($page_config['forms'] as $form_id => $frm) { if (!isset($frm['fields'])) { continue; } foreach ($frm['fields'] as $k => $f) { if (qtranxf_set_field_jquery($f)) { $page_config['forms'][$form_id]['fields'][$k] = $f; } } } } foreach ($page_config as $k => $cfg) { if (empty($cfg)) { unset($page_config[$k]); } } } } if (empty($page_config)) { unset($page_configs[$post_type_key]); } } if (isset($q_config['i18n-log-dir'])) { qtranxf_write_config_log($page_configs, 'by-post-type', $url_path, $url_query); } return $page_configs; }
/** * @since 3.4 */ function qtranxf_load_config_all($json_files, $custom_config) { global $q_config; $nerr = isset($q_config['url_info']['errors']) ? count($q_config['url_info']['errors']) : 0; $cfg = qtranxf_load_config_files($json_files); $cfg = qtranxf_merge_config($cfg, $custom_config); $cfg = qtranxf_standardize_i18n_config($cfg); // store the errors permanently until an admin fixes them, // otherwise admin may not realise that not all configurations are loaded. if (!empty($q_config['url_info']['errors']) && $nerr != count($q_config['url_info']['errors'])) { //new errors occurred $errs = array_slice($q_config['url_info']['errors'], $nerr); update_option('qtranslate_config_errors', $errs); } else { delete_option('qtranslate_config_errors'); } return $cfg; }
function qtranxf_get_admin_page_config_post_type($post_type) { global $q_config, $pagenow; static $page_config; //cache if (!is_null($page_config)) { //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: cached: '.$pagenow.'; post_type: ', $post_type); return $page_config; } if ($q_config['editor_mode'] == QTX_EDITOR_MODE_RAW) { //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: QTX_EDITOR_MODE_RAW: '.$pagenow.'; post_type: ', $post_type); $page_config = array(); return $page_config; } if (!empty($q_config['post_type_excluded'])) { switch ($pagenow) { case 'post.php': case 'post-new.php': if (in_array($post_type, $q_config['post_type_excluded'])) { //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: post_type_excluded: pagenow: '.$pagenow.'; post_type: ', $post_type); $page_config = array(); return $page_config; } default: break; } } //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: pagenow: '.$pagenow.'; post_type: ', $post_type); $page_configs = qtranxf_get_admin_page_config(); //$page_configs = apply_filters('i18n_admin_config_post_type', $page_configs, $post_type); //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: $page_configs: ', $page_configs); $page_config = isset($page_configs['']) ? $page_configs[''] : array(); if ($post_type) { foreach ($page_configs as $k => $cfg) { if (empty($k)) { continue; } if (isset($cfg['post_type'])) { $cfg_post_type = $cfg['post_type']; unset($cfg['post_type']); } else { $cfg_post_type = $k; } $matched = qtranxf_match_post_type($cfg_post_type, $post_type); //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: $cfg: ', $cfg); //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: $matched: ', $matched); if ($matched === false) { continue; } if (is_null($matched)) { $page_config = array(); break; } $page_config = qtranxf_merge_config($page_config, $cfg); } } //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: $page_config: ', $page_config); unset($page_config['filters']); if (!empty($page_config)) { //clean up empty items if (!empty($page_config['forms'])) { foreach ($page_config['forms'] as $form_id => &$frm) { if (!isset($frm['fields'])) { continue; } foreach ($frm['fields'] as $k => $f) { if (isset($f['encode']) && $f['encode'] == 'none') { //unset($page_config['forms'][$form_id]['fields'][$k]); unset($frm['fields'][$k]); } if ($post_type && !empty($f['post-type-excluded']) && preg_match('/' . $f['post-type-excluded'] . '/', $post_type)) { unset($frm['fields'][$k]); } } foreach ($frm as $k => $token) { if (empty($token)) { unset($frm[$k]); } } if (empty($frm)) { unset($page_config['forms'][$form_id]); } } } foreach ($page_config as $k => $cfg) { if (empty($cfg)) { unset($page_config[$k]); } } } if (!empty($page_config)) { $page_config['js'] = array(); if (isset($page_config['js-conf'])) { foreach ($page_config['js-conf'] as $k => $js) { if (!isset($js['handle'])) { $js['handle'] = $k; } $page_config['js'][] = $js; } unset($page_config['js-conf']); } $page_config['js'][] = array('handle' => 'qtranslate-admin-common', 'src' => './admin/js/common.min.js'); if (isset($page_config['js-exec'])) { foreach ($page_config['js-exec'] as $k => $js) { if (!isset($js['handle'])) { $js['handle'] = $k; } $page_config['js'][] = $js; } unset($page_config['js-exec']); } //make src to be relative to WP_CONTENT_DIR //$bnm = 'plugins/'.qtranxf_plugin_dirname(); $bnm = qtranxf_plugin_dirname_from_wp_content(); $content_dir = trailingslashit(WP_CONTENT_DIR); foreach ($page_config['js'] as $k => $js) { if (!isset($js['src'])) { continue; } $src = $js['src']; if ($src[0] == '.' && ($src[1] == '/' || $src[1] == DIRECTORY_SEPARATOR)) { $page_config['js'][$k]['src'] = $bnm . substr($src, 1); } else { if (file_exists($content_dir . $src)) { continue; } //from WP_CONTENT_DIR as expected $fp = dirname($bnm) . '/' . $src; //from 'plugins' folder if (file_exists($content_dir . $fp)) { $page_config['js'][$k]['src'] = $fp; continue; } $fp = $bnm . '/' . $src; //from this plugin folder if (file_exists($content_dir . $fp)) { $page_config['js'][$k]['src'] = $fp; continue; } if (file_exists($src)) { //absolute path was given if (qtranxf_startsWith($src, $content_dir)) { $fp = substr($src, strlen($content_dir)); $page_config['js'][$k]['src'] = $fp; continue; } } unset($page_config['js'][$k]); qtranxf_error_log(sprintf(__('Could not find script file "%s" for handle "%s".', 'qtranslate'), $src, $js['handle'])); } } } /* * Customize the $page_config for this admin request. * @param (array) $page_config 'admin_config', filtered for the current page. * @param (string) $pagenow value of WordPress global variable $pagenow. * @param (string) $url_query query part of URL without '?', sanitized version of $_SERVER['QUERY_STRING']. * @param (string) $post_type type of post serving on the current page, or null if not applicable. */ //$page_config = apply_filters('i18n_admin_page_config', $page_config, $pagenow, $url_query, $post_type); //qtranxf_dbg_log('qtranxf_get_admin_page_config_post_type: $pagenow='.$pagenow.'; $url_query='.$q_config['url_info']['query'].'; $post_type='.$post_type.'; $page_config: ',qtranxf_json_encode($page_config)); qtranxf_write_config_log($page_config, '', $pagenow, '', $post_type); return $page_config; }