148 lines
3.9 KiB
PHP
148 lines
3.9 KiB
PHP
<?php
|
|
namespace W3TC;
|
|
|
|
class Extension_CloudFlare_SettingsForUi {
|
|
static public function api() {
|
|
$c = Dispatcher::config();
|
|
$api = new Extension_CloudFlare_Api( array(
|
|
'email' => $c->get_string( array( 'cloudflare', 'email' ) ),
|
|
'key' => $c->get_string( array( 'cloudflare', 'key' ) ),
|
|
'zone_id' => $c->get_string( array( 'cloudflare', 'zone_id' ) ),
|
|
'timelimit_api_request' => $c->get_integer(
|
|
array( 'cloudflare', 'timelimit.api_request' ) )
|
|
)
|
|
);
|
|
|
|
return $api;
|
|
}
|
|
|
|
|
|
static public function settings_get( $api ) {
|
|
$settings = $api->zone_settings();
|
|
|
|
// adjust settings that are out of regular presentation
|
|
if ( isset( $settings['security_header'] ) ) {
|
|
$v = $settings['security_header']['value'];
|
|
|
|
$settings['security_header']['editable'] = false;
|
|
$settings['security_header']['value'] = 'off';
|
|
if ( isset( $v['strict_transport_security']['enabled'] ) ) {
|
|
$settings['security_header']['value'] =
|
|
$v['strict_transport_security']['enabled'] ?
|
|
'on' : 'off';
|
|
}
|
|
}
|
|
if ( isset( $settings['mobile_redirect'] ) ) {
|
|
$v = $settings['mobile_redirect']['value'];
|
|
|
|
$settings['mobile_redirect']['editable'] = false;
|
|
$settings['mobile_redirect']['value'] = 'off';
|
|
if ( isset( $v['status'] ) ) {
|
|
$settings['mobile_redirect']['value'] =
|
|
$v['status'] ? 'on' : 'off';
|
|
}
|
|
}
|
|
if ( isset( $settings['minify'] ) ) {
|
|
$v = $settings['minify']['value'];
|
|
|
|
$editable = $settings['minify']['editable'];
|
|
$settings['minify_js'] = array(
|
|
'editable' => $editable,
|
|
'value' => $v['js']
|
|
);
|
|
$settings['minify_css'] = array(
|
|
'editable' => $editable,
|
|
'value' => $v['css']
|
|
);
|
|
$settings['minify_html'] = array(
|
|
'editable' => $editable,
|
|
'value' => $v['html']
|
|
);
|
|
}
|
|
|
|
return $settings;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Updates settings passed by $_REQUEST
|
|
*/
|
|
static public function settings_set( $api ) {
|
|
$errors = array();
|
|
$settings = self::settings_get( $api );
|
|
$to_update = array();
|
|
|
|
$prefix = 'cloudflare_api_';
|
|
foreach ( $_REQUEST as $key => $value ) {
|
|
if ( substr( $key, 0, strlen( $prefix ) ) != $prefix )
|
|
continue;
|
|
if ( $value == '' )
|
|
continue;
|
|
|
|
$value = Util_Request::get_string( $key );
|
|
|
|
$settings_key = substr( $key, strlen( $prefix ) );
|
|
|
|
if ( !isset( $settings[$settings_key] ) ) {
|
|
$errors[] = 'Option ' . $settings_key . ' is not available';
|
|
continue;
|
|
}
|
|
|
|
$current_value = $settings[$settings_key]['value'];
|
|
|
|
// convert checkbox value to on/off
|
|
// exception: rocket loader, ssl is not checkbox so contains real value
|
|
if ( $settings_key != 'rocket_loader' && $settings_key != 'ssl' ) {
|
|
if ( $current_value == 'on' || $current_value == 'off' ) {
|
|
// it's boolean, so control is checkbox - convert it
|
|
$value = ( $value == '0' ? 'off' : 'on' );
|
|
}
|
|
}
|
|
|
|
if ( $current_value == $value )
|
|
continue; // no update required
|
|
|
|
if ( !$settings[$settings_key]['editable'] ) {
|
|
$errors[] = 'Option ' . $settings_key . ' is read-only';
|
|
continue;
|
|
}
|
|
|
|
$to_update[$settings_key] = $value;
|
|
}
|
|
|
|
// mutate settings back to the format of API
|
|
if ( isset( $to_update['minify_js'] ) ||
|
|
isset( $to_update['minify_css'] ) ||
|
|
isset( $to_update['minify_html'] ) ) {
|
|
$v = $settings['minify']['value'];
|
|
if ( isset( $to_update['minify_js'] ) ) {
|
|
$v['js'] = $to_update['minify_js'];
|
|
unset( $to_update['minify_js'] );
|
|
}
|
|
if ( isset( $to_update['minify_css'] ) ) {
|
|
$v['css'] = $to_update['minify_css'];
|
|
unset( $to_update['minify_css'] );
|
|
}
|
|
if ( isset( $to_update['minify_html'] ) ) {
|
|
$v['html'] = $to_update['minify_html'];
|
|
unset( $to_update['minify_html'] );
|
|
}
|
|
|
|
$to_update['minify'] = $v;
|
|
}
|
|
|
|
// do the settings update via API
|
|
foreach ( $to_update as $key => $value ) {
|
|
try {
|
|
$api->zone_setting_set( $key, $value );
|
|
} catch ( \Exception $ex ) {
|
|
$errors[] = 'Failed to update option ' . $key . ': ' .
|
|
$ex->getMessage();
|
|
}
|
|
}
|
|
|
|
return $errors;
|
|
}
|
|
}
|