language_manager = $language_manager; $this->menu_manager = $menu_manager; $this->workflow_settings = $workflow_settings; $this->settings = $settings; $this->post_type_support = $post_type_support; $this->taxonomy_support = $taxonomy_support; $this->term_translations = $term_translations; } /** * Returns allowlisted settings tabs. * * @return array */ public static function tab_keys() { return array( 'general', 'url', 'content', 'sync', 'switcher', 'seo', 'advanced' ); } /** Renders the settings screen. */ public function render() { if ( ! current_user_can( AdminModule::capability() ) ) { wp_die( esc_html__( 'You are not allowed to manage ShapeTranslate settings.', 'shapetranslate' ), '', array( 'response' => 403 ) ); } $tab = $this->current_tab(); ?>

render_notice(); ?> render_tabs( $tab ); ?>
render_tab( $tab ); ?>
render_transfer_tools(); ?>
{$method}(); } } /** Renders default and enabled language controls. */ private function render_general() { $languages = $this->language_manager->get_languages(); $default = $this->language_manager->get_default_id(); ?>

settings->get_section( 'url' ); $mode = isset( $url['mode'] ) ? (string) $url['mode'] : LanguageHostResolver::MODE_DIRECTORY; ?>

settings->get_section( 'content' ); $post_types = $this->post_type_support->get_available_post_types(); $taxonomies = $this->taxonomy_support->get_available_taxonomies(); ?>

workflow_settings->get(); $items = SyncCatalog::items_with_labels(); ?>

settings->get_section( 'switcher' ); $floater = $this->settings->get_floater_settings(); $languages = $this->language_manager->get_languages(); $menus = wp_get_nav_menus(); $locations = get_registered_nav_menus(); $assignment = $this->menu_manager->get_location_assignments(); ?>

render_floating_switcher( $floater ); ?> render_switcher_usage( $switcher ); ?>

render_menu_languages( $menus, $languages ); ?>

render_location_matrix( $locations, $languages, $menus, $assignment ); ?> $floater Saved floating switcher settings. * @return void */ private function render_floating_switcher( array $floater ) { $positions = array( 'middle-right' => __( 'Middle right', 'shapetranslate' ), 'middle-left' => __( 'Middle left', 'shapetranslate' ), 'bottom-right' => __( 'Bottom right', 'shapetranslate' ), 'bottom-left' => __( 'Bottom left', 'shapetranslate' ), 'top-right' => __( 'Top right', 'shapetranslate' ), 'top-left' => __( 'Top left', 'shapetranslate' ), ); ?>

$switcher Saved switcher settings. * @return void */ private function render_switcher_usage( array $switcher ) { $values = array( 'display' => isset( $switcher['display'] ) ? (string) $switcher['display'] : 'native_name', 'layout' => isset( $switcher['layout'] ) ? (string) $switcher['layout'] : 'horizontal', 'unavailable_behavior' => isset( $switcher['unavailable_behavior'] ) ? (string) $switcher['unavailable_behavior'] : 'hide', 'show_flags' => empty( $switcher['show_flags'] ) ? 'false' : 'true', 'hide_current' => empty( $switcher['hide_current'] ) ? 'false' : 'true', 'hide_missing' => empty( $switcher['hide_missing'] ) ? 'false' : 'true', 'show_disabled' => empty( $switcher['show_disabled'] ) ? 'false' : 'true', ); $shortcode = '[shapetranslate_switcher'; foreach ( $values as $option => $value ) { $shortcode .= ' ' . $option . '="' . $value . '"'; } $shortcode .= ']'; ?>

settings->get_section( 'seo' ); ?>

settings->get_section( 'advanced' ); ?>

$selected Selected keys. * @param array $available Available keys. * @param bool $post_types Whether these are post types. */ private function render_object_policy( $name, $mode, $selected, $available, $post_types ) { ?>
$content Content settings. */ private function render_default_terms( $content ) { $taxonomies = $this->taxonomy_support->get_default_term_taxonomies(); $languages = $this->language_manager->get_languages(); $map = isset( $content['default_terms'] ) && is_array( $content['default_terms'] ) ? $content['default_terms'] : array(); if ( empty( $taxonomies ) || empty( $languages ) ) { ?>

labels->name : $taxonomy; $grouped = $this->terms_by_language( $taxonomy ); ?>
> */ private function terms_by_language( $taxonomy ) { $terms = get_terms( array( 'taxonomy' => $taxonomy, 'hide_empty' => false, 'orderby' => 'name', 'number' => self::TERM_CHOICE_LIMIT, ) ); if ( is_wp_error( $terms ) || empty( $terms ) ) { return array(); } $this->term_translations->prime_terms( wp_list_pluck( $terms, 'term_taxonomy_id' ) ); $grouped = array(); foreach ( $terms as $term ) { $language_id = $this->term_translations->get_term_language_id( $term->term_id, $taxonomy ); if ( '' !== $language_id ) { $grouped[ $language_id ][] = $term; } } return $grouped; } /** Renders export and import forms. */ private function render_transfer_tools() { ?>

__( 'Import these settings and replace the current portable configuration?', 'shapetranslate' ) ) ); ?>
$menus Navigation menus. * @param array> $languages Languages. */ private function render_menu_languages( $menus, $languages ) { ?> menu_manager->get_menu_language_id( $menu->term_id ); $aria_label = sprintf( /* translators: %s: navigation menu name. */ __( 'Language for %s', 'shapetranslate' ), $menu->name ); ?>
name ); ?>
$locations Theme locations. * @param array> $languages Languages. * @param array $menus Navigation menus. * @param array> $assignments Existing assignments. */ private function render_location_matrix( $locations, $languages, $menus, $assignments ) { $columns = count( $languages ) + 1; ?>
$label ) : ?>
__( 'General', 'shapetranslate' ), 'url' => __( 'URL', 'shapetranslate' ), 'content' => __( 'Content', 'shapetranslate' ), 'sync' => __( 'Synchronization', 'shapetranslate' ), 'switcher' => __( 'Switcher', 'shapetranslate' ), 'seo' => __( 'SEO', 'shapetranslate' ), 'advanced' => __( 'Advanced', 'shapetranslate' ), ); ?> array( 'success', __( 'ShapeTranslate settings saved.', 'shapetranslate' ) ), 'url_settings_changed' => array( 'warning', __( 'URL behavior changed. Review public links and clear page or CDN caches.', 'shapetranslate' ) ), 'settings_imported' => array( 'success', __( 'ShapeTranslate settings imported.', 'shapetranslate' ) ), 'settings_imported_url_changed' => array( 'warning', __( 'Settings imported and URL behavior changed. Review public links and clear caches.', 'shapetranslate' ) ), ); if ( in_array( $notice, array( 'settings_error', 'import_error' ), true ) ) { $key = 'shapetranslate_settings_error_' . get_current_user_id(); $message = get_transient( $key ); delete_transient( $key ); $notices[ $notice ] = array( 'error', is_string( $message ) ? $message : __( 'ShapeTranslate could not save these settings.', 'shapetranslate' ) ); } if ( ! isset( $notices[ $notice ] ) ) { return; } printf( '

%2$s

', esc_attr( $notices[ $notice ][0] ), esc_html( $notices[ $notice ][1] ) ); } }