public function backup() { include_once Xpandbuddy::$pathName . '/library/PclZip.php'; include_once Xpandbuddy::$pathName . '/library/TarArchive.php'; include_once Xpandbuddy::$pathName . '/library/Backup.php'; include_once Xpandbuddy::$pathName . '/library/Options.php'; include_once Xpandbuddy::$pathName . '/library/Twig.php'; include_once Xpandbuddy::$pathName . '/library/Projects.php'; include_once Xpandbuddy::$pathName . '/library/Logger.php'; include_once Xpandbuddy::$pathName . '/library/Sender.php'; $_object = new Xpandbuddy_Projects(); if (!empty($this->_projectId)) { $_object->withIds($this->_projectId); } if (!empty($this->_projectSettings)) { $arrList = array($this->_projectSettings); } else { $_object->getList($arrList); shuffle($arrList); } if (empty($arrList)) { return array('message' => 'No project found!'); } foreach ($arrList as &$_project) { $_nowTime = time(); if (!isset($_project['start']) && empty($this->_projectLogdate)) { $_project['start'] = $this->_projectLogdate = $_nowTime; } if ($_project['start'] >= $_nowTime && empty($this->_projectLogdate)) { continue; } if (empty($_project['start'])) { $_project['start'] = $_nowTime; } $_senderLog = new Xpandbuddy_Logger('sender'); if (!empty($this->_projectLogdate)) { $_senderLog->logDate = $this->_projectLogdate; Xpandbuddy_Twig::$logger->logDate = $this->_projectLogdate; } else { $_senderLog->logDate = $_project['start']; Xpandbuddy_Twig::$logger->logDate = $_project['start']; } $_senderLog->getStepLog(); if (!empty($_senderLog->stepProject)) { // запускаем пошаговый отправщик $_POST['type'] = $_senderLog->stepProject['sender'][$_senderLog->stepProject['send_now']]['type']; $_POST['send'] = $_senderLog->stepProject['settings']['file_name']; $_POST['project'] = $_senderLog->stepProject['id']; $_POST['return'] = (array) $_senderLog->stepProject['code']['return']; $_senderLog->stepProject['code'] = json_decode(Xpandbuddy_Sender::sendBackupFileAction(true), true); if ($_senderLog->stepProject['code']['status'] === true || $_senderLog->stepProject['code']['status'] === false) { $_checkSender = $_senderLog->setStepLog(); if (isset($_senderLog->stepProject['code']['error'])) { $_senderLog->deleteStepLog(); return array('logcode' => $_senderLog->logDate, 'flg_sender' => $_checkSender, 'error' => $_senderLog->stepProject['code']['error']) + (array) $_senderLog->stepProject['code']; } else { return array('logcode' => $_senderLog->logDate) + (array) $_senderLog->stepProject['code']; } } if ($_senderLog->stepProject['code']['status'] === 'sended') { $_senderLog->stepProject['sender'][$_senderLog->stepProject['send_now']]['flg_send'] = true; $_flgRunSender = false; foreach ($_senderLog->stepProject['sender'] as $_key => $_type) { if ($_type['flg_send'] == false) { $_senderLog->stepProject['send_now'] = $_key; $_flgRunSender = true; } } $_checkSender = $_senderLog->setStepLog(); if ($_flgRunSender) { return array('logcode' => $_senderLog->logDate) + (array) $_senderLog->stepProject['code']; } $_senderLog->deleteStepLog(); $_nextRunDate = date("U", mktime($_project['settings']['timer']['h'], $_project['settings']['timer']['m'], 0, date("n", $_nowTime), date("j", $_nowTime), date("Y", $_nowTime))) + Xpandbuddy_Cron::next($_project['settings']['user_data']['every']); $_object->withIds($_project['id'])->update('start', $_nextRunDate); return array('status' => 'sended_all', 'message' => '<span id="run_date_' . $_project['id'] . '">next run after ' . date("m/d/Y H:00", $_nextRunDate) . '</span>'); } if (isset($_senderLog->stepProject['code']['error'])) { return array('logcode' => $_senderLog->logDate, 'error' => $_senderLog->stepProject['code']['error'], 'sender' => $_senderLog->stepProject['send_now']); } else { return array('logcode' => $_senderLog->logDate, 'return' => $_senderLog->stepProject['code']); } } if (Xpandbuddy_Twig::stepByStep(Xpandbuddy_Twig::$logger->logDate, $_project, true)) { $_returnArray = array(); if (!empty(Xpandbuddy_Twig::$logString)) { $_returnArray['message'] = Xpandbuddy_Twig::$logString; } if (isset(Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader'])) { global $current_site; $_returnArray['file'] = array('name' => Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader'], 'link' => get_site_url(@$current_site->id) . '/wp-backups' . Xpandbuddy_Twig::_subdirCreation('/') . Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader'], 'date' => date("Y-m-d H:i:s", @filemtime(substr(ABSPATH, 0, -1) . DIRECTORY_SEPARATOR . '/wp-backups' . Xpandbuddy_Twig::_subdirCreation('/') . Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader']))); } if (!empty(Xpandbuddy_Twig::$logger->logDate)) { $_returnArray['logcode'] = Xpandbuddy_Twig::$logger->logDate; } if (isset(Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'])) { $_returnArray['counters'] = array('all' => Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'], 'now' => Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'] - count(Xpandbuddy_Twig::$logger->stepProject['arrFiles'])); } if (isset(Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader']) && !empty(Xpandbuddy_Twig::$logger->stepProject['settings']['file_loader'])) { // создаем следующий степовый файл с отправкой $_senderLog->stepProject = Xpandbuddy_Twig::$logger->stepProject; foreach ($_senderLog->stepProject['flg_type'] as $_key => $_type) { if ($_type == $_key) { $_senderLog->stepProject['sender'][$_key] = array('type' => $_type, 'flg_send' => false); $_senderLog->stepProject['send_now'] = $_key; } } $_senderLog->stepProject['code'] = array('return' => array(true)); $_senderLog->setStepLog(); } return $_returnArray; } else { // проблема с созданием бэкапа $_returnArray['message'] = Xpandbuddy_Twig::$logString . "<br/>" . Xpandbuddy_Twig::$error; if (!empty(Xpandbuddy_Twig::$logger->logDate)) { $_returnArray['logcode'] = Xpandbuddy_Twig::$logger->logDate; } if (isset(Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'])) { $_returnArray['counters'] = array('all' => Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'], 'now' => Xpandbuddy_Twig::$logger->stepProject['arrAllFilesCount'] - count(Xpandbuddy_Twig::$logger->stepProject['arrFiles'])); } return $_returnArray; } // not used } }
public static function runStepByStepBackup() { add_action('init', array('Xpandbuddy', 'disableEmojis')); header('Content-type: application/json'); require_once Xpandbuddy::$pathName . '/library/Cron.php'; if (isset($_POST['arrProject']['settings']['type_clone'])) { $_POST['arrProject']['settings']['user_data'] = $_POST['arrProject']['settings']['type_clone']; unset($_POST['arrProject']['settings']['type_clone']); } if (isset($_POST['arrProject']['settings']['type_backup'])) { $_POST['arrProject']['settings']['user_data'] = $_POST['arrProject']['settings']['type_backup']; unset($_POST['arrProject']['settings']['type_backup']); } $_cron = new Xpandbuddy_Cron(); echo json_encode($_cron->setProgectId(@$_POST['project'])->setProjectSettings(@$_POST['arrProject'])->setLogDate(@$_POST['logcode'])->backup()); exit; }