Download all files FTP
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
use Duplicator\Libs\Snap\SnapDB;
|
||||
|
||||
class DUP_PRO_Multisite
|
||||
{
|
||||
/** @var int[] */
|
||||
public $FilterSites = array();
|
||||
/** @var ?string[] */
|
||||
protected $tablesFilters = null;
|
||||
|
||||
/**
|
||||
* Filter props on json encode
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function __sleep()
|
||||
{
|
||||
$props = array_keys(get_object_vars($this));
|
||||
return array_diff($props, array('tablesFilters'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Wakeup
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __wakeup()
|
||||
{
|
||||
if (is_string($this->FilterSites)) {
|
||||
$this->FilterSites = [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get dirs to filter
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDirsToFilter()
|
||||
{
|
||||
if (!empty($this->FilterSites)) {
|
||||
$path_arr = array();
|
||||
$wp_content_dir = str_replace("\\", "/", WP_CONTENT_DIR);
|
||||
foreach ($this->FilterSites as $site_id) {
|
||||
if ($site_id == 1) {
|
||||
if (DUP_PRO_MU::getGeneration() == DUP_PRO_MU_Generations::ThreeFivePlus) {
|
||||
$uploads_dir = $wp_content_dir . '/uploads';
|
||||
foreach (scandir($uploads_dir) as $node) {
|
||||
$fullpath = $uploads_dir . '/' . $node;
|
||||
if ($node == '.' || $node == '.htaccess' || $node == '..') {
|
||||
continue;
|
||||
}
|
||||
if (is_dir($fullpath)) {
|
||||
if ($node != 'sites') {
|
||||
$path_arr[] = $fullpath;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$path_arr[] = $wp_content_dir . '/uploads';
|
||||
}
|
||||
} else {
|
||||
if (file_exists($wp_content_dir . '/uploads/sites/' . $site_id)) {
|
||||
$path_arr[] = $wp_content_dir . '/uploads/sites/' . $site_id;
|
||||
}
|
||||
if (file_exists($wp_content_dir . '/blogs.dir/' . $site_id)) {
|
||||
$path_arr[] = $wp_content_dir . '/blogs.dir/' . $site_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $path_arr;
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tables to filter
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getTablesToFilter()
|
||||
{
|
||||
if (is_null($this->tablesFilters)) {
|
||||
global $wpdb;
|
||||
$this->tablesFilters = array();
|
||||
if (!empty($this->FilterSites)) {
|
||||
$prefixes = array();
|
||||
foreach ($this->FilterSites as $site_id) {
|
||||
$prefix = $wpdb->get_blog_prefix($site_id);
|
||||
if ($site_id == 1) {
|
||||
$default_tables = array(
|
||||
'commentmeta',
|
||||
'comments',
|
||||
'links',
|
||||
//'options', include always options table
|
||||
'postmeta',
|
||||
'posts',
|
||||
'terms',
|
||||
'term_relationships',
|
||||
'term_taxonomy',
|
||||
'termmeta',
|
||||
);
|
||||
foreach ($default_tables as $tb) {
|
||||
$this->tablesFilters[] = $prefix . $tb;
|
||||
}
|
||||
} else {
|
||||
$prefixes[] = $prefix;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($prefixes)) {
|
||||
foreach ($prefixes as &$value) {
|
||||
$value = SnapDB::quoteRegex($value);
|
||||
}
|
||||
$regex = '^(' . implode('|', $prefixes) . ').+';
|
||||
$sql_query = "SHOW TABLES WHERE Tables_in_" . esc_sql(DB_NAME) . " REGEXP '" . esc_sql($regex) . "'";
|
||||
DUP_PRO_Log::trace('TABLE QUERY PREFIX FILTER: ' . $sql_query);
|
||||
$sub_tables = $wpdb->get_col($sql_query);
|
||||
$this->tablesFilters = array_merge($this->tablesFilters, $sub_tables);
|
||||
}
|
||||
}
|
||||
DUP_PRO_Log::traceObject('TABLES TO FILTERS:', $this->tablesFilters);
|
||||
}
|
||||
return $this->tablesFilters;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user