%PDF- %PDF-
| Direktori : /home/lightco1/upgrade.lightco.com.au/plugins/vmpayment/klarna/klarna/api/pclasses/ |
| Current File : /home/lightco1/upgrade.lightco.com.au/plugins/vmpayment/klarna/klarna/api/pclasses/storage.intf.php |
<?php
defined ('_JEXEC') or die();
/**
* PClass Storage Interface
*
* PHP Version 5.3
*
* @category Payment
* @package KlarnaAPI
* @author MS Dev <ms.modules@klarna.com>
* @copyright 2012 Klarna AB (http://klarna.com)
* @license http://opensource.org/licenses/BSD-2-Clause BSD-2
* @link http://integration.klarna.com/
*/
/**
* KlarnaPClass Storage interface
*
* This class provides an interface with which to save the PClasses easily.
*
* @category Payment
* @package KlarnaAPI
* @author MS Dev <ms.modules@klarna.com>
* @copyright 2012 Klarna AB (http://klarna.com)
* @license http://opensource.org/licenses/BSD-2-Clause BSD-2
* @link http://integration.klarna.com/
*/
abstract class PCStorage
{
/**
* An array of KlarnaPClasses.
*
* @var array
*/
protected $pclasses;
/**
* Thhe name of the implementation.
* The file should be <name>storage.class.php
*
* @return string
*/
abstract public function getName();
/**
* Adds a PClass to the storage.
*
* @param KlarnaPClass $pclass PClass object.
*
* @throws KlarnaException
* @return void
*/
public function addPClass($pclass)
{
if (! $pclass instanceof KlarnaPClass) {
throw new Klarna_InvalidTypeException('pclass', 'KlarnaPClass');
}
if (!isset($this->pclasses) || !is_array($this->pclasses)) {
$this->pclasses = array();
}
if ($pclass->getDescription() === null || $pclass->getType() === null) {
//Something went wrong, do not save these!
return;
}
if (!isset($this->pclasses[$pclass->getEid()])) {
$this->pclasses[$pclass->getEid()] = array();
}
$this->pclasses[$pclass->getEid()][$pclass->getId()] = $pclass;
}
/**
* Gets the PClass by ID.
*
* @param int $id PClass ID.
* @param int $eid Merchant ID.
* @param int $country {@link KlarnaCountry Country} constant.
*
* @throws KlarnaException
* @return KlarnaPClass
*/
public function getPClass($id, $eid, $country)
{
if (!is_int($id)) {
throw new InvalidArgumentException('Supplied ID is not an integer!');
}
if (!is_array($this->pclasses)) {
throw new Klarna_PClassException('No match for that eid!');
}
if (!isset($this->pclasses[$eid]) || !is_array($this->pclasses[$eid])) {
throw new Klarna_PClassException('No match for that eid!');
}
if (!isset($this->pclasses[$eid][$id])
|| !$this->pclasses[$eid][$id]->isValid()
) {
throw new Klarna_PClassException('No such pclass available!');
}
if ($this->pclasses[$eid][$id]->getCountry() !== $country) {
throw new Klarna_PClassException(
'You cannot use this pclass with set country!'
);
}
return $this->pclasses[$eid][$id];
}
/**
* Returns an array of KlarnaPClasses, keyed with pclass ID.
* If type is specified, only that type will be returned.
*
* <b>Types available</b>:<br>
* {@link KlarnaPClass::ACCOUNT}<br>
* {@link KlarnaPClass::CAMPAIGN}<br>
* {@link KlarnaPClass::SPECIAL}<br>
* {@link KlarnaPClass::DELAY}<br>
* {@link KlarnaPClass::MOBILE}<br>
*
* @param int $eid Merchant ID.
* @param int $country {@link KlarnaCountry Country} constant.
* @param int $type PClass type identifier.
*
* @throws KlarnaException
* @return array An array of {@link KlarnaPClass PClasses}.
*/
public function getPClasses($eid, $country, $type = null)
{
if (!is_int($country)) {
throw new Klarna_ArgumentNotSetException('country');
}
$tmp = false;
if (!is_array($this->pclasses)) {
return;
}
$tmp = array();
foreach ($this->pclasses as $eid => $pclasses) {
$tmp[$eid] = array();
foreach ($pclasses as $pclass) {
if (!$pclass->isValid()) {
continue; //Pclass invalid, skip it.
}
if ($pclass->getEid() === $eid
&& $pclass->getCountry() === $country
&& ($pclass->getType() === $type || $type === null)
) {
$tmp[$eid][$pclass->getId()] = $pclass;
}
}
}
return $tmp;
}
/**
* Returns a flattened array of all pclasses
*
* @return array
*/
public function getAllPClasses()
{
if (!is_array($this->pclasses)) {
return array();
}
return $this->_flatten(array_values($this->pclasses));
}
/**
* Flatten an array
*
* @param array $array array to flatten
*
* @return array
*/
private function _flatten($array)
{
if (!is_array($array)) {
// nothing to do if it's not an array
return array($array);
}
$result = array();
foreach ($array as $value) {
// explode the sub-array, and add the parts
$result = array_merge($result, $this->_flatten($value));
}
return $result;
}
/**
* Loads the PClasses and calls {@link self::addPClass()} to store them
* in runtime.
* URI can be location to a file, or a db prefixed table.
*
* @param string $uri URI to stored PClasses.
*
* @throws KlarnaException|Exception
* @return void
*/
abstract public function load($uri);
/**
* Takes the internal PClass array and stores it.
* URI can be location to a file, or a db prefixed table.
*
* @param string $uri URI to stored PClasses.
*
* @throws KlarnaException|Exception
* @return void
*/
abstract public function save($uri);
/**
* Removes the internally stored pclasses.
*
* @param string $uri URI to stored PClasses.
*
* @throws KlarnaException|Exception
* @return void
*/
abstract public function clear($uri);
}