<?php

/**
 * References for Contao
 *
 * Copyright (c) 2014 Benjamin Roth [http://www.esales-media.de]
 *
 * @package eSM_clients
 * @link    http://www.esales-media.de
 * @license commercial
*/


/**
 * Run in a custom namespace, so the class can be replaced
 */
namespace eSM_clients;


/**
 * Reads and writes reference clients
 *
 * @package   Models
 * @author    Benjamin Roth <http://www.esales-media.de>
 * @copyright eSales Media 2014
 */
class EsmClientsModel extends \Model
{

	/**
	 * Table name
	 * @var string
	 */
	protected static $strTable = 'tl_esm_clients';

	/**
	 * @return \Model\Collection|null
	 */
	public static function countReferenceClients()
	{
		$t1 = static::$strTable;
		$t2 = $t1.'_projects';

		$Result = \Database::getInstance()->execute("SELECT COUNT($t1.id) AS 'totalcount' FROM $t1 WHERE invisible='' AND EXISTS (SELECT 1 FROM $t2 WHERE $t2.pid = $t1.id AND invisible = '' GROUP BY $t2.pid)");

		if ($Result->numRows)
		{
			return $Result->totalcount;
		}

		return 0;
	}

	/**
	 * @return \Model\Collection|null
	 */
	public static function getReferenceClients($intLimit=0, $intOffset=0)
	{
		$t1 = static::$strTable;
		$t2 = $t1.'_projects';

		$Result = \Database::getInstance()->prepare("SELECT $t1.id FROM $t1 WHERE invisible='' AND EXISTS (SELECT 1 FROM $t2 WHERE $t2.pid = $t1.id AND invisible = '' GROUP BY $t2.pid) ORDER BY $t1.sorting")
		->limit($intLimit,$intOffset)
		->execute();

		$arrIds = $Result->fetchEach('id');

		return static::findMultipleByIds($arrIds);
	}

	/**
	 * @param bool $blnIncludeInvisible
	 * @return \Model\Collection|null
	 */
	public function getProjects($blnIncludeInvisible=false)
	{
		$arrConditions = array('pid = ?');
		$arrValues = array($this->id);

		if ($blnIncludeInvisible)
		{
			$arrConditions[] = 'invisible = ?';
			$arrValues[] = '1';
		}

		return EsmClientsProjectsModel::findBy($arrConditions,$arrValues,array('order'=>'sorting'));
	}
}