Initial Commit
This commit is contained in:
216
inc/duplication/functions.php
Normal file
216
inc/duplication/functions.php
Normal file
@ -0,0 +1,216 @@
|
||||
<?php
|
||||
|
||||
if( !class_exists( 'MUCD_Functions' ) ) {
|
||||
|
||||
class MUCD_Functions {
|
||||
|
||||
/**
|
||||
* Check if a path is valid MS-windows path
|
||||
* @since 0.2.0
|
||||
* @param string $path the path
|
||||
* @return boolean true | false
|
||||
*/
|
||||
public static function valid_windows_dir_path($path) {
|
||||
if(strpos($path, ":") == 1 && preg_match('/[a-zA-Z]/', $path[0])) // check if it's something like C:\
|
||||
{
|
||||
$tmp = substr($path,2);
|
||||
$bool = preg_match('/^[^*?"<>|:]*$/',$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');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user