/** * Get all duplicable sites * @since 0.2.0 * @return array of blog data */ public static function get_site_list() { $site_list = array(); $network_blogs = wp_get_sites(array('limit' => MUCD_MAX_NUMBER_OF_SITE)); 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; }
/** * Get select box with duplicable site list * @since 0.2.0 * @param array $site_list all the sites * @param id $current_blog_id parameters * @return string the output */ public static function select_site_list($site_list, $current_blog_id = null) { $output = ''; if (count($site_list) == 1) { $blog_id = $site_list[0]['blog_id']; } else { if (isset($current_blog_id) && MUCD_Functions::value_in_array($current_blog_id, $site_list, 'blog_id') && MUCD_Functions::is_duplicable($current_blog_id)) { $blog_id = $current_blog_id; } } $output .= '<select name="site[source]">'; foreach ($site_list as $site) { if (isset($blog_id) && $site['blog_id'] == $blog_id) { $output .= ' <option selected value="' . $site['blog_id'] . '">' . substr($site['domain'] . $site['path'], 0, -1) . '</option>'; } else { $output .= ' <option value="' . $site['blog_id'] . '">' . substr($site['domain'] . $site['path'], 0, -1) . '</option>'; } } $output .= '</select>'; $output .= ' <a href="' . network_admin_url("settings.php#mucd_duplication") . '" title="' . MUCD_NETWORK_PAGE_DUPLICATE_TOOLTIP . '">?</a>'; return $output; }
/** * Duplication form validation * @since 0.2.0 * @param array $init_data default data * @return array $data validated data, or errors */ public static function check_form($init_data) { $data = $init_data; $data['copy_files'] = 'no'; $data['keep_users'] = 'no'; $data['log'] = 'no'; // Check referer and nonce if (check_admin_referer(MUCD_DOMAIN)) { global $current_site; $error = array(); // Merge $data / $_POST['site'] to get Posted data and fill form $data = array_merge($data, $_POST['site']); // format and check source $data['from_site_id'] = intval($data['source']); if ($data['from_site_id'] < 1 || !get_blog_details($data['from_site_id'], false)) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_MISSING_FIELDS); } // XTEC ************ AFEGIT - Check if the blog allow duplications and if it exists // 2015.11.16 @dgras if (!MUCD_Functions::is_duplicable($data['from_site_id'])) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_BLOG_ID_DUPLICATION_NOT_ALLOWED); } if (!get_blog_details($data['from_site_id'])) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_BLOG_ID_NOT_EXISTS); } // ************ FI $domain = ''; if (preg_match('|^([a-zA-Z0-9-])+$|', $data['domain'])) { $domain = strtolower($data['domain']); } // If not a subdomain install, make sure the domain isn't a reserved word if (!is_subdomain_install()) { /** This filter is documented in wp-includes/ms-functions.php */ $subdirectory_reserved_names = apply_filters('subdirectory_reserved_names', array('page', 'comments', 'blog', 'files', 'feed')); if (in_array($domain, $subdirectory_reserved_names)) { $error[] = new WP_Error('mucd_error', sprintf(MUCD_NETWORK_PAGE_DUPLICATE_DOMAIN_ERROR_RESERVED_WORDS, implode('</code>, <code>', $subdirectory_reserved_names))); } } if (empty($domain)) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_DOMAIN_ERROR_REQUIRE); } if (is_subdomain_install()) { $newdomain = $domain . '.' . preg_replace('|^www\\.|', '', $current_site->domain); $path = $current_site->path; } else { $newdomain = $current_site->domain; $path = $current_site->path . $domain . '/'; } // format and check title if (empty($data['title'])) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_TITLE_ERROR_REQUIRE); } // format and check email admin if (empty($data['email'])) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_EMAIL_MISSING); } $valid_mail = sanitize_email($data['email']); if (is_email($valid_mail)) { $data['email'] = $valid_mail; } else { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_EMAIL_ERROR_FORMAT); } $data['domain'] = $domain; $data['newdomain'] = $newdomain; $data['path'] = $path; $data['public'] = !isset($data['private']); // Network $data['network_id'] = $current_site->id; if (isset($data['log']) && $data['log'] == 'yes' && (!isset($data['log-path']) || $data['log-path'] == "" || !MUCD_Functions::valid_path($data['log-path']))) { $error[] = new WP_Error('mucd_error', MUCD_NETWORK_PAGE_DUPLICATE_VIEW_LOG_PATH_EMPTY); } if (isset($error[0])) { $data['error'] = $error[0]; } } else { $data['error'] = MUCD_GAL_ERROR_CAPABILITIES; } return $data; }