if ($number <= 0) {
        return '-';
    }
    $units = array('b', 'Kb', 'Mb', 'Gb', 'Tb');
    if ($force_unit === false) {
        $unit = floor(log($number, 2) / 10);
    } else {
        $unit = $force_unit;
    }
    if ($unit == 0) {
        $decimals = 0;
    }
    return number_format($number / pow(1024, $unit), $decimals, $dec_char, $thousands_char) . ' ' . $units[$unit];
}
// Load a mapping of backup types to textual representation
$scripting = AEUtilScripting::loadScripting();
$backup_types = array();
foreach ($scripting['scripts'] as $key => $data) {
    $backup_types[$key] = JText::_($data['text']);
}
?>

<?php 
if (version_compare(JVERSION, '3.0', 'ge')) {
    ?>
<script type="text/javascript">
	Joomla.orderTable = function() {
		table = document.getElementById("sortTable");
		direction = document.getElementById("directionTable");
		order = table.options[table.selectedIndex].value;
		if (order != '<?php 
 /**
  * Returns the details of the latest backup as HTML
  *
  * @return string HTML
  *
  * @todo Move this into a helper class
  */
 public function getLatestBackupDetails()
 {
     $db = $this->getDBO();
     $query = $db->getQuery(true)->select('MAX(' . $db->qn('id') . ')')->from($db->qn('#__ak_stats'))->where($db->qn('origin') . ' != ' . $db->q('restorepoint'));
     $db->setQuery($query);
     $id = $db->loadResult();
     $backup_types = AEUtilScripting::loadScripting();
     if (empty($id)) {
         return '<p class="label">' . JText::_('BACKUP_STATUS_NONE') . '</p>';
     }
     $record = AEPlatform::getInstance()->get_statistics($id);
     JLoader::import('joomla.utilities.date');
     $statusClass = "";
     switch ($record['status']) {
         case 'run':
             $status = JText::_('STATS_LABEL_STATUS_PENDING');
             $statusClass = "label-warning";
             break;
         case 'fail':
             $status = JText::_('STATS_LABEL_STATUS_FAIL');
             $statusClass = "label-important";
             break;
         case 'complete':
             $status = JText::_('STATS_LABEL_STATUS_OK');
             $statusClass = "label-success";
             break;
         default:
             $status = '';
             $statusClass = '';
     }
     switch ($record['origin']) {
         case 'frontend':
             $origin = JText::_('STATS_LABEL_ORIGIN_FRONTEND');
             break;
         case 'backend':
             $origin = JText::_('STATS_LABEL_ORIGIN_BACKEND');
             break;
         case 'cli':
             $origin = JText::_('STATS_LABEL_ORIGIN_CLI');
             break;
         default:
             $origin = '&ndash;';
             break;
     }
     if (array_key_exists($record['type'], $backup_types['scripts'])) {
         $type = AEPlatform::getInstance()->translate($backup_types['scripts'][$record['type']]['text']);
     } else {
         $type = '';
     }
     $startTime = new JDate($record['backupstart']);
     $html = '<table class="table table-striped">';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_START') . '</td><td>' . $startTime->format(JText::_('DATE_FORMAT_LC4'), true) . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_DESCRIPTION') . '</td><td>' . $record['description'] . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_STATUS') . '</td><td><span class="label ' . $statusClass . '">' . $status . '</span></td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_ORIGIN') . '</td><td>' . $origin . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_TYPE') . '</td><td>' . $type . '</td></tr>';
     $html .= '</table>';
     return $html;
 }
Beispiel #3
0
 /**
  * This mess of a code is probably not one of my highlights in my code
  * writing career. It's logically organized, badly architectured but I can
  * still maintain it - and it works!
  */
 public function onAdd($tpl = null)
 {
     /** @var AkeebaModelBackups $model */
     $model = $this->getModel();
     // Load the Status Helper
     if (!class_exists('AkeebaHelperStatus')) {
         JLoader::import('helpers.status', JPATH_COMPONENT_ADMINISTRATOR);
     }
     $helper = AkeebaHelperStatus::getInstance();
     // Determine default description
     JLoader::import('joomla.utilities.date');
     $jregistry = JFactory::getConfig();
     if (version_compare(JVERSION, '3.0', 'ge')) {
         $tzDefault = $jregistry->get('offset');
     } else {
         $tzDefault = $jregistry->getValue('config.offset');
     }
     $user = JFactory::getUser();
     $tz = $user->getParam('timezone', $tzDefault);
     $dateNow = new JDate('now', $tz);
     $default_description = JText::_('BACKUP_DEFAULT_DESCRIPTION') . ' ' . $dateNow->format(JText::_('DATE_FORMAT_LC2'), true);
     $default_description = AkeebaHelperEscape::escapeJS($default_description, "'");
     $backup_description = $model->getState('description', $default_description);
     $comment = $model->getState('comment', '');
     // Get a potential return URL
     $returnurl = $model->getState('returnurl');
     if (empty($returnurl)) {
         $returnurl = '';
     }
     // If a return URL is set *and* the profile's name is "Site Transfer
     // Wizard", we are running the Site Transfer Wizard
     if (!class_exists('AkeebaModelProfiles')) {
         JLoader::import('models.profiles', JPATH_COMPONENT_ADMINISTRATOR);
     }
     /** @var AkeebaModelCpanels $cpanelmodel */
     $cpanelmodel = F0FModel::getAnInstance('Cpanels', 'AkeebaModel');
     $profilemodel = new AkeebaModelProfiles();
     $profilemodel->setId($cpanelmodel->getProfileID());
     $profile_data = $profilemodel->getProfile();
     $isSTW = $profile_data->description == 'Site Transfer Wizard (do not rename)' && !empty($returnurl);
     $this->isSTW = $isSTW;
     // Get the domain details from scripting facility
     $registry = AEFactory::getConfiguration();
     $tag = $model->getState('tag');
     $script = $tag == 'restorepoint' ? 'full' : $registry->get('akeeba.basic.backup_type', 'full');
     $scripting = AEUtilScripting::loadScripting();
     $domains = array();
     if (!empty($scripting)) {
         foreach ($scripting['scripts'][$script]['chain'] as $domain) {
             $description = JText::_($scripting['domains'][$domain]['text']);
             $domain_key = $scripting['domains'][$domain]['domain'];
             if ($isSTW && $domain_key == 'Packing') {
                 $description = JText::_('BACKUP_LABEL_DOMAIN_PACKING_STW');
             }
             $domains[] = array($domain_key, $description);
         }
     }
     $json_domains = AkeebaHelperEscape::escapeJS(json_encode($domains), '"\\');
     // Get the maximum execution time and bias
     $maxexec = $registry->get('akeeba.tuning.max_exec_time', 14) * 1000;
     $bias = $registry->get('akeeba.tuning.run_time_bias', 75);
     // Check if the output directory is writable
     $quirks = AEUtilQuirks::get_quirks();
     $unwritableOutput = array_key_exists('001', $quirks);
     // Pass on data
     $this->haserrors = !$helper->status;
     $this->hasquirks = $helper->hasQuirks();
     $this->quirks = $helper->getQuirksCell(!$helper->status);
     $this->description = $backup_description;
     $this->default_descr = $default_description;
     $this->comment = $comment;
     $this->domains = $json_domains;
     $this->maxexec = $maxexec;
     $this->bias = $bias;
     $this->useiframe = $registry->get('akeeba.basic.useiframe', 0) ? 'true' : 'false';
     $this->returnurl = $returnurl;
     $this->unwritableoutput = $unwritableOutput;
     if ($registry->get('akeeba.advanced.archiver_engine', 'jpa') == 'jps') {
         $this->showjpskey = 1;
         $this->jpskey = $registry->get('engine.archiver.jps.key', '');
     } else {
         $this->showjpskey = 0;
     }
     if (AKEEBA_PRO) {
         $this->showangiekey = 1;
         $this->angiekey = $registry->get('engine.installer.angie.key', '');
     } else {
         $this->showangiekey = 0;
         $this->angiekey = '';
     }
     $this->autostart = $model->getState('autostart');
     // Pass on profile info
     $this->profileid = $cpanelmodel->getProfileID();
     // Active profile ID
     $this->profilelist = $cpanelmodel->getProfilesList();
     // List of available profiles
     // Pass on state information pertaining to SRP
     $this->srpinfo = $model->getState('srpinfo');
     // Add live help
     AkeebaHelperIncludes::addHelp('backup');
     // Set the toolbar title
     if ($this->srpinfo['tag'] == 'restorepoint') {
         $subtitle = JText::_('AKEEBASRP');
     } elseif ($isSTW) {
         $subtitle = JText::_('SITETRANSFERWIZARD');
     } else {
         $subtitle = JText::_('BACKUP');
     }
     JToolBarHelper::title(JText::_('AKEEBA') . ':: <small>' . $subtitle . '</small>', 'akeeba');
     return true;
 }
Beispiel #4
0
 /**
  * Returns the details of the latest backup as HTML
  *
  * @return string HTML
  *
  * @todo Move this into a helper class
  */
 public function getLatestBackupDetails()
 {
     $db =& $this->getDBO();
     $query = 'SELECT max(id) FROM #__ak_stats WHERE `origin` != "restorepoint"';
     $db->setQuery($query);
     $id = $db->loadResult();
     $backup_types = AEUtilScripting::loadScripting();
     if (empty($id)) {
         return '<p>' . JText::_('BACKUP_STATUS_NONE') . '</p>';
     }
     $record =& AEPlatform::getInstance()->get_statistics($id);
     jimport('joomla.utilities.date');
     switch ($record['status']) {
         case 'run':
             $status = JText::_('STATS_LABEL_STATUS_PENDING');
             break;
         case 'fail':
             $status = JText::_('STATS_LABEL_STATUS_FAIL');
             break;
         case 'complete':
             $status = JText::_('STATS_LABEL_STATUS_OK');
             break;
     }
     switch ($record['origin']) {
         case 'frontend':
             $origin = JText::_('STATS_LABEL_ORIGIN_FRONTEND');
             break;
         case 'backend':
             $origin = JText::_('STATS_LABEL_ORIGIN_BACKEND');
             break;
         case 'cli':
             $origin = JText::_('STATS_LABEL_ORIGIN_CLI');
             break;
         default:
             $origin = '&ndash;';
             break;
     }
     if (array_key_exists($record['type'], $backup_types['scripts'])) {
         $type = AEPlatform::getInstance()->translate($backup_types['scripts'][$record['type']]['text']);
     } else {
         $type = '';
     }
     $startTime = new JDate($record['backupstart']);
     $html = '<table>';
     if (AKEEBA_JVERSION == '16') {
         $html .= '<tr><td>' . JText::_('STATS_LABEL_START') . '</td><td>' . $startTime->format(JText::_('DATE_FORMAT_LC4'), true) . '</td></tr>';
     } else {
         $html .= '<tr><td>' . JText::_('STATS_LABEL_START') . '</td><td>' . $startTime->toFormat(JText::_('DATE_FORMAT_LC4')) . '</td></tr>';
     }
     $html .= '<tr><td>' . JText::_('STATS_LABEL_DESCRIPTION') . '</td><td>' . $record['description'] . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_STATUS') . '</td><td>' . $status . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_ORIGIN') . '</td><td>' . $origin . '</td></tr>';
     $html .= '<tr><td>' . JText::_('STATS_LABEL_TYPE') . '</td><td>' . $type . '</td></tr>';
     $html .= '</table>';
     return $html;
 }
