Added 3rd party KH modules

This commit is contained in:
Deon George
2013-04-22 14:19:54 +10:00
parent f96694b18f
commit a20cb078a8
176 changed files with 20483 additions and 0 deletions

View File

@@ -0,0 +1,209 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/KeyCache.php';
//@require 'Swift/KeyCacheInputStream.php';
//@require 'Swift/InputByteStream.php';
//@require 'Swift/OutputByteStrean.php';
//@require 'Swift/SwiftException.php';
/**
* A basic KeyCache backed by an array.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
{
/**
* Cache contents.
* @var array
* @access private
*/
private $_contents = array();
/**
* An InputStream for cloning.
* @var Swift_KeyCache_KeyCacheInputStream
* @access private
*/
private $_stream;
/**
* Create a new ArrayKeyCache with the given $stream for cloning to make
* InputByteStreams.
* @param Swift_KeyCache_KeyCacheInputStream $stream
*/
public function __construct(Swift_KeyCache_KeyCacheInputStream $stream)
{
$this->_stream = $stream;
}
/**
* Set a string into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param string $string
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function setString($nsKey, $itemKey, $string, $mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$this->_contents[$nsKey][$itemKey] = $string;
break;
case self::MODE_APPEND:
if (!$this->hasKey($nsKey, $itemKey))
{
$this->_contents[$nsKey][$itemKey] = '';
}
$this->_contents[$nsKey][$itemKey] .= $string;
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
}
}
/**
* Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param Swift_OutputByteStream $os
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
$mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$this->clearKey($nsKey, $itemKey);
case self::MODE_APPEND:
if (!$this->hasKey($nsKey, $itemKey))
{
$this->_contents[$nsKey][$itemKey] = '';
}
while (false !== $bytes = $os->read(8192))
{
$this->_contents[$nsKey][$itemKey] .= $bytes;
}
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
}
}
/**
* Provides a ByteStream which when written to, writes data to $itemKey.
* NOTE: The stream will always write in append mode.
* @param string $nsKey
* @param string $itemKey
* @return Swift_InputByteStream
*/
public function getInputByteStream($nsKey, $itemKey,
Swift_InputByteStream $writeThrough = null)
{
$is = clone $this->_stream;
$is->setKeyCache($this);
$is->setNsKey($nsKey);
$is->setItemKey($itemKey);
if (isset($writeThrough))
{
$is->setWriteThroughStream($writeThrough);
}
return $is;
}
/**
* Get data back out of the cache as a string.
* @param string $nsKey
* @param string $itemKey
* @return string
*/
public function getString($nsKey, $itemKey)
{
$this->_prepareCache($nsKey);
if ($this->hasKey($nsKey, $itemKey))
{
return $this->_contents[$nsKey][$itemKey];
}
}
/**
* Get data back out of the cache as a ByteStream.
* @param string $nsKey
* @param string $itemKey
* @param Swift_InputByteStream $is to write the data to
*/
public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
{
$this->_prepareCache($nsKey);
$is->write($this->getString($nsKey, $itemKey));
}
/**
* Check if the given $itemKey exists in the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @return boolean
*/
public function hasKey($nsKey, $itemKey)
{
$this->_prepareCache($nsKey);
return array_key_exists($itemKey, $this->_contents[$nsKey]);
}
/**
* Clear data for $itemKey in the namespace $nsKey if it exists.
* @param string $nsKey
* @param string $itemKey
*/
public function clearKey($nsKey, $itemKey)
{
unset($this->_contents[$nsKey][$itemKey]);
}
/**
* Clear all data in the namespace $nsKey if it exists.
* @param string $nsKey
*/
public function clearAll($nsKey)
{
unset($this->_contents[$nsKey]);
}
// -- Private methods
/**
* Initialize the namespace of $nsKey if needed.
* @param string $nsKey
* @access private
*/
private function _prepareCache($nsKey)
{
if (!array_key_exists($nsKey, $this->_contents))
{
$this->_contents[$nsKey] = array();
}
}
}

View File

