PATH:
var
/
www
/
clients
/
client1
/
web1
/
web
/
wp-content
/
plugins
/
admin-site-enhancements
/
classes
<?php namespace ASENHA\Classes; use Exception; /** * Class with methods to manipulate wp-config.php * * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ class WP_Config_Transformer { /** * The wp-config.php source file * * @since 1.0.0 * @access private * @var string $version The current version of this plugin. */ private $wp_config_src; /** * The configs defined in wp-config.php * * @since 1.0.0 * @access private * @var string $version The current version of this plugin. */ private $wp_configs; /** * Get wp-config.php file path * * @since 1.0.0 */ public function wpconfig_file( $type = 'path' ) { // From wp-load.php if ( file_exists( ABSPATH . 'wp-config.php' ) ) { /** The config file resides in ABSPATH */ $file = ABSPATH . 'wp-config.php'; $location = 'WordPress root directory'; } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) { /** The config file resides one level above ABSPATH but is not part of another installation */ $file = dirname( ABSPATH ) . '/wp-config.php'; $location = 'parent directory of WordPress root'; } else { $file = 'Undetectable.'; $location = 'not in WordPress root or it\'s parent directory'; } if ( !is_writable( $file ) ) { $writeability = false; } else { $writeability = true; } if ( $type == 'path' ) { return $file; } elseif ( $type == 'location' ) { return $location; } elseif ( $type == 'writeability' ) { return $writeability; } elseif ( $type == 'status' ) { return '<div class="ase-wpconfig-status" style="display: none;">The wp-config.php file is located in ' . $location . ' ('. $file . ') and is ' . ( $writeability ) ? 'writeable' : 'not writeable' .'.</div>'; } } /** * Get configs in wp-config.php * * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function configs( $return_type = 'raw' ) { $src = file_get_contents( $this->wpconfig_file( 'path' ) ); $configs = array(); $configs['constant'] = array(); $configs['variable'] = array(); // Strip comments. foreach ( token_get_all( $src ) as $token ) { if ( in_array( $token[0], array( T_COMMENT, T_DOC_COMMENT ), true ) ) { $src = str_replace( $token[1], '', $src ); } } preg_match_all( '/(?<=^|;|<\?php\s|<\?\s)(\h*define\s*\(\s*[\'"](\w*?)[\'"]\s*)(,\s*(\'\'|""|\'.*?[^\\\\]\'|".*?[^\\\\]"|.*?)\s*)((?:,\s*(?:true|false)\s*)?\)\s*;)/ims', $src, $constants ); preg_match_all( '/(?<=^|;|<\?php\s|<\?\s)(\h*\$(\w+)\s*=)(\s*(\'\'|""|\'.*?[^\\\\]\'|".*?[^\\\\]"|.*?)\s*;)/ims', $src, $variables ); if ( ! empty( $constants[0] ) && ! empty( $constants[1] ) && ! empty( $constants[2] ) && ! empty( $constants[3] ) && ! empty( $constants[4] ) && ! empty( $constants[5] ) ) { foreach ( $constants[2] as $index => $name ) { $configs['constant'][ $name ] = array( 'src' => $constants[0][ $index ], 'value' => $constants[4][ $index ], 'parts' => array( $constants[1][ $index ], $constants[3][ $index ], $constants[5][ $index ], ), ); } } if ( ! empty( $variables[0] ) && ! empty( $variables[1] ) && ! empty( $variables[2] ) && ! empty( $variables[3] ) && ! empty( $variables[4] ) ) { // Remove duplicate(s), last definition wins. $variables[2] = array_reverse( array_unique( array_reverse( $variables[2], true ) ), true ); foreach ( $variables[2] as $index => $name ) { $configs['variable'][ $name ] = array( 'src' => $variables[0][ $index ], 'value' => $variables[4][ $index ], 'parts' => array( $variables[1][ $index ], $variables[3][ $index ], ), ); } } $this->wp_configs = $configs; if ( $return_type == 'raw' ) { return $configs; } elseif ( $return_type == 'print_r' ) { return '<pre>' . print_r( $configs, true ) . '</pre>'; } } /** * Checks if a config exists in the wp-config.php file. * * @throws Exception If the wp-config.php file is empty. * @throws Exception If the requested config type is invalid. * * @param string $type Config type (constant or variable). * @param string $name Config name. * * @return bool * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function exists( $type, $name ) { $wp_config_src = file_get_contents( $this->wpconfig_file( 'path' ) ); if ( ! trim( $wp_config_src ) ) { // throw new Exception( 'Config file is empty.' ); return false; // added in v7.5.4, if wp-config is empty, the $name is definitely not there. } // Normalize the newline to prevent an issue coming from OSX. $this->wp_config_src = str_replace( array( "\n\r", "\r" ), "\n", $wp_config_src ); $this->wp_configs = $this->configs( 'raw' ); if ( ! isset( $this->wp_configs[ $type ] ) ) { // throw new Exception( esc_html( "Config type '{$type}' does not exist." ) ); return false; // added in v7.5.4, if Config type '{$type}' does not exist, the $name is definitely not there. } return isset( $this->wp_configs[ $type ][ $name ] ); } /** * Get the value of a config in the wp-config.php file. * * @throws Exception If the wp-config.php file is empty. * @throws Exception If the requested config type is invalid. * * @param string $type Config type (constant or variable). * @param string $name Config name. * * @return array * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function get_value( $type, $name ) { $wp_config_src = file_get_contents( $this->wpconfig_file( 'path' ) ); if ( ! trim( $wp_config_src ) ) { throw new Exception( 'Config file is empty.' ); } $this->wp_config_src = $wp_config_src; $this->wp_configs = $this->configs( 'raw' ); if ( ! isset( $this->wp_configs[ $type ] ) ) { throw new Exception( esc_html( "Config type '{$type}' does not exist." ) ); } if ( isset( $this->wp_configs[ $type ][ $name ] ) ) { return $this->wp_configs[ $type ][ $name ]['value']; } else { return ''; } } /** * Adds a config to the wp-config.php file. * * @throws Exception If the config value provided is not a string. * @throws Exception If the config placement anchor could not be located. * * @param string $type Config type (constant or variable). * @param string $name Config name. * @param string $value Config value. * @param array $options (optional) Array of special behavior options. * * @return bool * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function add( $type, $name, $value, array $options = array() ) { if ( ! is_string( $value ) ) { throw new Exception( 'Config value must be a string.' ); } if ( $this->exists( $type, $name ) ) { return false; } if ( in_array( $value, array( 'true', 'false' ), true ) ) { $raw_input = true; } else { $raw_input = false; } $wp_config_src = file_get_contents( $this->wpconfig_file( 'path' ) ); if ( false !== strpos( $wp_config_src, "Happy publishing" ) ) { $anchor = "/* That's all, stop editing! Happy publishing. */"; } elseif ( false !== strpos( $wp_config_src, "Happy blogging" ) ) { $anchor = "/* That's all, stop editing! Happy blogging. */"; } elseif ( false !== strpos( $wp_config_src, "Absolute path to" ) ) { $anchor = "/** Absolute path to the WordPress directory. */"; } else { $anchor = '/* Add any custom values between this line and the "stop editing" line. */'; } $defaults = array( 'raw' => $raw_input, // Display value in raw format without quotes. 'anchor' => $anchor, // Config placement anchor string. 'separator' => PHP_EOL, // Separator between config definition and anchor string. 'placement' => 'before', // Config placement direction (insert before or after). ); // list( $raw, $anchor, $separator, $placement ) = array_values( $options ); list( $raw, $anchor, $separator, $placement ) = array_values( array_merge( $defaults, $options ) );; $raw = (bool) $raw; $anchor = (string) $anchor; $separator = (string) $separator; $placement = (string) $placement; if ( 'EOF' === $anchor ) { $contents = $this->wp_config_src . $this->normalize( $type, $name, $this->format_value( $value, $raw ) ); } else { if ( false === strpos( $this->wp_config_src, $anchor ) ) { throw new Exception( 'Unable to locate placement anchor.' ); } $new_src = $this->normalize( $type, $name, $this->format_value( $value, $raw ) ); $new_src = ( 'after' === $placement ) ? $anchor . $separator . $new_src : $new_src . $separator . $anchor; $contents = str_replace( $anchor, $new_src, $this->wp_config_src ); } return $this->save( $contents ); } /** * Updates an existing config in the wp-config.php file. * * @throws Exception If the config value provided is not a string. * * @param string $type Config type (constant or variable). * @param string $name Config name. * @param string $value Config value. * @param array $options (optional) Array of special behavior options. * * @return bool * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function update( $type, $name, $value, array $options = array() ) { if ( ! is_string( $value ) ) { throw new Exception( 'Config value must be a string.' ); } // $defaults = array( // 'add' => true, // Add the config if missing. // 'raw' => false, // Display value in raw format without quotes. // 'normalize' => false, // Normalize config output using WP Coding Standards. // ); // list( $add, $raw, $normalize ) = array_values( array_merge( $defaults, $options ) ); list( $add, $raw, $normalize ) = array_values( $options ); $add = (bool) $add; $raw = (bool) $raw; $normalize = (bool) $normalize; if ( ! $this->exists( $type, $name ) ) { return ( $add ) ? $this->add( $type, $name, $value ) : false; } $old_src = $this->wp_configs[ $type ][ $name ]['src']; $old_value = $this->wp_configs[ $type ][ $name ]['value']; $new_value = $this->format_value( $value, $raw ); if ( $normalize ) { $new_src = $this->normalize( $type, $name, $new_value ); } else { $new_parts = $this->wp_configs[ $type ][ $name ]['parts']; $new_parts[1] = str_replace( $old_value, $new_value, $new_parts[1] ); // Only edit the value part. $new_src = implode( '', $new_parts ); } $contents = preg_replace( sprintf( '/(?<=^|;|<\?php\s|<\?\s)(\s*?)%s/m', preg_quote( trim( $old_src ), '/' ) ), '$1' . str_replace( '$', '\$', trim( $new_src ) ), $this->wp_config_src ); return $this->save( $contents ); } /** * Removes a config from the wp-config.php file. * * @param string $type Config type (constant or variable). * @param string $name Config name. * * @return bool * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function remove( $type, $name ) { if ( ! $this->exists( $type, $name ) ) { return false; } $wp_config_src = file_get_contents( $this->wpconfig_file( 'path' ) ); $this->wp_config_src = str_replace( array( "\n\r", "\r" ), "\n", $wp_config_src ); $this->wp_configs = $this->configs( 'raw' ); $pattern = sprintf( '/(?<=^|;|<\?php\s|<\?\s)%s\s*(\S|$)/m', preg_quote( $this->wp_configs[$type][$name]['src'], '/' ) ); $contents = preg_replace( $pattern, '$1', $this->wp_config_src ); return $this->save( $contents ); } /** * Applies formatting to a config value. * * @throws Exception When a raw value is requested for an empty string. * * @param string $value Config value. * @param bool $raw Display value in raw format without quotes. * * @return mixed * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function format_value( $value, $raw ) { if ( $raw && '' === trim( $value ) ) { throw new Exception( 'Raw value for empty string not supported.' ); } return ( $raw ) ? $value : var_export( $value, true ); } /** * Normalizes the source output for a name/value pair. * * @throws Exception If the requested config type does not support normalization. * * @param string $type Config type (constant or variable). * @param string $name Config name. * @param mixed $value Config value. * * @return string * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function normalize( $type, $name, $value ) { if ( 'constant' === $type ) { $placeholder = "define( '%s', %s );"; } elseif ( 'variable' === $type ) { $placeholder = '$%s = %s;'; } else { throw new Exception( esc_html( "Unable to normalize config type '{$type}'." ) ); } return sprintf( $placeholder, $name, $value ); } /** * Saves new contents to the wp-config.php file. * * @throws Exception If the config file content provided is empty. * @throws Exception If there is a failure when saving the wp-config.php file. * * @param string $contents New config contents. * * @return bool * @since 1.0.0 * @link https://plugins.svn.wordpress.org/debug-log-config-tool/tags/1.1/src/Classes/vendor/WPConfigTransformer.php */ public function save( $contents ) { if ( ! trim( $contents ) ) { throw new Exception( 'Cannot save the config file with empty contents.' ); } if ( $contents === $this->wp_config_src ) { return false; } $result = file_put_contents( $this->wpconfig_file( 'path' ), $contents, LOCK_EX ); if ( false === $result ) { throw new Exception( 'Failed to update the config file.' ); } return true; } }
[-] class-hide-admin-bar.php
[edit]
[-] class-svg-upload.php
[edit]
[-] class-disable-gutenberg.php
[edit]
[-] class-cleanup-admin-bar.php
[edit]
[-] class-disable-rest-api.php
[edit]
[-] class-multiple-user-roles.php
[edit]
[-] class-disable-updates.php
[edit]
[-] class-image-upload-control.php
[edit]
[-] class-hide-admin-notices.php
[edit]
[-] class-content-duplication.php
[edit]
[-] class-insert-head-body-footer-code.php
[edit]
[-] class-media-replacement.php
[edit]
[-] class-password-protection.php
[edit]
[-] class-heartbeat-control.php
[edit]
[-] class-email-address-obfuscator.php
[edit]
[-] class-settings-sanitization.php
[edit]
[-] class-wp-config-transformer.php
[edit]
[-] class-content-order.php
[edit]
[-] class-custom-css.php
[edit]
[-] class-enhance-list-tables.php
[edit]
[-] class-login-logout-menu.php
[edit]
[-] class-search-engines-visibility.php
[edit]
[-] class-limit-login-attempts.php
[edit]
[-] class-disable-xml-rpc.php
[edit]
[-] class-common-methods.php
[edit]
[-] class-email-delivery.php
[edit]
[-] class-obfuscate-author-slugs.php
[edit]
[-] class-external-permalinks.php
[edit]
[-] class-wider-admin-menu.php
[edit]
[-] class-display-system-summary.php
[edit]
[-] class-admin-menu-organizer.php
[edit]
[-] class-redirect-fourofour.php
[edit]
[-] class-manage-robots-txt.php
[edit]
[-] class-site-identity-on-login-page.php
[edit]
[-] class-avif-upload.php
[edit]
[-] class-disable-comments.php
[edit]
[-] class-manage-ads-appads-txt.php
[edit]
[-] class-various-admin-ui-enhancements.php
[edit]
[-] class-admin-menu-svg-icon-mask.php
[edit]
[-] class-deactivation.php
[edit]
[-] class-activation.php
[edit]
[-] class-view-admin-as-role.php
[edit]
[-] class-maintenance-mode.php
[edit]
[-] class-custom-body-class.php
[edit]
[-] class-disable-dashboard-widgets.php
[edit]
[-] class-login-id-type.php
[edit]
[-] class-image-sizes-panel.php
[edit]
[-] class-redirect-after-login.php
[edit]
[-] class-settings-sections-fields.php
[edit]
[-] class-auto-publish-posts-with-missed-schedule.php
[edit]
[-] class-revisions-control.php
[edit]
[+]
..
[-] class-registration-date-column.php
[edit]
[-] class-disable-embeds.php
[edit]
[-] class-show-custom-taxonomy-filters.php
[edit]
[-] class-custom-nav-menu-items-in-new-tab.php
[edit]
[-] class-disable-feeds.php
[edit]
[-] class-captcha-protection.php
[edit]
[-] class-custom-admin-footer-text.php
[edit]
[-] class-change-login-url.php
[edit]
[-] class-last-login-column.php
[edit]
[-] class-settings-fields-render.php
[edit]
[-] class-disable-smaller-components.php
[edit]
[-] class-disable-author-archives.php
[edit]
[-] class-redirect-after-logout.php
[edit]
[-] class-open-external-links-in-new-tab.php
[edit]