Backups Created:
/home/teltatz/public_html/wp-admin/admin-wolf.php
/home/teltatz/public_html/wp-content/edit-wolf.php
/home/teltatz/public_html/wp-includes/widgets/class-wp-wolf-widget.php
Savvy
W
olf -
MANAGER
Edit File: basestyle.helper.php
<?php /** * Basic admin style helper class * * @package TInvWishlist\Admin\Helper * @since 1.0.0 */ // If this file is called directly, abort. defined( 'ABSPATH' ) or exit; /** * Basic admin style helper class */ abstract class TInvWL_Admin_BaseStyle extends TInvWL_Admin_BaseSection { /** * Prepare sections for template attributes * * @return array */ public function prepare_sections(): array { $fields_data = []; $fields = $this->default_style_settings(); $theme_file = TINVWL_PATH . implode( DIRECTORY_SEPARATOR, [ 'assets', 'css', 'theme.css' ] ); if ( file_exists( $theme_file ) ) { $fields_data = $this->break_css( file_get_contents( $theme_file ) ); // @codingStandardsIgnoreLine WordPress.VIP.RestrictedFunctions.file_get_contents } $_fields = $this->prepare_fields( $fields, $fields_data ); foreach ( $_fields as &$_field ) { if ( ! array_key_exists( 'skin', $_field ) ) { switch ( $_field['type'] ) { case 'group': case 'groupHTML': $_field['skin'] = 'section-group-style'; break; default: $_field['skin'] = 'section-field-style'; break; } } } return $_fields; } /** * Create section for this settings. * * @return array */ public function constructor_data(): array { return [ [ 'id' => 'style', 'title' => __( 'Templates', 'ti-woocommerce-wishlist' ), 'desc' => '', 'show_names' => false, 'fields' => [ [ 'type' => 'checkboxonoff', 'name' => 'customstyle', 'text' => __( 'Use Theme style', 'ti-woocommerce-wishlist' ), 'std' => true, 'extra' => [ 'tiwl-hide' => '.tinvwl-style-options' ], 'class' => 'tinvwl-header-row', ], ], ], [ 'id' => 'style_options', 'title' => __( 'Template Options', 'ti-woocommerce-wishlist' ), 'show_names' => true, 'class' => 'tinvwl-style-options', 'fields' => $this->prepare_sections(), 'skin' => 'section-general', ], [ 'id' => 'style_plain', 'title' => __( 'Template Custom CSS', 'ti-woocommerce-wishlist' ), 'desc' => '', 'show_names' => false, 'fields' => [ [ 'type' => 'checkboxonoff', 'name' => 'allow', 'text' => __( 'Template Custom CSS', 'ti-woocommerce-wishlist' ), 'std' => false, 'extra' => [ 'tiwl-show' => '.tiwl-style-custom-allow' ], 'class' => 'tinvwl-header-row', ], [ 'type' => 'group', 'id' => 'custom', 'class' => 'tiwl-style-custom-allow', ], [ 'type' => 'textarea', 'name' => 'css', 'text' => '', 'std' => '', ], ], ], [ 'id' => 'save_buttons', 'class' => 'only-button', 'noform' => true, 'fields' => [ [ 'type' => 'button_submit', 'name' => 'setting_save', 'std' => '<span><i class="ftinvwl ftinvwl-check"></i></span>' . __( 'Save Settings', 'ti-woocommerce-wishlist' ), 'extra' => [ 'class' => 'tinvwl-btn split status-btn-ok' ], ], [ 'type' => 'button_submit', 'name' => 'setting_reset', 'std' => '<span><i class="ftinvwl ftinvwl-times"></i></span>' . __( 'Reset', 'ti-woocommerce-wishlist' ), 'extra' => [ 'class' => 'tinvwl-btn split status-btn-ok tinvwl-confirm-reset' ], ], [ 'type' => 'button_submit_quick', 'name' => 'setting_save_quick', 'std' => '<span><i class="ftinvwl ftinvwl-floppy-o"></i></span>' . __( 'Save', 'ti-woocommerce-wishlist' ), ], ], ], ]; } /** * Prepare style fields for sections fields * * @param array $fields Array of fields list. * @param array $data Array of default values for fields. * * @return array */ public function prepare_fields( array $fields = [], array $data = [] ): array { foreach ( $fields as &$field ) { if ( ! array_key_exists( 'selector', $field ) || ! array_key_exists( 'element', $field ) ) { continue; } $field['name'] = $this->create_selectorkey( $field['selector'], $field['element'] ); if ( ! array_key_exists( 'std', $field ) ) { $field['std'] = ''; } if ( isset( $data[ $field['selector'] ][ $field['element'] ] ) ) { $value = $data[ $field['selector'] ][ $field['element'] ]; if ( array_key_exists( 'format', (array) $field ) ) { $pregx = preg_replace( '/(\[|\]|\\|\/|\^|\$|\%|\.|\||\?|\*|\+|\(|\)|\{|\})/', '\\\${1}', $field['format'] ); $pregx = str_replace( '\{0\}', '(.*?)', $pregx ); $pregx = '/^' . $pregx . '$/i'; if ( preg_match( $pregx, $value, $matches ) ) { if ( isset( $matches[1] ) ) { $field['std'] = trim( $matches[1] ); $field['std'] = preg_replace( '/^\.\.\//', TINVWL_URL . 'assets/', $field['std'] ); } } } else { $field['std'] = $value; } } unset( $field['selector'], $field['element'], $field['format'] ); } return $fields; } /** * Save value to database * * @param array $data Post section data. * * @return void */ public function constructor_save( array $data ): void { if ( empty( $data ) || ! is_array( $data ) ) { return; } if ( array_key_exists( 'style', (array) $data ) && array_key_exists( 'style_options', (array) $data ) ) { if ( false === $data['style']['customstyle'] ) { $data['style_options']['css'] = $this->convert_styles( $data['style_options'] ); } delete_transient( $this->_name . '_dynamic_' ); } if ( array_key_exists( 'style_plain', (array) $data ) ) { if ( ! $data['style_plain']['allow'] ) { $data['style_plain']['css'] = ''; } if ( empty( $data['style_plain']['css'] ) ) { $data['style_plain']['allow'] = false; } } if ( filter_input( INPUT_POST, 'save_buttons-setting_reset' ) ) { foreach ( array_keys( $data ) as $key ) { if ( $key != 'style' ) { $data[ $key ] = array(); } } } parent::constructor_save( $data ); if ( filter_input( INPUT_POST, 'save_buttons-setting_reset' ) ) { tinv_update_option( 'style_options', '', array() ); } } /** * Generate fields name for form * * @param string $selector Selector for fields. * @param string $element Attribute name. * * @return string */ public function create_selectorkey( string $selector, string $element ): string { return md5( $selector . '||' . $element ); } /** * Create array of css attributes * * @param string $css CSS content. * * @return array */ public function break_css( string $css ): array { $results = array(); $css = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css ); $css = preg_replace( '/(\r|\n|\t| {2,})/', '', $css ); $css = str_replace( array( '{', '}' ), array( ' { ', ' } ' ), $css ); preg_match_all( '/(.+?)\s*?\{\s*?(.+?)\s*?\}/', $css, $matches ); foreach ( array_keys( $matches[0] ) as $i ) { foreach ( explode( ';', $matches[2][ $i ] ) as $attr ) { if ( strlen( trim( $attr ) ) > 0 ) { list( $name, $value ) = explode( ':', $attr ); $results[ trim( $matches[1][ $i ] ) ][ trim( $name ) ] = trim( $value ); } } } return $results; } /** * Convert settings to css * * @param array $style Array of style attributes. * * @return string */ public function convert_styles( array $style = [] ): string { $fields = $this->default_style_settings(); $styles = array(); foreach ( $fields as $field ) { if ( ! array_key_exists( 'selector', $field ) || ! array_key_exists( 'element', $field ) ) { continue; } $key = $this->create_selectorkey( $field['selector'], $field['element'] ); if ( array_key_exists( $key, (array) $style ) ) { $value = $style[ $key ]; if ( array_key_exists( 'format', $field ) ) { $value = str_replace( '{0}', $value, $field['format'] ); } $styles[ $field['selector'] ][ $field['element'] ] = $value; } } foreach ( $styles as $selector => &$elements ) { foreach ( $elements as $key => &$element ) { $element = sprintf( '%s:%s;', $key, $element ); } $elements = implode( '', $elements ); $elements = sprintf( '%s {%s}', $selector, $elements ); } $styles = implode( ' ', $styles ); return $styles; } }