function qtranxf_slug_update_translations($name, &$qfields, $default_lang)
{
    global $wpdb;
    //$name = $qfields[$default_lang];
    unset($qfields['qtranslate-original-value']);
    unset($qfields[$default_lang]);
    //use $post->post_name instead since it may have been adjusted by WP
    if (qtranxf_slug_translate_name($default_lang, $name)) {
        qtranxf_slug_del_translation($default_lang, $name);
    }
    foreach ($qfields as $lang => $slug) {
        $slug = sanitize_title($slug);
        //qtranxf_dbg_log('qtranxf_slug_update_translations: origin $slug: ', $slug);
        $slug = qtranxf_slug_unique($slug, $lang, $name);
        //qtranxf_dbg_log('qtranxf_slug_update_translations: unique $slug: ',$slug);
        $sql = null;
        if (qtranxf_slug_translate_name($lang, $name)) {
            if ($name != $slug) {
                $sql = 'UPDATE ' . $wpdb->prefix . 'i18n_slugs SET slug = %s WHERE lang = %s AND name = %s';
            } else {
                $sql = 'DELETE FROM ' . $wpdb->prefix . 'i18n_slugs WHERE slug = %s AND lang = %s AND name = %s';
            }
        } else {
            if ($name != $slug) {
                $sql = 'INSERT INTO ' . $wpdb->prefix . 'i18n_slugs (slug, lang, name) VALUES (%s, %s, %s)';
            }
        }
        if ($sql) {
            $query = $wpdb->prepare($sql, $slug, $lang, $name);
            $wpdb->query($query);
        }
    }
}
Esempio n. 2
0
/**
 * @param (string) $name - urldecoded post name or other single slug (not a path with '/').
*/
function qtranxf_slug_update_translations($name, &$qfields, $default_lang)
{
    global $q_config, $wpdb;
    if (empty($name)) {
        return;
    }
    //qtranxf_dbg_log('qtranxf_slug_update_translations: $name="'.$name.'", $qfields: ', $qfields);
    if (isset($qfields['qtranslate-original-value'])) {
        if ($qfields['qtranslate-original-value'] != $name) {
            qtranxf_slug_del_translations(qtranxf_slug_encode($qfields['qtranslate-original-value']));
        }
        unset($qfields['qtranslate-original-value']);
    }
    unset($qfields[$default_lang]);
    //use $post->post_name instead since it may have been adjusted by WP
    $name = qtranxf_slug_encode($name);
    //qtranxf_dbg_log('qtranxf_slug_update_translations: encoded $name: ', $name);
    if (qtranxf_slug_translate_name($name, $default_lang)) {
        qtranxf_slug_del_translation($default_lang, $name);
    }
    //$translations = qtranxf_slug_get_translations($name);
    foreach ($qfields as $lang => $slug) {
        $translation = qtranxf_slug_translate_name($name, $lang);
        $slug = qtranxf_slug_encode($slug);
        //qtranxf_dbg_log('qtranxf_slug_update_translations: origin $slug: ', $slug);
        if ($name == $slug) {
            if ($translation) {
                qtranxf_slug_del_translation($lang, $name);
            }
            continue;
        }
        $slug = qtranxf_slug_unique($slug, $lang, $name);
        //qtranxf_dbg_log('qtranxf_slug_update_translations: unique $slug: ',$slug);
        if ($translation) {
            $sql = 'UPDATE ' . $wpdb->prefix . 'i18n_slugs SET slug = %s WHERE lang = %s AND name = %s';
        } else {
            $sql = 'INSERT INTO ' . $wpdb->prefix . 'i18n_slugs (slug, lang, name) VALUES (%s, %s, %s)';
        }
        $query = $wpdb->prepare($sql, $slug, $lang, $name);
        $wpdb->query($query);
        if (!isset($q_config['slugs-cache']['names'][$name])) {
            $q_config['slugs-cache']['names'][$name] = array();
        }
        $q_config['slugs-cache']['names'][$name][$lang] = $slug;
    }
    //cleanup in case a language was disabled
    $slugs = qtranxf_slug_get_translations($name);
    foreach ($slugs as $lang => $slug) {
        if (qtranxf_isEnabled($lang)) {
            continue;
        }
        qtranxf_slug_del_translation($lang, $name);
    }
}
function qtranxf_migrate_import_qtranslate_slug()
{
    global $q_config, $wpdb;
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: REQUEST_TIME_FLOAT: ', $_SERVER['REQUEST_TIME_FLOAT']);
    $nm = '<a href="https://wordpress.org/plugins/qtranslate-slug/" target="_blank"><span style="color:blue"><strong>QTranslate Slug</strong></span></a>';
    $wpdb->show_errors();
    @set_time_limit(0);
    $sql = 'SELECT post_name, meta_key, meta_value FROM ' . $wpdb->postmeta . ' as m INNER JOIN ' . $wpdb->posts . ' as p ON p.ID = m.post_id WHERE m.meta_key LIKE "_qts_slug___" AND m.meta_value IS NOT NULL';
    //$sql .= ' AND NOT EXISTS (SELECT * FROM '.$wpdb->prefix.'posts_i18n WHERE ID = post_id AND lang = MID(meta_key,11))';
    $sql .= ' AND NOT EXISTS (SELECT * FROM ' . $wpdb->prefix . 'i18n_slugs WHERE name = p.post_name AND lang = MID(m.meta_key,11))';
    $result = $wpdb->get_results($sql);
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $result: ', $result);
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: count($result): ', count($result));
    if (is_array($result)) {
        $default_language = $q_config['default_language'];
        //$sql = 'INSERT INTO '.$wpdb->prefix.'posts_i18n (ID, lang, slug) VALUES (%s, %s, %s)';
        $sql = 'INSERT INTO ' . $wpdb->prefix . 'i18n_slugs (slug, lang, name) VALUES (%s, %s, %s)';
        foreach ($result as $row) {
            $slug = $row->meta_value;
            $lang = substr($row->meta_key, -2);
            $name = $row->post_name;
            if ($lang == $default_language) {
                if ($slug != $name) {
                    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $slug('.$slug.') != $name('.$name.')');
                    //todo
                }
            } else {
                $slug = qtranxf_slug_unique($row->meta_value, $lang, $name);
                if ($slug != $row->meta_value) {
                    //todo report
                }
                //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $lang='.$lang.'; row: ', $row);
                //$query = $wpdb->prepare($sql, $row->post_id, $lang, $row->meta_value);
                $query = $wpdb->prepare($sql, $slug, $lang, $row->post_name);
                $wpdb->query($query);
            }
        }
        qtranxf_add_message(sprintf(__('Applicable options and slug data from plugin %s have been imported.', 'qtranslate'), $nm) . ' ' . sprintf(__('It might be a good idea to review %smigration instructions%s, if you have not yet done so.', 'qtranslate'), '<a href="https://qtranslatexteam.wordpress.com/migration/" target="_blank">', '</a>'));
    } else {
        qtranxf_error_log(sprintf(__('Failed to import data from plugin %s.', 'qtranslate'), $nm) . ' ' . sprintf(__('It might be a good idea to review %smigration instructions%s, if you have not yet done so.', 'qtranslate'), '<a href="https://qtranslatexteam.wordpress.com/migration/" target="_blank">', '</a>'));
    }
}
function qtranxf_migrate_import_qtranslate_slug($default_language)
{
    //$q_config is not yet available
    global $wpdb;
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: ');
    $nm = '<a href="https://wordpress.org/plugins/qtranslate-slug/" target="_blank"><span style="color:blue"><strong>QTranslate Slug</strong></span></a>';
    $wpdb->show_errors();
    @set_time_limit(0);
    $qts_options = get_option('qts_options');
    if (!empty($qts_options)) {
        //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $qts_options: ', $qts_options);
        if (is_array($qts_options)) {
            foreach ($qts_options as $k => $v) {
            }
        } else {
            qtranxf_error_log(sprintf(__('Failed to import options from plugin %s.', 'qtranslate'), $nm));
        }
    }
    $sql = 'SELECT ID, post_name, post_type, post_parent, meta_key, meta_value FROM ' . $wpdb->postmeta . ' as m INNER JOIN ' . $wpdb->posts . ' as p ON p.ID = m.post_id WHERE p.post_status = "publish" AND p.post_name != "" AND m.meta_key LIKE "_qts_slug___" AND m.meta_value IS NOT NULL';
    $sql .= ' AND NOT EXISTS (SELECT * FROM ' . $wpdb->prefix . 'i18n_slugs WHERE name = p.post_name AND lang = MID(m.meta_key,11))';
    $result = $wpdb->get_results($sql);
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $result: ', $result);
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: count($result): ', count($result));
    if (!is_array($result)) {
        qtranxf_error_log(sprintf(__('Failed to import data from plugin %s.', 'qtranslate'), $nm) . ' ' . sprintf(__('It might be a good idea to review %smigration instructions%s, if you have not yet done so.', 'qtranslate'), '<a href="https://qtranslatexteam.wordpress.com/migration/" target="_blank">', '</a>'));
        return;
    }
    foreach ($result as $row) {
        $name = $row->post_name;
        if (empty($name)) {
            continue;
        }
        $slug = $row->meta_value;
        if (empty($slug)) {
            continue;
        }
        $lang = substr($row->meta_key, -2);
        if ($lang != $default_language) {
            continue;
        }
        if ($slug == $name) {
            continue;
        }
        //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: default language $slug('.$slug.') != $name('.$name.')');
        $slug = wp_unique_post_slug($slug, $row->ID, 'publish', $row->post_type, $row->post_parent);
        $wpdb->query($wpdb->prepare('UPDATE ' . $wpdb->posts . ' SET post_name = %s WHERE ID = %d', $slug, $row->ID));
        $row->post_name = $row->meta_value = $slug;
    }
    $cnt = 0;
    $cnt_renamed = 0;
    $lst = '';
    $sql = 'INSERT INTO ' . $wpdb->prefix . 'i18n_slugs (slug, lang, name) VALUES (%s, %s, %s)';
    foreach ($result as $row) {
        $lang = substr($row->meta_key, -2);
        if ($lang == $default_language) {
            continue;
        }
        $name = $row->post_name;
        if (empty($name)) {
            continue;
        }
        $slug = $row->meta_value;
        if (empty($slug)) {
            continue;
        }
        if (!qtranxf_isEnabled($lang)) {
            continue;
        }
        $slug = qtranxf_slug_unique($row->meta_value, $lang, $name);
        if ($slug != $row->meta_value) {
            $lst .= $row->ID . '\\t' . $name . '\\t' . $lang . '\\t' . $row->meta_value . ' => ' . $slug . PHP_EOL;
            ++$cnt_renamed;
        }
        //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: $lang='.$lang.'; row: ', $row);
        $query = $wpdb->prepare($sql, $slug, $lang, $row->post_name);
        $wpdb->query($query);
        ++$cnt;
    }
    $msg = '';
    if ($cnt != 0) {
        $msg .= sprintf(__('Applicable options and slug data from plugin %s have been imported.', 'qtranslate'), $nm);
    }
    //if(!empty($lst))){
    $upload_dir = wp_upload_dir();
    //qtranxf_dbg_log('qtranxf_migrate_import_qtranslate_slug: upload_dir: ',$upload_dir);
    $fnm = '/qts-qtx-report-of-renamed.log';
    $fn = $upload_dir['basedir'] . $fnm;
    //[01-Nov-2015 02:21:57 UTC]
    error_log(date('[d-M-Y H:i:s T]') . ': Slugs renamed during import:' . PHP_EOL . "Post_ID\tpost_name\tLANG\tQtranslate Slug => qTranslate-X Slug" . PHP_EOL . $lst . PHP_EOL, 3, $fn);
    $url = $upload_dir['baseurl'] . $fnm;
    $msg .= ' ' . sprintf(__('A number of post slugs have had to be renamed in order to provide uniqueness. The report of renamed slugs is saved in the file "%s".', 'qtranslate'), '<a href="' . $url . ' target="_blank">' . $url . '</a>');
    //}
    if (!empty($msg)) {
        $msg .= ' ' . sprintf(__('It might be a good idea to review %smigration instructions%s, if you have not yet done so.', 'qtranslate'), '<a href="https://qtranslatexteam.wordpress.com/migration/" target="_blank">', '</a>');
        qtranxf_add_message($msg);
    }
}