File Manager

Current Directory: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Postproc
Viewing File: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Postproc/Onedrivebusiness.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\Platform; use Akeeba\Engine\Postproc\Connector\GoogleDrive as ConnectorGoogleDrive; use Akeeba\Engine\Postproc\Connector\OneDriveBusiness as ConnectorOneDrive; use Akeeba\Engine\Postproc\Exception\BadConfiguration; use Awf\Text\Text; use Exception; use Joomla\CMS\Language\Text as JText; class Onedrivebusiness extends Onedrive { /** * The name of the OAuth2 callback method in the parent window (the configuration page) * * @var string */ protected $callbackMethod = 'akeeba_onedrivebusiness_oauth_callback'; /** * The key in Akeeba Engine's settings registry for this post-processing method * * @var string */ protected $settingsKey = 'onedrivebusiness'; public function __construct() { parent::__construct(); $this->allowedCustomAPICallMethods[] = 'getDrives'; } protected function makeConnector() { // Retrieve engine configuration data $config = Factory::getConfiguration(); $access_token = trim($config->get('engine.postproc.' . $this->settingsKey . '.access_token', '')); $refresh_token = trim($config->get('engine.postproc.' . $this->settingsKey . '.refresh_token', '')); $this->isChunked = $config->get('engine.postproc.' . $this->settingsKey . '.chunk_upload', true); $this->chunkSize = $config->get('engine.postproc.' . $this->settingsKey . '.chunk_upload_size', 10) * 1024 * 1024; $defaultDirectory = rtrim($config->get('engine.postproc.' . $this->settingsKey . '.directory', ''), '/'); $this->directory = $config->get('volatile.postproc.directory', $defaultDirectory); // Sanity checks if (empty($refresh_token)) { throw new BadConfiguration('You have not linked Akeeba Backup with your OneDrive account'); } 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 $this->directory = empty($this->directory) ? '' : $this->directory; $this->directory = trim($this->directory); $this->directory = ltrim(Factory::getFilesystemTools()->TranslateWinPath($this->directory), '/'); $this->directory = Factory::getFilesystemTools()->replace_archive_name_variables($this->directory); $config->set('volatile.postproc.directory', $this->directory); // Get Download ID $dlid = Platform::getInstance()->get_platform_configuration_option('update_dlid', ''); if (empty($dlid)) { throw new BadConfiguration('You must enter your Download ID in the application configuration before using the “Upload to OneDrive” feature.'); } $connector = new ConnectorOneDrive($access_token, $refresh_token, $dlid); // Validate the tokens Factory::getLog()->debug(__METHOD__ . " - Validating the OneDrive tokens"); $pingResult = $connector->ping(); // Save new configuration if there was a refresh if ($pingResult['needs_refresh']) { Factory::getLog()->debug(__METHOD__ . " - OneDrive tokens were refreshed"); $config->set('engine.postproc.' . $this->settingsKey . '.access_token', $pingResult['access_token'], false); $config->set('engine.postproc.' . $this->settingsKey . '.refresh_token', $pingResult['refresh_token'], false); $profile_id = Platform::getInstance()->get_active_profile(); Platform::getInstance()->save_configuration($profile_id); } return $connector; } /** * Used by the interface to display a list of drives to choose from. * * @param array $params * * @return array * * @throws Exception */ public function getDrives($params = []) { // Get the default item (the personal Drive) $baseItem = 'Drive (OneDrive Personal)'; if (class_exists('\Joomla\CMS\Language\Text')) { $baseItem = JText::_('COM_AKEEBA_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL'); if ($baseItem === 'COM_AKEEBA_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL') { $baseItem = JText::_('COM_AKEEBABACKUP_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL'); } } if (class_exists('\Awf\Text\Text')) { $baseItem = \Awf\Text\Text::_('COM_AKEEBA_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL'); if ($baseItem === 'COM_AKEEBA_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL') { $baseItem = \Awf\Text\Text::_('COM_AKEEBABACKUP_CONFIG_ONEDRIVE_DRIVE_OPT_PERSONAL'); } } $items = [ '' => $baseItem, ]; // Try to get a list of Team Drives try { $this->configOverrides = $params; /** @var \Akeeba\Engine\Postproc\Connector\OneDriveBusiness $connector */ $connector = $this->getConnector(true); $connector->ping(); $items = array_merge($items, $connector->getDrives()); } catch (Exception $e) { // No worries, the user hasn't configured Google Drive correctly just yet. } $ret = []; foreach ($items as $k => $v) { $ret[] = [$k, $v]; } return $ret; } protected function getOAuth2HelperUrl() { return ConnectorOneDrive::helperUrl; } /** @inheritDoc */ protected function mustChunk(int $fileSize): bool { return $fileSize > 4194304; } /** @inheritDoc */ protected function mustSingeUpload(int $fileSize): bool { return ($fileSize <= $this->chunkSize) || ($fileSize <= 4194304); } }