/**
* Copyright (C) 2014-2020 ServMask Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
* ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
* ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
* ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
* ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
* ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
*/
if ( ! defined( 'ABSPATH' ) ) {
die( 'Kangaroos cannot jump here' );
}
/**
* Get storage absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_storage_path( $params ) {
if ( empty( $params['storage'] ) ) {
throw new Ai1wm_Storage_Exception( __( 'Unable to locate storage path. Technical details', AI1WM_PLUGIN_NAME ) );
}
// Get storage path
$storage = AI1WM_STORAGE_PATH . DIRECTORY_SEPARATOR . basename( $params['storage'] );
if ( ! is_dir( $storage ) ) {
mkdir( $storage );
}
return $storage;
}
/**
* Get backup absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_backup_path( $params ) {
if ( empty( $params['archive'] ) ) {
throw new Ai1wm_Archive_Exception( __( 'Unable to locate archive path. Technical details', AI1WM_PLUGIN_NAME ) );
}
// Validate archive path
if ( validate_file( $params['archive'] ) !== 0 ) {
throw new Ai1wm_Archive_Exception( __( 'Invalid archive path. Technical details', AI1WM_PLUGIN_NAME ) );
}
return AI1WM_BACKUPS_PATH . DIRECTORY_SEPARATOR . $params['archive'];
}
/**
* Get archive absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_archive_path( $params ) {
if ( empty( $params['archive'] ) ) {
throw new Ai1wm_Archive_Exception( __( 'Unable to locate archive path. Technical details', AI1WM_PLUGIN_NAME ) );
}
// Validate archive path
if ( validate_file( $params['archive'] ) !== 0 ) {
throw new Ai1wm_Archive_Exception( __( 'Invalid archive path. Technical details', AI1WM_PLUGIN_NAME ) );
}
// Get archive path
if ( empty( $params['ai1wm_manual_restore'] ) ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . $params['archive'];
}
return ai1wm_backup_path( $params );
}
/**
* Get multipart.list absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_multipart_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_MULTIPART_NAME;
}
/**
* Get content.list absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_content_list_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_CONTENT_LIST_NAME;
}
/**
* Get media.list absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_media_list_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_MEDIA_LIST_NAME;
}
/**
* Get tables.list absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_tables_list_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_TABLES_LIST_NAME;
}
/**
* Get package.json absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_package_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_PACKAGE_NAME;
}
/**
* Get multisite.json absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_multisite_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_MULTISITE_NAME;
}
/**
* Get blogs.json absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_blogs_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_BLOGS_NAME;
}
/**
* Get settings.json absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_settings_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_SETTINGS_NAME;
}
/**
* Get database.sql absolute path
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_database_path( $params ) {
return ai1wm_storage_path( $params ) . DIRECTORY_SEPARATOR . AI1WM_DATABASE_NAME;
}
/**
* Get error log absolute path
*
* @return string
*/
function ai1wm_error_path() {
return AI1WM_STORAGE_PATH . DIRECTORY_SEPARATOR . AI1WM_ERROR_NAME;
}
/**
* Get archive name
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_archive_name( $params ) {
return basename( $params['archive'] );
}
/**
* Get backup URL address
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_backup_url( $params ) {
return AI1WM_BACKUPS_URL . '/' . ai1wm_replace_directory_separator_with_forward_slash( $params['archive'] );
}
/**
* Get archive size in bytes
*
* @param array $params Request parameters
* @return integer
*/
function ai1wm_archive_bytes( $params ) {
return filesize( ai1wm_archive_path( $params ) );
}
/**
* Get backup size in bytes
*
* @param array $params Request parameters
* @return integer
*/
function ai1wm_backup_bytes( $params ) {
return filesize( ai1wm_backup_path( $params ) );
}
/**
* Get database size in bytes
*
* @param array $params Request parameters
* @return integer
*/
function ai1wm_database_bytes( $params ) {
return filesize( ai1wm_database_path( $params ) );
}
/**
* Get package size in bytes
*
* @param array $params Request parameters
* @return integer
*/
function ai1wm_package_bytes( $params ) {
return filesize( ai1wm_package_path( $params ) );
}
/**
* Get multisite size in bytes
*
* @param array $params Request parameters
* @return integer
*/
function ai1wm_multisite_bytes( $params ) {
return filesize( ai1wm_multisite_path( $params ) );
}
/**
* Get archive size as text
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_archive_size( $params ) {
return ai1wm_size_format( filesize( ai1wm_archive_path( $params ) ) );
}
/**
* Get backup size as text
*
* @param array $params Request parameters
* @return string
*/
function ai1wm_backup_size( $params ) {
return ai1wm_size_format( filesize( ai1wm_backup_path( $params ) ) );
}
/**
* Parse file size
*
* @param string $size File size
* @param string $default Default size
* @return string
*/
function ai1wm_parse_size( $size, $default = null ) {
$suffixes = array(
'' => 1,
'k' => 1000,
'm' => 1000000,
'g' => 1000000000,
);
// Parse size format
if ( preg_match( '/([0-9]+)\s*(k|m|g)?(b?(ytes?)?)/i', $size, $match ) ) {
return $match[1] * $suffixes[ strtolower( $match[2] ) ];
}
return $default;
}
/**
* Format file size into human-readable string
*
* Fixes the WP size_format bug: size_format( '0' ) => false
*
* @param int|string $bytes Number of bytes. Note max integer size for integers.
* @param int $decimals Optional. Precision of number of decimal places. Default 0.
* @return string|false False on failure. Number string on success.
*/
function ai1wm_size_format( $bytes, $decimals = 0 ) {
if ( strval( $bytes ) === '0' ) {
return size_format( 0, $decimals );
}
return size_format( $bytes, $decimals );
}
/**
* Get current site name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_site_name( $blog_id = null ) {
return parse_url( get_site_url( $blog_id ), PHP_URL_HOST );
}
/**
* Get archive file name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_file( $blog_id = null ) {
$name = array();
// Add domain
$name[] = parse_url( get_site_url( $blog_id ), PHP_URL_HOST );
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory ) {
$name[] = $directory;
}
}
}
// Add year, month and day
$name[] = date( 'Ymd' );
// Add hours, minutes and seconds
$name[] = date( 'His' );
// Add unique identifier
$name[] = ai1wm_generate_random_string( 6, false );
return sprintf( '%s.wpress', strtolower( implode( '-', $name ) ) );
}
/**
* Get archive folder name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_folder( $blog_id = null ) {
$name = array();
// Add domain
$name[] = parse_url( get_site_url( $blog_id ), PHP_URL_HOST );
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory ) {
$name[] = $directory;
}
}
}
return strtolower( implode( '-', $name ) );
}
/**
* Get archive bucket name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_bucket( $blog_id = null ) {
$name = array();
// Add domain
if ( ( $domain = explode( '.', parse_url( get_site_url( $blog_id ), PHP_URL_HOST ) ) ) ) {
foreach ( $domain as $subdomain ) {
if ( $subdomain = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $subdomain ) ) ) {
$name[] = $subdomain;
}
}
}
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $directory ) ) ) {
$name[] = $directory;
}
}
}
return strtolower( implode( '-', $name ) );
}
/**
* Get archive vault name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_vault( $blog_id = null ) {
$name = array();
// Add domain
if ( ( $domain = explode( '.', parse_url( get_site_url( $blog_id ), PHP_URL_HOST ) ) ) ) {
foreach ( $domain as $subdomain ) {
if ( $subdomain = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $subdomain ) ) ) {
$name[] = $subdomain;
}
}
}
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $directory ) ) ) {
$name[] = $directory;
}
}
}
return strtolower( implode( '-', $name ) );
}
/**
* Get archive project name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_project( $blog_id = null ) {
$name = array();
// Add domain
if ( ( $domain = explode( '.', parse_url( get_site_url( $blog_id ), PHP_URL_HOST ) ) ) ) {
foreach ( $domain as $subdomain ) {
if ( $subdomain ) {
$name[] = $subdomain;
}
}
}
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory ) {
$name[] = $directory;
}
}
}
return strtolower( implode( '-', $name ) );
}
/**
* Get archive share name
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_archive_share( $blog_id = null ) {
$name = array();
// Add domain
if ( ( $domain = explode( '.', parse_url( get_site_url( $blog_id ), PHP_URL_HOST ) ) ) ) {
foreach ( $domain as $subdomain ) {
if ( $subdomain = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $subdomain ) ) ) {
$name[] = $subdomain;
}
}
}
// Add path
if ( ( $path = explode( '/', parse_url( get_site_url( $blog_id ), PHP_URL_PATH ) ) ) ) {
foreach ( $path as $directory ) {
if ( $directory = strtolower( preg_replace( '/[^A-Za-z0-9\-]/', '', $directory ) ) ) {
$name[] = $directory;
}
}
}
return strtolower( implode( '-', $name ) );
}
/**
* Generate random string
*
* @param integer $length String length
* @param boolean $mixed_chars Whether to include mixed characters
* @param boolean $special_chars Whether to include special characters
* @param boolean $extra_special_chars Whether to include extra special characters
* @return string
*/
function ai1wm_generate_random_string( $length = 12, $mixed_chars = true, $special_chars = false, $extra_special_chars = false ) {
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
if ( $mixed_chars ) {
$chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
if ( $special_chars ) {
$chars .= '!@#$%^&*()';
}
if ( $extra_special_chars ) {
$chars .= '-_ []{}<>~`+=,.;:/?|';
}
$str = '';
for ( $i = 0; $i < $length; $i++ ) {
$str .= substr( $chars, wp_rand( 0, strlen( $chars ) - 1 ), 1 );
}
return $str;
}
/**
* Get storage folder name
*
* @return string
*/
function ai1wm_storage_folder() {
return uniqid();
}
/**
* Check whether blog ID is main site
*
* @param integer $blog_id Blog ID
* @return boolean
*/
function ai1wm_is_mainsite( $blog_id = null ) {
return $blog_id === null || $blog_id === 0 || $blog_id === 1;
}
/**
* Get files absolute path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_files_abspath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return ai1wm_get_uploads_dir();
}
return WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'blogs.dir' . DIRECTORY_SEPARATOR . $blog_id . DIRECTORY_SEPARATOR . 'files';
}
/**
* Get blogs.dir absolute path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_blogsdir_abspath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return ai1wm_get_uploads_dir();
}
return WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'blogs.dir' . DIRECTORY_SEPARATOR . $blog_id;
}
/**
* Get sites absolute path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_sites_abspath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return ai1wm_get_uploads_dir();
}
return ai1wm_get_uploads_dir() . DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . $blog_id;
}
/**
* Get files relative path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_files_relpath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return 'uploads';
}
return 'blogs.dir' . DIRECTORY_SEPARATOR . $blog_id . DIRECTORY_SEPARATOR . 'files';
}
/**
* Get blogs.dir relative path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_blogsdir_relpath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return 'uploads';
}
return 'blogs.dir' . DIRECTORY_SEPARATOR . $blog_id;
}
/**
* Get sites relative path by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_sites_relpath( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return 'uploads';
}
return 'uploads' . DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . $blog_id;
}
/**
* Get files URL by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_files_url( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return '/wp-content/uploads/';
}
return sprintf( '/wp-content/blogs.dir/%d/files/', $blog_id );
}
/**
* Get blogs.dir URL by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_blogsdir_url( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return '/wp-content/uploads/';
}
return sprintf( '/wp-content/blogs.dir/%d/', $blog_id );
}
/**
* Get sites URL by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_sites_url( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return '/wp-content/uploads/';
}
return sprintf( '/wp-content/uploads/sites/%d/', $blog_id );
}
/**
* Get uploads URL by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_blog_uploads_url( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return sprintf( '/%s/', ai1wm_get_uploads_path() );
}
return sprintf( '/%s/sites/%d/', ai1wm_get_uploads_path(), $blog_id );
}
/**
* Get ServMask table prefix by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_servmask_prefix( $blog_id = null ) {
if ( ai1wm_is_mainsite( $blog_id ) ) {
return AI1WM_TABLE_PREFIX;
}
return AI1WM_TABLE_PREFIX . $blog_id . '_';
}
/**
* Get WordPress table prefix by blog ID
*
* @param integer $blog_id Blog ID
* @return string
*/
function ai1wm_table_prefix( $blog_id = null ) {
global $wpdb;
// Set base table prefix
if ( ai1wm_is_mainsite( $blog_id ) ) {
return $wpdb->base_prefix;
}
return $wpdb->base_prefix . $blog_id . '_';
}
/**
* Get default content filters
*
* @param array $filters List of files and directories
* @return array
*/
function ai1wm_content_filters( $filters = array() ) {
return array_merge(
$filters,
array(
AI1WM_BACKUPS_NAME,
AI1WM_PACKAGE_NAME,
AI1WM_MULTISITE_NAME,
AI1WM_DATABASE_NAME,
)
);
}
/**
* Get default plugin filters
*
* @param array $filters List of plugins
* @return array
*/
function ai1wm_plugin_filters( $filters = array() ) {
// WP Migration Plugin
if ( defined( 'AI1WM_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WM_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration';
}
// Microsoft Azure Extension
if ( defined( 'AI1WMZE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMZE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-azure-storage-extension';
}
// Backblaze B2 Extension
if ( defined( 'AI1WMAE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMAE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-b2-extension';
}
// Backup Plugin
if ( defined( 'AI1WMVE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMVE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-backup';
}
// Box Extension
if ( defined( 'AI1WMBE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMBE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-box-extension';
}
// DigitalOcean Spaces Extension
if ( defined( 'AI1WMIE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMIE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-digitalocean-extension';
}
// Direct Extension
if ( defined( 'AI1WMXE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMXE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-direct-extension';
}
// Dropbox Extension
if ( defined( 'AI1WMDE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMDE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-dropbox-extension';
}
// File Extension
if ( defined( 'AI1WMTE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMTE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-file-extension';
}
// FTP Extension
if ( defined( 'AI1WMFE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMFE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-ftp-extension';
}
// Google Cloud Storage Extension
if ( defined( 'AI1WMCE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMCE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-gcloud-storage-extension';
}
// Google Drive Extension
if ( defined( 'AI1WMGE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMGE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-gdrive-extension';
}
// Amazon Glacier Extension
if ( defined( 'AI1WMRE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMRE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-glacier-extension';
}
// Mega Extension
if ( defined( 'AI1WMEE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMEE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-mega-extension';
}
// Multisite Extension
if ( defined( 'AI1WMME_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMME_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-multisite-extension';
}
// OneDrive Extension
if ( defined( 'AI1WMOE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMOE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-onedrive-extension';
}
// pCloud Extension
if ( defined( 'AI1WMPE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMPE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-pcloud-extension';
}
// Pro Plugin
if ( defined( 'AI1WMKE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMKE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-pro';
}
// S3 Client Extension
if ( defined( 'AI1WNE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMNE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-s3-client-extension';
}
// Amazon S3 Extension
if ( defined( 'AI1WMSE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMSE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-s3-extension';
}
// Unlimited Extension
if ( defined( 'AI1WMUE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMUE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-unlimited-extension';
}
// URL Extension
if ( defined( 'AI1WMLE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMLE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-url-extension';
}
// WebDAV Extension
if ( defined( 'AI1WMWE_PLUGIN_BASENAME' ) ) {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . dirname( AI1WMWE_PLUGIN_BASENAME );
} else {
$filters[] = 'plugins' . DIRECTORY_SEPARATOR . 'all-in-one-wp-migration-webdav-extension';
}
return $filters;
}
/**
* Get active ServMask plugins
*
* @return array
*/
function ai1wm_active_servmask_plugins( $plugins = array() ) {
// WP Migration Plugin
if ( defined( 'AI1WM_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WM_PLUGIN_BASENAME;
}
// Microsoft Azure Extension
if ( defined( 'AI1WMZE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMZE_PLUGIN_BASENAME;
}
// Backblaze B2 Extension
if ( defined( 'AI1WMAE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMAE_PLUGIN_BASENAME;
}
// Backup Plugin
if ( defined( 'AI1WMVE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMVE_PLUGIN_BASENAME;
}
// Box Extension
if ( defined( 'AI1WMBE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMBE_PLUGIN_BASENAME;
}
// DigitalOcean Spaces Extension
if ( defined( 'AI1WMIE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMIE_PLUGIN_BASENAME;
}
// Direct Extension
if ( defined( 'AI1WMXE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMXE_PLUGIN_BASENAME;
}
// Dropbox Extension
if ( defined( 'AI1WMDE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMDE_PLUGIN_BASENAME;
}
// File Extension
if ( defined( 'AI1WMTE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMTE_PLUGIN_BASENAME;
}
// FTP Extension
if ( defined( 'AI1WMFE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMFE_PLUGIN_BASENAME;
}
// Google Cloud Storage Extension
if ( defined( 'AI1WMCE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMCE_PLUGIN_BASENAME;
}
// Google Drive Extension
if ( defined( 'AI1WMGE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMGE_PLUGIN_BASENAME;
}
// Amazon Glacier Extension
if ( defined( 'AI1WMRE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMRE_PLUGIN_BASENAME;
}
// Mega Extension
if ( defined( 'AI1WMEE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMEE_PLUGIN_BASENAME;
}
// Multisite Extension
if ( defined( 'AI1WMME_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMME_PLUGIN_BASENAME;
}
// OneDrive Extension
if ( defined( 'AI1WMOE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMOE_PLUGIN_BASENAME;
}
// pCloud Extension
if ( defined( 'AI1WMPE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMPE_PLUGIN_BASENAME;
}
// Pro Plugin
if ( defined( 'AI1WMKE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMKE_PLUGIN_BASENAME;
}
// S3 Client Extension
if ( defined( 'AI1WMNE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMNE_PLUGIN_BASENAME;
}
// Amazon S3 Extension
if ( defined( 'AI1WMSE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMSE_PLUGIN_BASENAME;
}
// Unlimited Extension
if ( defined( 'AI1WMUE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMUE_PLUGIN_BASENAME;
}
// URL Extension
if ( defined( 'AI1WMLE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMLE_PLUGIN_BASENAME;
}
// WebDAV Extension
if ( defined( 'AI1WMWE_PLUGIN_BASENAME' ) ) {
$plugins[] = AI1WMWE_PLUGIN_BASENAME;
}
return $plugins;
}
/**
* Get active sitewide plugins
*
* @return array
*/
function ai1wm_active_sitewide_plugins() {
return array_keys( get_site_option( AI1WM_ACTIVE_SITEWIDE_PLUGINS, array() ) );
}
/**
* Get active plugins
*
* @return array
*/
function ai1wm_active_plugins() {
return array_values( get_option( AI1WM_ACTIVE_PLUGINS, array() ) );
}
/**
* Set active sitewide plugins (inspired by WordPress activate_plugins() function)
*
* @param array $plugins List of plugins
* @return boolean
*/
function ai1wm_activate_sitewide_plugins( $plugins ) {
$current = get_site_option( AI1WM_ACTIVE_SITEWIDE_PLUGINS, array() );
// Add plugins
foreach ( $plugins as $plugin ) {
if ( ! isset( $current[ $plugin ] ) && ! is_wp_error( validate_plugin( $plugin ) ) ) {
$current[ $plugin ] = time();
}
}
return update_site_option( AI1WM_ACTIVE_SITEWIDE_PLUGINS, $current );
}
/**
* Set active plugins (inspired by WordPress activate_plugins() function)
*
* @param array $plugins List of plugins
* @return boolean
*/
function ai1wm_activate_plugins( $plugins ) {
$current = get_option( AI1WM_ACTIVE_PLUGINS, array() );
// Add plugins
foreach ( $plugins as $plugin ) {
if ( ! in_array( $plugin, $current ) && ! is_wp_error( validate_plugin( $plugin ) ) ) {
$current[] = $plugin;
}
}
return update_option( AI1WM_ACTIVE_PLUGINS, $current );
}
/**
* Get active template
*
* @return string
*/
function ai1wm_active_template() {
return get_option( AI1WM_ACTIVE_TEMPLATE );
}
/**
* Get active stylesheet
*
* @return string
*/
function ai1wm_active_stylesheet() {
return get_option( AI1WM_ACTIVE_STYLESHEET );
}
/**
* Set active template
*
* @param string $template Template name
* @return boolean
*/
function ai1wm_activate_template( $template ) {
return update_option( AI1WM_ACTIVE_TEMPLATE, $template );
}
/**
* Set active stylesheet
*
* @param string $stylesheet Stylesheet name
* @return boolean
*/
function ai1wm_activate_stylesheet( $stylesheet ) {
return update_option( AI1WM_ACTIVE_STYLESHEET, $stylesheet );
}
/**
* Set inactive sitewide plugins (inspired by WordPress deactivate_plugins() function)
*
* @param array $plugins List of plugins
* @return boolean
*/
function ai1wm_deactivate_sitewide_plugins( $plugins ) {
$current = get_site_option( AI1WM_ACTIVE_SITEWIDE_PLUGINS, array() );
// Add plugins
foreach ( $plugins as $plugin ) {
if ( isset( $current[ $plugin ] ) ) {
unset( $current[ $plugin ] );
}
}
return update_site_option( AI1WM_ACTIVE_SITEWIDE_PLUGINS, $current );
}
/**
* Set inactive plugins (inspired by WordPress deactivate_plugins() function)
*
* @param array $plugins List of plugins
* @return boolean
*/
function ai1wm_deactivate_plugins( $plugins ) {
$current = get_option( AI1WM_ACTIVE_PLUGINS, array() );
// Remove plugins
foreach ( $plugins as $plugin ) {
if ( ( $key = array_search( $plugin, $current ) ) !== false ) {
unset( $current[ $key ] );
}
}
return update_option( AI1WM_ACTIVE_PLUGINS, $current );
}
/**
* Deactivate Jetpack modules
*
* @param array $modules List of modules
* @return boolean
*/
function ai1wm_deactivate_jetpack_modules( $modules ) {
$current = get_option( AI1WM_JETPACK_ACTIVE_MODULES, array() );
// Remove modules
foreach ( $modules as $module ) {
if ( ( $key = array_search( $module, $current ) ) !== false ) {
unset( $current[ $key ] );
}
}
return update_option( AI1WM_JETPACK_ACTIVE_MODULES, $current );
}
/**
* Deactivate Swift Optimizer rules
*
* @param array $rules List of rules
* @return boolean
*/
function ai1wm_deactivate_swift_optimizer_rules( $rules ) {
$current = get_option( AI1WM_SWIFT_OPTIMIZER_PLUGIN_ORGANIZER, array() );
// Remove rules
foreach ( $rules as $rule ) {
unset( $current['rules'][ $rule ] );
}
return update_option( AI1WM_SWIFT_OPTIMIZER_PLUGIN_ORGANIZER, $current );
}
/**
* Deactivate sitewide Revolution Slider
*
* @param string $basename Plugin basename
* @return boolean
*/
function ai1wm_deactivate_sitewide_revolution_slider( $basename ) {
if ( ( $plugins = get_plugins() ) ) {
if ( isset( $plugins[ $basename ]['Version'] ) && ( $version = $plugins[ $basename ]['Version'] ) ) {
if ( version_compare( PHP_VERSION, '7.3', '>=' ) && version_compare( $version, '5.4.8.3', '<' ) ) {
return ai1wm_deactivate_sitewide_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.2', '>=' ) && version_compare( $version, '5.4.6', '<' ) ) {
return ai1wm_deactivate_sitewide_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.1', '>=' ) && version_compare( $version, '5.4.1', '<' ) ) {
return ai1wm_deactivate_sitewide_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.0', '>=' ) && version_compare( $version, '4.6.5', '<' ) ) {
return ai1wm_deactivate_sitewide_plugins( array( $basename ) );
}
}
}
return false;
}
/**
* Deactivate Revolution Slider
*
* @param string $basename Plugin basename
* @return boolean
*/
function ai1wm_deactivate_revolution_slider( $basename ) {
if ( ( $plugins = get_plugins() ) ) {
if ( isset( $plugins[ $basename ]['Version'] ) && ( $version = $plugins[ $basename ]['Version'] ) ) {
if ( version_compare( PHP_VERSION, '7.3', '>=' ) && version_compare( $version, '5.4.8.3', '<' ) ) {
return ai1wm_deactivate_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.2', '>=' ) && version_compare( $version, '5.4.6', '<' ) ) {
return ai1wm_deactivate_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.1', '>=' ) && version_compare( $version, '5.4.1', '<' ) ) {
return ai1wm_deactivate_plugins( array( $basename ) );
}
if ( version_compare( PHP_VERSION, '7.0', '>=' ) && version_compare( $version, '4.6.5', '<' ) ) {
return ai1wm_deactivate_plugins( array( $basename ) );
}
}
}
return false;
}
/**
* Initial DB version
*
* @return boolean
*/
function ai1wm_initial_db_version() {
if ( ! get_option( AI1WM_DB_VERSION ) ) {
return update_option( AI1WM_DB_VERSION, get_option( AI1WM_INITIAL_DB_VERSION ) );
}
return false;
}
/**
* Discover plugin basename
*
* @param string $basename Plugin basename
* @return string
*/
function ai1wm_discover_plugin_basename( $basename ) {
if ( ( $plugins = get_plugins() ) ) {
foreach ( $plugins as $plugin => $info ) {
if ( strpos( dirname( $plugin ), dirname( $basename ) ) !== false ) {
if ( basename( $plugin ) === basename( $basename ) ) {
return $plugin;
}
}
}
}
return $basename;
}
/**
* Validate plugin basename
*
* @param string $basename Plugin basename
* @return boolean
*/
function ai1wm_validate_plugin_basename( $basename ) {
if ( ( $plugins = get_plugins() ) ) {
foreach ( $plugins as $plugin => $info ) {
if ( $plugin === $basename ) {
return true;
}
}
}
return false;
}
/**
* Validate theme basename
*
* @param string $basename Theme basename
* @return boolean
*/
function ai1wm_validate_theme_basename( $basename ) {
if ( ( $themes = search_theme_directories() ) ) {
foreach ( $themes as $theme => $info ) {
if ( $info['theme_file'] === $basename ) {
return true;
}
}
}
return false;
}
/**
* Flush WP options cache
*
* @return void
*/
function ai1wm_cache_flush() {
wp_cache_init();
wp_cache_flush();
// Reset WP options cache
wp_cache_set( 'alloptions', array(), 'options' );
wp_cache_set( 'notoptions', array(), 'options' );
// Reset WP sitemeta cache
wp_cache_set( '1:notoptions', array(), 'site-options' );
wp_cache_set( '1:ms_files_rewriting', false, 'site-options' );
wp_cache_set( '1:active_sitewide_plugins', false, 'site-options' );
// Delete WP options cache
wp_cache_delete( 'alloptions', 'options' );
wp_cache_delete( 'notoptions', 'options' );
// Delete WP sitemeta cache
wp_cache_delete( '1:notoptions', 'site-options' );
wp_cache_delete( '1:ms_files_rewriting', 'site-options' );
wp_cache_delete( '1:active_sitewide_plugins', 'site-options' );
// Remove WP options filter
remove_all_filters( 'sanitize_option_home' );
remove_all_filters( 'sanitize_option_siteurl' );
remove_all_filters( 'default_site_option_ms_files_rewriting' );
}
/**
* Flush Elementor cache
*
* @return void
*/
function ai1wm_elementor_cache_flush() {
delete_post_meta_by_key( '_elementor_css' );
delete_option( '_elementor_global_css' );
delete_option( 'elementor-custom-breakpoints-files' );
}
/**
* Set URL scheme
*
* @param string $url URL value
* @param string $scheme URL scheme
* @return string
*/
function ai1wm_url_scheme( $url, $scheme = '' ) {
if ( empty( $scheme ) ) {
return preg_replace( '#^\w+://#', '//', $url );
}
return preg_replace( '#^\w+://#', $scheme . '://', $url );
}
/**
* Opens a file in specified mode
*
* @param string $file Path to the file to open
* @param string $mode Mode in which to open the file
* @return resource
* @throws Ai1wm_Not_Accessible_Exception
*/
function ai1wm_open( $file, $mode ) {
$file_handle = @fopen( $file, $mode );
if ( false === $file_handle ) {
throw new Ai1wm_Not_Accessible_Exception( sprintf( __( 'Unable to open %s with mode %s. Technical details', AI1WM_PLUGIN_NAME ), $file, $mode ) );
}
return $file_handle;
}
/**
* Write contents to a file
*
* @param resource $handle File handle to write to
* @param string $content Contents to write to the file
* @return integer
* @throws Ai1wm_Not_Writable_Exception
* @throws Ai1wm_Quota_Exceeded_Exception
*/
function ai1wm_write( $handle, $content ) {
$write_result = @fwrite( $handle, $content );
if ( false === $write_result ) {
if ( ( $meta = stream_get_meta_data( $handle ) ) ) {
throw new Ai1wm_Not_Writable_Exception( sprintf( __( 'Unable to write to: %s. Technical details', AI1WM_PLUGIN_NAME ), $meta['uri'] ) );
}
} elseif ( strlen( $content ) !== $write_result ) {
if ( ( $meta = stream_get_meta_data( $handle ) ) ) {
throw new Ai1wm_Quota_Exceeded_Exception( sprintf( __( 'Out of disk space. Unable to write to: %s. Technical details', AI1WM_PLUGIN_NAME ), $meta['uri'] ) );
}
}
return $write_result;
}
/**
* Read contents from a file
*
* @param resource $handle File handle to read from
* @param string $filesize File size
* @return integer
* @throws Ai1wm_Not_Readable_Exception
*/
function ai1wm_read( $handle, $filesize ) {
$read_result = @fread( $handle, $filesize );
if ( false === $read_result ) {
if ( ( $meta = stream_get_meta_data( $handle ) ) ) {
throw new Ai1wm_Not_Readable_Exception( sprintf( __( 'Unable to read file: %s. Technical details', AI1WM_PLUGIN_NAME ), $meta['uri'] ) );
}
}
return $read_result;
}
/**
* Seeks on a file pointer
*
* @param string $handle File handle to seeks
* @return integer
*/
function ai1wm_seek( $handle, $offset, $mode = SEEK_SET ) {
$seek_result = @fseek( $handle, $offset, $mode );
if ( -1 === $seek_result ) {
if ( ( $meta = stream_get_meta_data( $handle ) ) ) {
throw new Ai1wm_Not_Seekable_Exception( sprintf( __( 'Unable to seek to offset %d on %s. Technical details', AI1WM_PLUGIN_NAME ), $offset, $meta['uri'] ) );
}
}
return $seek_result;
}
/**
* Tells on a file pointer
*
* @param string $handle File handle to tells
* @return integer
*/
function ai1wm_tell( $handle ) {
$tell_result = @ftell( $handle );
if ( false === $tell_result ) {
if ( ( $meta = stream_get_meta_data( $handle ) ) ) {
throw new Ai1wm_Not_Tellable_Exception( sprintf( __( 'Unable to get current pointer position of %s. Technical details', AI1WM_PLUGIN_NAME ), $meta['uri'] ) );
}
}
return $tell_result;
}
/**
* Closes a file handle
*
* @param resource $handle File handle to close
* @return boolean
*/
function ai1wm_close( $handle ) {
return @fclose( $handle );
}
/**
* Deletes a file
*
* @param string $file Path to file to delete
* @return boolean
*/
function ai1wm_unlink( $file ) {
return @unlink( $file );
}
/**
* Sets modification time of a file
*
* @param string $file Path to file to change modification time
* @param integer $time File modification time
* @return boolean
*/
function ai1wm_touch( $file, $mtime ) {
return @touch( $file, $mtime );
}
/**
* Changes file mode
*
* @param string $file Path to file to change mode
* @param integer $time File mode
* @return boolean
*/
function ai1wm_chmod( $file, $mode ) {
return @chmod( $file, $mode );
}
/**
* Copies one file's contents to another
*
* @param string $source_file File to copy the contents from
* @param string $destination_file File to copy the contents to
*/
function ai1wm_copy( $source_file, $destination_file ) {
$source_handle = ai1wm_open( $source_file, 'rb' );
$destination_handle = ai1wm_open( $destination_file, 'ab' );
while ( $buffer = ai1wm_read( $source_handle, 4096 ) ) {
ai1wm_write( $destination_handle, $buffer );
}
ai1wm_close( $source_handle );
ai1wm_close( $destination_handle );
}
/**
* Check whether file size is supported by current PHP version
*
* @param string $file Path to file
* @param integer $php_int_size Size of PHP integer
* @return boolean $php_int_max Max value of PHP integer
*/
function ai1wm_is_filesize_supported( $file, $php_int_size = PHP_INT_SIZE, $php_int_max = PHP_INT_MAX ) {
$size_result = true;
// Check whether file size is less than 2GB in PHP 32bits
if ( $php_int_size === 4 ) {
if ( ( $file_handle = @fopen( $file, 'r' ) ) ) {
if ( @fseek( $file_handle, $php_int_max, SEEK_SET ) !== -1 ) {
if ( @fgetc( $file_handle ) !== false ) {
$size_result = false;
}
}
@fclose( $file_handle );
}
}
return $size_result;
}
/**
* Verify secret key
*
* @param string $secret_key Secret key
* @return boolean
* @throws Ai1wm_Not_Valid_Secret_Key_Exception
*/
function ai1wm_verify_secret_key( $secret_key ) {
if ( $secret_key !== get_option( AI1WM_SECRET_KEY ) ) {
throw new Ai1wm_Not_Valid_Secret_Key_Exception( __( 'Unable to authenticate the secret key. Technical details', AI1WM_PLUGIN_NAME ) );
}
return true;
}
/**
* Is scheduled backup?
*
* @return boolean
*/
function ai1wm_is_scheduled_backup() {
if ( isset( $_GET['ai1wm_manual_export'] ) || isset( $_POST['ai1wm_manual_export'] ) ) {
return false;
}
if ( isset( $_GET['ai1wm_manual_import'] ) || isset( $_POST['ai1wm_manual_import'] ) ) {
return false;
}
if ( isset( $_GET['ai1wm_manual_restore'] ) || isset( $_POST['ai1wm_manual_restore'] ) ) {
return false;
}
return true;
}
/**
* PHP setup environment
*
* @return void
*/
function ai1wm_setup_environment() {
// Set whether a client disconnect should abort script execution
@ignore_user_abort( true );
// Set maximum execution time
@set_time_limit( 0 );
// Set maximum time in seconds a script is allowed to parse input data
@ini_set( 'max_input_time', '-1' );
// Set maximum backtracking steps
@ini_set( 'pcre.backtrack_limit', PHP_INT_MAX );
// Set binary safe encoding
if ( @function_exists( 'mb_internal_encoding' ) && ( @ini_get( 'mbstring.func_overload' ) & 2 ) ) {
@mb_internal_encoding( 'ISO-8859-1' );
}
// Clean (erase) the output buffer and turn off output buffering
if ( @ob_get_length() ) {
@ob_end_clean();
}
// Set error handler
@set_error_handler( 'Ai1wm_Handler::error' );
// Set shutdown handler
@register_shutdown_function( 'Ai1wm_Handler::shutdown' );
}
/**
* Get WordPress time zone string
*
* @return string
*/
function ai1wm_get_timezone_string() {
if ( ( $timezone_string = get_option( 'timezone_string' ) ) ) {
return $timezone_string;
}
if ( ( $gmt_offset = get_option( 'gmt_offset' ) ) ) {
if ( $gmt_offset > 0 ) {
return sprintf( 'UTC+%s', abs( $gmt_offset ) );
} elseif ( $gmt_offset < 0 ) {
return sprintf( 'UTC-%s', abs( $gmt_offset ) );
}
}
return 'UTC';
}
/**
* Get WordPress filter hooks
*
* @param string $tag The name of the filter hook
* @return array
*/
function ai1wm_get_filters( $tag ) {
global $wp_filter;
// Get WordPress filter hooks
$filters = array();
if ( isset( $wp_filter[ $tag ] ) ) {
if ( ( $filters = $wp_filter[ $tag ] ) ) {
// WordPress 4.7 introduces new class for working with filters/actions called WP_Hook
// which adds another level of abstraction and we need to address it.
if ( isset( $filters->callbacks ) ) {
$filters = $filters->callbacks;
}
}
ksort( $filters );
}
return $filters;
}
/**
* Get WordPress uploads directory
*
* @return string
*/
function ai1wm_get_uploads_dir() {
if ( ( $upload_dir = wp_upload_dir() ) ) {
if ( isset( $upload_dir['basedir'] ) ) {
return untrailingslashit( $upload_dir['basedir'] );
}
}
}
/**
* Get WordPress uploads URL
*
* @return string
*/
function ai1wm_get_uploads_url() {
if ( ( $upload_dir = wp_upload_dir() ) ) {
if ( isset( $upload_dir['baseurl'] ) ) {
return trailingslashit( $upload_dir['baseurl'] );
}
}
}
/**
* Get WordPress uploads path
*
* @return string
*/
function ai1wm_get_uploads_path() {
if ( ( $upload_dir = wp_upload_dir() ) ) {
if ( isset( $upload_dir['basedir'] ) ) {
return str_replace( ABSPATH, '', $upload_dir['basedir'] );
}
}
}
/**
* i18n friendly version of basename()
*
* @param string $path File path
* @param string $suffix If the filename ends in suffix this will also be cut off
* @return string
*/
function ai1wm_basename( $path, $suffix = '' ) {
return urldecode( basename( str_replace( array( '%2F', '%5C' ), '/', urlencode( $path ) ), $suffix ) );
}
/**
* i18n friendly version of dirname()
*
* @param string $path File path
* @return string
*/
function ai1wm_dirname( $path ) {
return urldecode( dirname( str_replace( array( '%2F', '%5C' ), '/', urlencode( $path ) ) ) );
}
/**
* Replace forward slash with current directory separator
*
* @param string $path Path
* @return string
*/
function ai1wm_replace_forward_slash_with_directory_separator( $path ) {
return str_replace( '/', DIRECTORY_SEPARATOR, $path );
}
/**
* Replace current directory separator with forward slash
*
* @param string $path Path
* @return string
*/
function ai1wm_replace_directory_separator_with_forward_slash( $path ) {
return str_replace( DIRECTORY_SEPARATOR, '/', $path );
}
/**
* Escape Windows directory separator
*
* @param string $path Path
* @return string
*/
function ai1wm_escape_windows_directory_separator( $path ) {
return preg_replace( '/[\\\\]+/', '\\\\\\\\', $path );
}
/**
* Should reset WordPress permalinks?
*
* @param array $params Request parameters
* @return boolean
*/
function ai1wm_should_reset_permalinks( $params ) {
global $wp_rewrite, $is_apache;
// Permalinks are not supported
if ( empty( $params['using_permalinks'] ) ) {
if ( $wp_rewrite->using_permalinks() ) {
if ( $is_apache ) {
if ( ! apache_mod_loaded( 'mod_rewrite', false ) ) {
return true;
}
}
}
}
return false;
}
/**
* Get .htaccess file content
*
* @return string
*/
function ai1wm_get_htaccess() {
if ( is_file( AI1WM_WORDPRESS_HTACCESS ) ) {
return @file_get_contents( AI1WM_WORDPRESS_HTACCESS );
}
}
/**
* Get web.config file content
*
* @return string
*/
function ai1wm_get_webconfig() {
if ( is_file( AI1WM_WORDPRESS_WEBCONFIG ) ) {
return @file_get_contents( AI1WM_WORDPRESS_WEBCONFIG );
}
}
Sản phẩm – CHỢ TRỜI TRÊN MẠNG
https://chotroitrenmang.com
Công nghệ, điện tử, điện máy, điện lạnh, điện thoại, máy tính bảng, laptop, tablet, du lịch, thời trang, sức khỏe, làm đẹpWed, 23 Oct 2024 23:03:51 +0000vi
hourly
1 https://wordpress.org/?v=5.7.15https://chotroitrenmang.com/wp-content/uploads/2020/10/cropped-chotroitrenmang-32x32.pngSản phẩm – CHỢ TRỜI TRÊN MẠNG
https://chotroitrenmang.com
3232Dây curoa tổng Innova 7PK2300 – Dongil – Hàn Quốc – 439.000 vnđ
https://chotroitrenmang.com/mua/day-curoa-tong-innova-7pk2300-dongil-han-quoc-439-000-vnd/
https://chotroitrenmang.com/mua/day-curoa-tong-innova-7pk2300-dongil-han-quoc-439-000-vnd/#respondWed, 10 Mar 2021 15:04:56 +0000https://chotroitrenmang.com/?post_type=product&p=2486
Dây curoa tổng Toyota Innova – 7PK2300
Hiệu: Dongil
Xuất xứ: Hàn Quốc
Vật liệu: Cấu tạo 4 lớp gồm: cotton, vải sợi tổng hợp, cao su tổng hợp (CR và EPDM) chịu nhiệt, lõi Polyester chống kéo giãn.
Ưu điểm: chống mài mòn, động cơ hoạt động êm ái, nhẹ nhàng, tính năng vượt trội so với dây thông thường.
Màu sắc: Đen
Số gân: 7
Độ rộng dây (mm): 24
Chiều dài dây (mm): 2300
Mã thay thế: 7PK2208, 7PK2209, 7PK2301, 7PK2302
]]>https://chotroitrenmang.com/mua/day-curoa-tong-innova-7pk2300-dongil-han-quoc-439-000-vnd/feed/0Máy nước nóng Ferroli QQ EVO 20L TE – 2.590.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-te-2-590-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-te-2-590-000-vnd/#respondThu, 04 Feb 2021 10:23:17 +0000https://chotroitrenmang.com/?post_type=product&p=2478Đặc điểm nổi bật:
Ngắt mạch điện tức thời với chức năng chống điện giật ELCB
Có Van xả cặn tiện lợi, giúp cho nguồn nước luôn sạch
Làm nóng gián tiếp phù hợp với những nói có khí hậu lạnh
Thanh Anode MG chống ăn mòn, tăng tuổi thọ cho máy
Lớp vỏ chống thấm nước IPX1, giúp vỏ máy không bị rỉ sét
Giá tham khảo: 2.590.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Ferroli QQ EVO 20L TE
Đặc điểm sản phẩm
Model:
QQ EVO 20L TE
Màu sắc:
Trắng
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
96 tháng bình chứa
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Gián tiếp
Bơm trợ lực:
Không
Dung tích:
20 lít
Công suất máy nước nóng:
2500 W
Nhiệt độ:
75°C
Thời gian làm nóng:
Đang cập nhật
Nút điều khiển:
Nhiệt độ
Chế độ an toàn:
Chống giật ELCB
Màn hình hiển thị:
Không
Kích thước thùng:
650x340x340 mm
Khối lượng thùng (kg):
12.5 kg
Thiết kế sang trọng
Máy nước nóng Ferroli QQ EVO 20L TE có thiết kế đơn giản, hiện đại mà sang trọng với tông màu chủ đạo là trắng và có viền xanh dương. Ngoài khả năng cung cấp nước ấm, thiết bị này còn tăng cao tính thẩm mỹ cho phòng tắm của bạn.
Làm nóng nhanh
Máy nước nóng Ferroli QQ Evo 20L TE có dung tích tích 20 lít công suất làm nóng 2500W kết hợp với công nghệ làm nóng gián tiếp giúp làm nóng nước nhanh chóng hơn.
Hạn chế ăn mòn
Để nâng cao tuổi thọ của máy nước nóng Ferroli, thanh Anode MG có kích thước lớn để giúp cho chất lượng nước được tốt hơn đảm bảo an toàn cho sức khỏe người dùng.
Xả cặn tiện lợi
Máy nước nóng Ferroli QQ EVO 20L TE có thế van xả cặn rất tiện lợi cho người dùng có thể tự vệ sinh máy nước nóng bằng cách tháo van, xả cặn và sục bình.
An toàn khi sử dụng
Máy nước nóng Ferroli trang bị rờ le an toàn sẽ tự động ngắt điện khi nhiệt độ trung bình quá 90 độ C và dây nguồn chống giật sẽ tự động ngắt điện khi rò rỉ.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-te-2-590-000-vnd/feed/0Máy Nước Nóng Ferroli VERDI 15L AE – 2.550.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-15l-ae-2-550-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-15l-ae-2-550-000-vnd/#respondThu, 04 Feb 2021 10:16:36 +0000https://chotroitrenmang.com/?post_type=product&p=2474Đặc điểm nổi bật:
Bộ chống rò điện ELCB chống giật điện, an toàn sử dụng
Lòng bình tráng men Titanium ngăn chặn rò rỉ nước
Có màn hình hiển thị nhiệt độ, dễ dàng kiểm soát
Lớp vỏ chống thấm nước IPX1, giúp vỏ máy không bị rỉ sét
Nút xoay nhiệt độ tiện lợi, đáp ứng nhiều nhu cầu sử dụng
Máy làm nóng gián tiếp, phù hợp với nơi có khí hậu lạnh
Giá tham khảo: 2.550.000 VNĐ.
]]>Thông số kỹ thuật Máy Nước Nóng Ferroli VERDI 15L AE
Đặc điểm sản phẩm
Model:
VERDI 15L AE
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
Linh kiện: 18 tháng – bình chứa: 3 năm & thanh nhiệt: vĩnh viễn
Loại máy:
Gián tiếp
Dung tích:
15 lít
Công suất máy nước nóng:
2500 W
Nút điều khiển:
Nhiệt độ
Chế độ an toàn:
Chống giật ELCB
Màn hình hiển thị:
Có
Kiểu dáng sang trọng
Máy nước nóng Ferroli Verdi 15L Ae được thiết kế hiện đại, sang trọng. Có thanh nhiệt tráng men siêu bền, chống lắng cặn và tiết kiệm điện năng.
Chống giật ELCB
Máy nước nóng Ferroli có ELCB được thiết kế đảm bảo ngắt điện ngay tức thời nhằm giảm thiểu các tác hại nguy hiểm do sốc điện gây ra.
Bình chứa tráng Titan
Máy nước nóng có bình chứa tráng Titan siêu bền và vỏ ngoài phủ men xanh vĩnh cửu. Lớp cách nhiệt an toàn, không có chất CFC, ngăn thất thoát nhiệt lượng và tiêu hao năng lượng. Làm nóng mau và nước nóng bảo quản nhiệt độ cao nhất.
Nút xoay nhiệt độ
Máy nước nóng Ferroli Verdi 15L Ae lựa chọn mức công suất qua nút xoay điều chỉnh. Trang bị rơ le ngăn ngừa cháy khô và van xả cặn. Thanh Anode Magie lớn hạn chế ăn mòn và kéo dài tuổi thọ máy.
Van xả cặn tiện ích
Máy nước nóng được chế tạo bằng công nghệ sơn mạ tính điện với tuổi thọ cao. Bên cạnh đó, máy còn được trang bị van xả cặn tiện ích giúp người dùng dễ dàng tự tháo vặn để vệ sinh mà không cần phải nhờ đến dịch vụ.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-15l-ae-2-550-000-vnd/feed/0Máy nước nóng Ferroli QQ Evo TE – 2.390.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-te-2-390-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-te-2-390-000-vnd/#respondThu, 04 Feb 2021 10:10:20 +0000https://chotroitrenmang.com/?post_type=product&p=2466
Đặc điểm nổi bật:
Làm nóng trực tiếp giúp cho nước nóng nhanh chóng
Công suất 4500 W cùng bơm trợ lực cho lực nước mạnh
Hệ thống chống giật điện ELCB an toàn cho người dùng
Điều khiển bằng nút xoay đơn giản, dễ sử dụng
Tính năng tự ngắt điện khi quá nhiệt, tránh gây bỏng
Giá tham khảo: 2.390.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Ferroli QQ Evo TE
Đặc điểm sản phẩm
Model:
QQ EVO 15L TE
Màu sắc:
Trắng
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
96 tháng bình chứa
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Gián tiếp
Bơm trợ lực:
Không
Dung tích:
15 lít
Công suất máy nước nóng:
2500 W
Nhiệt độ:
75°C
Thời gian làm nóng:
Đang cập nhật
Nút điều khiển:
Nhiệt độ
Chế độ an toàn:
Chống giật ELCB
Màn hình hiển thị:
Không
Kích thước sản phẩm:
485x300x280 mm
Công suất mạnh mẽ
Máy nước nóng Ferroli QQ Evo TE có công suất 2500W mạnh mẽ, tạo được nguồn nước có nhiệt độ cao hơn loại máy trực tiếp. Được hãng Ferroli – nhà sản xuất thiết bị nhiệt hàng đầu thế giới chế tạo.
Thanh Anode lớn
Máy nước nóng Ferroli QQ Evo TE có thanh Mg anode làm mềm nước, bảo vệ ruột bình, cho chất lượng nước tốt. Bên cạnh đó, máy còn được trang bị có chế độ chống giật ELCB an toàn, an tâm khi sử dụng cho gia đình có con nhỏ.
Lớp tráng men silicon an toàn
Bình chứa máy nước nóng Ferroli với lớp men Titan phủ kín, ruột bình bằng công nghệ tĩnh điện nung nóng nhiệt độ 850 độ C cho bề mặt ruột thành mặt phẳng thống nhất, chống rò rỉ điện. Máy tự ngắt điện khi nhiệt độ nước quá 90 độ C, khởi động lại sau khắc phục với rơ le bảo vệ an toàn.
Van xã cặn tiện ích
Máy nước nóng có van xả cặn tiện dụng, vệ sinh bình dễ dàng, người dùng tự tháo van, xả cặn, sục rửa bình tại nhà.
Lớp cách nhiệt không chứa CFC
Máy nước nóng Ferroli QQ Evo TE từ lớp bọt tổng hợp Polyurethane đậm đặc không có CFC, lớp cách nhiệt giảm thất thoát năng lượng. Tiết kiệm điện năng với 3 công suất.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-te-2-390-000-vnd/feed/0Máy nước nóng Ferroli Divo SPK 4.5S Trắng – 1.990.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-spk-4-5s-trang-1-990-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-spk-4-5s-trang-1-990-000-vnd/#respondThu, 04 Feb 2021 09:29:16 +0000https://chotroitrenmang.com/?post_type=product&p=2456
Đặc điểm nổi bật:
Làm nóng trực tiếp giúp cho nước nóng nhanh chóng
Công suất 4500 W cùng bơm trợ lực cho lực nước mạnh
Hệ thống chống giật điện ELCB an toàn cho người dùng
Điều khiển bằng nút xoay đơn giản, dễ sử dụng
Tính năng tự ngắt điện khi quá nhiệt, tránh gây bỏng
Giá tham khảo: 1.990.000 VNĐ.
]]>Thông số kỹ thuật Máy nước nóng Ferroli Divo SPK 4.5S Trắng
Đặc điểm sản phẩm
Model:
Divo SPK 4.5S
Màu sắc:
Trắng Ngọc Trai
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Năm ra mắt :
2019
Thời gian bảo hành:
18 tháng bảo hành linh kiện điện tử, 5 năm thân bình
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Trực tiếp
Bơm trợ lực:
Có
Công suất máy nước nóng:
4500 W
Nhiệt độ:
55°C
Nút điều khiển:
Nhiệt độ, Lưu lượng nước
Chế độ an toàn:
Chống giật ELCB
Khối lượng sản phẩm (kg):
3 kg
Kích thước sản phẩm:
360 x 240 x 55 mm
Máy nước nóng thiết kế nhỏ gọn, siêu mỏng
Máy nước nóng Ferroli Divo SPK 4.5S Trắng sở hữu thiết kế nhỏ gọn dễ dàng lắp đặt ở nhiều nơi trong không gian nhà tắm của gia đình bạn. Máy nước nóng được làm từ chất liệu nhựa Polyamite có tuổi thọ cao kết hợp với màu trắng tăng thêm phần sang trọng cho không gian nội thất của gia đình bạn.
Máy nước nóng sở hữu chức năng chống giật ELCB an toàn tuyệt đối
Máy nước nóng Ferroli Divo SPK 4.5S Trắng được trang bị chức năng chống giật ELCB, có khả năng tự động ngắt điện khi có dòng điện rò rỉ trên 15mA. Chức năng này sẽ giúp bảo vệ và hạn chế sự mất mát ở bên trong máy nước nóng, mang lại sự an tâm và thoải mái nhất cho người dùng.
Máy có bơm trợ lực
Máy nước nóng Ferroli Divo SPK 4.5S Trắng có bơm trợ lực đảm bảo cung cấp đủ lượng nước đầu vào cần thiết để làm nóng. Đây chính là một bộ phận làm tăng sự hoàn hảo cho chiếc máy nước nóng trực tiếp Ferroli.
Dễ dàng sử dụng
Máy nước nóng có bơm trợ lực sở hữu hệ thống điều khiển dạng nút bấm và núm xoay, giúp các thao tác điều chỉnh nhiệt độ vô cùng dễ dàng và tinh chỉnh chế độ theo mong muốn chỉ với một thao tác xoay đơn giản.
Hiệu suất cao, tiết kiệm điện
Máy nước nóng Ferroli có thanh đốt hiệu suất cao bằng đồng tinh khiết, giúp đảm bảo độ bền cao, làm nóng nhanh. Bình chứa nước bằng sợi thủy tinh, giữ nhiệt tốt, tiết kiệm điện năng.
Dễ dàng điều chỉnh lượng nước
Máy nước nóng cho phép người dùng dễ dàng điều chỉnh lượng nước theo đúng mong muốn chỉ với thao tác xoay nút vô cùng đơn giản.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-spk-4-5s-trang-1-990-000-vnd/feed/0Máy nước nóng Ferroli Divo SSN 4.5S – 1.890.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-ssn-4-5s-1-890-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-ssn-4-5s-1-890-000-vnd/#respondThu, 04 Feb 2021 09:24:38 +0000https://chotroitrenmang.com/?post_type=product&p=2457
Đặc điểm nổi bật:
Chế độ làm nóng trực tiếp cho nước nóng lên nhanh chóng
Ngắt mạch điện tức thời với chức năng chống điện giật ELCB
Thiết kế đi kèm vòi sen mạ crom sang trọng với 4 chế độ phun
Chất liệu vỏ chống thấm nước chuẩn IPX4 tăng tuổi thọ máy
Tự ngắt điện khi nhiệt độ cao hơn 55 độ C, chống bị bỏng nước
Giá tham khảo: 1.890.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Ferroli Divo SSN 4.5S
Đặc điểm sản phẩm
Model:
DIVO SSN 4.5S
Màu sắc:
Trắng
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
Linh kiện: 24 tháng & ruột bình: 60 tháng
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Trực tiếp
Bơm trợ lực:
Không
Công suất máy nước nóng:
4500 W
Nhiệt độ:
55°C
Thời gian làm nóng:
Đang cập nhật
Nút điều khiển:
Nhiệt độ, Lưu lượng nước
Chế độ an toàn:
Chống giật ELCB
Màn hình hiển thị:
Không
Kích thước thùng:
520x260x100 mm
Khối lượng thùng (kg):
2.9 kg
Cơ chế làm nóng trực tiếp giúp nước nóng lên ngay lập tức
Với cơ chế hoạt động làm nóng trực tiếp giúp máy nước nóng Ferroli Divo SSN 4.5S 4500W sẽ ngay lập tức làm nóng nước sau khi khởi động, cho bạn được tận hưởng dòng nước nóng thư giãn tức thì mà không phải chờ lâu.
Thiết kế mỏng, tiết kiệm không gian, công suất đến 4500 W
Máy nước nóng Ferroli có thiết kế siêu mỏng (9 cm) và nhẹ, không chỉ tiết kiệm cho không gian mà còn mang lại vẻ đẹp sang trọng, tinh tế, thiết kế mỏng, nhỏ gọn như này, bạn có thể dễ dàng lắp đặt máy ở bất kì vị trí nào trong phòng tắm. Với công suất 4500 W mang lại hiệu quả sử dụng nhanh chóng.
Tự động ngắt điện khi nhiệt độ tăng cao hơn 55 độ C tránh bị trạng bỏng do nước quá nóng
Được trang bị cảm biến nhiệt độ có khả năng tự động ngắt điện khi phát hiện nước nóng vượt mức 55 độ C, máy nước nóng trực tiếp này giúp bạn yên tâm hơn trong quá trình sử dụng, không còn phải lo lắng nguy cơ nước quá nóng gây bỏng rát làn da.
Máy nước nóng đi kem vòi sen mạ Crom sang trọng, với 3 chế độ phun khác nhau: Phun mạnh, phun rộng và phun sương. Mang đến cảm giác thoải mái và sảng khoái cho người dùng
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-divo-ssn-4-5s-1-890-000-vnd/feed/0Máy nước nóng Ferroli Verdi 20L AE – 2.290.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-20l-ae-2-290-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-20l-ae-2-290-000-vnd/#respondThu, 07 Jan 2021 09:44:09 +0000https://chotroitrenmang.com/?post_type=product&p=2449ƯU ĐÃI CHỈ CÓ TẠI NGUYỄN KIM
Cơ hội trúng bộ quà 100 triệu Nâng cấp nhà cửa.
Giảm thêm 500.000đ khi thanh toán bằng thẻ tín dụng quốc tế TPBank.
Đặc điểm nổi bật:
Làm nóng gián tiếp, phù hợp với những nơi có khí hậu lạnh
Lớp cách nhiệt Polyurethane không chứa CFC, an toàn sử dụng
Ngắt mạch điện tức thời với chức năng chống điện giật ELCB
Có màn hình hiển thị nhiệt độ, dễ dàng kiểm soát nhiệt độ
Lòng bình tráng men Titanium ngăn rò rỉ nước bên trong
Lớp vỏ chống thấm nước IPX1, giúp vỏ máy không bị rỉ sét
Giá tham khảo: 2.290.000 VNĐ.
]]>Thông số kỹ thuật Máy nước nóng Ferroli Verdi 20L AE
Đặc điểm sản phẩm
Model:
VERDI 20L AE
Màu sắc:
Trắng
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
Linh kiện: 18 tháng – bình chứa: 3 năm & thanh nhiệt: vĩnh viễn
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Gián tiếp
Bơm trợ lực:
Không
Dung tích:
20 lít
Công suất máy nước nóng:
2500 W
Nhiệt độ:
35°C – 75°C
Thời gian làm nóng:
Đang cập nhật
Nút điều khiển:
Nhiệt độ
Chế độ an toàn:
Chống giật ELCB
Màn hình hiển thị:
Có
Kích thước thùng:
630x308x306 mm
Khối lượng thùng (kg):
11.8 kg
Thiết kế trang nhã, đẹp mắt
Bình nước nóng Ferroli VERDI 20L AE 20 Lít có thiết kế trang nhã và đẹp mắt đến từ thương hiệu máy nước nóng Ferroli. Lớp vỏ bên ngoài được phủ một lớp sơn màu trắng, sáng bóng ít bám bẩn và dễ dàng lau chùi. Đi cùng với đó là dung tích 20 lít phù hợp dành cho gia đình có 2 – 3 thành viên cho 1 lần tắm.
Và với cơ chế làm nóng gián tiếp thì máy phù hợp dùng cho gia đình có bồn tắm, khách sạn nhỏ hoặc khu vực có khí hậu lạnh nhất là vào mùa đông nhiệt độ xuống dưới 20 độ C.
Cầu dao chống rò điện ELCB bảo vệ an toàn cho cả nhà
Máy nước nóng gián tiếp Ferroli có khả năng ngắt điện tự động khi phát hiện rò rỉ điện hoặc dòng điện lớn hơn 15 mA nên bạn hoàn toàn yên tâm khi sử dụng.
Màn hình hiển thị nhiệt độ giúp người dùng dễ dàng theo dõi nhiệt độ phù hợp với làn da
Thanh nhiệt được tráng men giúp ngăn ngừa tình trạng bám cặn bẩn, hạn chế ăn mòn và hỗ trợ làm nước nóng nhanh
Bình chứa tráng men Titanium chống rò rỉ nước từ bên trong
Lớp men Titanium này được phủ kín trên bề mặt lòng bình của bình nước nóng Ferroli VERDI 20L AE thành một thể thống nhất có tác dụng chống rò rỉ nước, nâng cao chất lượng, độ bền cho bình chứa.
Nhìn chung, bình nước nóng Ferroli VERDI 20L AE có thiết kế thanh lịch cùng dung tích bình 20 lít sẽ là một lựa chọn lý tưởng cho những gia đình có 2 – 3 người. Ferroli còn trang bị những công nghệ như: Cầu dao ELCB chống rò điện, thanh nhiệt được tráng men, khả năng kháng nước IPX1,… giúp cho người dùng yên tâm hơn khi lựa chọn.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-verdi-20l-ae-2-290-000-vnd/feed/0Máy nước nóng Ferroli QQ EVO 20L KE – 1.890.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-ke-1-890-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-ke-1-890-000-vnd/#respondThu, 07 Jan 2021 09:19:49 +0000https://chotroitrenmang.com/?post_type=product&p=2440ƯU ĐÃI CHỈ CÓ TẠI NGUYỄN KIM
Cơ hội trúng bộ quà 100 triệu Nâng cấp nhà cửa.
Giảm thêm 500.000đ khi thanh toán bằng thẻ tín dụng quốc tế TPBank.
Đặc điểm nổi bật:
Máy làm nóng gián tiếp, phù hợp với nơi có khí hậu lạnh
Công suất 2500W làm nước nóng nhanh, tiết kiệm điện
Yên tâm sử dụng với chức năng chống giật điện ELCB
Lớp vỏ bên ngoài cách nhiệt tốt, tăng thời gian làm nóng
Lòng bình tráng men Titan chống rò rỉ nước, chống cháy nổ
Giá tham khảo: 1.890.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Ferroli QQ EVO 20L KE
Đặc điểm sản phẩm
Model:
QQ EVO 20L KE
Màu sắc:
Trắng
Nhà sản xuất:
Ferroli
Xuất xứ:
Việt Nam
Thời gian bảo hành:
96 tháng bình chứa
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Gián tiếp
Dung tích:
20 lít
Công suất máy nước nóng:
2500 W
Nhiệt độ:
75°C
Nút điều khiển:
Nhiệt độ
Chế độ an toàn:
Chống giật ELCB
Kích thước thùng:
650x340x340 mm
Khối lượng thùng (kg):
12.5 kg
Máy nước nóng Ferroli QQ EVO 20L KE thuộc dòng máy nước nóng gián tiếp
Máy nước nóng Ferroli QQ EVO 20L KE là dòng máy nước nóng gián tiếp thích hợp sử dụng ở những nơi có khí hậu lạnh. Máy nước nóng có dung tích lưu trữ nước 20 lít phục vụ tốt nhu cầu sử dụng của gia đình 4 thành viên.
Thanh đốt bền tốt
Thanh đốt của máy nước nóng có công suất mạnh mẽ 2500W, làm nước nóng nhanh chóng giúp tiết kiệm điện, độ bền cao, đảm bảo an toàn cho người dùng.
An toàn khi sử dụng
Với chức năng chống giật ELCB (Cầu dao chống rò điện đất – Earth Leakage Circuit Breaker) được trang bị trên máy nước nóng Ferroli, người dùng yên tâm sử dụng mà không lo bị điện giật.
Máy nước nóng cách nhiệt tốt
Máy nước nóng Ferroli QQ EVO 20L KE sở hữu lớp vỏ bên ngoài cách nhiệt rất tốt, giúp kéo dài thời gian nóng của nước bên trong bình chứa.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-ferroli-qq-evo-20l-ke-1-890-000-vnd/feed/0Máy nước nóng Panasonic DH-4NP1VS – 5.190.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-panasonic-dh-4np1vs-5-190-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-panasonic-dh-4np1vs-5-190-000-vnd/#respondWed, 06 Jan 2021 10:59:28 +0000https://chotroitrenmang.com/?post_type=product&p=2433ƯU ĐÃI CHỈ CÓ TẠI NGUYỄN KIM
Cơ hội trúng bộ quà 100 triệu Nâng cấp nhà cửa.
Giảm thêm 500.000đ khi thanh toán bằng thẻ tín dụng quốc tế TPBank.
Đặc điểm nổi bật:
Thành phần nước có ion Ag+ giúp kháng khuẩn hiệu quả
Công suất làm nóng 4500W đáp ứng tốt nhu cầu sử dụng
Tích hợp cơ chế cảm biến lưu lượng nước, tiết kiệm tối đa
Trang bị cầu dao chống rò rỉ điện ELCB, bảo vệ người dùng
Cơ chế kiểm soát và tự động điều chỉnh nhiệt độ rất tiện lợi
Được làm từ vật liệu chống cháy, đảm bảo an toàn tuyệt đối
Vòi sen Oval có độ bền cao được trang bị 3 chế độ phun tia
Thao tác điều khiển đơn giản với núm vặn lớn trên thân máy
Thiết kế gam màu bạc sang trọng, ít chiếm diện tích sử dụng
Giá tham khảo: 5.190.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Panasonic DH-4NP1VS
Đặc điểm sản phẩm
Model:
DH-4NP1VS
Màu sắc:
Bạc
Nhà sản xuất:
Panasonic
Xuất xứ:
Malaysia
Năm ra mắt :
2018
Thời gian bảo hành:
12 Tháng
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Trực tiếp
Bơm trợ lực:
Có
Dung tích:
Không bình chứa
Công suất máy nước nóng:
4500 W
Nhiệt độ:
25°C/20°C; 2L/min 51°C/46°C; 3L/min 42°C/37°C
Chế độ vòi sen:
3 chế độ
Nút điều khiển:
Núm vặn
Chế độ an toàn:
ELCB chống giật; Cảm biến lưu lượng nước; Vỏ máy chống tia nước phun; Kiểm soát nhiệt độ; Bộ điều chỉnh nhiệt tự động; Một nút nhấn On/Off; Vật liệu chống cháy; Vỏ bình nung làm từ Polyamide; Kết cấu cách điện, chống sốc điện
Màn hình hiển thị:
Không
Tương thích điện từ EMC:
Có
Khối lượng sản phẩm (kg):
2.2 kg
Kích thước sản phẩm:
185 x 420 x 85 mm
Kích thước thùng:
360 x 480 x 460 mm
Khối lượng thùng (kg):
4.3 kg
Thiết kế màu bạc, nhỏ gọn đầy sang trọng
Máy nước nóng Panasonic DH-4NP1VS 4500W được thiết kế nhỏ gọn, tắt bật với 1 nút bấm phù hợp từ không gian hẹp đến rộng rãi và có màu bạc tinh tế giúp tôn phòng tắm nhà bạn thêm sang trọng hơn.
*Hình ảnh chỉ mang tính minh họa
Công suất mạnh mẽ và làm nước nóng nhanh chóng
Với công suất 4500 W, cơ chế làm nước nóng trực tiếp ngay khi có dòng nước chảy qua và có thể điều chỉnh nhiệt độ, bạn sẽ không cần phải chờ đợi mà có thể đắm chìm và thư giãn ngay dưới dòng nước ấm êm dịu sau ngày dài làm việc và học tập mệt mỏi.
*Hình ảnh chỉ mang tính minh họa
Luồng nước mạnh mẽ nhờ bơm trợ lực vận hành siêu êm
Máy nước nóng Panasonic này có luồng nước mạnh mẽ nhờ tích hợp bơm trợ lực vận hành siêu êm, không nhỏ giọt giúp đảm bảo máy hoạt động tại những nơi có nguồn nước yếu, không đủ lực để bơm cung cấp cho máy.
*Hình ảnh chỉ mang tính minh họa
Nước được lọc sạch thông qua van cấp nước
Máy nước nóng này được thiết kế van cấp nước giúp hỗ trợ lọc sạch bụi bẩn, cặn bã tại những nơi có nguồn nước không được đảm bảo sạch sẽ, nhờ đó giúp bảo vệ động cơ máy bền hơn và người sử dụng được an toàn hơn.
*Hình ảnh chỉ mang tính minh họa
Vòi sen 3 kiểu phun có nút nhấn điều chỉnh
Vòi sen gồm 3 chế độ phun khác nhau: Phun mạnh, phun rộng và phun massage. Bạn chỉ cần nhấn mạnh vào nút là có thể thay đổi kiểu phun theo mong muốn, mang đến những phút giây thư giãn khi tắm với nước nóng. Kèm theo đó là khả năng kháng khuẩn ion Ag+, đảm bảo an toàn vệ sinh nguồn nước giúp bạn sử dụng thoải mái mà không lo đến vấn đề da liễu.
Tích hợp cầu dao ELCB – Chống rò rỉ điện, bảo vệ an toàn người dùng
Cầu dao ELCB có nhiệm vụ sẽ tự ngắt điện khi gặp phải sự số như dòng điện quá cao hay trường hợp cháy nổ, đảm bảo an toàn cho người tiêu dùng tránh khỏi những tình huống xấu nhất có thể xảy ra.
*Hình ảnh chỉ mang tính minh họa
Cảm biến lưu lượng nước khi phát hiện dòng nước chảy qua yếu hơn 2 lít/phút sẽ ngắt điện để tránh gây cháy nổ
*Hình ảnh chỉ mang tính minh họa
Không sợ nước vào máy gây hư hỏng nhờ khả năng chống nước đạt chuẩn IP25
Máy được bọc vỏ chống nước IP25 nên nước và bụi bẩn sẽ không thể chảy vào động cơ bên trong, gây hư hỏng máy.
*Hình ảnh chỉ mang tính minh họa
Chế độ kiểm soát nhiệt độ, đảm bảo an toàn làn da người dùng
Với chế độ kiểm soát nhiệt độ, máy sẽ tự cảm biến vàchỉ cho nước nóng đến mức độ tối đa cho phép (51 độ C), sau đó máy sẽ ngắt nguồn điện để nhiệt độ nước không tiếp tục tăng lên, bảo vệ người tiêu dùng tốt hơn.
*Hình ảnh chỉ mang tính minh họa
Nói chung máy nước nóng Panasonic DH-4NP1VS 4500W là một sản phẩm vừa hiện đại, an toàn và rất sang trọng, phù hợp cho nhu cầu cơ bản tại đa số gia đình hiện nay.
]]>https://chotroitrenmang.com/mua/may-nuoc-nong-panasonic-dh-4np1vs-5-190-000-vnd/feed/0Máy nước nóng Panasonic DH-4NTP1 – 5.190.000 VNĐ
https://chotroitrenmang.com/mua/may-nuoc-nong-panasonic-dh-4ntp1-5-190-000-vnd/
https://chotroitrenmang.com/mua/may-nuoc-nong-panasonic-dh-4ntp1-5-190-000-vnd/#respondWed, 06 Jan 2021 10:53:05 +0000https://chotroitrenmang.com/?post_type=product&p=2430ƯU ĐÃI CHỈ CÓ TẠI NGUYỄN KIM
Cơ hội trúng bộ quà 100 triệu Nâng cấp nhà cửa.
Giảm thêm 500.000đ khi thanh toán bằng thẻ tín dụng quốc tế TPBank.
Đặc điểm nổi bật:
Công suất làm nóng 4500W đáp ứng tốt nhu cầu sử dụng
Thành phần nước có ion Ag+ giúp kháng khuẩn hiệu quả
Tích hợp cơ chế cảm biến lưu lượng nước, tiết kiệm tối đa
Trang bị cầu dao chống rò rỉ điện ELCB, bảo vệ người dùng
Cơ chế kiểm soát và tự động điều chỉnh nhiệt độ rất tiện lợi
Được làm từ vật liệu chống cháy, đảm bảo an toàn tuyệt đối
Vòi sen Oval có độ bền cao được trang bị 3 chế độ phun tia
Thao tác điều khiển dễ dàng với núm vặn lớn trên thân máy
Giá tham khảo: 5.190.000 VNĐ.
]]>
Thông số kỹ thuật Máy nước nóng Panasonic DH-4NTP1
Đặc điểm sản phẩm
Model:
DH-4NTP1
Màu sắc:
Trắng
Nhà sản xuất:
Panasonic
Xuất xứ:
Malaysia
Năm ra mắt :
2018
Thời gian bảo hành:
12 Tháng
Địa điểm bảo hành:
Nguyễn Kim
Loại máy:
Trực tiếp
Bơm trợ lực:
Có
Dung tích:
Không bình chứa
Công suất máy nước nóng:
4500 W
Nhiệt độ:
25°C/20°C; 2L/min 51°C/46°C; 3L/min 42°C/37°C
Chế độ vòi sen:
3 chế độ
Nút điều khiển:
Núm vặn
Chế độ an toàn:
ELCB chống giật; Cảm biến lưu lượng nước; Vỏ máy chống tia nước phun; Kiểm soát nhiệt độ; Bộ điều chỉnh nhiệt tự động; Một nút nhấn On/Off; Vật liệu chống cháy; Vỏ bình nung làm từ Polyamide; Kết cấu cách điện, chống sốc điện