20 ) { return new WP_Error( 'itsec-import-export-exporter-create-cannot-find-unique-directory', __( 'Unable to find a unique, new directory to store the generated export file. The settings were not exported.', 'it-l10n-ithemes-security-pro' ) ); } } $result = ITSEC_Lib_Directory::create( $dir ); if ( is_wp_error( $result ) ) { /* translators: 1: original error message */ return new WP_Error( $result->get_error_code(), sprintf( __( 'Unable to create the directory to hold the export file. %1$s', 'it-l10n-ithemes-security-pro' ), $result->get_error_message() ) ); } $settings_file = "$dir/itsec_options.json"; $zip_file = "$dir/itsec_options.zip"; $result = ITSEC_Lib_File::write( $settings_file, $content ); if ( is_wp_error( $result ) ) { /* translators: 1: original error message */ return new WP_Error( $result->get_error_code(), sprintf( __( 'Unable to create the export file. %1$s', 'it-l10n-ithemes-security-pro' ), $result->get_error_message() ) ); } $zip = new PclZip( $zip_file ); $result = $zip->create( $settings_file, PCLZIP_OPT_REMOVE_PATH, dirname( $settings_file ) ); if ( 0 === $result ) { $export_file = $settings_file; } else { $export_file = $zip_file; @unlink( $settings_file ); } $time = ITSEC_Core::get_current_time_gmt(); $nc = ITSEC_Core::get_notification_center(); $mail = $nc->mail(); $subject = $mail->prepend_site_url_to_subject( $nc->get_subject( 'import-export' ) ); $subject = apply_filters( 'itsec_backup_email_subject', $subject ); $mail->set_subject( $subject, false ); $mail->set_recipients( array( $email ) ); $mail->add_attachment( $export_file ); $mail->add_header( esc_html__( 'Settings Export', 'it-l10n-ithemes-security-pro' ), sprintf( /* translators: 1. opening bold tag, 2. date, 3. time, 4. closing bold tag. */ esc_html__( 'Settings Export created on %1$s %2$s at %3$s %4$s', 'it-l10n-ithemes-security-pro' ), '', date_i18n( get_option( 'date_format' ), $time ), date_i18n( get_option( 'time_format' ), $time ), '' ) ); $message = ITSEC_Lib::replace_tags( $nc->get_message( 'import-export' ), array( 'date' => date_i18n( get_option( 'date_format' ), $time ), 'time' => date_i18n( get_option( 'time_format' ), $time ), 'site_url' => $mail->get_display_url(), 'site_title' => get_bloginfo( 'name', 'display' ), ) ); $mail->add_info_box( $message, 'attachment' ); $mail->add_footer(); $result = $nc->send( 'import-export', $mail ); if ( false === $result ) { /* translators: 1: absolute path to export file */ return new WP_Error( 'itsec-import-export-exporter-create-wp-mail-failed', sprintf( __( 'Sending the email message failed. The exported settings file can be found at %1$s.', 'it-l10n-ithemes-security-pro' ), $export_file ) ); } ITSEC_Lib_Directory::remove( $dir ); return true; } public static function get_export_content() { global $wpdb; $ignored_options = array( 'itsec_data', 'itsec_file_change_warning', 'itsec_initials', 'itsec_jquery_version', 'itsec_local_file_list', 'itsec_local_file_list_0', 'itsec_local_file_list_1', 'itsec_local_file_list_2', 'itsec_local_file_list_3', 'itsec_local_file_list_4', 'itsec_local_file_list_5', 'itsec_local_file_list_6', 'itsec_message_queue', 'itsec_rewrites_changed', 'itsec_config_changed', 'itsec_temp_whitelist_ip', 'itsec_online_files_hashes', 'itsec_file_change_scan_destroyed', 'itsec_file_change_latest', ); $is_multisite = is_multisite(); if ( $is_multisite ) { $raw_options = $wpdb->get_results( $q = $wpdb->prepare( "SELECT * FROM `" . $wpdb->sitemeta . "` WHERE `meta_key` LIKE %s AND `site_id` = %d;", 'itsec%', $wpdb->siteid ), ARRAY_A ); } else { $raw_options = $wpdb->get_results( "SELECT * FROM `" . $wpdb->options . "` WHERE `option_name` LIKE 'itsec%';", ARRAY_A ); } $options = array(); foreach ( (array) $raw_options as $option ) { $name = $is_multisite ? $option['meta_key'] : $option['option_name']; if ( in_array( $name, $ignored_options ) ) { continue; } if ( strpos( $name, 'itsec-lock' ) === 0 ) { continue; } $options[] = array( 'name' => $name, 'value' => maybe_unserialize( $is_multisite ? $option['meta_value'] : $option['option_value'] ), 'auto' => ( empty( $option['autoload'] ) || 'yes' === $option['autoload'] ) ? 'yes' : 'no', ); } $user_groups = []; foreach ( ITSEC_Modules::get_container()->get( User_Groups\Repository\Repository::class )->all() as $user_group ) { $user_groups[ $user_group->get_id() ] = [ 'label' => $user_group->get_label(), 'users' => wp_list_pluck( $user_group->get_users(), 'ID' ), 'roles' => $user_group->get_roles(), 'canonical' => $user_group->get_canonical_roles(), 'min_role' => $user_group->get_min_role(), ]; } $content = array( 'exporter_version' => 1, 'plugin_build' => ITSEC_Core::get_plugin_build(), 'timestamp' => ITSEC_Core::get_current_time_gmt(), 'site' => network_home_url(), 'options' => $options, 'abspath' => ABSPATH, 'user_groups' => $user_groups, ); return $content; } }