%PDF- %PDF-
| Direktori : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_akeeba/Model/ |
| Current File : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_akeeba/Model/Profiles.php |
<?php
/**
* @package AkeebaBackup
* @copyright Copyright (c)2006-2017 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
* @since 1.3
*/
namespace Akeeba\Backup\Admin\Model;
// Protect from unauthorized access
defined('_JEXEC') or die();
use Akeeba\Engine\Factory;
use Akeeba\Engine\Platform;
use FOF30\Container\Container;
use FOF30\Model\DataModel;
use RuntimeException;
/**
* Backup profile model
*
* @property int id Profile ID
* @property string description Description
* @property string configuration Engine configuration data
* @property string filters Engine filters
* @property int quickicon Should I include this profile in the One Click Backup profiles (1) or not (0)?
*/
class Profiles extends DataModel
{
public function __construct(Container $container, array $config)
{
$defaultConfig = [
'tableName' => '#__ak_profiles',
'idFieldName' => 'id',
];
if (!is_array($config) || empty($config))
{
$config = [];
}
$config = array_merge($defaultConfig, $config);
parent::__construct($container, $config);
$this->addBehaviour('filters');
$this->blacklistFilters([
'configuration',
'filters'
]);
}
/**
* Tries to copy the currently loaded to a new record
*
* @return self The new record
*/
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 DataModel\Exception\RecordNotLoaded('PROFILE_INVALID_ID');
}
if (!is_array($data))
{
$data = [];
}
$data['id'] = 0;
return $this->getClone()->save($data);
}
/**
* Returns an associative array with profile IDs as keys and the post-processing engine as values
*
* @return array
*/
public function getPostProcessingEnginePerProfile()
{
// Cache the current profile's ID
$currentProfileID = $this->container->platform->getSessionVar('profile', null, 'akeeba');
// Get the IDs of all profiles
$db = $this->getDbo();
$query = $db->getQuery(true)
->select($db->qn('id'))
->from($db->qn('#__ak_profiles'));
$db->setQuery($query);
$profiles = $db->loadColumn();
// Initialise return;
$engines = [];
// Loop all profiles
foreach ($profiles as $profileId)
{
Platform::getInstance()->load_configuration($profileId);
$profileConfiguration = Factory::getConfiguration();
$engines[ $profileId ] = $profileConfiguration->get('akeeba.advanced.postproc_engine');
}
// Reload the current profile
Platform::getInstance()->load_configuration($currentProfileID);
return $engines;
}
/**
* Runs before deleting a record
*
* @param int $id The ID of the record being deleted
*/
public function onBeforeDelete(&$id)
{
// You cannot delete the default record
if ($id <= 1)
{
throw new RuntimeException(\JText::_('COM_AKEEBA_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(\JText::sprintf('COM_AKEEBA_PROFILE_ERR_CANNOTDELETEACTIVE', $id), 500);
}
}
/**
* 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
*
* @returns void
*
* @throws RuntimeException When an iport error occurs
*/
public function import($data)
{
// Check for data validity
$isValid =
is_array($data) &&
!empty($data) &&
array_key_exists('description', $data) &&
array_key_exists('configuration', $data) &&
array_key_exists('filters', $data);
if (!$isValid)
{
throw new RuntimeException(\JText::_('COM_AKEEBA_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(\JText::_('COM_AKEEBA_PROFILES_ERR_IMPORT_FAILED'));
}
}
}