' . base64_encode( $output ) . '' ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions,WordPress.Security.EscapeOutput -- base64_encode function is used for backwards compatibility. } /** * Method write_feedback() * * Send response feedback data to be sent to the MainWP Dashboard. * * @param mixed $value Contains information to be send. * @param mixed $action action send message. */ public static function write_feedback( $value, $action = '' ) { /** * Action: process send feedback message. * * @since 5.1 */ do_action( 'mainwp_child_before_send_feedback_message', $value, $action ); $output = wp_json_encode( $value ); echo '' . base64_encode( $output ) . ''; // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions,WordPress.Security.EscapeOutput -- base64_encode function is used for backwards compatibility. } /** * Method send() * * Send response data to be sent to the MainWP Dashboard. * * @param mixed $value Contains information to be send. * @param mixed $action action send message. */ public static function send( $value, $action = '' ) { /** * Action: process before send close message. * * @since 4.4.0.3 */ do_action( 'mainwp_child_before_send_close_message', $value, $action ); MainWP_Utility::close_connection( $value ); } /** * Method write() * * Handle response data errors. * * @param string $error Contains error message. * @param mixed $code Contains the error code. */ public function error( $error, $code = null ) { $information['error'] = $error; if ( null !== $code ) { $information['error_code'] = $code; } static::write( $information ); } /** * Method get_mainwp_dir() * * Get the MainWP directory. * * @param string $newdir Contains directory name. * @param bool $die_on_error If true, process will die on error, if false, process will continue. * * @return array Return directory and directory URL. * @throws MainWP_Exception Error Message. */ public static function get_mainwp_dir( $subdir = null, $die_on_error = true, $direct_access = true ) { //phpcs:ignore -- NOSONAR - complexity acceptable for this function. if ( ! static::fs_is_connected() ) { throw new MainWP_Exception( esc_html__( 'Unable to connect to the filesystem.', 'mainwp-child' ) ); } /** * Global variable containing the instance of the (auto-)configured filesystem object after the filesystem "factory" has been run. * * @global object $wp_filesystem Filesystem object. */ global $wp_filesystem; $upload_dir = wp_upload_dir(); /** * Allow filtering the upload directory array. * * @since 5.4.1. * * @param array $upload_dir Array of upload directory info (from wp_upload_dir()). * @param string $subdir Optional. Sub Directory requested. * @param bool $die_on_error Optional. Die on error. * @param bool $direct_access Optional. Direct access. */ $upload_dir = apply_filters( 'mainwp_child_get_wp_upload_dir', $upload_dir, $subdir, $die_on_error, $direct_access ); $dir = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'mainwp' . DIRECTORY_SEPARATOR; static::check_dir( $dir, $die_on_error ); if ( ! $wp_filesystem->exists( $dir . 'index.php' ) ) { touch( $dir . 'index.php' ); } $url = $upload_dir['baseurl'] . '/mainwp/'; if ( 'backup' === $subdir ) { $newdir = $dir . 'backup' . DIRECTORY_SEPARATOR; static::check_dir( $newdir, $die_on_error ); if ( ! $wp_filesystem->exists( $newdir . 'index.php' ) ) { touch( $newdir . 'index.php' ); } $another_name = '.htaccess'; if ( ! $wp_filesystem->exists( $newdir . $another_name ) ) { $file = fopen( $newdir . $another_name, 'w+' ); fwrite( $file, 'deny from all' ); fclose( $file ); } $url .= 'backup/'; } else { $newdir = ! empty( $subdir ) ? $dir . $subdir . DIRECTORY_SEPARATOR : $dir; $url .= $subdir . '/'; static::check_dir( $newdir, $die_on_error ); if ( $direct_access ) { if ( ! $wp_filesystem->exists( trailingslashit( $newdir ) . 'index.php' ) ) { $wp_filesystem->touch( trailingslashit( $newdir ) . 'index.php' ); } if ( $wp_filesystem->exists( trailingslashit( $newdir ) . '.htaccess' ) ) { $wp_filesystem->delete( trailingslashit( $newdir ) . '.htaccess' ); } } elseif ( ! $wp_filesystem->exists( trailingslashit( $newdir ) . '.htaccess' ) ) { $wp_filesystem->put_contents( trailingslashit( $newdir ) . '.htaccess', 'deny from all' ); } } return array( $newdir, $url ); } /** * Method fs_is_connected() * * Check if WP FileSystem is connected. */ public static function fs_is_connected() { static::get_wp_filesystem(); global $wp_filesystem; if ( ! empty( $wp_filesystem ) && $wp_filesystem->connect() ) { return true; } return false; } /** * Method fwrite() * * @param string $file File path. * @param string $content content write. */ public static function file_put_contents( $file, $content ) { if ( static::fs_is_connected() ) { global $wp_filesystem; return $wp_filesystem->put_contents( $file, $content, FS_CHMOD_FILE ); } else { return file_put_contents( $file, $content );// phpcs:ignore WordPress.WP.AlternativeFunctions -- // NOSONAR . } } /** * Method mkdir() * * @param string $file File path. * @param int $mode File mode. */ public static function mkdir( $file, $mode = FS_CHMOD_DIR ) { if ( static::fs_is_connected() ) { global $wp_filesystem; return $wp_filesystem->mkdir( $file, $mode ); } else { return mkdir( $file );// phpcs:ignore WordPress.WP.AlternativeFunctions } } /** * Method move() * * @param string $source File source. * @param string $desc File desc. */ public static function move( $source, $desc ) { if ( static::fs_is_connected() ) { global $wp_filesystem; return $wp_filesystem->move( $source, $desc ); } else { return rename( $source, $desc );// phpcs:ignore WordPress.WP.AlternativeFunctions } } /** * Method is_writable() * * @param string $dir dir path. */ public static function is_writable( $dir ) { if ( static::fs_is_connected() ) { global $wp_filesystem; return $wp_filesystem->is_writable( $dir ); } else { return is_writable( $dir );// phpcs:ignore WordPress.WP.AlternativeFunctions } } /** * Method is_writable() * * @param string $dir dir path. */ public static function rmdir( $dir ) { if ( static::fs_is_connected() ) { global $wp_filesystem; return $wp_filesystem->rmdir( $dir ); } else { return rmdir( $dir );// phpcs:ignore WordPress.WP.AlternativeFunctions } } /** * Method check_dir() * * Check if the /mainwp/ direcorty is writable by server. * * @param string $dir Contains directory path. * @param bool $die_on_error If true, process will die on error, if false, process will continue. * @param int $chmod Contains information about the directory permissions settings. * * @throws MainWP_Exception Error message. */ public static function check_dir( $dir, $die_on_error, $chmod = 0755 ) { static::get_wp_filesystem(); /** * Global variable containing the instance of the (auto-)configured filesystem object after the filesystem "factory" has been run. * * @global object $wp_filesystem Filesystem object. */ global $wp_filesystem; if ( ! file_exists( $dir ) ) { if ( empty( $wp_filesystem ) ) { mkdir( $dir, $chmod, true ); } else { if ( ( 'ftpext' === $wp_filesystem->method ) && defined( 'FTP_BASE' ) ) { $ftpBase = FTP_BASE; $ftpBase = trailingslashit( $ftpBase ); $tmpdir = str_replace( ABSPATH, $ftpBase, $dir ); } else { $tmpdir = $dir; } $wp_filesystem->mkdir( $tmpdir, $chmod ); } if ( ! file_exists( $dir ) ) { $error = esc_html__( 'Unable to create directory ', 'mainwp-child' ) . str_replace( ABSPATH, '', $dir ) . '.' . esc_html__( ' Is its parent directory writable by the server?', 'mainwp-child' ); if ( $die_on_error ) { static::instance()->error( $error ); } else { throw new MainWP_Exception( $error ); //phpcs:ignore -- escaped. } } } } /** * Method search() * * Nested search field value in an array or object. * * @param array|object $arr Array or object to search. * @param string $key Field value to search for in the $array. * * @return mixed If found return field value, if not, return NULL. */ public static function search( $arr, $key ) { if ( is_object( $arr ) ) { $arr = (array) $arr; } if ( is_array( $arr ) || is_object( $arr ) ) { if ( isset( $arr[ $key ] ) ) { return $arr[ $key ]; } foreach ( $arr as $subarray ) { $result = static::search( $subarray, $key ); if ( null !== $result ) { return $result; } } } return null; } /** * Method get_wp_filesystem() * * Get the WordPress filesystem. * * @return mixed $init WordPress filesystem base. */ public static function get_wp_filesystem() { /** * Global variable containing the instance of the (auto-)configured filesystem object after the filesystem "factory" has been run. * * @global object $wp_filesystem Filesystem object. */ global $wp_filesystem; if ( empty( $wp_filesystem ) ) { ob_start(); if ( file_exists( ABSPATH . '/wp-admin/includes/screen.php' ) ) { include_once ABSPATH . '/wp-admin/includes/screen.php'; // NOSONAR -- WP compatible. } if ( file_exists( ABSPATH . '/wp-admin/includes/template.php' ) ) { include_once ABSPATH . '/wp-admin/includes/template.php'; // NOSONAR -- WP compatible. } $creds = request_filesystem_credentials( 'test' ); ob_end_clean(); if ( empty( $creds ) ) { if ( ! defined( 'MAINWP_SAVE_FS_METHOD' ) ) { /** * Defines save file system method. * * @const ( string ) Defined save file system method. * @source https://code-reference.mainwp.com/classes/MainWP.Child.MainWP_Helper.html */ define( 'MAINWP_SAVE_FS_METHOD', get_filesystem_method() ); } /** * Defines file system method. * * @const ( string ) Defined file system method. * @source https://code-reference.mainwp.com/classes/MainWP.Child.MainWP_Helper.html */ if ( ! defined( 'FS_METHOD' ) ) { define( 'FS_METHOD', 'direct' ); } } $init = \WP_Filesystem( $creds ); } else { $init = true; } return $init; } /** * Method check_wp_filesystem() * * Check the WordPress filesystem. * * @return mixed $wp_filesystem WordPress filesystem check result. */ public static function check_wp_filesystem() { $FTP_ERROR = 'Failed! Please, add FTP details for automatic updates.'; static::get_wp_filesystem(); /** * Global variable containing the instance of the (auto-)configured filesystem object after the filesystem "factory" has been run. * * @global object $wp_filesystem Filesystem object. */ global $wp_filesystem; if ( empty( $wp_filesystem ) ) { static::instance()->error( $FTP_ERROR ); } elseif ( is_wp_error( $wp_filesystem->errors ) ) { $errorCodes = $wp_filesystem->errors->get_error_codes(); if ( ! empty( $errorCodes ) ) { static::instance()->error( esc_html__( 'WordPress Filesystem error: ', 'mainwp-child' ) . $wp_filesystem->errors->get_error_message() ); } } return $wp_filesystem; } /** * Method reject_unsafe_urls() * * Reject unsafe URLs in HTTP Basic Authentication handler. * * @param array $r Array containing the request data. * * @return array $r Updated array containing the request data. */ public static function reject_unsafe_urls( $r ) { $r['reject_unsafe_urls'] = false; // phpcs:disable WordPress.Security.NonceVerification $wpadmin_user = isset( $_POST['wpadmin_user'] ) && ! empty( $_POST['wpadmin_user'] ) ? wp_unslash( $_POST['wpadmin_user'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $wpadmin_passwd = isset( $_POST['wpadmin_passwd'] ) && ! empty( $_POST['wpadmin_passwd'] ) ? wp_unslash( $_POST['wpadmin_passwd'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( ! empty( $wpadmin_user ) && ! empty( $wpadmin_passwd ) ) { $auth = base64_encode( $wpadmin_user . ':' . $wpadmin_passwd ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for backwards compatibility. $r['headers']['Authorization'] = "Basic $auth"; } if ( isset( $_POST['sslVerify'] ) && '0' === $_POST['sslVerify'] ) { $r['sslverify'] = false; } // phpcs:enable return $r; } /** * Method starts_with() * * Check if the String 1 starts with the String 2. * * @param string $haystack Contains the String 1 for the comparison. * @param string $needle Contains the String 2 for the comparison. * * @return bool true|false Return true if the comparison is positive, false if not. */ public static function starts_with( $haystack, $needle ) { return ! strncmp( $haystack, $needle, strlen( $needle ) ); } /** * Method ends_with() * * Check if the String 1 ends with the String 2. * * @param string $haystack Contains the String 1 for the comparison. * @param string $needle Contains the String 2 for the comparison. * * @return bool true|false Return true if the comparison is positive, false if not. */ public static function ends_with( $haystack, $needle ) { $length = strlen( $needle ); if ( 0 === $length ) { return true; } return substr( $haystack, - $length ) === $needle; } /** * Method get_nice_url() * * Convert noraml URL to nice URL. * * @param string $url_to_clean Contains the URL that needs to be cleaned. * @param bool $show_http True to include HTTP|HTTPS in URL. * * @return string $url Cleaned (nice) URL. */ public static function get_nice_url( $url_to_clean, $show_http = false ) { $url = $url_to_clean; if ( static::starts_with( $url, 'http://' ) ) { if ( ! $show_http ) { $url = substr( $url, 7 ); } } elseif ( static::starts_with( $url_to_clean, 'https://' ) ) { if ( ! $show_http ) { $url = substr( $url, 8 ); } } elseif ( $show_http ) { $url = 'http://' . $url; } if ( static::ends_with( $url, '/' ) ) { if ( ! $show_http ) { $url = substr( $url, 0, strlen( $url ) - 1 ); } } else { $url = $url . '/'; } return $url; } /** * Method end_session() * * End session and flush the output buffer. */ public static function end_session() { session_write_close(); ob_end_flush(); } /** * Method rand_string() * * Generate random string. * * @param int $length Contains the string lenghts. * * @return string $str Generated random string. */ public static function rand_string( $length ) { if ( ! function_exists( '\wp_generate_password' ) ) { include_once ABSPATH . WPINC . '/pluggable.php'; // NOSONAR -- WP compatible. } return \wp_generate_password( $length, false ); } /** * Method rand_str_key() * * Generates a random string to be used when generating the consumer key and secret. * * @return string Returns. */ public static function rand_str_key() { if ( ! function_exists( 'openssl_random_pseudo_bytes' ) ) { return sha1( wp_rand() ); // NOSONAR - safe for keys. } return bin2hex( openssl_random_pseudo_bytes( 20 ) ); // @codingStandardsIgnoreLine } /** * Method return_bytes() * * Convert value to bytes. * * @param string $val Contains the value to convert to bytes. * * @return string $val Value converted to bytes. */ public static function return_bytes( $val ) { $val = trim( $val ); $last = $val[ strlen( $val ) - 1 ]; $val = rtrim( $val, $last ); $last = strtolower( $last ); switch ( $last ) { case 'g': $val *= 1024 * 1024 * 1024; break; case 'm': $val *= 1024 * 1024; break; case 'k': $val *= 1024; break; default: break; } return $val; } /** * Method human_filesize() * * Convert filesize to more user-friendly format. * * @param int $bytes Contains the value in bytes to convert. * @param int $decimals Contains the number of decimal places to round. * * @return string Value converted to more user-friendly format. */ public static function human_filesize( $bytes, $decimals = 2 ) { $size = array( 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' ); $factor = floor( ( strlen( $bytes ) - 1 ) / 3 ); return sprintf( "%.{$decimals}f", $bytes / pow( 1024, $factor ) ) . $size[ $factor ]; } /** * Method is_dir_empty() * * Check if a directory is empty. * * @param string $dir Contains the directory location path. * * @return bool true|false Return true if the directory is empty, false if not. */ public static function is_dir_empty( $dir ) { if ( ! is_readable( $dir ) ) { return null; } return 2 === count( scandir( $dir ) ); } /** * Method delete_dir() * * Delete wanted directory. * * @param string $dir Contains the directory location path. */ public static function delete_dir( $dir ) { $nodes = glob( $dir . '*' ); // NOSONAR . if ( is_array( $nodes ) ) { foreach ( $nodes as $node ) { if ( is_dir( $node ) ) { static::delete_dir( $node . DIRECTORY_SEPARATOR ); } else { wp_delete_file( $node ); } } } static::rmdir( $dir ); } /** * Method funct_exists() * * Check if a function exists. * * @param string $func Contains the function name. * * @return bool true|false Return true if the function exists, false if not. */ public static function funct_exists( $func ) { if ( ! function_exists( $func ) ) { return false; } if ( extension_loaded( 'suhosin' ) ) { $suhosin = ini_get( 'suhosin.executor.func.blacklist' ); if ( ! empty( $suhosin ) ) { $suhosin = explode( ',', $suhosin ); $suhosin = array_map( 'trim', $suhosin ); $suhosin = array_map( 'strtolower', $suhosin ); return function_exists( $func ) && ! array_search( $func, $suhosin ); } } return true; } /** * Method get_timestamp() * * Get the timestamp and include GMT offset. * * @param string $timestamp Contains the timestamp value. * * @return string $timestamp The timestamp including the GMT offset. */ public static function get_timestamp( $timestamp = false ) { if ( false === $timestamp ) { $timestamp = time(); } $gmtOffset = get_option( 'gmt_offset' ); return $gmtOffset ? ( $gmtOffset * HOUR_IN_SECONDS ) + $timestamp : $timestamp; } /** * Method format_date() * * Format date as per the WordPress general settings. * * @param string $timestamp Contains the timestamp value. * * @return string Formatted date. */ public static function format_date( $timestamp ) { return date_i18n( get_option( 'date_format' ), $timestamp ); } /** * Method format_time() * * Format time as per the WordPress general settings. * * @param string $timestamp Contains the timestamp value. * * @return string Formatted time. */ public static function format_time( $timestamp ) { return date_i18n( get_option( 'time_format' ), $timestamp ); } /** * Method format_timestamp() * * Format timestamp as per the WordPress general settings. * * @param string $timestamp Contains the timestamp value. * * @return string Formatted date and time. */ public static function format_timestamp( $timestamp ) { return date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $timestamp ); } /** * Method update_option() * * Update option. * * @param string $option_name Contains the option name. * @param string $option_value Contains the option value. * @param string $autoload Autoload? Yes or no. * * @return bool $success true|false Option updated. */ public static function update_option( $option_name, $option_value, $autoload = 'no' ) { $success = add_option( $option_name, $option_value, '', $autoload ); if ( ! $success ) { $success = update_option( $option_name, $option_value ); } return $success; } /** * Method get_site_unique_id() * * Get site unique id. * * @return string $uniqueId unique id. */ public static function get_site_unique_id() { if ( defined( 'MAINWP_CHILD_UNIQUEID' ) ) { $uniqueId = MAINWP_CHILD_UNIQUEID; } else { $uniqueId = get_option( 'mainwp_child_uniqueId', '' ); } return apply_filters( 'mainwp_child_unique_id', $uniqueId ); } /** * Method in_excludes() * * Check if the value is in the excludes list. * * @param array $excludes Array containing the list of excludes. * @param string $value Value to check. * * @return bool true|false If in excluded list, return true, if not, return false. */ public static function in_excludes( $excludes, $value ) { if ( ! empty( $value ) && ! empty( $excludes ) && is_array( $excludes ) ) { foreach ( $excludes as $exclude ) { if ( static::ends_with( $exclude, '*' ) ) { if ( static::starts_with( $value, substr( $exclude, 0, strlen( $exclude ) - 1 ) ) ) { return true; } } elseif ( $value === $exclude || static::starts_with( $value, $exclude . '/' ) ) { return true; } } } return false; } /** * Method sanitize_filename() * * Sanitize file name. * * @param string $filename Contains the file name to be sanitized. * * @return string $filename Sanitized filename. */ public static function sanitize_filename( $filename ) { if ( ! function_exists( 'mb_ereg_replace' ) ) { return sanitize_file_name( $filename ); } // Remove anything which isn't a word, whitespace, number or any of the following caracters -_~,;:[](). // If you don't need to handle multi-byte characters you can use preg_replace rather than mb_ereg_replace. // Thanks @�?ukasz Rysiak! $filename = mb_ereg_replace( '([^\w\s\d\-_~,;:\[\]\(\).])', '', $filename ); // Remove any runs of periods (thanks falstro!). $filename = mb_ereg_replace( '([\.]{2,})', '', $filename ); return $filename; } /** * Method ctype_digit() * * Check for numberic character(s). * * @param string $str Contains the string to check. * * @return bool true|false If numberic characters found, return true, if not, return false. */ public static function ctype_digit( $str ) { return ( is_string( $str ) || is_int( $str ) || is_float( $str ) ) && preg_match( '/^\d+\z/', $str ); } /** * Method is_admin() * * Check if the user is administrator. * * @param object|null $user user check. * * @return bool true|false If the user is administrator (Level 10), return true, if not, return false. */ public static function is_admin( $user = null ) { if ( null === $user ) { $user = wp_get_current_user(); } if ( empty( $user ) || empty( $user->ID ) ) { return false; } if ( ( property_exists( $user, 'wp_user_level' ) && 10 === (int) $user->wp_user_level ) || ( isset( $user->user_level ) && 10 === (int) $user->user_level ) || static::current_user_has_role( 'administrator', $user ) ) { return true; } return false; } /** * Method current_user_has_role() * * Check if the user has role. * * @param string|array $roles role or array of roles to check. * @param object|null $user user check. * * @return bool true|false If the user is administrator (Level 10), return true, if not, return false. */ public static function current_user_has_role( $roles, $user = null ) { //phpcs:ignore -- NOSONAR - multi return. if ( null === $user ) { $user = wp_get_current_user(); } if ( empty( $user ) || empty( $user->ID ) ) { return false; } if ( is_string( $roles ) ) { $allowed_roles = array( $roles ); } elseif ( is_array( $roles ) ) { $allowed_roles = $roles; } else { return false; } if ( array_intersect( $allowed_roles, $user->roles ) ) { return true; } return false; } /** * Method is_ssl_enabled() * * Check if the OpenSSL PHP extension is enabled. * * @return bool true|false If the OpenSSL PHP extension is enabled, return true, if not, return false. */ public static function is_ssl_enabled() { if ( defined( 'MAINWP_NOSSL' ) ) { return ! MAINWP_NOSSL; } return function_exists( 'openssl_verify' ); } /** * Method is_updates_screen() * * Check if the current screen is the Updates screen. * * @return bool true|false If the current screen is updates, return true, if not, return false. */ public static function is_updates_screen() { if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) { return false; } if ( function_exists( 'get_current_screen' ) ) { $screen = get_current_screen(); if ( $screen && 'update-core' === $screen->base && 'index.php' === $screen->parent_file ) { return true; } } return false; } /** * Method is_wp_engine() * * Check if the child site is hosted on the WP Engine server. * * @return bool true|false If the child site is hosted on the WP Engine, return true, if not, return false. */ public static function is_wp_engine() { return function_exists( 'is_wpe' ) && is_wpe(); } /** * Method is_wp_engine_php8() * * Check if the child site is hosted on the WP Engine server and PHP8. * * @return bool true|false If the child site is hosted on the WP Engine and PHP8, return true, if not, return false. */ public static function is_wp_engine_php8() { if ( static::is_wp_engine() && version_compare( phpversion(), '8.0', '>=' ) ) { return true; } return false; } /** * Method get_wp_host() * * Get host if hosted on the FLYWHEEL or Pressable host. * * @return string flywheel|pressable If the child site is hosted on FLYWHEEL or Pressable host. */ public static function get_wp_host() { $pressable = static::is_pressable_host() ? 'pressable' : ''; return static::is_flywheel_host() ? 'flywheel' : $pressable; } /** * Method is_flywheel_host() * * Check if the child site is hosted on the FLYWHEEL server. * * @return bool true|false If the child site is hosted on the FLYWHEEL, return true, if not, return false. */ public static function is_flywheel_host() { return defined( 'FLYWHEEL_PLUGIN_DIR' ) && ! empty( FLYWHEEL_PLUGIN_DIR ); } /** * Method is_pressable_host() * * Check if the child site is hosted on the Pressable host. * * @return bool true|false If the child site is hosted on the Pressable host, return true, if not, return false. */ public static function is_pressable_host() { $press_site_id = get_option( 'pressable_site_id', false ); return ! empty( $press_site_id ); } /** * Method maybe_set_doing_cron() * * May be define doing cron. */ public static function maybe_set_doing_cron() { if ( ! static::is_wp_engine_php8() && ! defined( 'DOING_CRON' ) ) { /** * Checks whether cron is in progress. * * @const ( bool ) Default: true * @source https://code-reference.mainwp.com/classes/MainWP.Child.MainWP_Child_Updates.html */ define( 'DOING_CRON', true ); } } /** * Method is_dashboard_request() * * If it is dashboard request. * * @param bool $and_func If true, check 'function' params existed. * * @return bool true|false If is dashboard request. */ public static function is_dashboard_request( $and_func = false ) { // phpcs:disable WordPress.Security.NonceVerification $check = isset( $_POST['mainwpsignature'] ) ? true : false; if ( $and_func ) { $check = $check && isset( $_POST['function'] ); } // phpcs:enable return $check; } /** * Method check_files_exists() * * Check if a certain files exist. * * @param array $files Array containing list of files to check. * @param bool $return_results If true, return feedback. * * @throws MainWP_Exception Error message. * * @return mixed If exists, return true, if not, return list of missing files. */ public static function check_files_exists( $files = array(), $return_results = false ) { $missing = array(); if ( is_array( $files ) ) { foreach ( $files as $name ) { if ( ! file_exists( $name ) ) { $missing[] = $name; } } } elseif ( ! file_exists( $files ) ) { $missing[] = $files; } if ( ! empty( $missing ) ) { $message = 'Missing file(s): ' . implode( ',', $missing ); if ( $return_results ) { return $message; } else { throw new MainWP_Exception( esc_html( $message ) ); } } return true; } /** * Method check_classes_exists() * * Check if a certain classes exist. * * @param array $classes Array containing list of classes to check. * @param bool $return_results If true, return feedback. * * @throws MainWP_Exception Error message. * * @return mixed If exists, return true, if not, return list of missing classes. */ public function check_classes_exists( $classes = array(), $return_results = false ) { $missing = array(); if ( is_array( $classes ) ) { foreach ( $classes as $name ) { if ( ! class_exists( $name ) ) { $missing[] = $name; } } } elseif ( ! class_exists( $classes ) ) { $missing[] = $classes; } if ( ! empty( $missing ) ) { $message = 'Missing classes: ' . implode( ',', $missing ); if ( $return_results ) { return $message; } else { throw new MainWP_Exception( esc_html( $message ) ); } } return true; } /** * Method check_methods() * * Check if a certain methods exist. * * @param object $obj Object to check. * @param array $methods Array containing list of methods to check. * @param bool $return_results If true, return feedback. * * @throws MainWP_Exception Error message. * * @return mixed If exists, return true, if not, return list of missing methods. */ public function check_methods( $obj, $methods = array(), $return_results = false ) { $missing = array(); if ( is_array( $methods ) ) { $missing = array(); foreach ( $methods as $name ) { if ( ! method_exists( $obj, $name ) ) { $missing[] = $name; } } } elseif ( ! empty( $methods ) ) { if ( ! method_exists( $obj, $methods ) ) { $missing[] = $methods; } } if ( ! empty( $missing ) ) { $message = 'Missing method: ' . implode( ',', $missing ); if ( $return_results ) { return $message; } else { throw new MainWP_Exception( esc_html( $message ) ); } } return true; } /** * Method check_properties() * * Check if a certain properties exist. * * @param object $obj Object to check. * @param array $properties Array containing list of properties to check. * @param bool $return_results If true, return feedback. * * @throws MainWP_Exception Error message. * * @return mixed If exists, return true, if not, return list of missing properties. */ public function check_properties( $obj, $properties = array(), $return_results = false ) { $missing = array(); if ( is_array( $properties ) ) { foreach ( $properties as $name ) { if ( ! property_exists( $obj, $name ) ) { $missing[] = $name; } } } elseif ( ! empty( $properties ) ) { if ( ! property_exists( $obj, $properties ) ) { $missing[] = $properties; } } if ( ! empty( $missing ) ) { $message = 'Missing properties: ' . implode( ',', $missing ); if ( $return_results ) { return $message; } else { throw new MainWP_Exception( esc_html( $message ) ); } } return true; } /** * Method check_functions() * * Check if a certain functions exist. * * @param array $funcs Array containing list of functions to check. * @param bool $return_results If true, return feedback. * * @throws MainWP_Exception Error message. * * @return mixed If exists, return true, if not, return list of missing functions. */ public function check_functions( $funcs = array(), $return_results = false ) { $missing = array(); if ( is_array( $funcs ) ) { foreach ( $funcs as $name ) { if ( ! function_exists( $name ) ) { $missing[] = $name; } } } elseif ( ! empty( $funcs ) ) { if ( ! function_exists( $funcs ) ) { $missing[] = $funcs; } } if ( ! empty( $missing ) ) { $message = 'Missing functions: ' . implode( ',', $missing ); if ( $return_results ) { return $message; } else { throw new MainWP_Exception( esc_html( $message ) ); } } return true; } /** * Method log_debug() * * Log error message to error log. * * @param string $msg Contains the error message. */ public static function log_debug( $msg ) { if ( defined( 'MAINWP_CHILD_DEBUG' ) && MAINWP_CHILD_DEBUG ) { error_log( $msg ); // phpcs:ignore -- used in debug mode only to achieve desired results, pull request solutions appreciated. } } /** * Method set_limit() * * Set PHP Memory Limit and PHP Max Execution time values. * * @param int $timeout Contains the timeout value in seconds. * @param int $mem Contains the memory limit value in MB. */ public static function set_limit( $timeout, $mem = false ) { // phpcs:disable -- required in order to achieve desired results, pull request solutions appreciated. if ( ! empty( $mem ) ) { ini_set( 'memory_limit', $mem ); } set_time_limit( $timeout ); ini_set( 'max_execution_time', $timeout ); // phpcs:enable } }