Current Directory: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Postproc
Viewing File: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Postproc/Sugarsync.php
<?php
/**
* Akeeba Engine
*
* @package akeebaengine
* @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
namespace Akeeba\Engine\Postproc;
defined('AKEEBAENGINE') || die();
use Akeeba\Engine\Factory;
use Akeeba\Engine\Postproc\Connector\Sugarsync as ConnectorSugarsync;
use Akeeba\Engine\Postproc\Exception\BadConfiguration;
use Akeeba\Engine\Postproc\Exception\RangeDownloadNotSupported;
use Exception;
/**
* SugarSync post-processing class for Akeeba Backup
*/
class Sugarsync extends Base
{
public function __construct()
{
$this->supportsDelete = true;
$this->supportsDownloadToFile = true;
$this->supportsDownloadToBrowser = false;
}
public function processPart($localFilepath, $remoteBaseName = null)
{
/** @var ConnectorSugarsync $connector */
$connector = $this->getConnector();
$settings = $this->getSettings();
// Calculate relative remote filename
$filename = empty($remoteBaseName) ? basename($localFilepath) : $remoteBaseName;
$directory = $settings['directory'];
if (empty($directory) || ($directory == '/'))
{
$directory = '';
}
// Store the absolute remote path in the class property
$this->remotePath = $directory . '/' . $filename;
$connector->uploadFile($directory, $filename, $localFilepath);
return true;
}
public function delete($path)
{
/** @var ConnectorSugarsync $connector */
$connector = $this->getConnector();
$connector->deleteFile($path);
}
public function downloadToFile($remotePath, $localFile, $fromOffset = null, $length = null)
{
if (!is_null($fromOffset) || !is_null($length))
{
throw new RangeDownloadNotSupported();
}
/** @var ConnectorSugarsync $connector */
$connector = $this->getConnector();
$connector->downloadFile($remotePath, null, $localFile);
}
/**
* Returns the engine configuration
*
* @return array
*
* @throws Exception If something is wrong
*/
protected function getSettings()
{
// Retrieve engine configuration data
$config = Factory::getConfiguration();
$access = trim($config->get('engine.postproc.sugarsync.access', ''));
$private = trim($config->get('engine.postproc.sugarsync.private', ''));
$email = trim($config->get('engine.postproc.sugarsync.email', ''));
$password = trim($config->get('engine.postproc.sugarsync.password', ''));
$defaultDirectory = $config->get('engine.postproc.sugarsync.directory', '');
$directory = $config->get('volatile.postproc.directory', $defaultDirectory);
// Sanity checks
if (empty($access))
{
throw new BadConfiguration('You have not set up your SugarSync Access Key ID');
}
if (empty($private))
{
throw new BadConfiguration('You have not set up your SugarSync Private Access Key');
}
if (empty($email))
{
throw new BadConfiguration('You have not set up your SugarSync email address');
}
if (empty($password))
{
throw new BadConfiguration('You have not set up your SugarSync password');
}
if (!function_exists('curl_init'))
{
throw new BadConfiguration('cURL is not enabled, please enable it in order to post-process your archives');
}
// Fix the directory name, if required
$directory = empty($directory) ? '' : $directory;
$directory = trim($directory);
$directory = ltrim(Factory::getFilesystemTools()->TranslateWinPath($directory), '/');
$directory = Factory::getFilesystemTools()->replace_archive_name_variables($directory);
$config->set('volatile.postproc.directory', $directory);
return [
'access' => $access,
'private' => $private,
'email' => $email,
'password' => $password,
'directory' => $directory,
];
}
protected function makeConnector()
{
$settings = $this->getSettings();
return new ConnectorSugarsync($settings);
}
}