FundacionLQDVI_WebCongresos/www/components/com_kunena/lib/kunena.file.class.php

189 lines
4.5 KiB
PHP
Raw Normal View History

<?php
/**
* @version $Id: kunena.defines.php 510 2009-03-08 08:36:53Z fxstein $
* Kunena Component
* @package Kunena
* @Copyright (C) 2009 Kunena All rights reserved
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.kunena.com
**/
defined( '_JEXEC' ) or die('Restricted access');
jimport('joomla.filesystem.path');
jimport('joomla.filesystem.file');
class CKunenaPath extends JPath
{
function tmpdir()
{
static $tmpdir=false;
if (!empty($tmpdir)) return $tmpdir;
if (function_exists('sys_get_temp_dir')) {
$tmpdir = sys_get_temp_dir();
}
if (empty($tmpdir)) {
$file = tempnam(false,false);
if ($file === false) return false;
@unlink($file);
$tmpdir = realpath(dirname($file));
}
return $tmpdir;
}
function _owner($getgroup = false)
{
static $owner=false;
static $group=false;
if ($getgroup === false && !empty($owner)) return $owner;
if ($getgroup === true && !empty($group)) return $group;
jimport('joomla.user.helper');
$tmp = md5(JUserHelper::genRandomPassword(16));
$dir = self::tmpdir();
if ($dir)
{
$test = $dir.DS.$tmp;
// Create the test file
JFile::write($test, '');
// Test ownership
$owner = fileowner($test);
$group = filegroup($test);
// Delete the test file
JFile::delete($test);
}
return ($getgroup ? $group : $owner);
}
function owner()
{
return self::_owner();
}
function group()
{
return self::_owner(true);
}
function isOwner($path)
{
$owner = self::owner();
return ($owner == fileowner($path));
}
function isWritable($path)
{
if (is_writable($path)) return true;
$owner = self::owner();
$group = self::group();
$perms = self::getPermissions($path);
if ($owner == fileowner($path)) {
if ($perms[1] == 'w') return true;
}
if ($group == filegroup($path)) {
if ($perms[4] == 'w') return true;
}
return false;
}
}
class CKunenaFile extends JFile
{
function copy($src, $dest, $path = null)
{
// Initialize variables
jimport('joomla.client.helper');
$FTPOptions = JClientHelper::getCredentials('ftp');
if ($path) {
$src = CKunenaPath::clean($path.DS.$src);
$dest = CKunenaPath::clean($path.DS.$dest);
}
if ($FTPOptions['enabled'] == 1) {
// Make sure that we can copy file in FTP mode
if (self::exists($dest) && !CKunenaPath::isOwner($dest)) @chmod($dest, 0777);
}
$ret = parent::copy($src, $dest);
if ($ret === false && $FTPOptions['enabled'] == 1) @chmod($dest, 0644);
return $ret;
}
function move($src, $dest, $path = null)
{
// Initialize variables
jimport('joomla.client.helper');
$FTPOptions = JClientHelper::getCredentials('ftp');
if ($path) {
$src = CKunenaPath::clean($path.DS.$src);
$dest = CKunenaPath::clean($path.DS.$dest);
}
if ($FTPOptions['enabled'] == 1) {
// Make sure that we can move file in FTP mode
if (self::exists($dest) && !CKunenaPath::isOwner($dest)) @chmod($dest, 0777);
// If owner is not right, copy the file
if (self::exists($src) && !CKunenaPath::isOwner($src)) {
if (($ret = self::copy($src, $dest)) === true) {
self::delete($src);
}
} else {
$ret = parent::move($src, $dest);
}
} else {
$ret = parent::move($src, $dest);
}
if ($ret === false && $FTPOptions['enabled'] == 1) @chmod($dest, 0644);
return $ret;
}
function write($file, $buffer)
{
// Initialize variables
jimport('joomla.client.helper');
$FTPOptions = JClientHelper::getCredentials('ftp');
if ($FTPOptions['enabled'] == 1) {
// Make sure that we can copy file in FTP mode
if (self::exists($file) && !CKunenaPath::isOwner($file)) @chmod($file, 0777);
}
$ret = parent::write($file, $buffer);
if ($ret === false && $FTPOptions['enabled'] == 1) @chmod($file, 0644);
return $ret;
}
function upload($src, $dest)
{
// Initialize variables
jimport('joomla.client.helper');
$FTPOptions = JClientHelper::getCredentials('ftp');
$ret = false;
if (is_uploaded_file($src)) {
if ($FTPOptions['enabled'] == 1 && self::exists($dest) && !CKunenaPath::isOwner($dest)) @chmod($dest, 0777);
$ret = parent::upload($src, $dest);
if ($FTPOptions['enabled'] == 1) {
if ($ret === true) {
jimport('joomla.client.ftp');
$ftp = & JFTP::getInstance($FTPOptions['host'], $FTPOptions['port'], null, $FTPOptions['user'], $FTPOptions['pass']);
$ftp->chmod($dest, 0644);
@unlink($src);
$ret = true;
} else {
@chmod($src, 0644);
}
}
} else {
JError::raiseWarning(21, JText::_('WARNFS_ERR02'));
}
}
}
?>