You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.0 KiB
117 lines
3.0 KiB
<?php |
|
|
|
class wfImportExportController { |
|
/** |
|
* Returns the singleton wfImportExportController. |
|
* |
|
* @return wfImportExportController |
|
*/ |
|
public static function shared() { |
|
static $_shared = null; |
|
if ($_shared === null) { |
|
$_shared = new wfImportExportController(); |
|
} |
|
return $_shared; |
|
} |
|
|
|
public function export() { |
|
$export = array(); |
|
|
|
//Basic Options |
|
$keys = wfConfig::getExportableOptionsKeys(); |
|
foreach ($keys as $key) { |
|
$export[$key] = wfConfig::get($key, ''); |
|
} |
|
|
|
//Serialized Options |
|
$export['scanSched'] = wfConfig::get_ser('scanSched', array()); |
|
|
|
//Table-based Options |
|
$export['blocks'] = wfBlock::exportBlocks(); |
|
|
|
//Make the API call |
|
try { |
|
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); |
|
$res = $api->call('export_options', array(), array('export' => json_encode($export))); |
|
if ($res['ok'] && $res['token']) { |
|
return array( |
|
'ok' => 1, |
|
'token' => $res['token'], |
|
); |
|
} |
|
else if ($res['err']) { |
|
return array('err' => __("An error occurred: ", 'wordfence') . $res['err']); |
|
} |
|
else { |
|
throw new Exception(__("Invalid response: ", 'wordfence') . var_export($res, true)); |
|
} |
|
} |
|
catch (Exception $e) { |
|
return array('err' => __("An error occurred: ", 'wordfence') . $e->getMessage()); |
|
} |
|
} |
|
|
|
public function import($token) { |
|
try { |
|
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); |
|
$res = $api->call('import_options', array(), array('token' => $token)); |
|
if ($res['ok'] && $res['export']) { |
|
$totalSet = 0; |
|
$import = @json_decode($res['export'], true); |
|
if (!is_array($import)) { |
|
return array('err' => __("An error occurred: Invalid options format received.", 'wordfence')); |
|
} |
|
|
|
//Basic Options |
|
$keys = wfConfig::getExportableOptionsKeys(); |
|
$toSet = array(); |
|
foreach ($keys as $key) { |
|
if (isset($import[$key])) { |
|
$toSet[$key] = $import[$key]; |
|
} |
|
} |
|
|
|
if (count($toSet)) { |
|
$validation = wfConfig::validate($toSet); |
|
$skipped = array(); |
|
if ($validation !== true) { |
|
foreach ($validation as $error) { |
|
$skipped[$error['option']] = $error['error']; |
|
unset($toSet[$error['option']]); |
|
} |
|
} |
|
|
|
$totalSet += count($toSet); |
|
wfConfig::save(wfConfig::clean($toSet)); |
|
} |
|
|
|
//Serialized Options |
|
if (isset($import['scanSched']) && is_array($import['scanSched'])) { |
|
wfConfig::set_ser('scanSched', $import['scanSched']); |
|
wfScanner::shared()->scheduleScans(); |
|
$totalSet++; |
|
} |
|
|
|
//Table-based Options |
|
if (isset($import['blocks']) && is_array($import['blocks'])) { |
|
wfBlock::importBlocks($import['blocks']); |
|
$totalSet += count($import['blocks']); |
|
} |
|
|
|
return array( |
|
'ok' => 1, |
|
'totalSet' => $totalSet, |
|
); |
|
} |
|
else if ($res['err']) { |
|
return array('err' => "An error occurred: " . $res['err']); |
|
} |
|
else { |
|
throw new Exception("Invalid response: " . var_export($res, true)); |
|
} |
|
} |
|
catch (Exception $e) { |
|
return array('err' => "An error occurred: " . $e->getMessage()); |
|
} |
|
} |
|
}
|
|
|