%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/ProjectSeven/Storage/Drivers/ |
| Current File : /www/varak.net/mail2.varak.net_old/libraries/ProjectSeven/Storage/Drivers/Files.php |
<?php
/*
* Copyright 2004-2014, AfterLogic Corp.
* Licensed under AGPLv3 license or AfterLogic license
* if commercial version of the product was purchased.
* See the LICENSE file for a full license statement.
*/
namespace ProjectSeven\Storage\Drivers;
/**
* @category ProjectSeven
* @package Storage
* @subpackage Drivers
*/
class Files implements \ProjectSeven\Storage\StorageInterface
{
/**
* @var string
*/
protected $sDataPath;
/**
* @param string $sDataPath
*
* @return void
*/
public function __construct($sDataPath)
{
$this->sDataPath = rtrim(trim($sDataPath), '\\/');
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
* @param string $sValue
*
* @return bool
*/
public function Put(\CAccount $oAccount, $iStorageType, $sKey, $sValue)
{
return false !== @file_put_contents(
$this->generateFileName($oAccount, $iStorageType, $sKey, true), $sValue);
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
* @param resource $rSource
*
* @return bool
*/
public function PutFile(\CAccount $oAccount, $iStorageType, $sKey, $rSource)
{
$bResult = false;
if ($rSource)
{
$rOpenOutput = @fopen($this->generateFileName($oAccount, $iStorageType, $sKey, true), 'w+b');
if ($rOpenOutput)
{
$bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rSource, array($rOpenOutput)));
@fclose($rOpenOutput);
}
}
return $bResult;
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
* @param string $sSource
*
* @return bool
*/
public function MoveUploadedFile(\CAccount $oAccount, $iStorageType, $sKey, $sSource)
{
return @move_uploaded_file($sSource,
$this->generateFileName($oAccount, $iStorageType, $sKey, true));
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
*
* @return string | bool
*/
public function Get(\CAccount $oAccount, $iStorageType, $sKey)
{
return @file_get_contents($this->generateFileName($oAccount, $iStorageType, $sKey));
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
*
* @return resource | bool
*/
public function GetFile(\CAccount $oAccount, $iStorageType, $sKey)
{
$mResult = false;
$sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey);
if (@file_exists($sFileName))
{
$mResult = @fopen($sFileName, 'rb');
}
return $mResult;
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
*
* @return bool
*/
public function Clear(\CAccount $oAccount, $iStorageType, $sKey)
{
return @unlink($this->generateFileName($oAccount, $iStorageType, $sKey));
}
/**
* @param \RainLoop\Account $oAccount
* @param int $iStorageType
* @param string $sKey
*
* @return int | bool
*/
public function FileSize(\CAccount $oAccount, $iStorageType, $sKey)
{
return @filesize($this->generateFileName($oAccount, $iStorageType, $sKey));
}
/**
* @param \CAccount $oAccount
* @param int $iType
* @param string $sKey
*
* @return bool
*/
public function FileExists(\CAccount $oAccount, $iStorageType, $sKey)
{
return @file_exists($this->generateFileName($oAccount, $iStorageType, $sKey));
}
/**
* @param \CAccount $oAccount
* @param int $iStorageType
* @param string $sKey
* @param bool $bMkDir = false
*
* @return string
*/
protected function generateFileName(\CAccount $oAccount, $iStorageType, $sKey, $bMkDir = false)
{
$sEmail = preg_replace('/[^a-z0-9\-\.@]/', '_', strtolower($oAccount->Email));
$sTypePath = $sKeyPath = '';
switch ($iStorageType)
{
case \RainLoop\Storage\Enumerations\StorageType::TEMP:
$sTypePath = 'tmp';
$sKeyPath = md5($sKey);
$sKeyPath = substr($sKeyPath, 0, 2).'/'.$sKeyPath;
break;
case RainLoop\Storage\Enumerations\StorageType::USER:
$sTypePath = 'data';
$sKeyPath = md5($sKey);
$sKeyPath = substr($sKeyPath, 0, 2).'/'.$sKeyPath;
break;
case RainLoop\Storage\Enumerations\StorageType::CONFIG:
$sTypePath = 'cfg';
$sKeyPath = preg_replace('/[^a-zA-Z0-9\/]/', '_', $sKey);
break;
}
$sFilePath = $this->sDataPath.'/storage/'.$sTypePath.'/'.rtrim(substr($sEmail, 0, 2), '@').'/'.$sEmail.'/'.$sKeyPath;
if ($bMkDir && !@is_dir(dirname($sFilePath)))
{
if (!@mkdir(dirname($sFilePath), 0777, true))
{
throw new \ProjectSeven\Exceptions\Exception('Can\'t make storage directory "'.$sFilePath.'"');
}
}
return $sFilePath;
}
}