File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_akeeba/controllers
Viewing File: /home/astoriaah/www/old15/administrator/components/com_akeeba/controllers/remotefile.php
<?php /** * @package AkeebaBackup * @copyright Copyright (c)2009-2014 Nicholas K. Dionysopoulos * @license GNU General Public License version 3, or later * * @since 3.2 */ // Protect from unauthorized access defined('_JEXEC') or die(); use Akeeba\Engine\Platform; use Akeeba\Engine\Factory; /** * The controller to handle actions against remote files * * @author nicholas */ class AkeebaControllerRemotefile extends AkeebaControllerDefault { /** * This controller does not support a default task, thank you. */ public function display($cachable = false, $urlparams = false, $tpl = null) { JError::raiseError(500, 'Invalid task'); return false; } /** * Lists the available remote storage actions for a specific backup entry */ public function listactions($cachable = false, $urlparams = false) { // List available actions $id = $this->getAndCheckId(); $model = $this->getThisModel(); $model->setState('id', $id); if ($id === false) { JError::raiseError(500, 'Invalid ID'); return false; } parent::display(false, false); } /** * Fetches a complete backup set from a remote storage location to the local (server) * storage so that the user can download or restore it. */ public function dltoserver() { // Get the parameters $id = $this->getAndCheckId(); $part = $this->input->get('part', -1, 'int'); $frag = $this->input->get('frag', -1, 'int'); // Check the ID if ($id === false) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, JText::_('REMOTEFILES_ERR_INVALIDID'), 'error'); return true; } $model = $this->getThisModel(); $model->setState('id', $id); $model->setState('part', $part); $model->setState('frag', $frag); $result = $model->downloadToServer(); if ($result['finished']) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, JText::_('REMOTEFILES_LBL_JUSTFINISHED')); return true; } elseif ($result['error']) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, $result['error'], 'error'); return true; } else { parent::display(false, false); } } /** * Downloads a file from the remote storage to the user's browsers */ public function dlfromremote() { $id = $this->getAndCheckId(); $part = $this->input->get('part', 0, 'int'); if ($id === false) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, JText::_('REMOTEFILES_ERR_INVALIDID'), 'error'); return true; } $stat = Platform::getInstance()->get_statistics($id); $remoteFilename = $stat['remote_filename']; $rfparts = explode('://', $remoteFilename); $engine = Factory::getPostprocEngine($rfparts[0]); $remote_filename = $rfparts[1]; $basename = basename($remote_filename); $extension = strtolower(str_replace(".", "", strrchr($basename, "."))); if ($part > 0) { $new_extension = substr($extension, 0, 1) . sprintf('%02u', $part); } else { $new_extension = $extension; } $filename = $basename . '.' . $new_extension; $remote_filename = substr($remote_filename, 0, -strlen($extension)) . $new_extension; if ($engine->downloads_to_browser_inline) { @ob_end_clean(); @clearstatcache(); // Send MIME headers header('MIME-Version: 1.0'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Transfer-Encoding: binary'); 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; } // Disable caching header('Expires: Mon, 20 Dec 1998 01:00:00 GMT'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: no-cache'); } Platform::getInstance()->load_configuration($stat['profile_id']); $result = $engine->downloadToBrowser($remote_filename); if (is_string($result) && ($result !== true) && $result !== false) { // We have to redirect $result = str_replace('://%2F', '://', $result); @ob_end_clean(); header('Location: ' . $result); flush(); JFactory::getApplication()->close(); } elseif ($result === false) { // Failed to download $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, $engine->getWarning(), 'error'); } return true; } /** * Deletes a file from the remote storage */ public function delete() { // Get the parameters $id = $this->getAndCheckId(); $part = $this->input->get('part', -1, 'int'); // Check the ID if ($id === false) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, JText::_('REMOTEFILES_ERR_INVALIDID'), 'error'); return true; } $model = $this->getThisModel(); $model->setState('id', $id); $model->setState('part', $part); $result = $model->deleteRemoteFiles(); if ($result['finished']) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, JText::_('REMOTEFILES_LBL_JUSTFINISHEDELETING')); } elseif ($result['error']) { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=listactions&id=' . $id; $this->setRedirect($url, $result['error'], 'error'); } else { $url = 'index.php?option=com_akeeba&view=remotefiles&tmpl=component&task=delete&id=' . $result['id'] . '&part=' . $result['part']; $this->setRedirect($url); } return true; } /** * Gets the stats record ID from the request and checks that it does exist * * @return bool|int False if an invalid ID is found, the numeric ID if it's valid */ private function getAndCheckId() { $id = $this->input->get('id', 0, 'int'); if ($id <= 0) { return false; } $statObject = Platform::getInstance()->get_statistics($id); if (empty($statObject) || !is_array($statObject)) { return false; } return $id; } }