<?php
/**
* @version	$Id: affiliate_plans_event_handler.php 14257 2011-03-16 21:41:19Z alex $
* @package	In-Commerce
* @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license	Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/

	defined('FULL_PATH') or die('restricted access!');

	class AffiliatePlansEventHandler extends kDBEventHandler {

		function SetCustomQuery(&$event)
		{
			if($event->Special == 'active')
			{
				$object =& $event->getObject();
				$object->addFilter('active', '%1$s.Enabled = 1');
			}
		}

		/**
		 * Enter description here...
		 *
		 * @param kEvent $event
		 */
		function OnSetPrimary(&$event)
		{
			$object =& $event->getObject();
			$object->SetDBField('IsPrimary', 1);
			$object->Update();
		}

		/**
		 * Enter description here...
		 *
		 * @param kEvent $event
		 */
		function OnBeforeItemUpdate(&$event)
		{
			$object =& $event->getObject();

			$live_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
			$plans_count = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$live_table);
			if(!$plans_count) $object->SetDBField('IsPrimary', 1);

			if( $object->GetDBField('IsPrimary') && $object->Validate() )
			{
				$sql = 'UPDATE '.$this->Application->getUnitOption($event->Prefix, 'TableName').'
						SET IsPrimary = 0';
				$this->Conn->Query($sql);

				$status_field = array_shift( $this->Application->getUnitOption($event->Prefix,'StatusField') );
				$object->SetDBField($status_field, 1);
			}
		}

		function OnBeforeItemCreate(&$event)
		{
			$this->OnBeforeItemUpdate($event);
		}

		function OnMassDelete($event)
		{
			if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
				$event->status = erFAIL;
				return;
			}

			$ids = $this->StoreSelectedIDs($event);
			$event->setEventParam('ids', $ids );
			$ids = $event->getEventParam('ids');

			$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');

			$sql = 'SELECT AffiliatePlanId FROM '.$this->Application->getUnitOption('ap', 'TableName').'
					WHERE IsPrimary = 1';
			$primary_id = $this->Conn->GetOne($sql);
			$ids = array_diff($ids, Array($primary_id));

			if($ids)
			{
				$temp->DeleteItems($event->Prefix, $event->Special, $ids);
			}
			$this->clearSelectedIDs($event);
		}
	}