<?php

/**************************************************************************\
* eGroupWare                                                               *
* http://www.egroupware.org                                                *
* --------------------------------------------                             *
*  This program is free software; you can redistribute it and/or modify it *
*  under the terms of the GNU General Public License as published by the   *
*  Free Software Foundation; either version 2 of the License, or (at your  *
*  option) any later version.                                              *
\**************************************************************************/

require_once 'common.inc.php';
require_once 'engine/class.ajax_config.inc.php';
require_once 'engine/config.ajax.inc.php';
/**
 * Cria o ambiente de sessão para rodar Ajax e implementa alguns métodos
 * básicos para inclusão de JavaScript e CSS
 *  
 * @package Workflow
 * @license http://www.gnu.org/copyleft/gpl.html GPL
 * @author Mauricio Luiz Viani - viani@celepar.pr.gov.br
 */
class ui_ajaxinterface
{
	/**
	* @var int $num_version Identifica a verão dos arquivos JavaScript e CSS. Incremente o valor deste atribuito
	* sempre que existirem alterações nos arquivos, para forçar o download pelo browser
	* @access public 
	*/		
	var $num_version = 213;

	/**
	 * Construtor
	 * @access public
	 * @return object
	 */			
	function ui_ajaxinterface()
	{
	}

	/**
	* Coloca na variável de sessão todas as informações que serão necessárias para 
	* rodar os métodos acionados pelas requisições Ajax.
	* 
	* @return void
	* @access public 
	*/
	function set_wf_session()
	{
		$acl = Factory::getInstance('workflow_acl');
		$_SESSION['phpgw_info']['workflow']['server_root'] = PHPGW_SERVER_ROOT;
		$_SESSION['phpgw_info']['workflow']['phpgw_api_inc'] = PHPGW_API_INC;
		$_SESSION['phpgw_info']['workflow']['phpgw_include_root'] = PHPGW_INCLUDE_ROOT;
		$vfs = createobject('phpgwapi.vfs');
		$_SESSION['phpgw_info']['workflow']['vfs_basedir'] = $vfs->basedir;
		$_SESSION['phpgw_info']['workflow']['server'] = $GLOBALS['phpgw_info']['server'];
		$_SESSION['phpgw_info']['workflow']['lang'] = $GLOBALS['lang'];
		$_SESSION['phpgw_info']['workflow']['account_id'] = $GLOBALS['phpgw_info']['user']['account_id'];
		$_SESSION['phpgw_info']['workflow']['user_groups'] = Factory::getInstance('WorkflowLDAP')->getUserGroups($GLOBALS['phpgw_info']['user']['account_id']);
		$user_is_admin = $acl->checkWorkflowAdmin($GLOBALS['phpgw_info']['user']['account_id']);
		$_SESSION['phpgw_info']['workflow']['user_is_admin'] = $user_is_admin;
		$_SESSION['phpgw_info']['workflow']['user_can_admin_process'] = ($user_is_admin || ($GLOBALS['phpgw']->acl->check('admin_workflow',1,'workflow')));
		$_SESSION['phpgw_info']['workflow']['user_can_admin_instance'] = ($user_is_admin || ($GLOBALS['phpgw']->acl->check('admin_instance_workflow',1,'workflow')));

		$can_monitor = $acl->checkUserGroupAccessToType('MON', $GLOBALS['phpgw_info']['user']['account_id']);
		$_SESSION['phpgw_info']['workflow']['user_can_monitor'] = ($user_is_admin || $can_monitor);
		$_SESSION['phpgw_info']['workflow']['user_can_clean_instances'] = $_SESSION['phpgw_info']['workflow']['user_can_monitor'];
		$_SESSION['phpgw_info']['workflow']['user_can_clean_aborted_instances'] = $_SESSION['phpgw_info']['workflow']['user_can_monitor'];
		$_SESSION['phpgw_info']['workflow']['user']['preferences'] = $GLOBALS['phpgw_info']['user']['preferences']['workflow'];
		$_SESSION['phpgw_info']['workflow']['voip_groups'] = $GLOBALS['phpgw_info']['server']['voip_groups'];
	}

