|:]*$/',$tmp); return ($bool == 1); // so that it will return only true and false } return false; } /** * Check if a path is valid UNIX path * @since 0.2.0 * @param string $path the path * @return boolean true | false */ public static function valid_unix_dir_path($path) { $reg = "/^(\/([a-zA-Z0-9+\$_.-])+)*\/?$/"; $bool = preg_match($reg,$path); return ($bool == 1); } /** * Check if a path is valid MS-windows or UNIX path * @since 0.2.0 * @param string $path the path * @return boolean true | false */ public static function valid_path($path) { return ( MUCD_Functions::valid_unix_dir_path($path) || MUCD_Functions::valid_windows_dir_path($path) ); } /** * Removes completely a blog from the network * @since 0.2.0 * @param int $blog_id the blog id */ public static function remove_blog($blog_id) { switch_to_blog($blog_id); $wp_upload_info = wp_upload_dir(); $dir = str_replace(' ', "\\ ", trailingslashit($wp_upload_info['basedir'])); restore_current_blog(); wpmu_delete_blog($blog_id, true); // wpmu_delete_blog leaves an empty site upload directory, that we want to remove : MUCD_Files::rrmdir($dir); } /** * Check if site is duplicable * @since 0.2.0 * @param int $blog_id the blog id * @return boolean true | false */ public static function is_duplicable($blog_id): bool { if( get_site_option( 'mucd_duplicables', 'all', 'selected' ) == 'all') { return true; } if( get_blog_option( $blog_id, 'mucd_duplicable' , 'no' ) == 'yes') { return true; } return false; } /** * Get all duplicable sites * @since 0.2.0 * @return array of blog data */ public static function get_site_list() { $site_list = array(); $network_blogs = MUCD_Functions::get_sites(apply_filters( 'mucd_get_site_list_args', array())); foreach( $network_blogs as $blog ){ if (MUCD_Functions::is_duplicable($blog['blog_id']) && MUCD_SITE_DUPLICATION_EXCLUDE != $blog['blog_id']) { $site_list[] = $blog; } } return $site_list; } /** * Check if a value is in an array for a specific key * @since 0.2.0 * @param mixte $value the value * @param array $array the array * @param string $key the key * @return boolean true | false */ public static function value_in_array($value, $array, $key): bool { foreach($array as $row) { if(isset($row[$key]) && $value == $row[$key]) { return true; } } return false; } /** * Get upload directory of the entire network * @since 0.2.0 * @return string path of the upload directory */ public static function get_primary_upload_dir() { $current_blog = get_current_blog_id(); switch_to_blog(MUCD_PRIMARY_SITE_ID); $wp_upload_info = wp_upload_dir(); switch_to_blog($current_blog); return $wp_upload_info['basedir']; } /** * Check if site exists * @since 1.3.0 * @param int $blog_id the blog id * @return boolean true | false */ public static function site_exists($blog_id) { return (get_blog_details($blog_id) !== false); } /** * Set locale to en_US * @since 1.3.1 */ public static function set_locale_to_en_US() { // Bugfix Pierre Dargham : relocating this declaration outside of the call to add_filter // PHP < 5.3 does not accept anonymous functions function mucd_locale_en_us( $locale ): string { return 'en_US'; } add_filter( 'locale', 'mucd_locale_en_us' ); } /** * Get network data for a given id. * * @author wp-cli * @see https://github.com/wp-cli/wp-cli/blob/master/php/commands/site.php * * @param int $network_id * @return bool|array False if no network found with given id, array otherwise */ public static function get_network( $network_id ) { global $wpdb; // Load network data $networks = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->site WHERE id = %d", $network_id ) ); if ( !empty( $networks ) ) { // Only care about domain and path which are set here return $networks[0]; } return false; } public static function get_sites( $args = array() ) { if(version_compare(get_bloginfo('version'), '4.6', '>=')) { $defaults = array('number' => MUCD_MAX_NUMBER_OF_SITE); $args = wp_parse_args( $args, $defaults ); $args = apply_filters( 'mucd_get_sites_args', $args ); $sites = get_sites($args); foreach($sites as $key => $site) { $sites[$key] = (array) $site; } return $sites; } else { $defaults = array('limit' => MUCD_MAX_NUMBER_OF_SITE); $args = apply_filters( 'mucd_get_sites_args', $args ); $args = wp_parse_args( $args, $defaults ); return wp_get_sites( $args ); } } /** * Deactivate the plugin if we are not on a multisite installation * @since 0.2.0 */ public static function check_if_multisite() { if (!function_exists('is_multisite') || !is_multisite()) { deactivate_plugins( plugin_basename( __FILE__ ) ); wp_die('multisite-clone-duplicator works only for multisite installation'); } } /** * Deactivate the plugin if we are not on the network admin * @since 1.4.0 */ public static function check_if_network_admin() { if (!is_network_admin() ) { deactivate_plugins( plugin_basename( __FILE__ ) ); wp_die('multisite-clone-duplicator works only as multisite network-wide plugin'); } } } }