/** * @param $job_object BackWPup_Job * @return bool */ public function job_run_archive(BackWPup_Job $job_object) { $job_object->substeps_todo = 2 + $job_object->backup_filesize; $job_object->log(sprintf(__('%d. Try to send backup to SugarSync …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']), E_USER_NOTICE); try { $sugarsync = new BackWPup_Destination_SugarSync_API($job_object->job['sugarrefreshtoken']); //Check Quota $user = $sugarsync->user(); if (!empty($user->nickname)) { $job_object->log(sprintf(__('Authenticated to SugarSync with nickname %s', 'backwpup'), $user->nickname), E_USER_NOTICE); } $sugarsyncfreespase = (double) $user->quota->limit - (double) $user->quota->usage; //float fixes bug for display of no free space if ($job_object->backup_filesize > $sugarsyncfreespase) { $job_object->log(sprintf(_x('Not enough disk space available on SugarSync. Available: %s.', 'Available space on SugarSync', 'backwpup'), size_format($sugarsyncfreespase, 2)), E_USER_ERROR); $job_object->substeps_todo = 1 + $job_object->backup_filesize; return TRUE; } else { $job_object->log(sprintf(__('%s available at SugarSync', 'backwpup'), size_format($sugarsyncfreespase, 2)), E_USER_NOTICE); } //Create and change folder $sugarsync->mkdir($job_object->job['sugardir'], $job_object->job['sugarroot']); $dirid = $sugarsync->chdir($job_object->job['sugardir'], $job_object->job['sugarroot']); //Upload to SugarSync $job_object->substeps_done = 0; $job_object->log(__('Starting upload to SugarSync …', 'backwpup'), E_USER_NOTICE); self::$backwpup_job_object =& $job_object; $reponse = $sugarsync->upload($job_object->backup_folder . $job_object->backup_file); if (is_object($reponse)) { if (!empty($job_object->job['jobid'])) { BackWPup_Option::update($job_object->job['jobid'], 'lastbackupdownloadurl', network_admin_url('admin.php') . '?page=backwpupbackups&action=downloadsugarsync&file=' . (string) $reponse . '&jobid=' . $job_object->job['jobid']); } $job_object->substeps_done++; $job_object->log(sprintf(__('Backup transferred to %s', 'backwpup'), 'https://' . $user->nickname . '.sugarsync.com/' . $sugarsync->showdir($dirid) . $job_object->backup_file), E_USER_NOTICE); } else { $job_object->log(__('Cannot transfer backup to SugarSync!', 'backwpup'), E_USER_ERROR); return FALSE; } $backupfilelist = array(); $files = array(); $filecounter = 0; $dir = $sugarsync->showdir($dirid); $getfiles = $sugarsync->getcontents('file'); if (is_object($getfiles)) { foreach ($getfiles->file as $getfile) { $getfile->displayName = utf8_decode((string) $getfile->displayName); if ($job_object->is_backup_archive($getfile->displayName)) { $backupfilelist[strtotime((string) $getfile->lastModified)] = (string) $getfile->ref; } $files[$filecounter]['folder'] = 'https://' . (string) $user->nickname . '.sugarsync.com/' . $dir; $files[$filecounter]['file'] = (string) $getfile->ref; $files[$filecounter]['filename'] = (string) $getfile->displayName; $files[$filecounter]['downloadurl'] = network_admin_url('admin.php') . '?page=backwpupbackups&action=downloadsugarsync&file=' . (string) $getfile->ref . '&jobid=' . $job_object->job['jobid']; $files[$filecounter]['filesize'] = (int) $getfile->size; $files[$filecounter]['time'] = strtotime((string) $getfile->lastModified) + get_option('gmt_offset') * 3600; $filecounter++; } } if (!empty($job_object->job['sugarmaxbackups']) && $job_object->job['sugarmaxbackups'] > 0) { //Delete old backups if (count($backupfilelist) > $job_object->job['sugarmaxbackups']) { ksort($backupfilelist); $numdeltefiles = 0; while ($file = array_shift($backupfilelist)) { if (count($backupfilelist) < $job_object->job['sugarmaxbackups']) { break; } $sugarsync->delete($file); //delete files on Cloud foreach ($files as $key => $filedata) { if ($filedata['file'] == $file) { unset($files[$key]); } } $numdeltefiles++; } if ($numdeltefiles > 0) { $job_object->log(sprintf(_n('One file deleted on SugarSync folder', '%d files deleted on SugarSync folder', $numdeltefiles, 'backwpup'), $numdeltefiles), E_USER_NOTICE); } } } set_site_transient('BackWPup_' . $job_object->job['jobid'] . '_SUGARSYNC', $files, 60 * 60 * 24 * 7); } catch (Exception $e) { $job_object->log(E_USER_ERROR, sprintf(__('SugarSync API: %s', 'backwpup'), $e->getMessage()), $e->getFile(), $e->getLine()); return FALSE; } $job_object->substeps_done++; return TRUE; }