Current File : /home/pacjaorg/public_html/km/administrator/components/com_djclassifieds/lib/djauction.php |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email contact@dj-extensions.com
*/
defined('_JEXEC') or die('Restricted access');
class DJClassifiedsAuction
{
static function updateAuctions()
{
$db = JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
try { // in case of transaction deadlock
$query = "SELECT i.*, v.max_price "
."FROM ("
."SELECT a.item_id, max(a.price) max_price "
."FROM #__djcf_auctions a "
."INNER JOIN #__djcf_items i ON a.item_id=i.id "
."WHERE a.closed IS NULL AND i.date_exp < ".$db->q($date_now)." AND i.auction=1 "
."AND (CASE WHEN IFNULL(i.date_renew,'0000-00-00 00:00:00') != '0000-00-00 00:00:00' THEN a.date > i.date_renew ELSE 1=1 END) "
."GROUP BY a.item_id "
.") v "
."INNER JOIN #__djcf_items i ON v.item_id=i.id";
$db->setQuery($query);
$win_bids = $db->loadObjectList();
foreach($win_bids as $bid){
if($bid->max_price >= $bid->price_reserve){
$query = "UPDATE #__djcf_auctions a "
."INNER JOIN (SELECT id FROM #__djcf_auctions WHERE item_id=".$bid->id." AND price=".$bid->max_price." ORDER BY id DESC LIMIT 1) v ON a.id=v.id "
."SET a.win=1, a.closed=".$db->q($date_now);
$db->setQuery($query);
$db->execute();
}
$query = "UPDATE #__djcf_auctions SET closed=".$db->q($date_now)." WHERE closed IS NULL AND item_id=".$bid->id;
$db->setQuery($query);
$db->execute();
}
// closing bids of expired items
$query = "UPDATE #__djcf_auctions a "
."INNER JOIN (SELECT a.id, i.date_exp FROM #__djcf_auctions a LEFT JOIN #__djcf_items i ON a.item_id=i.id WHERE a.closed IS NULL AND i.date_exp < ".$db->q($date_now).") v ON a.id=v.id "
."SET a.closed=v.date_exp";
$db->setQuery($query);
$db->execute();
// closing bids of deleted items
$query = "UPDATE #__djcf_auctions a "
."INNER JOIN (SELECT a.id FROM #__djcf_auctions a LEFT JOIN #__djcf_items i ON a.item_id=i.id WHERE a.closed IS NULL AND i.id IS NULL) v ON a.id=v.id "
."SET a.closed=".$db->q($date_now);
$db->setQuery($query);
$db->execute();
} catch (Exception $e) {
return false;
}
return true;
}
static function isBidActive($item, $bids)
{
if(($item->buynow && $item->quantity==0) || ($bids && $bids[0]->win) || $item->published!=1 || $item->date_exp < JFactory::getDate()->toSQL()){
return 0;
}else{
return 1;
}
}
static function auctionAutoExtend($item, $bids, $par)
{
$db = JFactory::getDBO();
if($par->get('auctions_auto_extend','0')){
$last_bid = $bids ? $bids[0] : null;
if($last_bid){
$timeFirst = strtotime(JFactory::getDate($last_bid->date));
$timeSecond = strtotime(JFactory::getDate($item->date_exp));
$diffInSecs = $timeSecond - $timeFirst;
if($diffInSecs <= $par->get('auctions_auto_extend_below','30')){
$new_date_exp = JFactory::getDate($item->date_exp)->modify('+'.$par->get('auctions_auto_extend_for','180').' second')->toSQL();
$query = "UPDATE #__djcf_items SET date_exp=".$db->q($new_date_exp)." WHERE id=".$item->id;
$db->setQuery($query);
$db->execute();
return $new_date_exp;
}
}
}
return $item->date_exp;
}
}