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;
    }
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!