/**
     * to display the languages settings admin UI
     *
     * @since 0.9.0
     * @updated 0.9.6 - only for WP 2.7.X - do new meta boxes and JS
     *
     */
    function languages_settings()
    {
        $formtitle = __('Add a language', 'xili-language');
        /* translated in form */
        $submit_text = __('Add »', 'xili-language');
        $cancel_text = __('Cancel');
        $action = '';
        $actiontype = '';
        $language = (object) array('name' => '', 'slug' => '', 'description' => '', 'term_order' => '');
        //2.2.3
        $msg = 0;
        /* 1.7.1 */
        if (isset($_POST['reset'])) {
            $action = $_POST['reset'];
        } elseif (isset($_POST['updateoptions'])) {
            $action = 'updateoptions';
        } elseif (isset($_POST['updateundefined'])) {
            $action = 'updateundefined';
        } elseif (isset($_POST['menuadditems'])) {
            $action = 'menuadditems';
        } elseif (isset($_POST['sendmail'])) {
            //1.8.5
            $action = 'sendmail';
        } elseif (isset($_POST['uninstalloption'])) {
            //1.8.8
            $action = 'uninstalloption';
        } elseif (isset($_POST['action'])) {
            $action = $_POST['action'];
        }
        if (isset($_GET['action'])) {
            $action = $_GET['action'];
            $term_id = $_GET['term_id'];
        }
        $theme_name = get_option("current_theme");
        // full name
        switch ($action) {
            case 'uninstalloption':
                // 1.8.8 see Uninstall Options metabox in sidebar
                $this->xili_settings['delete_settings'] = $_POST['delete_settings'];
                update_option('xili_language_settings', $this->xili_settings);
                break;
            case 'add':
                check_admin_referer('xili-language-settings');
                $term = $_POST['language_name'];
                if ("" != $term) {
                    $slug = $_POST['language_nicename'];
                    $args = array('alias_of' => '', 'description' => $_POST['language_description'], 'parent' => 0, 'slug' => $slug);
                    $term_data = $this->safe_lang_term_creation($term, $args);
                    $doit = false;
                    if (!is_wp_error($term_data)) {
                        wp_set_object_terms($term_data['term_id'], 'the-langs-group', TAXOLANGSGROUP);
                        update_term_order($term_data['term_id'], $this->langs_group_tt_id, $_POST['language_order']);
                        $doit = true;
                    } else {
                        // error need insertion in group if existing term is ok
                        $doit = $this->safe_insert_in_language_group($term_data, $_POST['language_order']);
                    }
                    if ($doit) {
                        $this->xili_settings['langs_list_status'] = "added";
                        // 1.6.0
                        $lang_ids = $this->get_lang_ids();
                        //$this->available_langs = $lang_ids ;
                        $this->xili_settings['available_langs'] = $lang_ids;
                        $this->xili_settings['lang_features'][$slug]['hidden'] = isset($_POST['language_hidden']) ? $_POST['language_hidden'] : "";
                        $this->xili_settings['lang_features'][$slug]['charset'] = isset($_POST['language_charset']) ? $_POST['language_charset'] : "";
                        $this->xili_settings['lang_features'][$slug]['alias'] = isset($_POST['language_alias']) ? $_POST['language_alias'] : "";
                        // 2.8.2
                        $this->xili_settings['theme_alias_cache'][$theme_name][$slug] = isset($_POST['language_alias']) ? $_POST['language_alias'] : "";
                        update_option('xili_language_settings', $this->xili_settings);
                        $this->get_lang_slug_ids('edited');
                        // flush - 2.9.21
                        $actiontype = "add";
                        $msg = 5;
                    } else {
                        $msg = 10;
                    }
                } else {
                    $msg = 10;
                }
                break;
            case 'edit':
                // check id
                if (isset($_GET['term_id']) && wp_verify_nonce($_REQUEST['_wpnonce'], 'edit-' . $_GET['term_id'])) {
                    $actiontype = "edited";
                    $language = get_term_and_order($term_id, $this->langs_group_tt_id, TAXONAME);
                    $submit_text = __('Update »', 'xili-language');
                    $formtitle = __('Edit language', 'xili-language');
                    $msg = 3;
                } else {
                    wp_die(__('Security check', 'xili-language'));
                }
                break;
            case 'edited':
                check_admin_referer('xili-language-settings');
                $actiontype = "add";
                $term_id = $_POST['language_term_id'];
                $term = $_POST['language_name'];
                // 2.4
                $slug = $_POST['language_nicename'];
                $args = array('name' => $term, 'alias_of' => '', 'description' => $_POST['language_description'], 'parent' => 0, 'slug' => $slug);
                $theids = wp_update_term($term_id, TAXONAME, $args);
                if (!is_wp_error($theids)) {
                    wp_set_object_terms($theids['term_id'], 'the-langs-group', TAXOLANGSGROUP);
                    update_term_order($theids['term_id'], $this->langs_group_tt_id, $_POST['language_order']);
                    $this->xili_settings['langs_list_status'] = "edited";
                    // 1.6.0
                    $this->xili_settings['lang_features'][$slug]['hidden'] = isset($_POST['language_hidden']) ? $_POST['language_hidden'] : "";
                    $this->xili_settings['lang_features'][$slug]['charset'] = $_POST['language_charset'];
                    $this->xili_settings['lang_features'][$slug]['alias'] = isset($_POST['language_alias']) ? $_POST['language_alias'] : "";
                    // 2.8.2
                    $this->xili_settings['theme_alias_cache'][$theme_name][$slug] = isset($_POST['language_alias']) ? $_POST['language_alias'] : "";
                    update_option('xili_language_settings', $this->xili_settings);
                    $this->get_lang_slug_ids('edited');
                    $msg = 4;
                } else {
                    $msg = 8;
                }
                break;
            case 'delete':
                // check id
                if (isset($_GET['term_id']) && wp_verify_nonce($_REQUEST['_wpnonce'], 'delete-' . $_GET['term_id'])) {
                    $actiontype = "deleting";
                    $submit_text = __('Delete »', 'xili-language');
                    $formtitle = __('Delete language ?', 'xili-language');
                    $language = get_term_and_order($term_id, $this->langs_group_tt_id, TAXONAME);
                    $msg = 1;
                } else {
                    wp_die(__('Security check', 'xili-language'));
                }
                break;
            case 'deleting':
                check_admin_referer('xili-language-settings');
                $actiontype = "add";
                $term_id = $_POST['language_term_id'];
                $slug = $_POST['language_nicename'];
                if (isset($_POST['multilingual_links_erase']) && $_POST['multilingual_links_erase'] == 'erase') {
                    $this->multilingual_links_erase($term_id);
                    // as in uninstall.php - 1.8.8
                }
                wp_delete_object_term_relationships($term_id, TAXOLANGSGROUP);
                // degrouping
                wp_delete_term($term_id, TAXONAME);
                $this->xili_settings['langs_list_status'] = "deleted";
                // 1.6.0
                $lang_ids = $this->get_lang_ids();
                //$this->available_langs = $lang_ids ;
                $this->xili_settings['available_langs'] = $lang_ids;
                unset($this->xili_settings['lang_features'][$slug]);
                update_option('xili_language_settings', $this->xili_settings);
                $msg = 2;
                break;
            case 'reset':
                $actiontype = "add";
                break;
            default:
                $actiontype = "add";
        }
        /* register the main boxes always available */
        add_meta_box('xili-language-lang-list', __('List of languages', 'xili-language'), array(&$this, 'on_box_lang_list_content'), $this->thehook, 'normal', 'high');
        add_meta_box('xili-language-lang-form', __('Language', 'xili-language'), array(&$this, 'on_box_lang_form_content'), $this->thehook, 'normal', 'high');
        $themessages[1] = __('A language to delete.', 'xili-language');
        $themessages[2] = __('A language was deleted.', 'xili-language');
        $themessages[3] = __('Language to update.', 'xili-language');
        $themessages[4] = __('A language was updated.', 'xili-language');
        $themessages[5] = __('A new language was added.', 'xili-language');
        $themessages[8] = __('Error when updating.', 'xili-language');
        $themessages[10] = __('Error when adding.', 'xili-language');
        /* form datas in array for do_meta_boxes() */
        $language_features = isset($this->xili_settings['lang_features'][$language->slug]) && '' != $language->slug ? $this->xili_settings['lang_features'][$language->slug] : array('charset' => "", 'hidden' => "");
        $data = array('action' => $action, 'formtitle' => $formtitle, 'language' => $language, 'submit_text' => $submit_text, 'cancel_text' => $cancel_text, 'language_features' => $language_features);
        ?>

		<div id="xili-language-settings" class="wrap columns-2 minwidth" >
			<?php 
        screen_icon('options-general');
        ?>
			<h2><?php 
        _e('Languages', 'xili-language');
        ?>
</h2>
			<h3 class="nav-tab-wrapper">
			<?php 
        $this->set_tabs_line();
        ?>
			</h3>

			<?php 
        if (0 != $msg) {
            ?>
			<div id="message" class="updated fade"><p><?php 
            echo $themessages[$msg];
            ?>
</p></div>
			<?php 
        }
        ?>
			<form name="add" id="add" method="post" action="options-general.php?page=language_page">
				<input type="hidden" name="action" value="<?php 
        echo $actiontype;
        ?>
" />
				<?php 
        wp_nonce_field('xili-language-settings');
        ?>
				<?php 
        wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false);
        ?>
				<?php 
        wp_nonce_field('meta-box-order', 'meta-box-order-nonce', false);
        $this->setting_form_content($this->thehook, $data);
        ?>
		</form>
		</div>
		<?php 
        $this->setting_form_js($this->thehook);
    }
Example #2
0
 /**
  * Safe language term insertion in group following error due to existing term
  *
  * @since 2.12.2
  */
 function safe_insert_in_language_group($term_data, $language_order = 0)
 {
     if ($id_exists = $term_data->error_data['term_exists']) {
         // id of existing term
         $term_id = term_exists($id_exists, TAXOLANGSGROUP);
         if (is_array($term_id)) {
             // yet in group because array
             return false;
         } else {
             wp_set_object_terms($id_exists, 'the-langs-group', TAXOLANGSGROUP);
             if ($language_order) {
                 update_term_order($id_exists, $this->langs_group_tt_id, $language_order);
             }
             return true;
         }
     }
     return false;
 }