<?php
/**
* Provê métodos que acessam informações relacionadas aos workitems.
* @author Anderson Tadayuki Saikawa - asaikawa@celepar.pr.gov.br
* @version 1.0
* @license http://www.gnu.org/copyleft/gpl.html GPL
* @package Workflow
* @subpackage local
*/
class wf_workitem
{
	/**
	* @var object $db objeto do banco de dados
	* @access private
	*/
	private $db;

	/**
	* @var int $processID o ID do processo onde a classe está sendo utilizada
	* @access private
	*/
	private $processID;

	/**
	* Construtor do wf_workitem.
	* @return object
	* @access public
	*/
	public function wf_workitem()
	{
		$this->db = &Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID;
		$this->processID = (int) $GLOBALS['workflow']['wf_runtime']->activity->getProcessId();
	}

	/**
	* Busca workitems de uma instância pelo seu nome (identificador).
	* @param int $instanceName O nome da instância.
	* @param mixed $activities Uma lista de IDs de atividades das quais se quer os workitems (também pode ser um valor inteiro).
	* @return array Array onde cada elemento corresponde aos workitens de cada instâncias que satisfaz o critério de seleção.
	* @access public
	*/
	public function getWorkitemsByInstanceName($instanceName, $activities = null)
	{
		$output = array();

		if (is_numeric($activities))
			$activities = array((int) $activities);

		/* build the SQL query */
		$query  = 'SELECT w.wf_instance_id, w.wf_item_id, w.wf_order_id, w.wf_activity_id, w.wf_started, w.wf_ended, w.wf_user ';
		$query .= 'FROM egw_wf_workitems w ';
		$query .= 'INNER JOIN egw_wf_instances i ON w.wf_instance_id = i.wf_instance_id ';
		$query .= 'WHERE (i.wf_p_id = ?) AND (UPPER(i.wf_name) = UPPER(?)) ';

		$values = array($this->processID, $instanceName);

		/* if there are activities, add a condition */
		if(is_array($activities) && (count($activities) > 0))
		{
			$query .= 'AND (w.wf_activity_id = ANY (?))';
			$values[] = '{' . implode(', ', $activities) . '}';
		}

		$result = $this->db->query($query, $values);
		if ($result !== false)
		{
			while (($row = $result->fetchRow()))
				$output[$row['wf_instance_id']][] = $row;
			$output = array_values($output);
		}

		return $output;
	}
}
?>