Files
torebki-fabiola.pl/wp-content/plugins/wp-scss/options.php
2026-03-05 13:07:40 +01:00

317 lines
11 KiB
PHP

<?php
use ScssPhp\ScssPhp\OutputStyle;
class Wp_Scss_Settings {
/**
* Holds the values to be used in the fields callbacks
*/
private $options;
/**
* Start up
*/
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_plugin_page' ) );
add_action( 'admin_init', array( $this, 'page_init' ) );
}
/**
* Add options page
*/
public function add_plugin_page() {
// This page will be under "Settings"
add_options_page(
'Settings Admin',
'WP-SCSS',
'manage_options',
'wpscss_options',
array( $this, 'create_admin_page' )
);
}
/**
* Options page callback
*/
public function create_admin_page() {
// Set class property
$this->options = get_option( 'wpscss_options' );
?>
<div class="wrap">
<h2>WP-SCSS Settings</h2>
<p>
<span class="version">Version <em><?php echo wp_kses(get_option('wpscss_version'), array()); ?></em>
<br/>
<span class="author">By: <a href="http://connectthink.com" target="_blank">Connect Think</a></span>
<br/>
<span class="repo">Help & Issues: <a href="https://github.com/ConnectThink/WP-SCSS" target="_blank">Github</a></span>
</p>
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields( 'wpscss_options_group' );
do_settings_sections( 'wpscss_options' );
submit_button();
?>
</form>
</div>
<?php
}
/**
* Register and add settings
*/
public function page_init() {
register_setting(
'wpscss_options_group', // Option group
'wpscss_options', // Option name
array( $this, 'sanitize' ) // Sanitize
);
// Paths to Directories
add_settings_section(
'wpscss_paths_section', // ID
'Configure Paths', // Title
array( $this, 'print_paths_info' ), // Callback
'wpscss_options' // Page
);
$base_folder_options = array(
'Uploads Directory' => 'Uploads Directory',
'WP-SCSS Plugin' => 'WP-SCSS Plugin'
);
if(get_stylesheet_directory() === get_template_directory()){
$base_folder_options['Current Theme'] = 'Current Theme';
}else{
$base_folder_options['Parent Theme'] = 'Parent Theme';
$base_folder_options['Child Theme'] = 'Child Theme';
}
add_settings_field(
'wpscss_base_folder', // ID
'Base Location', // Title
array( $this, 'input_select_callback' ), // Callback
'wpscss_options', // Page
'wpscss_paths_section', // Section
array( // args
'name' => 'base_compiling_folder',
'type' => apply_filters( 'wp_scss_base_compiling_modes',
$base_folder_options
)
)
);
// #TODO see if this is ever warrented
// add_settings_field(
// 'Use Absolute Path', // ID
// 'Use Absolute Path', // Title
// array( $this, 'input_checkbox_callback' ), // Callback
// 'wpscss_options', // Page
// 'wpscss_paths_section', // Section
// array( // args
// 'name' => 'use_absolute_paths'
// )
// );
add_settings_field(
'wpscss_scss_dir', // ID
'SCSS Location', // Title
array( $this, 'input_text_callback' ), // Callback
'wpscss_options', // Page
'wpscss_paths_section', // Section
array( // args
'name' => 'scss_dir',
)
);
add_settings_field(
'wpscss_css_dir', // ID
'CSS Location', // Title
array( $this, 'input_text_callback' ), // Callback
'wpscss_options', // Page
'wpscss_paths_section', // Section
array( // args
'name' => 'css_dir',
)
);
// Compiling Options
add_settings_section(
'wpscss_compile_section', // ID
'Compiling Options', // Title
array( $this, 'print_compile_info' ), // Callback
'wpscss_options' // Page
);
add_settings_field(
'Compiling Mode', // ID
'Compiling Mode', // Title
array( $this, 'input_select_callback' ), // Callback
'wpscss_options', // Page
'wpscss_compile_section', // Section
array( // args
'name' => 'compiling_options',
'type' => apply_filters( 'wp_scss_compiling_modes',
array(
OutputStyle::COMPRESSED => ucfirst(OutputStyle::COMPRESSED),
OutputStyle::EXPANDED => ucfirst(OutputStyle::EXPANDED),
)
)
)
);
add_settings_field(
'Source Map Mode', // ID
'Source Map Mode', // Title
array( $this, 'input_select_callback' ), // Callback
'wpscss_options', // Page
'wpscss_compile_section', // Section
array( // args
'name' => 'sourcemap_options',
'type' => apply_filters( 'wp_scss_sourcemap_modes',
array(
'SOURCE_MAP_NONE' => 'None',
'SOURCE_MAP_INLINE' => 'Inline',
'SOURCE_MAP_FILE' => 'File'
)
)
)
);
add_settings_field(
'Error Display', // ID
'Error Display', // Title
array( $this, 'input_select_callback' ), // Callback
'wpscss_options', // Page
'wpscss_compile_section', // Section
array( // args
'name' => 'errors',
'type' => apply_filters( 'wp_scss_error_diplay',
array(
'show' => 'Show in Header',
'show-logged-in' => 'Show to Logged In Users',
'hide' => 'Print to Log',
)
)
)
);
// Enqueuing Options
add_settings_section(
'wpscss_enqueue_section', // ID
'Enqueuing Options', // Title
array( $this, 'print_enqueue_info' ), // Callback
'wpscss_options' // Page
);
add_settings_field(
'Enqueue Stylesheets', // ID
'Enqueue Stylesheets', // Title
array( $this, 'input_checkbox_callback' ), // Callback
'wpscss_options', // Page
'wpscss_enqueue_section', // Section
array( // args
'name' => 'enqueue'
)
);
// Development options
add_settings_section(
'wpscss_development_section', // ID
'Development Settings', // Title
'', // Callback
'wpscss_options' // Page
);
add_settings_field(
'wpscss_scss_always_recompile', // ID
'Always Recompile', // Title
array( $this, 'input_checkbox_callback' ), // Callback
'wpscss_options', // Page
'wpscss_development_section', // Section
array( // args
'name' => 'always_recompile',
)
);
}
/**
* Sanitize each setting field as needed
*
* @param array $input Contains all settings fields as array keys
*/
public function sanitize( $input ) {
foreach( ['scss_dir', 'css_dir'] as $dir ){
if( !empty( $input[$dir] ) ) {
$input[$dir] = sanitize_text_field( $input[$dir] );
// Add a trailing slash if not already present
if(substr($input[$dir], -1) != '/'){
$input[$dir] .= '/';
}
}
}
return $input;
}
/**
* Print the Section text
*/
public function print_paths_info() {
print 'Location of your SCSS/CSS folders. Folders must be nested under your <b>Base Location</b> and start with <code>/</code>.' .
'</br>Examples: <code>/custom-scss/</code> and <code>/custom-css/</code>' .
'</br><b>Caution</b> updating some themes or plugins will delete the custom WP-SCSS Base Location when nested.';
}
public function print_compile_info() {
print 'Choose how you would like SCSS and source maps to be compiled and how you would like the plugin to handle errors';
}
public function print_enqueue_info() {
print 'WP-SCSS can enqueue your css stylesheets in the header automatically.';
}
/**
* Text Fields' Callback
*/
public function input_text_callback( $args ) {
printf(
'<input type="text" id="%s" name="wpscss_options[%s]" value="%s" />',
esc_attr( $args['name'] ), esc_attr( $args['name'] ), esc_attr( isset($this->options[$args['name']]) ? $this->options[$args['name']] : '' )
);
}
/**
* Select Boxes' Callbacks
*/
public function input_select_callback( $args ) {
$this->options = get_option( 'wpscss_options' );
$html = sprintf( '<select id="%s" name="wpscss_options[%s]">', esc_attr( $args['name'] ), esc_attr( $args['name'] ) );
foreach( $args['type'] as $value => $title ) {
$html .= '<option value="' . esc_attr( $value ) . '"' . selected( isset($this->options[esc_attr( $args['name'] )]) ? $this->options[esc_attr( $args['name'] )] : '', esc_attr( $value ), false) . '>' . esc_attr( $title ) . '</option>';
}
$html .= '</select>';
echo wp_kses($html, array( 'select' => array('id' => array(), 'name' => array()), 'option' => array('value' => array(), 'selected' => array())));
}
/**
* Checkboxes' Callbacks
*/
public function input_checkbox_callback( $args ) {
$this->options = get_option( 'wpscss_options' );
$html = "";
$option_name = esc_attr( $args['name']);
if($option_name == 'always_recompile' && defined('WP_SCSS_ALWAYS_RECOMPILE') && WP_SCSS_ALWAYS_RECOMPILE){
$html .= '<input type="checkbox" id="' . $option_name . '" name="wpscss_options[' . $option_name . ']" value="1"' . checked( 1, isset( $this->options[$option_name] ) ? $this->options[$option_name] : 1, false ) . ' disabled=disabled/>';
$html .= '<label for="' . $option_name . '">Currently overwritten by constant <code>WP_SCSS_ALWAYS_RECOMPILE</code></label>';
}else{
$html .= '<input type="checkbox" id="' . $option_name . '" name="wpscss_options[' . $option_name . ']" value="1"' . checked( 1, isset( $this->options[$option_name] ) ? $this->options[$option_name] : 0, false ) . '/>';
$html .= '<label for="' . $option_name . '"></label>';
}
echo wp_kses($html, array('input' => array('type' => array(), 'id' => array(), 'name' => array(), 'value' => array(), 'checked' => array(), 'disabled' => array()), 'label' => array('for' => array()) ));
}
}