Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
fastslack committed Oct 11, 2017
1 parent 388ab82 commit 27a6d4b
Show file tree
Hide file tree
Showing 12 changed files with 300 additions and 266 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
<?php
/**
* @package Joomla.Platform
* @subpackage FileSystem
* Joomla! Content Management System
*
* @copyright Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @copyright Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

namespace Joomla\CMS\Filesystem

use Joomla\CMS\Factory;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Filesystem\Wrapper\WrapperFolder;
use Joomla\CMS\Filesystem\Wrapper\WrapperPath;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Client\FtpClient;

defined('JPATH_PLATFORM') or die;

/**
* A File handling class
*
* @since 11.1
*/
class JFile
class File
{
/**
* Gets the extension of a file name
Expand Down Expand Up @@ -84,7 +94,7 @@ public static function makeSafe($file)
*/
public static function copy($src, $dest, $path = null, $use_streams = false)
{
$pathObject = new JFilesystemWrapperPath;
$pathObject = new WrapperPath;

// Prepend a base path if it exists
if ($path)
Expand All @@ -96,18 +106,18 @@ public static function copy($src, $dest, $path = null, $use_streams = false)
// Check src path
if (!is_readable($src))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_FIND_COPY', $src), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_FIND_COPY', $src), Log::WARNING, 'jerror');

return false;
}

