Refactoring

This commit is contained in:
thanghv 2020-05-18 20:15:34 +07:00
parent 3a126a6e29
commit 737db8daa2
6 changed files with 245 additions and 224 deletions

View file

@ -146,9 +146,9 @@ class MainWP_Child_Branding {
'authoruri' => $settings['child_plugin_author_uri'],
'pluginuri' => isset( $settings['child_plugin_uri'] ) ? $settings['child_plugin_uri'] : '',
);
$current_settings['branding_header'] = $header;
$current_settings['preserve_branding'] = $settings['child_preserve_branding'];
$current_settings['branding_header'] = $header;
$current_settings['support_email'] = $settings['child_support_email'];
$current_settings['support_message'] = $settings['child_support_message'];
$current_settings['remove_restore'] = $settings['child_remove_restore'];
@ -162,10 +162,22 @@ class MainWP_Child_Branding {
$current_settings['email_message'] = $settings['child_send_email_message'];
$current_settings['return_sender'] = $settings['child_message_return_sender'];
$current_settings['submit_button_title'] = $settings['child_submit_button_title'];
$current_settings['hide'] = $settings['child_plugin_hide'] ? 'T' : '';
$current_settings['show_support'] = ( $settings['child_show_support_button'] && ! empty( $settings['child_support_email'] ) ) ? 'T' : '';
$current_settings['disable_change'] = $settings['child_disable_change'] ? 'T' : '';
$current_settings['disable_switching_theme'] = $settings['child_disable_switching_theme'] ? 'T' : '';
if ( isset( $settings['child_disable_wp_branding'] ) && ( 'Y' === $settings['child_disable_wp_branding'] || 'N' === $settings['child_disable_wp_branding'] ) ) {
$current_settings['disable_wp_branding'] = $settings['child_disable_wp_branding'];
}
$current_settings['extra_settings'] = self::get_extra_settings( $current_extra_setting, $settings, $information );
MainWP_Helper::update_option( 'mainwp_child_branding_settings', $current_settings );
$information['result'] = 'SUCCESS';
return $information;
}
public static function get_extra_settings( $current_extra_setting, $settings, &$information ){
$extra_setting = array(
'show_button_in' => $settings['child_show_support_button_in'],
@ -255,19 +267,7 @@ class MainWP_Child_Branding {
} elseif ( isset( $current_extra_setting['favico_image'] ) ) {
$extra_setting['favico_image'] = $current_extra_setting['favico_image'];
}
$current_settings['extra_settings'] = $extra_setting;
$current_settings['hide'] = $settings['child_plugin_hide'] ? 'T' : '';
$current_settings['show_support'] = ( $settings['child_show_support_button'] && ! empty( $settings['child_support_email'] ) ) ? 'T' : '';
$current_settings['disable_change'] = $settings['child_disable_change'] ? 'T' : '';
$current_settings['disable_switching_theme'] = $settings['child_disable_switching_theme'] ? 'T' : '';
MainWP_Helper::update_option( 'mainwp_child_branding_settings', $current_settings );
$information['result'] = 'SUCCESS';
return $information;
return $extra_setting;
}
public static function branding_upload_image( $img_url ) {

View file

@ -13,7 +13,7 @@
* Extension URL: https://mainwp.com/extension/ithemes-security/
*/
// phpcs:disable PSR1.Classes.ClassDeclaration, WordPress.WP.AlternativeFunctions -- root namespace to use external code.
// phpcs:disable -- third party credit code.
class MainWP_Child_IThemes_Security {
public static $instance = null;
@ -1000,8 +1000,13 @@ class MainWP_Child_IThemes_Security {
$active = '';
}
$results = $wpdb->get_results( 'SELECT * FROM `' . $wpdb->base_prefix . 'itsec_lockouts`' . $where . $type_statement . $active . ';', ARRAY_A ); // phpcs:ignore -- safe query. $output = array();
return $this->get_lockouts_int( $results, $type );
}
private function get_lockouts_int( $results, $type ){
if ( is_array( $results ) && count( $results ) > 0 ) {
switch ( $type ) {
case 'host':
@ -1037,6 +1042,7 @@ class MainWP_Child_IThemes_Security {
}
return $output;
}
public function release_lockout() {

View file

@ -428,10 +428,9 @@ class MainWP_Child_Server_Information {
<?php
}
public static function render_page() {
public static function render_page(){
self::render_page_js();
?>
<style type="text/css">
#mwp-server-information {
display: none;

View file

@ -200,6 +200,47 @@ class MainWP_Client_Report {
public function get_stream() {
$sections = isset( $_POST['sections'] ) ? maybe_unserialize( base64_decode( $_POST['sections'] ) ) : array(); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for begin reasons.
if ( ! is_array( $sections ) ) {
$sections = array();
}
$other_tokens = isset( $_POST['other_tokens'] ) ? maybe_unserialize( base64_decode( $_POST['other_tokens'] ) ) : array(); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for begin reasons.
if ( ! is_array( $other_tokens ) ) {
$other_tokens = array();
}
unset( $_POST['sections'] );
unset( $_POST['other_tokens'] );
$args = $this->get_stream_get_params( $other_tokens, $sections );
$records = wp_mainwp_stream_get_instance()->db->query( $args );
if ( ! is_array( $records ) ) {
$records = array();
}
// fix invalid data, or skip records!
$skip_records = array();
// fix for incorrect posts created logs!
// query created posts from WP posts data to simulate records logging for created posts.
if ( isset( $_POST['direct_posts'] ) && ! empty( $_POST['direct_posts'] ) ) {
$this->fix_logs_posts_created( $records, $skip_records );
}
$other_tokens_data = $this->get_stream_others_tokens( $records, $other_tokens, $skip_records );
$sections_data = $this->get_stream_sections_data( $records, $sections, $skip_records );
$information = array(
'other_tokens_data' => $other_tokens_data,
'sections_data' => $sections_data,
);
return $information;
}
private function get_stream_get_params( $other_tokens, $sections ){
$allowed_params = array(
'connector',
'context',
@ -216,19 +257,6 @@ class MainWP_Client_Report {
'ip',
);
$sections = isset( $_POST['sections'] ) ? maybe_unserialize( base64_decode( $_POST['sections'] ) ) : array(); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for begin reasons.
if ( ! is_array( $sections ) ) {
$sections = array();
}
$other_tokens = isset( $_POST['other_tokens'] ) ? maybe_unserialize( base64_decode( $_POST['other_tokens'] ) ) : array(); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for begin reasons.
if ( ! is_array( $other_tokens ) ) {
$other_tokens = array();
}
unset( $_POST['sections'] );
unset( $_POST['other_tokens'] );
$args = array();
foreach ( $allowed_params as $param ) {
$paramval = wp_mainwp_stream_filter_input( INPUT_POST, $param );
@ -324,110 +352,86 @@ class MainWP_Client_Report {
$args['records_per_page'] = 9999;
$records = wp_mainwp_stream_get_instance()->db->query( $args );
return $args;
}
if ( ! is_array( $records ) ) {
$records = array();
}
// fix invalid data, or skip records!
$skip_records = array();
// fix for incorrect posts created logs!
// query created posts from WP posts data to simulate records logging for created posts.
if ( isset( $_POST['direct_posts'] ) && ! empty( $_POST['direct_posts'] ) ) {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
'column' => 'post_date',
'after' => $args['date_from'],
'before' => $args['date_to'],
),
);
$result = new \WP_Query( $args );
$records_created_posts = $result->posts;
if ( $records_created_posts ) {
$count_records = count( $records );
for ( $i = 0; $i < $count_records; $i++ ) {
$record = $records[ $i ];
if ( 'posts' == $record->connector && 'post' == $record->context && 'created' == $record->action ) {
if ( ! in_array( $record->ID, $skip_records ) ) {
$skip_records[] = $record->ID; // so avoid this created logging, will use logging query from posts data.
}
}
}
$post_authors = array();
foreach ( $records_created_posts as $_post ) {
$au_id = $_post->post_author;
if ( ! isset( $post_authors[ $au_id ] ) ) {
$au = get_user_by( 'id', $au_id );
$post_authors[ $au_id ] = $au->display_name;
}
$au_name = $post_authors[ $au_id ];
// simulate logging created posts record.
$stdObj = new \stdClass();
$stdObj->ID = 0; // simulate ID value.
$stdObj->connector = 'posts';
$stdObj->context = 'post';
$stdObj->action = 'created';
$stdObj->created = $_post->post_date;
$stdObj->meta = array(
'post_title' => array( $_post->post_title ),
'user_meta' => array( $au_name ),
);
$records[] = $stdObj;
}
private function get_stream_others_tokens( $records, $other_tokens, $skip_records ){
$other_tokens_data = array();
$parts = array( 'header', 'body', 'footer' );
foreach( $parts as $part ) {
if ( isset( $other_tokens[ $part ] ) && is_array( $other_tokens[ $part ] ) ) {
$other_tokens_data[ $part ] = $this->get_other_tokens_data( $records, $other_tokens[ $part ], $skip_records );
}
}
return $other_tokens_data;
}
if ( isset( $other_tokens['header'] ) && is_array( $other_tokens['header'] ) ) {
$other_tokens_data['header'] = $this->get_other_tokens_data( $records, $other_tokens['header'], $skip_records );
}
if ( isset( $other_tokens['body'] ) && is_array( $other_tokens['body'] ) ) {
$other_tokens_data['body'] = $this->get_other_tokens_data( $records, $other_tokens['body'], $skip_records );
}
if ( isset( $other_tokens['footer'] ) && is_array( $other_tokens['footer'] ) ) {
$other_tokens_data['footer'] = $this->get_other_tokens_data( $records, $other_tokens['footer'], $skip_records );
}
private function get_stream_sections_data( $records, $sections, $skip_records ){
$sections_data = array();
$parts = array( 'header', 'body', 'footer' );
foreach( $parts as $part ) {
if ( isset( $sections[ $part ] ) && is_array( $sections[ $part ] ) && ! empty( $sections[ $part ] ) ) {
foreach ( $sections[ $part ]['section_token'] as $index => $sec ) {
$tokens = $sections[ $part ]['section_content_tokens'][ $index ];
$sections_data[ $part ][ $index ] = $this->get_section_loop_data( $records, $tokens, $sec, $skip_records );
}
}
}
return $sections_data;
}
if ( isset( $sections['header'] ) && is_array( $sections['header'] ) && ! empty( $sections['header'] ) ) {
foreach ( $sections['header']['section_token'] as $index => $sec ) {
$tokens = $sections['header']['section_content_tokens'][ $index ];
$sections_data['header'][ $index ] = $this->get_section_loop_data( $records, $tokens, $sec, $skip_records );
}
}
if ( isset( $sections['body'] ) && is_array( $sections['body'] ) && ! empty( $sections['body'] ) ) {
foreach ( $sections['body']['section_token'] as $index => $sec ) {
$tokens = $sections['body']['section_content_tokens'][ $index ];
$sections_data['body'][ $index ] = $this->get_section_loop_data( $records, $tokens, $sec, $skip_records );
}
}
if ( isset( $sections['footer'] ) && is_array( $sections['footer'] ) && ! empty( $sections['footer'] ) ) {
foreach ( $sections['footer']['section_token'] as $index => $sec ) {
$tokens = $sections['footer']['section_content_tokens'][ $index ];
$sections_data['footer'][ $index ] = $this->get_section_loop_data( $records, $tokens, $sec, $skip_records );
}
}
private function fix_logs_posts_created( &$records, &$skip_records ){
$information = array(
'other_tokens_data' => $other_tokens_data,
'sections_data' => $sections_data,
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
'column' => 'post_date',
'after' => $args['date_from'],
'before' => $args['date_to'],
),
);
return $information;
$result = new \WP_Query( $args );
$records_created_posts = $result->posts;
if ( $records_created_posts ) {
$count_records = count( $records );
for ( $i = 0; $i < $count_records; $i++ ) {
$record = $records[ $i ];
if ( 'posts' == $record->connector && 'post' == $record->context && 'created' == $record->action ) {
if ( ! in_array( $record->ID, $skip_records ) ) {
$skip_records[] = $record->ID; // so avoid this created logging, will use logging query from posts data.
}
}
}
$post_authors = array();
foreach ( $records_created_posts as $_post ) {
$au_id = $_post->post_author;
if ( ! isset( $post_authors[ $au_id ] ) ) {
$au = get_user_by( 'id', $au_id );
$post_authors[ $au_id ] = $au->display_name;
}
$au_name = $post_authors[ $au_id ];
// simulate logging created posts record.
$stdObj = new \stdClass();
$stdObj->ID = 0; // simulate ID value.
$stdObj->connector = 'posts';
$stdObj->context = 'post';
$stdObj->action = 'created';
$stdObj->created = $_post->post_date;
$stdObj->meta = array(
'post_title' => array( $_post->post_title ),
'user_meta' => array( $au_name ),
);
$records[] = $stdObj;
}
}
}
public function get_other_tokens_data( $records, $tokens, &$skip_records ) {
@ -609,19 +613,6 @@ class MainWP_Client_Report {
public function get_section_loop_records( $records, $tokens, $connector, $context, $action, $skip_records ) {
$maintenance_details = array(
'revisions' => __( 'Delete all post revisions', 'mainwp-child' ),
'revisions_max' => __( 'Delete all post revisions, except for the last:', 'mainwp-child' ),
'autodraft' => __( 'Delete all auto draft posts', 'mainwp-child' ),
'trashpost' => __( 'Delete trash posts', 'mainwp-child' ),
'spam' => __( 'Delete spam comments', 'mainwp-child' ),
'pending' => __( 'Delete pending comments', 'mainwp-child' ),
'trashcomment' => __( 'Delete trash comments', 'mainwp-child' ),
'tags' => __( 'Delete tags with 0 posts associated', 'mainwp-child' ),
'categories' => __( 'Delete categories with 0 posts associated', 'mainwp-child' ),
'optimize' => __( 'Optimize database tables', 'mainwp-child' ),
);
$loops = array();
$loop_count = 0;
foreach ( $records as $record ) {
@ -905,6 +896,19 @@ class MainWP_Client_Report {
private function get_mainwp_maintenance_token_value( $record, $data ) {
$maintenance_details = array(
'revisions' => __( 'Delete all post revisions', 'mainwp-child' ),
'revisions_max' => __( 'Delete all post revisions, except for the last:', 'mainwp-child' ),
'autodraft' => __( 'Delete all auto draft posts', 'mainwp-child' ),
'trashpost' => __( 'Delete trash posts', 'mainwp-child' ),
'spam' => __( 'Delete spam comments', 'mainwp-child' ),
'pending' => __( 'Delete pending comments', 'mainwp-child' ),
'trashcomment' => __( 'Delete trash comments', 'mainwp-child' ),
'tags' => __( 'Delete tags with 0 posts associated', 'mainwp-child' ),
'categories' => __( 'Delete categories with 0 posts associated', 'mainwp-child' ),
'optimize' => __( 'Optimize database tables', 'mainwp-child' ),
);
$meta_value = $this->get_stream_meta_data( $record, $data );
$meta_value = explode( ',', $meta_value );

View file

@ -1375,31 +1375,7 @@ class MainWP_Clone {
$file = ( isset( $_POST['f'] ) ? $_POST['f'] : $_POST['file'] );
$testFull = false;
if ( '' === $file ) {
$dirs = MainWP_Helper::get_mainwp_dir( 'backup', false );
$backupdir = $dirs[0];
$files = glob( $backupdir . 'download-*' );
$archiveFile = false;
foreach ( $files as $file ) {
if ( MainWP_Helper::is_archive( $file, 'download-' ) ) {
$archiveFile = $file;
break;
}
}
if ( false === $archiveFile ) {
throw new \Exception( __( 'No download file found', 'mainwp-child' ) );
}
$file = $archiveFile;
} elseif ( file_exists( $file ) ) {
$testFull = true;
} else {
$file = ABSPATH . $file;
if ( ! file_exists( $file ) ) {
throw new \Exception( __( 'Backup file not found', 'mainwp-child' ) );
}
$testFull = true;
}
$file = $this->clone_backup_get_file( $file, $testFull );
$cloneInstall = new MainWP_Clone_Install( $file );
$cloneInstall->read_configuration_file();
@ -1445,57 +1421,90 @@ class MainWP_Clone {
$cloneInstall->update_wp_config();
$cloneInstall->clean();
if ( false !== $plugins ) {
$out = array();
if ( is_array( $plugins ) ) {
$dir = WP_CONTENT_DIR . '/plugins/';
$fh = opendir( $dir );
while ( $entry = readdir( $fh ) ) {
if ( ! is_dir( $dir . $entry ) ) {
continue;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue;
}
if ( ! in_array( $entry, $plugins ) ) {
MainWP_Helper::delete_dir( $dir . $entry );
}
}
closedir( $fh );
}
delete_option( 'mainwp_temp_clone_plugins' );
}
if ( false !== $themes ) {
$out = array();
if ( is_array( $themes ) ) {
$dir = WP_CONTENT_DIR . '/themes/';
$fh = opendir( $dir );
while ( $entry = readdir( $fh ) ) {
if ( ! is_dir( $dir . $entry ) ) {
continue;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue;
}
if ( ! in_array( $entry, $themes ) ) {
MainWP_Helper::delete_dir( $dir . $entry );
}
}
closedir( $fh );
}
delete_option( 'mainwp_temp_clone_themes' );
}
$output = array( 'result' => 'ok' );
wp_logout();
wp_set_current_user( 0 );
$output = $this->clone_backup_delete_files( $plugins, $themes );
} catch ( \Exception $e ) {
$output = array( 'error' => $e->getMessage() );
}
die( wp_json_encode( $output ) );
}
private function clone_backup_get_file( $file, &$testFull ){
if ( '' === $file ) {
$dirs = MainWP_Helper::get_mainwp_dir( 'backup', false );
$backupdir = $dirs[0];
$files = glob( $backupdir . 'download-*' );
$archiveFile = false;
foreach ( $files as $file ) {
if ( MainWP_Helper::is_archive( $file, 'download-' ) ) {
$archiveFile = $file;
break;
}
}
if ( false === $archiveFile ) {
throw new \Exception( __( 'No download file found', 'mainwp-child' ) );
}
$file = $archiveFile;
} elseif ( file_exists( $file ) ) {
$testFull = true;
} else {
$file = ABSPATH . $file;
if ( ! file_exists( $file ) ) {
throw new \Exception( __( 'Backup file not found', 'mainwp-child' ) );
}
$testFull = true;
}
return $file;
}
private function clone_backup_delete_files( $plugins, $themes ){
if ( false !== $plugins ) {
$out = array();
if ( is_array( $plugins ) ) {
$dir = WP_CONTENT_DIR . '/plugins/';
$fh = opendir( $dir );
while ( $entry = readdir( $fh ) ) {
if ( ! is_dir( $dir . $entry ) ) {
continue;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue;
}
if ( ! in_array( $entry, $plugins ) ) {
MainWP_Helper::delete_dir( $dir . $entry );
}
}
closedir( $fh );
}
delete_option( 'mainwp_temp_clone_plugins' );
}
if ( false !== $themes ) {
$out = array();
if ( is_array( $themes ) ) {
$dir = WP_CONTENT_DIR . '/themes/';
$fh = opendir( $dir );
while ( $entry = readdir( $fh ) ) {
if ( ! is_dir( $dir . $entry ) ) {
continue;
}
if ( ( '.' === $entry ) || ( '..' === $entry ) ) {
continue;
}
if ( ! in_array( $entry, $themes ) ) {
MainWP_Helper::delete_dir( $dir . $entry );
}
}
closedir( $fh );
}
delete_option( 'mainwp_temp_clone_themes' );
}
$output = array( 'result' => 'ok' );
wp_logout();
wp_set_current_user( 0 );
return $output;
}
public static function permalink_changed( $action ) {
if ( 'update-permalink' === $action ) {
if ( isset( $_POST['permalink_structure'] ) || isset( $_POST['category_base'] ) || isset( $_POST['tag_base'] ) ) {

View file

@ -100,7 +100,10 @@ class MainWP_Helper {
// Split by parenthesis, ignoring those inside content-quotes.
$ordered[ $ordered_key ] = preg_split( '/([^\'"\{\}]*?[\'"].*?(?<!\\\)[\'"][^\'"\{\}]*?)[\{\}]|([^\'"\{\}]*?)[\{\}]/', trim( $ordered_value, " \r\n\t" ), -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
}
return self::parse_css_rebuild( $ordered );
}
public static function parse_css_rebuild( $ordered ) {
// Beginning to rebuild new slim CSS-Array.
foreach ( $ordered as $key => $val ) {
$new = array();