@@ -0,0 +1,316 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/KeyCache.php';
//@require 'Swift/KeyCacheInputStream.php';
//@require 'Swift/InputByteStream.php';
//@require 'Swift/OutputByteStrean.php';
//@require 'Swift/SwiftException.php';
//@require 'Swift/IoException.php';
/**
* A KeyCache which streams to and from disk.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
{
/** Signal to place pointer at start of file */
const POSITION_START = 0;
/** Signal to place pointer at end of file */
const POSITION_END = 1;
/**
* An InputStream for cloning.
* @var Swift_KeyCache_KeyCacheInputStream
* @access private
*/
private $_stream;
/**
* A path to write to.
* @var string
* @access private
*/
private $_path;
/**
* Stored keys.
* @var array
* @access private
*/
private $_keys = array();
/**
* Will be true if magic_quotes_runtime is turned on.
* @var boolean
* @access private
*/
private $_quotes = false;
/**
* Create a new DiskKeyCache with the given $stream for cloning to make
* InputByteStreams, and the given $path to save to.
* @param Swift_KeyCache_KeyCacheInputStream $stream
* @param string $path to save to
*/
public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path)
{
$this->_stream = $stream;
$this->_path = $path;
$this->_quotes = get_magic_quotes_runtime();
}
/**
* Set a string into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param string $string
* @param int $mode
* @throws Swift_IoException
* @see MODE_WRITE, MODE_APPEND
*/
public function setString($nsKey, $itemKey, $string, $mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
break;
case self::MODE_APPEND:
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END);
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
break;
}
fwrite($fp, $string);
}
/**
* Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param Swift_OutputByteStream $os
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
* @throws Swift_IoException
*/
public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
$mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
break;
case self::MODE_APPEND:
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END);
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
break;
}
while (false !== $bytes = $os->read(8192))
{
fwrite($fp, $bytes);
}
}
/**
* Provides a ByteStream which when written to, writes data to $itemKey.
* NOTE: The stream will always write in append mode.
* @param string $nsKey
* @param string $itemKey
* @return Swift_InputByteStream
*/
public function getInputByteStream($nsKey, $itemKey,
Swift_InputByteStream $writeThrough = null)
{
$is = clone $this->_stream;
$is->setKeyCache($this);
$is->setNsKey($nsKey);
$is->setItemKey($itemKey);
if (isset($writeThrough))
{
$is->setWriteThroughStream($writeThrough);
}
return $is;
}
/**
* Get data back out of the cache as a string.
* @param string $nsKey
* @param string $itemKey
* @return string
* @throws Swift_IoException
*/
public function getString($nsKey, $itemKey)
{
$this->_prepareCache($nsKey);
if ($this->hasKey($nsKey, $itemKey))
{
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
if ($this->_quotes)
{
set_magic_quotes_runtime(0);
}
$str = '';
while (!feof($fp) && false !== $bytes = fread($fp, 8192))
{
$str .= $bytes;
}
if ($this->_quotes)
{
set_magic_quotes_runtime(1);
}
return $str;
}
}
/**
* Get data back out of the cache as a ByteStream.
* @param string $nsKey
* @param string $itemKey
* @param Swift_InputByteStream $is to write the data to
*/
public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
{
if ($this->hasKey($nsKey, $itemKey))
{
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
if ($this->_quotes)
{
set_magic_quotes_runtime(0);
}
while (!feof($fp) && false !== $bytes = fread($fp, 8192))
{
$is->write($bytes);
}
if ($this->_quotes)
{
set_magic_quotes_runtime(1);
}
}
}
/**
* Check if the given $itemKey exists in the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @return boolean
*/
public function hasKey($nsKey, $itemKey)
{
return is_file($this->_path . '/' . $nsKey . '/' . $itemKey);
}
/**
* Clear data for $itemKey in the namespace $nsKey if it exists.
* @param string $nsKey
* @param string $itemKey
*/
public function clearKey($nsKey, $itemKey)
{
if ($this->hasKey($nsKey, $itemKey))
{
$fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END);
fclose($fp);
unlink($this->_path . '/' . $nsKey . '/' . $itemKey);
}
unset($this->_keys[$nsKey][$itemKey]);
}
/**
* Clear all data in the namespace $nsKey if it exists.
* @param string $nsKey
*/
public function clearAll($nsKey)
{
if (array_key_exists($nsKey, $this->_keys))
{
foreach ($this->_keys[$nsKey] as $itemKey=>$null)
{
$this->clearKey($nsKey, $itemKey);
}
rmdir($this->_path . '/' . $nsKey);
unset($this->_keys[$nsKey]);
}
}
// -- Private methods
/**
* Initialize the namespace of $nsKey if needed.
* @param string $nsKey
* @access private
*/
private function _prepareCache($nsKey)
{
$cacheDir = $this->_path . '/' . $nsKey;
if (!is_dir($cacheDir))
{
if (!mkdir($cacheDir))
{
throw new Swift_IoException('Failed to create cache directory ' . $cacheDir);
}
$this->_keys[$nsKey] = array();
}
}
/**
* Get a file handle on the cache item.
* @param string $nsKey
* @param string $itemKey
* @param int $position
* @return resource
* @access private
*/
private function _getHandle($nsKey, $itemKey, $position)
{
if (!isset($this->_keys[$nsKey]) || !array_key_exists($itemKey, $this->_keys[$nsKey]))
{
$fp = fopen($this->_path . '/' . $nsKey . '/' . $itemKey, 'w+b');
$this->_keys[$nsKey][$itemKey] = $fp;
}
if (self::POSITION_START == $position)
{
fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET);
}
else
{
fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END);
}
return $this->_keys[$nsKey][$itemKey];
}
/**
* Destructor.
*/
public function __destruct()
{
foreach ($this->_keys as $nsKey=>$null)
{
$this->clearAll($nsKey);
}
}
}

View File

