phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpgwapi/inc/class.ipc_manager.inc.php, 1.5


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/class.ipc_manager.inc.php, 1.5
Date: Thu, 30 Dec 2004 07:47:30 +0100

Update of /phpgwapi/inc
Added Files:
        Branch: 
          class.ipc_manager.inc.php

date: 2004/12/30 06:47:30;  author: skwashd;  state: Exp;  lines: +1 -1

Log Message:
new HEAD
=====================================================================
<?php
        /**
        * Manager of the IPC Layer
        * @author Dirk Schaller <address@hidden>
        * @copyright Copyright (C) 2003-2004 Free Software Foundation, Inc. 
http://www.fsf.org/
        * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General 
Public License
        * @package phpgwapi
        * @subpackage communication
        * @version $Id: class.ipc_manager.inc.php,v 1.5 2004/12/30 06:47:30 
skwashd Exp $
        */

        /**
        * Abstract IPC Application class for the IPC Layer
        */
include_class('ipc_');

        /**
        * Manager of the IPC Layer
        * @package phpgwapi
        * @subpackage communication
        */
class ipc_manager
{
        /**
         * @var array $_ipcObjectList  contains the created ipc application 
objects
         * @access private
         */
        var $_ipcObjectList;


  var $xmlrpc_methods;
  
        /**
         * constructor
         */
        function ipc_manager()
        {
                $this->_ipcObjectList = array();
                $this->xmlrpc_methods = array();
                $this->xmlrpc_methods[] = array(
                        'name'        => 'execIPC',
                        'description' => 'Execute an ipc application methode'
                );
        }


        /**
         * Get the ipc application object
         *
         * @access  public
         * @param   string  $appName  name of the application
         * @return  object            ipc object of application 
         */
        function &getIPC($appName)
        {
                // check if app is available amd the acl run app right
        if ($this->_checkIPCApp($appName) == false)
      return false;

                // create ipc class name
                $className = $this->_createIPCAppClassName($appName);
                
                // check if ipc app object exists
                if (isset($this->_ipcObjectList[$className]) && 
is_object($this->_ipcObjectList[$className]))
                { // return the existing ipc app object
                        return $this->_ipcObjectList[$className];
                }
                else
                {
                        $obj =& CreateObject($className);
                        if (is_object($obj) == true)
                        { // save and return the created ipc app object
                                $this->_ipcObjectList[$className] =& $obj;
                                return $this->_ipcObjectList[$className];
                        }
                        else
                        {
                          return false;
                        }
                }
        }


  /**
   * Destroy the ipc application object.
   *
   * @access  public
   * @param   string   $appName  name of application
   * @return  boolean            true when object was destroyed, otherwise false
   */
  function destroyIPC($appName)
  {
                // create ipc class name
                $className = $this->_createIPCAppClassName($appName);
                
                // check if ipc app object exists
                if (isset($this->_ipcObjectList[$className]) == true)
                { // destroy the ipc app object
                        unset($this->_ipcObjectList[$className]);
                        return true;
                }
                else
                {
                  return false;
                }
        }


  /**
   * Executes a ipc method.
   *
   * @access  public
   * @param   string  $ipcAppMethod        name of the application and mathod 
to execute as '<appName>.<methodName>'
   * @param   array   $ipcAppMethodParams  array with parameters for passing to 
the called method
   * @return  mixed                        result of execution
   */
        function execIPC($ipcAppMethod, $ipcAppMethodParams=null)
        {
                list($ipcApp, $ipcMethod) = explode('.', $ipcAppMethod);
                $ipc =& $this->getIPC($ipcApp);
                
                if (is_object($ipc) == false)
                        return false;
                
                if (method_exists($ipc, $ipcMethod) == false)
                        return false;

                $ipcParams = '';
                for($i=0; $i<count($ipcAppMethodParams); $i++)
                {
                        if ($i>0)
                                $ipcParams .= ', ';
                        if(is_string($ipcAppMethodParams[$i]) == true)
                                $ipcParams .= '\''.$ipcAppMethodParams[$i].'\'';
                        else {
                                if (is_array($ipcAppMethodParams[$i])) {
                                        $arrayconstructor = 'array(';
                                        $firstentry = true;
                                        foreach($ipcAppMethodParams[$i] as $key 
=> $value) {
                                                if ($firstentry) 
                                                        $firstentry = false;
                                                else
                                                        $arrayconstructor .= ', 
';
                                                $arrayconstructor .= "$key => 
$value";
                                        }
                                        $ipcParams .= $arrayconstructor . ')';
                                }
                                else
                                        $ipcParams .= $ipcAppMethodParams[$i];
                        }
                }

                $ipc_cmd = '$ret = $ipc->'.$ipcMethod.'('.$ipcParams.');';
                eval($ipc_cmd);
                return $ret;
        }

        /**
         * Check if application is available and the acl run application right 
for the current user.
         *
         * @access  private
         * @param   string   $appName  name of application
         * @return  boolean            true if application is available and 
user has acl run right, otherwise false
         */
        function _checkIPCApp($appName)
        {
                // 1: check if app is available
                if (isset($GLOBALS['phpgw']->applications->data[$appName]) == 
false)
                {
                        return false;
                }

                // 2: check the acl run app right
                if ($GLOBALS['phpgw']->acl->check('run', 1, $appName) == false)
                {
                        return false;
                }

                return true;
        }


        /**
         * Create the name of the ipc application class for the passed 
application name.
         *
         * @access  private
         * @param   string   $appName  name of application
         * @return  string             name of tne ipc application class
         */
        function _createIPCAppClassName($appName)
        {
                return $appName.'.ipc_'.$appName;
        }

}
?>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]