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