if ($use_streams)
{
$stream = JFactory::getStream();
$stream = Factory::getStream();

if (!$stream->copy($src, $dest))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_STREAMS', $src, $dest, $stream->getError()), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_STREAMS', $src, $dest, $stream->getError()), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -116,17 +126,17 @@ public static function copy($src, $dest, $path = null, $use_streams = false)
}
else
{
$FTPOptions = JClientHelper::getCredentials('ftp');
$FTPOptions = ClientHelper::getCredentials('ftp');

if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

// If the parent folder doesn't exist we must create it
if (!file_exists(dirname($dest)))
{
$folderObject = new JFilesystemWrapperFolder;
$folderObject = new WrapperFolder;
$folderObject->create(dirname($dest));
}

Expand All @@ -145,7 +155,7 @@ public static function copy($src, $dest, $path = null, $use_streams = false)
{
if (!@ copy($src, $dest))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_COPY_FAILED_ERR01', $src, $dest), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_COPY_FAILED_ERR01', $src, $dest), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -168,8 +178,8 @@ public static function copy($src, $dest, $path = null, $use_streams = false)
*/
public static function delete($file)
{
$FTPOptions = JClientHelper::getCredentials('ftp');
$pathObject = new JFilesystemWrapperPath;
$FTPOptions = ClientHelper::getCredentials('ftp');
$pathObject = new WrapperPath;

if (is_array($file))
{
Expand All @@ -184,7 +194,7 @@ public static function delete($file)
if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
}

foreach ($files as $file)
Expand Down Expand Up @@ -220,7 +230,7 @@ public static function delete($file)
else
{
$filename = basename($file);
JLog::add(JText::sprintf('JLIB_FILESYSTEM_DELETE_FAILED', $filename), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_DELETE_FAILED', $filename), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -243,7 +253,7 @@ public static function delete($file)
*/
public static function move($src, $dest, $path = '', $use_streams = false)
{
$pathObject = new JFilesystemWrapperPath;
$pathObject = new WrapperPath;

if ($path)
{
Expand All @@ -254,18 +264,18 @@ public static function move($src, $dest, $path = '', $use_streams = false)
// Check src path
if (!is_readable($src))
{
JLog::add(JText::_('JLIB_FILESYSTEM_CANNOT_FIND_SOURCE_FILE'), JLog::WARNING, 'jerror');
Log::add(Text::_('JLIB_FILESYSTEM_CANNOT_FIND_SOURCE_FILE'), Log::WARNING, 'jerror');

return false;
}

if ($use_streams)
{
$stream = JFactory::getStream();
$stream = Factory::getStream();

if (!$stream->move($src, $dest))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_MOVE_STREAMS', $stream->getError()), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_MOVE_STREAMS', $stream->getError()), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -274,12 +284,12 @@ public static function move($src, $dest, $path = '', $use_streams = false)
}
else
{
$FTPOptions = JClientHelper::getCredentials('ftp');
$FTPOptions = ClientHelper::getCredentials('ftp');

if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

// Translate path for the FTP account
$src = $pathObject->clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $src), '/');
Expand All @@ -288,7 +298,7 @@ public static function move($src, $dest, $path = '', $use_streams = false)
// Use FTP rename to simulate move
if (!$ftp->rename($src, $dest))
{
JLog::add(JText::_('JLIB_FILESYSTEM_ERROR_RENAME_FILE'), JLog::WARNING, 'jerror');
Log::add(Text::_('JLIB_FILESYSTEM_ERROR_RENAME_FILE'), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -297,7 +307,7 @@ public static function move($src, $dest, $path = '', $use_streams = false)
{
if (!@ rename($src, $dest))
{
JLog::add(JText::_('JLIB_FILESYSTEM_ERROR_RENAME_FILE'), JLog::WARNING, 'jerror');
Log::add(Text::_('JLIB_FILESYSTEM_ERROR_RENAME_FILE'), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -323,7 +333,7 @@ public static function move($src, $dest, $path = '', $use_streams = false)
*/
public static function read($filename, $incpath = false, $amount = 0, $chunksize = 8192, $offset = 0)
{
JLog::add(__METHOD__ . ' is deprecated. Use native file_get_contents() syntax.', JLog::WARNING, 'deprecated');
Log::add(__METHOD__ . ' is deprecated. Use native file_get_contents() syntax.', Log::WARNING, 'deprecated');

$data = null;

Expand All @@ -334,7 +344,7 @@ public static function read($filename, $incpath = false, $amount = 0, $chunksize

if (false === $fh = fopen($filename, 'rb', $incpath))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_READ_UNABLE_TO_OPEN_FILE', $filename), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_READ_UNABLE_TO_OPEN_FILE', $filename), Log::WARNING, 'jerror');

return false;
}
Expand Down Expand Up @@ -396,7 +406,7 @@ public static function write($file, $buffer, $use_streams = false)
// If the destination directory doesn't exist we need to create it
if (!file_exists(dirname($file)))
{
$folderObject = new JFilesystemWrapperFolder;
$folderObject = new WrapperFolder;

if ($folderObject->create(dirname($file)) == false)
{
Expand All @@ -406,14 +416,14 @@ public static function write($file, $buffer, $use_streams = false)

if ($use_streams)
{
$stream = JFactory::getStream();
$stream = Factory::getStream();

// Beef up the chunk size to a meg
$stream->set('chunksize', (1024 * 1024));

if (!$stream->writeFile($file, $buffer))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_WRITE_STREAMS', $file, $stream->getError()), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_WRITE_STREAMS', $file, $stream->getError()), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -422,13 +432,13 @@ public static function write($file, $buffer, $use_streams = false)
}
else
{
$FTPOptions = JClientHelper::getCredentials('ftp');
$pathObject = new JFilesystemWrapperPath;
$FTPOptions = ClientHelper::getCredentials('ftp');
$pathObject = new WrapperPath;

if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

// Translate path for the FTP account and use FTP write buffer to file
$file = $pathObject->clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $file), '/');
Expand Down Expand Up @@ -467,7 +477,7 @@ public static function append($file, $buffer, $use_streams = false)

if ($use_streams)
{
$stream = JFactory::getStream();
$stream = Factory::getStream();

// Beef up the chunk size to a meg
$stream->set('chunksize', (1024 * 1024));
Expand All @@ -477,27 +487,27 @@ public static function append($file, $buffer, $use_streams = false)
return true;
}

JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_WRITE_STREAMS', $file, $stream->getError()), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_WRITE_STREAMS', $file, $stream->getError()), Log::WARNING, 'jerror');

return false;
}
else
{
// Initialise variables.
$FTPOptions = JClientHelper::getCredentials('ftp');
$FTPOptions = ClientHelper::getCredentials('ftp');

if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

// Translate path for the FTP account and use FTP write buffer to file
$file = JPath::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $file), '/');
$file = Path::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $file), '/');
$ret = $ftp->append($file, $buffer);
}
else
{
$file = JPath::clean($file);
$file = Path::clean($file);
$ret = is_int(file_put_contents($file, $buffer, FILE_APPEND));
}

Expand Down Expand Up @@ -534,32 +544,32 @@ public static function upload($src, $dest, $use_streams = false, $allow_unsafe =

if (!$isSafe)
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR03', $dest), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR03', $dest), Log::WARNING, 'jerror');