	/**
	* Insere código html para incorporar arquivos JavaScript de uso comum
	* 
	* @return string codigo html para insercao do javascript
	* @access public 
	*/
	function get_common_js()
	{
		$result = "<script language='javascript'>var _web_server_url = '" . $GLOBALS['phpgw_info']['server']['webserver_url'] . "';</script>";
		$result = $result . $this->get_js_link('workflow','jscode', 'globals');			
		$result = $result . $this->get_js_link('workflow','jscode', 'common_functions');
		$result = $result . $this->get_js_link('workflow','jscode', 'abas');
		$result = $result . $this->get_js_link('workflow','jscode', 'connector');
		$result = $result . $this->get_js_link('workflow','jscode', 'sniff_browser');
		$result = $result . $this->get_js_link('workflow','jscode', 'wz_dragdrop');
		$result = $result . $this->get_js_link('workflow','jscode', 'dJSWin');
		$result = $result . $this->get_js_link('workflow','jscode', 'doiMenuDOM');
		
		return $result;
	}

	/**
	* Insere o código html para inclusão do arquivo de estilo common.css
	* 
	* @return string tag html completa para inserção do arquivo common.css
	* @access public 
	*/
	function get_common_css()
	{
		return $this->get_css_link('common');
	}

	/**
	* Insere o código html para inclusão de um arquivo de folha de estilo. Primeiramente
	* procura o arquivo no template do usuário. Se não encontrado monta o link para o
	* template default.
	*
	* @param string $CSSName nome do arquivo de folha de estilo.
	* @param string $mediaType o tipo de mídia (padrão: all)
	* @return string tag html completa para inserção do arquivo solicitado
	* @access public
	*/
	function get_css_link($CSSName, $mediaType = 'all')
	{
		$CSSName = "css/{$CSSName}.css";
		$templateServer = &Factory::getInstance('TemplateServer');
		$CSSLink = $templateServer->getWebFile($CSSName);
		$CSSFile = $templateServer->getSystemFile($CSSName);

		return '<link href="' . $CSSLink . '?' . (file_exists($CSSFile) ? filesize($CSSFile) : $this->num_version) . '" type="text/css" rel="StyleSheet" media="' . $mediaType . '">';
	}

	/**
	* Insere o código html para inclusão de um arquivo JavaScript.
	* 
	* @param string $module nome do módulo do eGroupware (preferencialmente workflow)
	* @param string $js_package nome do grupamento de arquivos javascript
	* @param string $js_name nome do arquivo javascript
	* @param array  $params parametros 
	* @return string tag html completa para inserção do arquivo solicitado 
	* @access public 
	*/
	function get_js_link($module, $js_package, $js_name, $params = null)
	{
		if (is_null($params))
			$params = array();
		else
			if (!is_array($params))
				$params = array($params);

		$localFile = $_SESSION['phpgw_info']['workflow']['server_root'] . SEP . $module . SEP . 'js' . SEP . $js_package . SEP . $js_name.'.js';
		if (@file_exists($localFile))
			$params[] = filesize($localFile);
		else
			$params[] = $this->num_version;
		$js_file = $GLOBALS['phpgw_info']['server']['webserver_url'].SEP.$module.SEP.'js'.SEP.$js_package.SEP.$js_name.'.js';
		return '<script src="'.$js_file.'?'.implode('&', $params).'" type="text/javascript"></script>';
	}
	
	/**
	* Executa a função inicial JavaScript que irá montar os dados da interface.
	* 
	* @param string $param nome da função JavaScript
	* @return string tag html completa com a chamada da função 
	* @access public 
	*/
	function run_init_script($param)
	{
		return '<script language="javascript">' . $param . '</script>';
		}
	
	}
?>