File "buadmin.php"
Full Path: /home/asmplong/www/ancien-site-2019/site/administrator/components/com_akeeba/controllers/buadmin.php
File size: 11.2 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package AkeebaBackup
* @copyright Copyright (c)2006-2011 Nicholas K. Dionysopoulos
* @license GNU General Public License version 3, or later
* @version $id$
* @version $Id: buadmin.php 681 2011-06-01 08:50:04Z nikosdion $
*/
// Protect from unauthorized access
defined('_JEXEC') or die('Restricted Access');
// Load framework base classes
jimport('joomla.application.component.controller');
/**
* The Backup Administrator class
*
*/
class AkeebaControllerBuadmin extends JController
{
public function __construct($config = array()) {
parent::__construct($config);
if(AKEEBA_JVERSION=='16')
{
// Access check, Joomla! 1.6 style.
$user = JFactory::getUser();
if (!$user->authorise('akeeba.download', 'com_akeeba')) {
$this->setRedirect('index.php?option=com_akeeba');
return JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR'));
$this->redirect();
}
} else {
// Custom ACL for Joomla! 1.5
$aclModel = JModel::getInstance('Acl','AkeebaModel');
if(!$aclModel->authorizeUser('download')) {
$this->setRedirect('index.php?option=com_akeeba');
return JError::raiseWarning(403, JText::_('Access Forbidden'));
$this->redirect();
}
}
}
/**
* Show a list of backup attempts
*
*/
public function display()
{
$session = JFactory::getSession();
$session->set('buadmin.task', 'default', 'akeeba');
parent::display();
}
public function restorepoint()
{
$session = JFactory::getSession();
$session->set('buadmin.task', 'restorepoint', 'akeeba');
JRequest::setVar('layout','restorepoint');
parent::display();
}
/**
* Downloads the backup file of a specific backup attempt,
* if it's available
*
*/
public function download()
{
$cid = JRequest::getVar('cid',array(),'default','array');
$id = JRequest::getInt('id');
$part = JRequest::getInt('part',-1);
if(empty($id))
{
if(is_array($cid) && !empty($cid))
{
$id = $cid[0];
}
else
{
$id = -1;
}
}
if($id <= 0)
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
parent::display();
return;
}
$stat = AEPlatform::get_statistics($id);
$allFilenames = AEUtilStatistics::get_all_filenames($stat);
// Check single part files
if( (count($allFilenames) == 1) && ($part == -1) )
{
$filename = array_shift($allFilenames);
}
elseif( (count($allFilenames) > 0) && (count($allFilenames) > $part) && ($part >= 0) )
{
$filename = $allFilenames[$part];
}
else
{
$filename = null;
}
if(is_null($filename) || empty($filename) || !@file_exists($filename) )
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDDOWNLOAD'), 'error');
parent::display();
return;
}
else
{
// For a certain unmentionable browser -- Thank you, Nooku, for the tip
if(function_exists('ini_get') && function_exists('ini_set')) {
if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
}
// Remove php's time limit -- Thank you, Nooku, for the tip
if(function_exists('ini_get') && function_exists('set_time_limit')) {
if(!ini_get('safe_mode') ) {
@set_time_limit(0);
}
}
$basename = @basename($filename);
$filesize = @filesize($filename);
$extension = strtolower(str_replace(".", "", strrchr($filename, ".")));
while (@ob_end_clean());
@clearstatcache();
// Send MIME headers
header('MIME-Version: 1.0');
header('Content-Disposition: attachment; filename='.$basename);
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
switch($extension)
{
case 'zip':
// ZIP MIME type
header('Content-Type: application/zip');
break;
default:
// Generic binary data MIME type
header('Content-Type: application/octet-stream');
break;
}
// Notify of filesize, if this info is available
if($filesize > 0) header('Content-Length: '.@filesize($filename));
// Disable caching
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header('Pragma: no-cache');
flush();
if($filesize > 0)
{
// If the filesize is reported, use 1M chunks for echoing the data to the browser
$blocksize = 1048756; //1M chunks
$handle = @fopen($filename, "r");
// Now we need to loop through the file and echo out chunks of file data
if($handle !== false) while(!@feof($handle)){
echo @fread($handle, $blocksize);
@ob_flush();
flush();
}
if($handle !== false) @fclose($handle);
} else {
// If the filesize is not reported, hope that readfile works
@readfile($filename);
}
exit(0);
}
}
/**
* Deletes one or several backup statistics records and their associated backup files
*/
public function remove()
{
// CSRF prevention
if(!JRequest::getVar(JUtility::getToken(), false, 'POST')) {
JError::raiseError('403', JText::_(version_compare(JVERSION, '1.6.0', 'ge') ? 'JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN' : 'Request Forbidden'));
}
$cid = JRequest::getVar('cid',array(),'default','array');
$id = JRequest::getInt('id');
if(empty($id))
{
if(!empty($cid) && is_array($cid))
{
foreach ($cid as $id)
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$result = $this->_remove($id);
if(!$result) $this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
}
}
else
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
return;
}
}
else
{
$result = $this->_remove($id);
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
if(!$result) $this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
}
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_MSG_DELETED'));
parent::display();
}
/**
* Deletes backup files associated to one or several backup statistics records
*/
public function deletefiles()
{
// CSRF prevention
if(!JRequest::getVar(JUtility::getToken(), false, 'POST')) {
JError::raiseError('403', JText::_(version_compare(JVERSION, '1.6.0', 'ge') ? 'JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN' : 'Request Forbidden'));
}
$cid = JRequest::getVar('cid',array(),'default','array');
$id = JRequest::getInt('id');
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
if(empty($id))
{
if(!empty($cid) && is_array($cid))
{
foreach ($cid as $id)
{
$result = $this->_removeFiles($id);
if(!$result) $this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
}
}
else
{
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
return;
}
}
else
{
$result = $this->_remove($id);
if(!$result) $this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
}
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_MSG_DELETEDFILE'));
parent::display();
}
/**
* Removes the backup file linked to a statistics entry and the entry itself
*
* @return bool True on success
*/
private function _remove($id)
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
if($id <= 0)
{
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
return;
}
$model =& $this->getModel('statistics');
return $model->delete($id);
}
/**
* Removes only the backup file linked to a statistics entry
*
* @return bool True on success
*/
private function _removeFiles($id)
{
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
if($id <= 0)
{
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
return;
}
$model =& $this->getModel('statistics');
return $model->deleteFile($id);
}
public function showcomment()
{
$cid = JRequest::getVar('cid',array(),'default','array');
$id = JRequest::getInt('id');
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
if(empty($id))
{
if(is_array($cid) && !empty($cid))
{
$id = $cid[0];
}
else
{
$id = -1;
}
}
if($id <= 0)
{
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, JText::_('STATS_ERROR_INVALIDID'), 'error');
parent::display();
return;
}
JRequest::setVar('id', $id);
parent::display();
}
/**
* Save an edited backup record
*/
public function save()
{
// CSRF prevention
if(!JRequest::getVar(JUtility::getToken(), false, 'POST')) {
JError::raiseError('403', JText::_(version_compare(JVERSION, '1.6.0', 'ge') ? 'JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN' : 'Request Forbidden'));
}
$id = JRequest::getInt('id');
$description = JRequest::getString('description');
$comment = JRequest::getVar('comment',null,'default','string',4);
$statistic = AEPlatform::get_statistics(JRequest::getInt('id'));
$statistic['description'] = $description;
$statistic['comment'] = $comment;
AEPlatform::set_or_update_statistics(JRequest::getInt('id'),$statistic,$self);
if( !$this->getError() ) {
$message = JText::_('STATS_LOG_SAVEDOK');
$type = 'message';
} else {
$message = JText::_('STATS_LOG_SAVEERROR');
$type = 'error';
}
$session = JFactory::getSession();
$task = $session->get('buadmin.task', 'default', 'akeeba');
$this->setRedirect(JURI::base().'index.php?option=com_akeeba&view=buadmin&task='.$task, $message, $type);
}
public function restore()
{
// CSRF prevention
if(!JRequest::getVar(JUtility::getToken(), false, 'POST')) {
JError::raiseError('403', JText::_(version_compare(JVERSION, '1.6.0', 'ge') ? 'JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN' : 'Request Forbidden'));
}
$id = null;
$cid = JRequest::getVar('cid', array(), 'default', 'array');
if(!empty($cid))
{
$id = intval($cid[0]);
if($id <= 0) $id = null;
}
if(empty($id)) $id = JRequest::getInt('id', -1);
if($id <= 0) $id = null;
$url = JURI::base().'index.php?option=com_akeeba&view=restore&id='.$id;
$this->setRedirect($url);
$this->redirect();
return;
}
}