@@ -0,0 +1,53 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/KeyCache.php';
//@require 'Swift/InputByteStream.php';
/**
* Writes data to a KeyCache using a stream.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
interface Swift_KeyCache_KeyCacheInputStream extends Swift_InputByteStream
{
/**
* Set the KeyCache to wrap.
* @param Swift_KeyCache $keyCache
*/
public function setKeyCache(Swift_KeyCache $keyCache);
/**
* Set the nsKey which will be written to.
* @param string $nsKey
*/
public function setNsKey($nsKey);
/**
* Set the itemKey which will be written to.
* @param string $itemKey
*/
public function setItemKey($itemKey);
/**
* Specify a stream to write through for each write().
* @param Swift_InputByteStream $is
*/
public function setWriteThroughStream(Swift_InputByteStream $is);
/**
* Any implementation should be cloneable, allowing the clone to access a
* separate $nsKey and $itemKey.
*/
public function __clone();
}

View File

@@ -0,0 +1,110 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/KeyCache.php';
//@require 'Swift/KeyCacheInputStream.php';
//@require 'Swift/InputByteStream.php';
//@require 'Swift/OutputByteStrean.php';
/**
* A null KeyCache that does not cache at all.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
{
/**
* Set a string into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param string $string
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function setString($nsKey, $itemKey, $string, $mode)
{
}
/**
* Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param Swift_OutputByteStream $os
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
$mode)
{
}
/**
* Provides a ByteStream which when written to, writes data to $itemKey.
* NOTE: The stream will always write in append mode.
* @param string $nsKey
* @param string $itemKey
* @return Swift_InputByteStream
*/
public function getInputByteStream($nsKey, $itemKey,
Swift_InputByteStream $writeThrough = null)
{
}
/**
* Get data back out of the cache as a string.
* @param string $nsKey
* @param string $itemKey
* @return string
*/
public function getString($nsKey, $itemKey)
{
}
/**
* Get data back out of the cache as a ByteStream.
* @param string $nsKey
* @param string $itemKey
* @param Swift_InputByteStream $is to write the data to
*/
public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
{
}
/**
* Check if the given $itemKey exists in the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @return boolean
*/
public function hasKey($nsKey, $itemKey)
{
return false;
}
/**
* Clear data for $itemKey in the namespace $nsKey if it exists.
* @param string $nsKey
* @param string $itemKey
*/
public function clearKey($nsKey, $itemKey)
{
}
/**
* Clear all data in the namespace $nsKey if it exists.
* @param string $nsKey
*/
public function clearAll($nsKey)
{
}
}

View File

@@ -0,0 +1,131 @@
<?php
/*
* This file is part of SwiftMailer.
* (c) 2004-2009 Chris Corbyn
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
//@require 'Swift/KeyCache.php';
//@require 'Swift/KeyCacheInputStream.php';
/**
* Writes data to a KeyCache using a stream.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
class Swift_KeyCache_SimpleKeyCacheInputStream
implements Swift_KeyCache_KeyCacheInputStream
{
/** The KeyCache being written to */
private $_keyCache;
/** The nsKey of the KeyCache being written to */
private $_nsKey;
/** The itemKey of the KeyCache being written to */
private $_itemKey;
/** A stream to write through on each write() */
private $_writeThrough = null;
/**
* Set the KeyCache to wrap.
* @param Swift_KeyCache $keyCache
*/
public function setKeyCache(Swift_KeyCache $keyCache)
{
$this->_keyCache = $keyCache;
}
/**
* Specify a stream to write through for each write().
* @param Swift_InputByteStream $is
*/
public function setWriteThroughStream(Swift_InputByteStream $is)
{
$this->_writeThrough = $is;
}
/**
* Writes $bytes to the end of the stream.
* @param string $bytes
* @param Swift_InputByteStream $is, optional
*/
public function write($bytes, Swift_InputByteStream $is = null)
{
$this->_keyCache->setString(
$this->_nsKey, $this->_itemKey, $bytes, Swift_KeyCache::MODE_APPEND
);
if (isset($is))
{
$is->write($bytes);
}
if (isset($this->_writeThrough))
{
$this->_writeThrough->write($bytes);
}
}
/**
* Not used.
*/
public function commit()
{
}
/**
* Not used.
*/
public function bind(Swift_InputByteStream $is)
{
}
/**
* Not used.
*/
public function unbind(Swift_InputByteStream $is)
{
}
/**
* Flush the contents of the stream (empty it) and set the internal pointer
* to the beginning.
*/
public function flushBuffers()
{
$this->_keyCache->clearKey($this->_nsKey, $this->_itemKey);
}
/**
* Set the nsKey which will be written to.
* @param string $nsKey
*/
public function setNsKey($nsKey)
{
$this->_nsKey = $nsKey;
}
/**
* Set the itemKey which will be written to.
* @param string $itemKey
*/
public function setItemKey($itemKey)
{
$this->_itemKey = $itemKey;
}
/**
* Any implementation should be cloneable, allowing the clone to access a
* separate $nsKey and $itemKey.
*/
public function __clone()
{
$this->_writeThrough = null;
}
}