return false;
}
}

// Ensure that the path is valid and clean
$pathObject = new JFilesystemWrapperPath;
$pathObject = new WrapperPath;
$dest = $pathObject->clean($dest);

// Create the destination directory if it does not exist
$baseDir = dirname($dest);

if (!file_exists($baseDir))
{
$folderObject = new JFilesystemWrapperFolder;
$folderObject = new WrapperFolder;
$folderObject->create($baseDir);
}

if ($use_streams)
{
$stream = JFactory::getStream();
$stream = Factory::getStream();

if (!$stream->upload($src, $dest))
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_UPLOAD', $stream->getError()), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_UPLOAD', $stream->getError()), Log::WARNING, 'jerror');

return false;
}
Expand All @@ -568,13 +578,13 @@ public static function upload($src, $dest, $use_streams = false, $allow_unsafe =
}
else
{
$FTPOptions = JClientHelper::getCredentials('ftp');
$FTPOptions = ClientHelper::getCredentials('ftp');
$ret = false;

if ($FTPOptions['enabled'] == 1)
{
// Connect the FTP client
$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);
$ftp = FtpClient::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

// Translate path for the FTP account
$dest = $pathObject->clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $dest), '/');
Expand All @@ -587,7 +597,7 @@ public static function upload($src, $dest, $use_streams = false, $allow_unsafe =
}
else
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR04', $src, $dest), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR04', $src, $dest), Log::WARNING, 'jerror');
}
}
else
Expand All @@ -601,12 +611,12 @@ public static function upload($src, $dest, $use_streams = false, $allow_unsafe =
}
else
{
JLog::add(JText::_('JLIB_FILESYSTEM_ERROR_WARNFS_ERR01'), JLog::WARNING, 'jerror');
Log::add(Text::_('JLIB_FILESYSTEM_ERROR_WARNFS_ERR01'), Log::WARNING, 'jerror');
}
}
else
{
JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR04', $src, $dest), JLog::WARNING, 'jerror');
Log::add(Text::sprintf('JLIB_FILESYSTEM_ERROR_WARNFS_ERR04', $src, $dest), Log::WARNING, 'jerror');
}
}

Expand All @@ -625,7 +635,7 @@ public static function upload($src, $dest, $use_streams = false, $allow_unsafe =
*/
public static function exists($file)
{
$pathObject = new JFilesystemWrapperPath;
$pathObject = new WrapperPath;

return is_file($pathObject->clean($file));
}
Expand All @@ -642,7 +652,7 @@ public static function exists($file)
*/
public static function getName($file)
{
JLog::add(__METHOD__ . ' is deprecated. Use native basename() syntax.', JLog::WARNING, 'deprecated');
Log::add(__METHOD__ . ' is deprecated. Use native basename() syntax.', Log::WARNING, 'deprecated');

// Convert back slashes to forward slashes
$file = str_replace('\\', '/', $file);
Expand Down

0 comments on commit 27a6d4b

Please sign in to comment.