<?php /** * eSales Media oxVoucher for Contao Open Source CMS * * Copyright (c) 2015 eSales Media * * @author Benjamin Roth [benjamin@esales-media.de] * @license proprietary */ namespace eSM_oxVoucher; class TicketHandler extends Voucher { /** * Oxid Database Object * @var \Database|null */ protected $oxDB = null; /** * ticket database result array * @var Array */ protected $arrTicket = array(); protected $blnIsVariant = null; /** * Import Oxid database instance */ public function __construct($strOxId) { $this->oxDB = Voucher::getOxDbInstance(); $this->load($strOxId); parent::__construct(); } public function __get($name) { if ($this->arrTicket[strtoupper($name)]) { return $this->arrTicket[strtoupper($name)]; } return null; } public function __set($name, $value) { if ($this->arrTicket[strtoupper($name)]) { $this->arrTicket[strtoupper($name)] = $value; } } public function getData() { return $this->arrTicket; } protected function load($strOxId) { $objSQL = $this->oxDB->prepare("SELECT a.OXID, a.OXPARENTID, a.OXTITLE, pa.OXTITLE AS 'OXPARENTTITLE', pa.OXSHORTDESC AS 'OXPARENTSHORTDESC', a.OXSHORTDESC, a.OXACTIVE, UNIX_TIMESTAMP(a.OXACTIVEFROM) AS 'OXACTIVEFROM', UNIX_TIMESTAMP(a.OXACTIVETO) AS 'OXACTIVETO', UNIX_TIMESTAMP(a.OXESSELLUNTIL) AS 'OXESSELLUNTIL', a.OXPRICE, a.OXSTOCK, a.OXVARSTOCK, a.OXVARNAME, a.OXVARSELECT FROM oxv_oxarticles_de a LEFT JOIN oxv_oxarticles_de AS pa ON pa.OXID = a.OXPARENTID AND a.OXPARENTID != '' WHERE a.OXID = ?"); $objResult = $objSQL->execute($strOxId); if ($objResult->numRows) { $this->arrTicket = $objResult->row(); } } protected function refresh() { $this->load($this->oxid); } public function isVariant() { if (is_null($this->blnIsVariant)) { $this->blnIsVariant = (bool) ( $this->oxparentid ? $this->oxparentid : false ); } return $this->blnIsVariant; } public function isBuyable() { if ($this->isActiveTime() && $this->oxactive && $this->oxstock > 0) { return true; } return false; } public function isActiveTime() { $Today = new \Date(); if ((is_null($this->oxactivefrom) || $this->oxactivefrom <= $Today->tstamp) && (is_null($this->oxactiveto) || $this->oxactiveto >= $Today->tstamp)) { return true; } return false; } public function reduceStock($iVal) { $iVal = (int) $iVal; if ($iVal <= $this->oxstock && $iVal > 0) { $objSQL = $this->oxDB->prepare("UPDATE oxarticles SET OXSTOCK = OXSTOCK - $iVal WHERE OXID = ?"); $objSQL->execute($this->oxid); if ($this->isVariant()) { $objSQL = $this->oxDB->prepare("UPDATE oxarticles p SET p.OXVARSTOCK = (SELECT SUM(v.OXSTOCK) FROM oxarticles v WHERE OXPARENTID = ?), p.OXSOLDAMOUNT = p.OXSOLDAMOUNT + $iVal WHERE p.OXID = ? AND p.OXPARENTID = ''"); $objSQL->execute($this->oxparentid,$this->oxparentid); } else { $objSQL = $this->oxDB->prepare("UPDATE oxarticles SET OXSOLDAMOUNT = OXSOLDAMOUNT + $iVal WHERE OXID = ?"); $objSQL->execute($this->oxid); } $this->refresh(); } } }