%PDF- %PDF-
Direktori : /home1/lightco1/public_html/plugins/vmpayment/klarna/klarna/api/pclasses/ |
Current File : //home1/lightco1/public_html/plugins/vmpayment/klarna/klarna/api/pclasses/mysqlstorage.class.php |
<?php defined ('_JEXEC') or die(); /** * MySQL Storage * * 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/ */ /** * Include the {@link PCStorage} interface. */ require_once 'storage.intf.php'; /** * MySQL storage class for KlarnaPClass * * This class is an MySQL implementation of the PCStorage interface.<br> * Config field pcURI needs to match format: * user:passwd@addr:port/dbName.dbTable<br> * Port can be omitted.<br> * * <b>Acceptable characters</b>:<br> * Username: [A-Za-z0-9_]<br> * Password: [A-Za-z0-9_]<br> * Address: [A-Za-z0-9_.]<br> * Port: [0-9]<br> * DB name: [A-Za-z0-9_]<br> * DB table: [A-Za-z0-9_]<br> * * To allow for more special characters, and to avoid having<br> * a regular expression that is too hard to understand, you can<br> * use an associative array:<br> * <code> * array( * "user" => "myuser", * "passwd" => "mypass", * "dsn" => "localhost", * "db" => "mydatabase", * "table" => "mytable" * ); * </code> * * @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/ */ class MySQLStorage extends PCStorage { /** * Database name. * * @var string */ protected $dbName; /** * Database table. * * @var string */ protected $dbTable; /** * Database address. * * @var string */ protected $addr; /** * Database username. * * @var string */ protected $user; /** * Database password. * * @var string */ protected $passwd; /** * MySQL DB link resource. * * @var resource */ protected $link; /** * return the name of the storage type * * @return string */ public function getName() { return "mysql"; } /** * Connects to the DB and checks if DB and table exists. * * @throws KlarnaException * @return void */ protected function connect() { $this->link = mysql_connect($this->addr, $this->user, $this->passwd); if ($this->link === false) { throw new Klarna_DatabaseException( 'Failed to connect to database! ('.mysql_error().')' ); } if (!mysql_query( "CREATE DATABASE IF NOT EXISTS `{$this->dbName}`", $this->link ) ) { throw new Klarna_DatabaseException( 'Failed to create! ('.mysql_error().')' ); } $create = mysql_query( "CREATE TABLE IF NOT EXISTS `{$this->dbName}`.`{$this->dbTable}` ( `eid` int(10) unsigned NOT NULL, `id` int(10) unsigned NOT NULL, `type` tinyint(4) NOT NULL, `description` varchar(255) NOT NULL, `months` int(11) NOT NULL, `interestrate` decimal(11,2) NOT NULL, `invoicefee` decimal(11,2) NOT NULL, `startfee` decimal(11,2) NOT NULL, `minamount` decimal(11,2) NOT NULL, `country` int(11) NOT NULL, `expire` int(11) NOT NULL, KEY `id` (`id`) )", $this->link ); if (!$create) { throw new Klarna_DatabaseException( 'Table not existing, failed to create! ('.mysql_error().')' ); } } /** * Splits the URI in format: user:passwd@addr/dbName.dbTable<br> * * To allow for more special characters, and to avoid having<br> * a regular expression that is too hard to understand, you can<br> * use an associative array:<br> * <code> * array( * "user" => "myuser", * "passwd" => "mypass", * "dsn" => "localhost", * "db" => "mydatabase", * "table" => "mytable" * ); * </code> * * @param string|array $uri Specified URI to database and table. * * @throws KlarnaException * @return void */ protected function splitURI($uri) { if (is_array($uri)) { $this->user = $uri['user']; $this->passwd = $uri['passwd']; $this->addr = $uri['dsn']; $this->dbName = $uri['db']; $this->dbTable = $uri['table']; } else if (preg_match( '/^([\w-]+):([\w-]+)@([\w\.-]+|[\w\.-]+:[\d]+)\/([\w-]+).([\w-]+)$/', $uri, $arr ) === 1 ) { /* [0] => user:passwd@addr/dbName.dbTable [1] => user [2] => passwd [3] => addr [4] => dbName [5] => dbTable */ if (count($arr) != 6) { throw new Klarna_DatabaseException( 'URI is invalid! Missing field or invalid characters used!' ); } $this->user = $arr[1]; $this->passwd = $arr[2]; $this->addr = $arr[3]; $this->dbName = $arr[4]; $this->dbTable = $arr[5]; } else { throw new Klarna_DatabaseException( 'URI to MySQL is not valid! ( user:passwd@addr/dbName.dbTable )' ); } } /** * Load pclasses * * @param string $uri pclass uri * * @throws KlarnaException * @return void */ public function load($uri) { $this->splitURI($uri); $this->connect(); $result = mysql_query( "SELECT * FROM `{$this->dbName}`.`{$this->dbTable}`", $this->link ); if ($result === false) { throw new Klarna_DatabaseException( 'SELECT query failed! ('.mysql_error().')' ); } while ($row = mysql_fetch_assoc($result)) { $this->addPClass(new KlarnaPClass($row)); } } /** * Save pclasses to database * * @param string $uri pclass uri * * @throws KlarnaException * @return void */ public function save($uri) { $this->splitURI($uri); $this->connect(); if (!is_array($this->pclasses) || count($this->pclasses) == 0) { return; } foreach ($this->pclasses as $pclasses) { foreach ($pclasses as $pclass) { //Remove the pclass if it exists. mysql_query( "DELETE FROM `{$this->dbName}`.`{$this->dbTable}` WHERE `id` = '{$pclass->getId()}' AND `eid` = '{$pclass->getEid()}'" ); //Insert it again. $result = mysql_query( "INSERT INTO `{$this->dbName}`.`{$this->dbTable}` (`eid`, `id`, `type`, `description`, `months`, `interestrate`, `invoicefee`, `startfee`, `minamount`, `country`, `expire` ) VALUES ('{$pclass->getEid()}', '{$pclass->getId()}', '{$pclass->getType()}', '{$pclass->getDescription()}', '{$pclass->getMonths()}', '{$pclass->getInterestRate()}', '{$pclass->getInvoiceFee()}', '{$pclass->getStartFee()}', '{$pclass->getMinAmount()}', '{$pclass->getCountry()}', '{$pclass->getExpire()}')", $this->link ); if ($result === false) { throw new Klarna_DatabaseException( 'INSERT INTO query failed! ('.mysql_error().')' ); } } } } /** * Clear the pclasses * * @param string $uri pclass uri * * @throws KlarnaException * @return void */ public function clear($uri) { try { $this->splitURI($uri); unset($this->pclasses); $this->connect(); mysql_query( "DELETE FROM `{$this->dbName}`.`{$this->dbTable}`", $this->link ); } catch(Exception $e) { throw new Klarna_DatabaseException( $e->getMessage(), $e->getCode() ); } } }