Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/translation-feedback/views/wpml-tf-backend-options-view.php
2023-09-12 21:41:04 +02:00

293 lines
8.8 KiB
PHP

<?php
/**
* Class WPML_TF_Backend_Options_View
*
* @author OnTheGoSystems
*/
class WPML_TF_Backend_Options_View {
const TEMPLATE_FOLDER = '/templates/translation-feedback/backend/';
const TEMPLATE = 'options-ui.twig';
const MAX_EXPIRATION_QUANTITY = 10;
/** @var IWPML_Template_Service $template_service */
private $template_service;
/** @var WPML_TF_Settings $settings */
private $settings;
/** @var SitePress $sitepress */
private $sitepress;
/**
* WPML_TF_Frontend_Hooks constructor.
*
* @param IWPML_Template_Service $template_service
* @param WPML_TF_Settings $settings
* @param SitePress $sitepress
*/
public function __construct(
IWPML_Template_Service $template_service,
WPML_TF_Settings $settings,
SitePress $sitepress
) {
$this->template_service = $template_service;
$this->settings = $settings;
$this->sitepress = $sitepress;
}
/**
* @return string
*/
public function render() {
$model = array(
'strings' => self::get_strings(),
'action' => WPML_TF_Backend_Options_AJAX_Hooks_Factory::AJAX_ACTION,
'nonce' => wp_create_nonce( WPML_TF_Backend_Options_AJAX_Hooks_Factory::AJAX_ACTION ),
'module_toggle' => $this->get_module_toggle(),
'button_modes' => $this->get_button_modes(),
'icon_styles' => $this->get_icon_styles(),
'languages_to' => $this->get_languages_to(),
'display_modes' => $this->get_display_modes(),
'expiration_modes' => $this->get_expiration_modes(),
'expiration_quantities' => $this->get_expiration_quantities(),
'expiration_units' => $this->get_expiration_units(),
);
return $this->template_service->show( $model, self::TEMPLATE );
}
/**
* @return array
*/
public static function get_strings() {
return array(
'section_title' => __( 'Translation Feedback', 'sitepress' ),
'button_mode_section_title' => __( 'Translation Feedback button on front-end:', 'sitepress' ),
'icon_style_section_title' => __( 'Icon style:', 'sitepress' ),
'languages_to_section_title' => __( 'Show Translation Feedback module for these languages:', 'sitepress' ),
'expiration_section_title' => __( 'Expiration date for Translation Feedback module:', 'sitepress' ),
);
}
/**
* @return array
*/
private function get_module_toggle() {
return array(
'value' => 1,
'label' => __( 'Enable Translation Feedback module', 'sitepress' ),
'selected' => $this->settings->is_enabled(),
);
}
/**
* @return array
*/
private function get_button_modes() {
$modes = array(
WPML_TF_Settings::BUTTON_MODE_LEFT => array(
'value' => WPML_TF_Settings::BUTTON_MODE_LEFT,
'label' => __( 'Show on the left side of the screen', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::BUTTON_MODE_RIGHT => array(
'value' => WPML_TF_Settings::BUTTON_MODE_RIGHT,
'label' => __( 'Show on the right side of the screen', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::BUTTON_MODE_CUSTOM => array(
'value' => WPML_TF_Settings::BUTTON_MODE_CUSTOM,
'label' => __( 'I will add it manually (%1$sinstructions%2$s)', 'sitepress' ),
'link' => 'https://wpml.org/wpml-hook/wpml_tf_feedback_open_link/?utm_source=plugin&utm_medium=gui&utm_campaign=wpmlcore',
'selected' => false,
),
WPML_TF_Settings::BUTTON_MODE_DISABLED => array(
'value' => WPML_TF_Settings::BUTTON_MODE_DISABLED,
'label' => __( 'Do not show it', 'sitepress' ),
'selected' => false,
),
);
if ( isset( $modes[ $this->settings->get_button_mode() ] ) ) {
$modes[ $this->settings->get_button_mode() ]['selected'] = true;
}
return $modes;
}
private function get_icon_styles() {
$css_classes = WPML_TF_Frontend_Feedback_View::get_icon_css_classes();
$styles = array(
WPML_TF_Settings::ICON_STYLE_LEGACY => array(
'value' => WPML_TF_Settings::ICON_STYLE_LEGACY,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_LEGACY ],
'selected' => false,
),
WPML_TF_Settings::ICON_STYLE_STAR => array(
'value' => WPML_TF_Settings::ICON_STYLE_STAR,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_STAR ],
'selected' => false,
),
WPML_TF_Settings::ICON_STYLE_THUMBSUP => array(
'value' => WPML_TF_Settings::ICON_STYLE_THUMBSUP,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_THUMBSUP ],
'selected' => false,
),
WPML_TF_Settings::ICON_STYLE_BULLHORN => array(
'value' => WPML_TF_Settings::ICON_STYLE_BULLHORN,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_BULLHORN ],
'selected' => false,
),
WPML_TF_Settings::ICON_STYLE_COMMENT => array(
'value' => WPML_TF_Settings::ICON_STYLE_COMMENT,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_COMMENT ],
'selected' => false,
),
WPML_TF_Settings::ICON_STYLE_QUOTE => array(
'value' => WPML_TF_Settings::ICON_STYLE_QUOTE,
'image_class' => $css_classes[ WPML_TF_Settings::ICON_STYLE_QUOTE ],
'selected' => false,
),
);
if ( isset( $styles[ $this->settings->get_icon_style() ] ) ) {
$styles[ $this->settings->get_icon_style() ]['selected'] = true;
}
return $styles;
}
/**
* @return array
*/
private function get_languages_to() {
$languages_to = array();
$active_languages = $this->sitepress->get_active_languages();
$allowed_languages = $this->settings->get_languages_to();
if ( null === $allowed_languages ) {
$allowed_languages = array_keys( $active_languages );
}
foreach ( $active_languages as $code => $language ) {
$languages_to[ $code ] = array(
'value' => $code,
'label' => $language['display_name'],
'flag_url' => $this->sitepress->get_flag_url( $code ),
'selected' => false,
);
if ( in_array( $code, $allowed_languages ) ) {
$languages_to[ $code ]['selected'] = true;
}
}
return $languages_to;
}
/**
* @return array
*/
private function get_display_modes() {
$modes = array(
WPML_TF_Settings::DISPLAY_CUSTOM => array(
'value' => WPML_TF_Settings::DISPLAY_CUSTOM,
'label' => esc_html__( 'Ask for feedback about translated content that was %1$s in the last %2$s %3$s', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::DISPLAY_ALWAYS => array(
'value' => WPML_TF_Settings::DISPLAY_ALWAYS,
'label' => __( 'Always ask for feedback (no time limit for feedback)', 'sitepress' ),
'selected' => false,
),
);
if ( isset( $modes[ $this->settings->get_display_mode() ] ) ) {
$modes[ $this->settings->get_display_mode() ]['selected'] = true;
}
return $modes;
}
/**
* @return array
*/
private function get_expiration_modes() {
$modes = array(
WPML_TF_Settings::EXPIRATION_ON_PUBLISH_OR_UPDATE => array(
'value' => WPML_TF_Settings::EXPIRATION_ON_PUBLISH_OR_UPDATE,
'label' => __( 'published or updated', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::EXPIRATION_ON_PUBLISH_ONLY => array(
'value' => WPML_TF_Settings::EXPIRATION_ON_PUBLISH_ONLY,
'label' => __( 'published', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::EXPIRATION_ON_UPDATE_ONLY => array(
'value' => WPML_TF_Settings::EXPIRATION_ON_UPDATE_ONLY,
'label' => __( 'updated', 'sitepress' ),
'selected' => false,
),
);
if ( isset( $modes[ $this->settings->get_expiration_mode() ] ) ) {
$modes[ $this->settings->get_expiration_mode() ]['selected'] = true;
}
return $modes;
}
/**
* @return array
*/
private function get_expiration_quantities() {
$quantities = array();
for ( $i = 1; $i < self::MAX_EXPIRATION_QUANTITY + 1; $i++ ) {
$quantities[ $i ] = array(
'value' => $i,
'selected' => false,
);
}
if ( isset( $quantities[ $this->settings->get_expiration_delay_quantity() ] ) ) {
$quantities[ $this->settings->get_expiration_delay_quantity() ]['selected'] = true;
}
return $quantities;
}
/**
* @return array
*/
private function get_expiration_units() {
$units = array(
WPML_TF_Settings::DELAY_DAY => array(
'value' => WPML_TF_Settings::DELAY_DAY,
'label' => __( 'day(s)', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::DELAY_WEEK => array(
'value' => WPML_TF_Settings::DELAY_WEEK,
'label' => __( 'week(s)', 'sitepress' ),
'selected' => false,
),
WPML_TF_Settings::DELAY_MONTH => array(
'value' => WPML_TF_Settings::DELAY_MONTH,
'label' => __( 'month(s)', 'sitepress' ),
'selected' => false,
),
);
if ( isset( $units[ $this->settings->get_expiration_delay_unit() ] ) ) {
$units[ $this->settings->get_expiration_delay_unit() ]['selected'] = true;
}
return $units;
}
}