Beispiel #5
0
 /**
  * This mess of a code is probably not one of my highlights in my code
  * writing career. It's logically organized, badly architectured but I can
  * still maintain it - and it works!
  */
 function display()
 {
     // Add some buttons
     JToolBarHelper::back('AKEEBA_CONTROLPANEL', 'index.php?option=' . JRequest::getCmd('option'));
     JToolBarHelper::spacer();
     // Load the Status Helper
     if (!class_exists('AkeebaHelperStatus')) {
         JLoader::import('helpers.status', JPATH_COMPONENT_ADMINISTRATOR);
     }
     $helper =& AkeebaHelperStatus::getInstance();
     // Determine default description
     jimport('joomla.utilities.date');
     $jregistry =& JFactory::getConfig();
     $tzDefault = $jregistry->getValue('config.offset');
     $user =& JFactory::getUser();
     $tz = $user->getParam('timezone', $tzDefault);
     if (AKEEBA_JVERSION == '16') {
         $dateNow = new JDate('now', $tz);
         $backup_description = JText::_('BACKUP_DEFAULT_DESCRIPTION') . ' ' . $dateNow->format(JText::_('DATE_FORMAT_LC2'), true);
     } else {
         $dateNow = new JDate();
         $dateNow->setOffset($tz);
         $backup_description = JText::_('BACKUP_DEFAULT_DESCRIPTION') . ' ' . $dateNow->toFormat(JText::_('DATE_FORMAT_LC2'));
     }
     $backup_description = AkeebaHelperEscape::escapeJS($backup_description, "'");
     $default_description = $backup_description;
     $backup_description = JRequest::getVar('description', $default_description);
     $comment = JRequest::getVar('comment', '', 'default', 'none', 2);
     // Get a potential return URL
     $returnurl = JRequest::getVar('returnurl', null);
     if (empty($returnurl)) {
         $returnurl = '';
     }
     // If a return URL is set *and* the profile's name is "Site Transfer
     // Wizard", we are running the Site Transfer Wizard
     if (!class_exists('AkeebaModelProfiles')) {
         JLoader::import('models.profiles', JPATH_COMPONENT_ADMINISTRATOR);
     }
     if (!class_exists('AkeebaModelCpanel')) {
         JLoader::import('models.cpanel', JPATH_COMPONENT_ADMINISTRATOR);
     }
     $cpanelmodel = new AkeebaModelCpanel();
     $profilemodel = new AkeebaModelProfiles();
     $profilemodel->setId($cpanelmodel->getProfileID());
     $profile_data = $profilemodel->getProfile();
     $isSTW = $profile_data->description == 'Site Transfer Wizard (do not rename)' && !empty($returnurl);
     $this->assign('isSTW', $isSTW);
     // Get the domain details from scripting facility
     $registry =& AEFactory::getConfiguration();
     $script = $registry->get('akeeba.basic.backup_type', 'full');
     $scripting = AEUtilScripting::loadScripting();
     $domains = array();
     if (!empty($scripting)) {
         foreach ($scripting['scripts'][$script]['chain'] as $domain) {
             $description = JText::_($scripting['domains'][$domain]['text']);
             $domain_key = $scripting['domains'][$domain]['domain'];
             if ($isSTW && $domain_key == 'Packing') {
                 $description = JText::_('BACKUP_LABEL_DOMAIN_PACKING_STW');
             }
             $domains[] = array($domain_key, $description);
         }
     }
     $json_domains = AkeebaHelperEscape::escapeJS(json_encode($domains), '"\\');
     // Get the maximum execution time and bias
     $maxexec = $registry->get('akeeba.tuning.max_exec_time', 14) * 1000;
     $bias = $registry->get('akeeba.tuning.run_time_bias', 75);
     // Check if the output directory is writable
     $quirks = AEUtilQuirks::get_quirks();
     $unwritableOutput = array_key_exists('001', $quirks);
     // Pass on data
     $this->assign('haserrors', !$helper->status);
     $this->assign('hasquirks', $helper->hasQuirks());
     $this->assign('quirks', $helper->getQuirksCell(!$helper->status));
     $this->assign('description', $backup_description);
     $this->assign('comment', $comment);
     $this->assign('domains', $json_domains);
     $this->assign('maxexec', $maxexec);
     $this->assign('bias', $bias);
     $this->assign('useiframe', $registry->get('akeeba.basic.useiframe', 0) ? 'true' : 'false');
     $this->assign('returnurl', $returnurl);
     $this->assign('unwritableoutput', $unwritableOutput);
     if ($registry->get('akeeba.advanced.archiver_engine', 'jpa') == 'jps') {
         $this->assign('showjpskey', 1);
         $this->assign('jpskey', $registry->get('engine.archiver.jps.key', ''));
     } else {
         $this->assign('showjpskey', 0);
     }
     $this->assign('autostart', JRequest::getInt('autostart', 0));
     // Pass on profile info
     $this->assign('profileid', $cpanelmodel->getProfileID());
     // Active profile ID
     $this->assign('profilelist', $cpanelmodel->getProfilesList());
     // List of available profiles
     // Pass on state information pertaining to SRP
     $srpinfo = array('tag' => JRequest::getCmd('tag', 'backend'), 'type' => JRequest::getCmd('type', ''), 'name' => JRequest::getCmd('name', ''), 'group' => JRequest::getCmd('group', ''), 'customdirs' => JRequest::getVar('customdirs', array(), 'default', 'array', 2), 'extraprefixes' => JRequest::getVar('extraprefixes', array(), 'default', 'array', 2), 'customtables' => JRequest::getVar('customtables', array(), 'default', 'array', 2), 'xmlname' => JRequest::getString('xmlname', ''));
     $this->assign('srpinfo', $srpinfo);
     // Add references to CSS and JS files
     AkeebaHelperIncludes::includeMedia(false);
     // Add live help
     AkeebaHelperIncludes::addHelp();
     // Set the toolbar title
     if ($srpinfo['tag'] == 'restorepoint') {
         $subtitle = JText::_('AKEEBASRP');
     } elseif ($isSTW) {
         $subtitle = JText::_('SITETRANSFERWIZARD');
     } else {
         $subtitle = JText::_('BACKUP');
     }
     JToolBarHelper::title(JText::_('AKEEBA') . ':: <small>' . $subtitle . '</small>', 'akeeba');
     parent::display(JRequest::getCmd('tpl', null));
 }