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 } }
private function sendGoogle() { try { require_once Xpandbuddy::$pathName . "/library/GoogleAPI/Google_Client.php"; if (!isset(Xpandbuddy_Twig::$arrOptions['return']['access'])) { $client = new Google_Client(); $client->setClientId(Xpandbuddy_Twig::$arrOptions['google_key']); $client->setClientSecret(Xpandbuddy_Twig::$arrOptions['google_secret']); $client->setRedirectUri(admin_url('admin.php?page=xpandbuddy')); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $client->refreshToken(Xpandbuddy_Twig::$arrOptions['refresh_token']); $settings = array(); $_accessToken = json_decode($client->getAccessToken()); $settings['access']['token'] = $_accessToken->access_token; $settings['access']['expired'] = $_accessToken->created + $_accessToken->expires_in; } else { Xpandbuddy_Twig::$arrOptions['return']['access'] = (array) Xpandbuddy_Twig::$arrOptions['return']['access']; $settings['access']['token'] = Xpandbuddy_Twig::$arrOptions['return']['access']['token']; $settings['access']['expired'] = Xpandbuddy_Twig::$arrOptions['return']['access']['expired']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['folder_id'])) { $_folderName = str_replace(array("http://", "https://", ".", "/"), array("", "", "_", "_"), Xpandbuddy_Twig::$arrOptions['blog']['url']); $req = new Google_HttpRequest('https://www.googleapis.com/drive/v2/files?q=' . urlencode("mimeType='application/vnd.google-apps.folder' and title='" . $_folderName . "' and trashed=false"), 'GET', array('Authorization' => "Bearer " . $settings['access']['token'])); $_siteFolder = json_decode(Google_Client::$io->makeRequest($req)->getResponseBody()); if (count($_siteFolder->items) == 0) { // create folder $req = new Google_HttpRequest('https://www.googleapis.com/drive/v2/files', 'POST', array('Authorization' => "Bearer " . $settings['access']['token'], 'Content-Type' => 'application/json; charset=UTF-8'), json_encode(array('title' => $_folderName, 'mimeType' => 'application/vnd.google-apps.folder'))); $siteFolder = json_decode(Google_Client::$io->makeRequest($req)->getResponseBody()); } else { $siteFolder = $_siteFolder->items[0]; } $settings['folder_id'] = $siteFolder->id; } else { $settings['folder_id'] = Xpandbuddy_Twig::$arrOptions['return']['folder_id']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['file_name'])) { $settings['file_name'] = substr(ABSPATH, 0, -1) . self::$ds . 'wp-backups' . Xpandbuddy_Twig::_subdirCreation() . Xpandbuddy_Twig::$arrOptions['file_name']; } else { $settings['file_name'] = Xpandbuddy_Twig::$arrOptions['return']['file_name']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['file_size'])) { $settings['file_size'] = @filesize($settings['file_name']); } else { $settings['file_size'] = Xpandbuddy_Twig::$arrOptions['return']['file_size']; } $chunkSize = 256 * 1024 * 16; // dont remove 256 if (!isset(Xpandbuddy_Twig::$arrOptions['return']['location'])) { $_postBody = json_encode(array('title' => Xpandbuddy_Twig::$arrOptions['file_name'], 'parents' => array(json_decode('{ "kind": "drive#fileLink","id": "' . $settings['folder_id'] . '"}')))); $req = new Google_HttpRequest('https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable', 'POST', array('Authorization' => "Bearer " . $settings['access']['token'], 'Content-Length' => strlen($_postBody), 'Content-Type' => 'application/json; charset=UTF-8', 'X-Upload-Content-Type' => 'application/zip', 'X-Upload-Content-Length' => $settings['file_size']), $_postBody); $response = Google_Client::$io->makeRequest($req); $location = $response->getResponseHeader('location'); $code = $response->getResponseHttpCode(); if ($code != 200 || empty($location)) { if (isset(Xpandbuddy_Twig::$arrOptions['return'])) { return json_encode(array('error' => "Response Code or Location Error", 'status' => false)); } } $settings['location'] = urlencode($location); } else { $settings['location'] = Xpandbuddy_Twig::$arrOptions['return']['location']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['response_code'])) { $settings['response_code'] = false; } else { $settings['response_code'] = Xpandbuddy_Twig::$arrOptions['return']['response_code']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['last_range'])) { $settings['last_range'] = false; } else { $settings['last_range'] = Xpandbuddy_Twig::$arrOptions['return']['last_range']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['flg_ext_backoff'])) { $settings['flg_ext_backoff'] = false; } else { $settings['flg_ext_backoff'] = Xpandbuddy_Twig::$arrOptions['return']['flg_ext_backoff']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['backoff_counter'])) { $settings['backoff_counter'] = 0; } else { $settings['backoff_counter'] = Xpandbuddy_Twig::$arrOptions['return']['backoff_counter']; } while ($settings['response_code'] === false || $settings['response_code'] == '308') { if ($settings['flg_ext_backoff']) { $sleep_for = pow(2, $settings['backoff_counter']); sleep($sleep_for); usleep(rand(0, 1000)); $settings['backoff_counter']++; if ($settings['backoff_counter'] > 5) { return json_encode(array('error' => "We've waited too long as per Google's instructions", 'return' => $settings, 'status' => false)); } } // determining what range is next if (!isset(Xpandbuddy_Twig::$arrOptions['return']['range_start'])) { $settings['range_start'] = 0; } else { $settings['range_start'] = Xpandbuddy_Twig::$arrOptions['return']['range_start']; } if (!isset(Xpandbuddy_Twig::$arrOptions['return']['range_end'])) { $settings['range_end'] = min($chunkSize, $settings['file_size'] - 1); } else { $settings['range_end'] = Xpandbuddy_Twig::$arrOptions['return']['range_end']; } if ($settings['last_range'] !== false) { if (!is_array($settings['last_range'])) { $settings['last_range'] = explode('-', $settings['last_range']); } $settings['range_start'] = (int) $settings['last_range'][1] + 1; $settings['range_end'] = min($settings['range_start'] + $chunkSize, $settings['file_size'] - 1); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, urldecode($settings['location'])); curl_setopt($ch, CURLOPT_PORT, 443); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // grabbing the data to send if (is_file($settings['file_name'])) { $sendFile = file_get_contents($settings['file_name'], false, NULL, $settings['range_start'], $settings['range_end'] - $settings['range_start'] + 1); } else { return json_encode(array('error' => "No access to file " . $settings['file_name'], 'return' => $settings, 'status' => false)); } curl_setopt($ch, CURLOPT_POSTFIELDS, $sendFile); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer " . $settings['access']['token'], "Content-Length: " . (string) ($settings['range_end'] - $settings['range_start'] + 1), "Content-Type: application/zip", "Content-Range: bytes " . $settings['range_start'] . "-" . $settings['range_end'] . "/" . $settings['file_size'])); $response = $this->parseResponse(curl_exec($ch)); $post_transaction_info = curl_getinfo($ch); curl_close($ch); $settings['flg_ext_backoff'] = false; if (isset($response['code'])) { // проверка полученного ответа if ($response['code'] == "401") { // todo: make sure that we also got an invalid credential response $client = new Google_Client(); $client->setClientId(Xpandbuddy_Twig::$arrOptions['google_key']); $client->setClientSecret(Xpandbuddy_Twig::$arrOptions['google_secret']); $client->setRedirectUri(admin_url('admin.php?page=xpandbuddy')); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $client->refreshToken(Xpandbuddy_Twig::$arrOptions['refresh_token']); $_accessToken = json_decode($client->getAccessToken()); $settings['access']['token'] = $_accessToken->access_token; $settings['access']['expired'] = $_accessToken->created + $_accessToken->expires_in; $settings['response_code'] = false; } elseif ($response['code'] == "308") { $settings['response_code'] = $response['code']; $settings['last_range'] = $response['headers']['range']; // todo: проверять x-range-md5 header, понято только что это такое x-range-md5... return json_encode(array('return' => $settings, 'status' => true)); } elseif ($response['code'] == "503") { // Google's letting us know we should retry $settings['flg_ext_backoff'] = true; $settings['response_code'] = false; } elseif ($response['code'] == "200") { // все в прядке $settings['response_code'] = $response['code']; // $lastOutput=$response; } elseif ($response['code'] == "400") { $settings['response_code'] = $response['code']; return json_encode(array('error' => "The server didn't understand the syntax of the request. Error: " . $response['headers']['request'], 'return' => $settings, 'status' => false)); } else { $client = new Google_Client(); $client->setClientId(Xpandbuddy_Twig::$arrOptions['google_key']); $client->setClientSecret(Xpandbuddy_Twig::$arrOptions['google_secret']); $client->setRedirectUri(admin_url('admin.php?page=xpandbuddy')); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $client->refreshToken(Xpandbuddy_Twig::$arrOptions['refresh_token']); $_accessToken = json_decode($client->getAccessToken()); $settings['access']['token'] = $_accessToken->access_token; $settings['access']['expired'] = $_accessToken->created + $_accessToken->expires_in; $settings['response_code'] = false; return json_encode(array('error' => 'bad response code!', 'return' => $settings, 'status' => false)); } if ($post_transaction_info['size_upload'] == 0) { $settings['response_code'] = true; } } else { $settings['flg_ext_backoff'] = true; $settings['response_code'] = false; } } @unlink($settings['file_name']); return 'sended'; } catch (Exception $e) { return json_encode(array('error' => $e->getMessage(), 'status' => false, 'return' => @$settings)); } }
public static function pluginPage() { $_dropbox64Error = false; if (strlen((string) PHP_INT_MAX) < 19) { $_dropbox64Error = true; } require_once Xpandbuddy::$pathName . '/library/PclZip.php'; require_once Xpandbuddy::$pathName . '/library/TarArchive.php'; require_once Xpandbuddy::$pathName . '/library/Backup.php'; require_once Xpandbuddy::$pathName . '/library/Options.php'; require_once Xpandbuddy::$pathName . '/library/Twig.php'; require_once Xpandbuddy::$pathName . '/library/Projects.php'; $arrForm = array(); self::restoreBackupFile($arrForm); $arrForm['arrFiles'] = array(); $_object = new Xpandbuddy_Projects(); if (isset($_POST['submit_save'])) { $_projectForSave = $_projectInitial = $_POST['arrProject']; $_flgSaveId = false; if (array_sum($_projectInitial['flg_type']) > 0) { foreach ($_projectInitial['flg_type'] as $_key => $_value) { $_projectForSave = $_projectInitial; if ($_key == $_value) { $_projectForSave['settings']['user_data'] = $_projectInitial['settings']['type_' . $_value]; unset($_projectInitial['settings']['type_' . $_value]); foreach ($_projectForSave['settings'] as $_i => $_d) { if ($_i == 'type_' . $_value) { continue; } elseif (strpos($_i, 'type_') === 0) { unset($_projectForSave['settings'][$_i]); } } $_projectForSave['flg_type'] = array($_key => $_value); if ($_flgSaveId) { unset($_projectForSave['id']); // save with new id } else { $_flgSaveId = true; } $_object->setEntered($_projectForSave)->set(); } } } else { $_object->setEntered($_projectForSave)->set(); } $arrForm['action'] = 'Backup Project is activated.'; } if (isset($_GET['del']) && !empty($_GET['del'])) { $_object->withIds($_GET['del'])->del(); } self::removeBackupFile(); $_object->getList($arrForm['arrList']); foreach ($arrForm['arrList'] as &$_project) { if (isset($_GET['id']) && !empty($_GET['id']) && $_project['id'] == $_GET['id']) { $arrForm['arrProject'] = $_project; break; } } $_userInfo = get_userdata(get_current_user_id()); $arrForm['arrBlog'] = array('title' => isset($arrForm['arrProject']['settings']['blog']['title']) ? $arrForm['arrProject']['settings']['blog']['title'] : get_bloginfo('name'), 'url' => isset($arrForm['arrProject']['settings']['blog']['url']) ? $arrForm['arrProject']['settings']['blog']['url'] : home_url(), 'path' => isset($arrForm['arrProject']['settings']['blog']['path']) ? $arrForm['arrProject']['settings']['blog']['path'] : substr(ABSPATH, 0, -1), 'dashboad_username' => isset($arrForm['arrProject']['settings']['blog']['dashboad_username']) ? $arrForm['arrProject']['settings']['blog']['dashboad_username'] : (isset($_userInfo->user_login) ? $_userInfo->user_login : '******'), 'db_tableprefix' => isset($arrForm['arrProject']['settings']['blog']['db_tableprefix']) ? $arrForm['arrProject']['settings']['blog']['db_tableprefix'] : @$GLOBALS['table_prefix'], 'dashboad_password' => ''); if (!is_multisite() || is_multisite() && is_super_admin()) { $arrForm['arrBlog']['db_host'] = isset($arrForm['arrProject']['settings']['blog']['db_host']) ? $arrForm['arrProject']['settings']['blog']['db_host'] : DB_HOST; $arrForm['arrBlog']['db_name'] = isset($arrForm['arrProject']['settings']['blog']['db_name']) ? $arrForm['arrProject']['settings']['blog']['db_name'] : DB_NAME; $arrForm['arrBlog']['db_username'] = isset($arrForm['arrProject']['settings']['blog']['db_username']) ? $arrForm['arrProject']['settings']['blog']['db_username'] : DB_USER; $arrForm['arrBlog']['db_password'] = isset($arrForm['arrProject']['settings']['blog']['db_password']) ? $arrForm['arrProject']['settings']['blog']['db_password'] : DB_PASSWORD; } else { $arrForm['arrBlog']['db_host'] = $arrForm['arrBlog']['db_name'] = $arrForm['arrBlog']['db_username'] = $arrForm['arrBlog']['db_password'] = ''; } $_otherBackupFiles = array(); $_backupsDir = substr(ABSPATH, 0, -1) . DIRECTORY_SEPARATOR . 'wp-backups' . Xpandbuddy_Twig::_subdirCreation(); $_arrBackupsFiles = scandir($_backupsDir); $_homeUrlHash = str_replace(array("http://", "https://", ".", "/"), array("", "", "_", "_"), home_url()); // Filest list generation foreach ($_arrBackupsFiles as $_number => $_name) { if (strpos($_name, '.tar.gz') === false && strpos($_name, '.zip') === false) { continue; } $_flg_clone = false; // Progect LIST generetion if (!empty($arrForm['arrList'])) { foreach ($arrForm['arrList'] as &$_project) { if (strpos($_name, "-prj" . $_project['id'] . "-") !== false && strpos($_name, "backup-") !== 0) { if ($_project['settings']['blog']['url'] !== home_url()) { $_flg_clone = true; } global $current_site; $_time = @filemtime($_backupsDir . DIRECTORY_SEPARATOR . $_name); if (isset($_project['files'][$_time])) { for ($_time = $_time + 1; !isset($_project['files'][$_time + 1]); $_time++) { break; } } $_status = 'Failed'; require_once Xpandbuddy::$pathName . '/library/Logger.php'; $_logger = new Xpandbuddy_Logger('sender'); $_logger->logDate = $_project['start']; $_logger->getStepLog(); if (!empty($_logger->stepProject)) { $_status = 'In Progress'; } if (@$_project['flg_type'][1] == 1 || @array_sum($_project['flg_type']) == 0) { $_status = 'Completed'; } $_project['files'][$_time] = array('file' => $_name, 'link' => get_site_url(@$current_site->id) . '/wp-backups' . Xpandbuddy_Twig::_subdirCreation('/') . $_name, 'flg_status' => $_status, 'flg_clone' => $_flg_clone, 'date' => $_time); unset($_arrBackupsFiles[$_number]); continue 2; } } } // Progect LIST generetion end if (strpos($_name, $_homeUrlHash . '-') === false) { $_flg_clone = true; } global $current_site; if (strpos($_name, "backup-") !== 0) { $_otherBackupFiles[] = array('file' => $_name, 'link' => get_site_url(@$current_site->id) . '/wp-backups' . Xpandbuddy_Twig::_subdirCreation('/') . $_name, 'flg_status' => 'Completed', 'flg_clone' => $_flg_clone, 'date' => @filemtime($_backupsDir . DIRECTORY_SEPARATOR . $_name)); unset($_arrBackupsFiles[$_number]); } } // Filest list generation end if (!empty($arrForm['arrList'])) { foreach ($arrForm['arrList'] as &$_project) { require_once Xpandbuddy::$pathName . '/library/Logger.php'; $_logger = new Xpandbuddy_Logger('sender'); $_logger->logDate = $_project['start']; $_logger->getStepLog(); if (!empty($_logger->stepProject)) { $_project['log'] = $_logger->stepProject; } $_logger = new Xpandbuddy_Logger('step_log_file'); $_logger->logDate = $_project['start']; $_logger->getStepLog(); if (!empty($_logger->stepProject)) { $_project['log'] = $_logger->stepProject; } foreach ($_project['flg_type'] as $_type) { switch ($_type) { case '1': /**/ break; case '2': try { if (strlen((string) PHP_INT_MAX) >= 19) { require_once Xpandbuddy::$pathName . "/library/Dropbox/autoload.php"; $dbxClient = Dropbox_Client($_project['settings']['access_token']); $folderMetadata = $dbxClient->getMetadataWithChildren("/" . $_homeUrlHash); if (isset($folderMetadata['contents']) && is_array(@$folderMetadata['contents'])) { foreach (@$folderMetadata['contents'] as $_file) { $_link = $dbxClient->createTemporaryDirectLink($_file['path']); if ($_file['is_dir'] == false && strpos($_file['path'], "-prj" . $_project['id'] . "-") != false) { $_project['files'][strtotime($_file['modified'])] = array('file' => $_file['path'], 'link' => $_link[0], 'flg_status' => 'Completed', 'flg_clone' => false, 'date' => strtotime($_file['modified'])); } } } } } catch (Exception $e) { $arrForm['error'] = 'Exception: ' . $e->getMessage(); } break; case '3': if (!empty($_project['settings']['refresh_token'])) { try { require_once Xpandbuddy::$pathName . "/library/GoogleAPI/Google_Client.php"; require_once Xpandbuddy::$pathName . "/library/GoogleAPI/contrib/Google_DriveService.php"; $client = new Google_Client(); $client->setClientId($_project['settings']['google_key']); $client->setClientSecret($_project['settings']['google_secret']); $client->setRedirectUri(admin_url('admin.php?page=xpandbuddy')); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $client->refreshToken($_project['settings']['refresh_token']); $accessToken = json_decode($client->getAccessToken()); $accessToken = $accessToken->access_token; $req = new Google_HttpRequest('https://www.googleapis.com/drive/v2/files?q=' . urlencode("mimeType = 'application/vnd.google-apps.folder' and title = '" . $_homeUrlHash . "' and trashed = false"), 'GET', array('Authorization' => "Bearer " . $accessToken)); $siteFolder = json_decode(Google_Client::$io->makeRequest($req)->getResponseBody()); if (isset($siteFolder->items) && count($siteFolder->items) > 0) { $req = new Google_HttpRequest('https://www.googleapis.com/drive/v2/files?q=' . urlencode("'" . $siteFolder->items[0]->id . "' in parents"), 'GET', array('Authorization' => "Bearer " . $accessToken)); $siteFiles = json_decode(Google_Client::$io->makeRequest($req)->getResponseBody()); $_fileFromGoogle = array(); $_flgHaveFileInGoogle = false; foreach ($siteFiles->items as $_file) { if (strpos($_file->originalFilename, "-prj" . $_project['id'] . "-") !== false) { $_project['files'][strtotime($_file->modifiedDate)] = array('file' => $_file->originalFilename, 'link' => $_file->alternateLink, 'flg_status' => 'Completed', 'flg_clone' => false, 'date' => strtotime($_file->modifiedDate)); } } } } catch (Exception $e) { $arrForm['error'] = 'Exception: ' . $e->getMessage(); } } break; case '4': if (!empty($_project['settings']['host']) && !empty($_project['settings']['user']) && !empty($_project['settings']['pass'])) { require_once Xpandbuddy::$pathName . "/library/Ftp.php"; $_ftp = new Xpandbuddy_Ftp(); if (!$_ftp->setChmod('0644')->setHost(urldecode($_project['settings']['host']))->setUser(urldecode($_project['settings']['user']))->setPassw(urldecode($_project['settings']['pass']))->setRoot($_project['settings']['dir_name'])->makeConnectToRootDir()) { break; } $_ftp->ls($_arrFiles); if (!empty($_arrFiles) && is_array($_arrFiles)) { foreach ($_arrFiles as $file) { $_flg_clone = false; if (strpos($file['name'], $_homeUrlHash . '-') === false) { $_flg_clone = true; } if (strpos($file['name'], "-prj" . $_project['id'] . "-") !== false) { $_time = $file['stamp']; if (isset($_project['files'][$_time])) { for ($_time = $_time; !isset($_project['files'][$_time + $i]); $_time++) { break; } } $_project['files'][$_time] = array('file' => $file['name'], 'link' => 'ftp://' . urldecode($_project['settings']['user']) . ':' . urldecode($_project['settings']['pass']) . '@' . urldecode($_project['settings']['host']) . $_project['settings']['dir_name'] . '/' . $file['name'], 'flg_status' => 'Completed', 'flg_clone' => $_flg_clone, 'date' => $_time); } } } unset($_arrFiles); } break; case '5': /*email*/ break; default: /* 0 */ break; } break; } } } if (!empty($_otherBackupFiles)) { array_unshift($arrForm['arrList'], array('files' => $_otherBackupFiles)); unset($_otherBackupFiles); } $arrForm['options'] = Xpandbuddy_Options::get(); extract($arrForm); $max_upload_size = self::getMaxUploadSize(); require_once Xpandbuddy::$pathName . '/source/plugin/form.php'; }