Current File : /home/pacjaorg/www/nsa/administrator/components/com_akeebabackup/src/Table/ProfileTable.php |
<?php
/**
* @package akeebabackup
* @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
namespace Akeeba\Component\AkeebaBackup\Administrator\Table;
defined('_JEXEC') || die;
use Akeeba\Engine\Platform;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Table\Table;
use Joomla\Database\DatabaseDriver;
use RuntimeException;
/**
* Backup profile table
*
* @since 9.0.0
*/
#[\AllowDynamicProperties]
class ProfileTable extends Table
{
/**
* Engine configuration data
*
* @since 9.0.0
* @var string|null
*/
public $configuration = null;
/**
* Description
*
* @since 9.0.0
* @var string|null
*/
public $description = null;
/**
* Engine filters
*
* @since 9.0.0
* @var string|null
*/
public $filters = null;
/**
* Profile ID
*
* @since 9.0.0
* @var int|null
*/
public $id = null;
/**
* Should I include this profile in the One Click Backup profiles (1) or not (0)?
*
* @since 9.0.0
* @var int|null
*/
public $quickicon = 1;
/**
* Object constructor to set table and key fields.
*
* @param DatabaseDriver $db DatabaseDriver object.
*
* @since 9.0.0
*/
public function __construct(DatabaseDriver $db)
{
parent::__construct('#__akeebabackup_profiles', 'id', $db);
$this->setColumnAlias('published', 'quickicon');
}
/**
* Tries to copy the currently loaded to a new record
*
* @return self The new record
* @since 9.0.0
*/
public function copy($data = null)
{
$id = $this->getId();
// Check for invalid id's (not numeric, or <= 0)
if ((!is_numeric($id)) || ($id <= 0))
{
throw new RuntimeException('No profile has been loaded yet', 500);
}
if (!is_array($data))
{
$data = [];
}
$data['id'] = 0;
$newRecord = clone $this;
$newRecord->save($data);
return $newRecord;
}
/**
* Method to delete a row from the database table by primary key value.
*
* @param mixed $pk An optional primary key value to delete. If not set the instance property value is used.
*
* @return boolean True on success.
*
* @since 9.0.0
* @throws \UnexpectedValueException
*/
public function delete($pk = null)
{
// Which record am I deleting?
if (\is_null($pk))
{
$id = $this->getId();
}
elseif (!\is_array($pk))
{
$id = (int) $pk;
}
else
{
$id = $pk[$this->_tbl_key] ?? 0;
}
// You cannot delete the default record
if ($id <= 1)
{
throw new RuntimeException(Text::_('COM_AKEEBABACKUP_PROFILE_ERR_CANNOTDELETEDEFAULT'), 500);
}
// If you're deleting the current backup profile we have to switch to the default profile (#1)
$activeProfile = Platform::getInstance()->get_active_profile();
if ($id == $activeProfile)
{
throw new RuntimeException(Text::sprintf('COM_AKEEBABACKUP_PROFILE_ERR_CANNOTDELETEACTIVE', $id), 500);
}
return parent::delete($pk);
}
/**
* Save a profile from imported configuration data. The $data array must contain the keys description (profile
* description), configuration (engine configuration INI data) and filters (inclusion and inclusion filters JSON
* configuration data).
*
* @param array $data See above
*
* @return void
*
* @throws RuntimeException When an iport error occurs
* @since 9.0.0
*/
public function import(array $data)
{
// Check for data validity
$isValid =
!empty($data) &&
array_key_exists('description', $data) &&
array_key_exists('configuration', $data) &&
array_key_exists('filters', $data);
if (!$isValid)
{
throw new RuntimeException(Text::_('COM_AKEEBABACKUP_PROFILES_ERR_IMPORT_INVALID'));
}
// Unset the id, if it exists
if (array_key_exists('id', $data))
{
unset($data['id']);
}
$data['akeeba.flag.confwiz'] = 1;
// Try saving the profile
$result = $this->save($data);
if (!$result)
{
throw new RuntimeException(Text::_('COM_AKEEBABACKUP_PROFILES_ERR_IMPORT_FAILED'));
}
}
}