diff --git a/workflow/engine/classes/class.ArrayPeer.php b/workflow/engine/classes/class.ArrayPeer.php index 0fce8932e..d33ecf53d 100755 --- a/workflow/engine/classes/class.ArrayPeer.php +++ b/workflow/engine/classes/class.ArrayPeer.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -31,222 +32,268 @@ include_once 'classes/model/Application.php'; /** * Base static class for performing query and update operations on the 'APPLICATION' table. - * - * @package workflow.engine.classes + * + * @package workflow.engine.classes */ -abstract class ArrayBasePeer { +abstract class ArrayBasePeer +{ - /** The default database name for this class */ - const DATABASE_NAME = 'dbarray'; + /** + * The default database name for this class + */ + const DATABASE_NAME = 'dbarray'; - /** The table name for this class */ - //const TABLE_NAME = 'APPLICATION'; - - /** A class that can be returned by this peer. */ - const CLASS_DEFAULT = 'classes.model.Application'; - - /** The total number of columns. */ - const NUM_COLUMNS = 15; - - /** The number of lazy-loaded columns. */ - const NUM_LAZY_LOAD_COLUMNS = 0; + /** + * The table name for this class + */ + //const TABLE_NAME = 'APPLICATION'; - /** The column name for the APP_UID field */ - const APP_UID = 'APPLICATION.APP_UID'; + /** + * A class that can be returned by this peer. + */ + const CLASS_DEFAULT = 'classes.model.Application'; - /** The column name for the APP_NUMBER field */ - const APP_NUMBER = 'APPLICATION.APP_NUMBER'; + /** + * The total number of columns. + */ + const NUM_COLUMNS = 15; - /** The column name for the APP_PARENT field */ - const APP_PARENT = 'APPLICATION.APP_PARENT'; + /** + * The number of lazy-loaded columns. + */ + const NUM_LAZY_LOAD_COLUMNS = 0; - /** The column name for the APP_STATUS field */ - const APP_STATUS = 'APPLICATION.APP_STATUS'; + /** + * The column name for the APP_UID field + */ + const APP_UID = 'APPLICATION.APP_UID'; - /** The column name for the PRO_UID field */ - const PRO_UID = 'APPLICATION.PRO_UID'; + /** + * The column name for the APP_NUMBER field + */ + const APP_NUMBER = 'APPLICATION.APP_NUMBER'; - /** The column name for the APP_PROC_STATUS field */ - const APP_PROC_STATUS = 'APPLICATION.APP_PROC_STATUS'; + /** + * The column name for the APP_PARENT field + */ + const APP_PARENT = 'APPLICATION.APP_PARENT'; - /** The column name for the APP_PROC_CODE field */ - const APP_PROC_CODE = 'APPLICATION.APP_PROC_CODE'; + /** + * The column name for the APP_STATUS field + */ + const APP_STATUS = 'APPLICATION.APP_STATUS'; - /** The column name for the APP_PARALLEL field */ - const APP_PARALLEL = 'APPLICATION.APP_PARALLEL'; + /** + * The column name for the PRO_UID field + */ + const PRO_UID = 'APPLICATION.PRO_UID'; - /** The column name for the APP_INIT_USER field */ - const APP_INIT_USER = 'APPLICATION.APP_INIT_USER'; + /** + * The column name for the APP_PROC_STATUS field + */ + const APP_PROC_STATUS = 'APPLICATION.APP_PROC_STATUS'; - /** The column name for the APP_CUR_USER field */ - const APP_CUR_USER = 'APPLICATION.APP_CUR_USER'; + /** + * The column name for the APP_PROC_CODE field + */ + const APP_PROC_CODE = 'APPLICATION.APP_PROC_CODE'; - /** The column name for the APP_CREATE_DATE field */ - const APP_CREATE_DATE = 'APPLICATION.APP_CREATE_DATE'; + /** + * The column name for the APP_PARALLEL field + */ + const APP_PARALLEL = 'APPLICATION.APP_PARALLEL'; - /** The column name for the APP_INIT_DATE field */ - const APP_INIT_DATE = 'APPLICATION.APP_INIT_DATE'; + /** + * The column name for the APP_INIT_USER field + */ + const APP_INIT_USER = 'APPLICATION.APP_INIT_USER'; - /** The column name for the APP_FINISH_DATE field */ - const APP_FINISH_DATE = 'APPLICATION.APP_FINISH_DATE'; + /** + * The column name for the APP_CUR_USER field + */ + const APP_CUR_USER = 'APPLICATION.APP_CUR_USER'; - /** The column name for the APP_UPDATE_DATE field */ - const APP_UPDATE_DATE = 'APPLICATION.APP_UPDATE_DATE'; + /** + * The column name for the APP_CREATE_DATE field + */ + const APP_CREATE_DATE = 'APPLICATION.APP_CREATE_DATE'; - /** The column name for the APP_DATA field */ - const APP_DATA = 'APPLICATION.APP_DATA'; + /** + * The column name for the APP_INIT_DATE field + */ + const APP_INIT_DATE = 'APPLICATION.APP_INIT_DATE'; - /** The PHP to DB Name Mapping */ - private static $phpNameMap = null; + /** + * The column name for the APP_FINISH_DATE field + */ + const APP_FINISH_DATE = 'APPLICATION.APP_FINISH_DATE'; - /** - * Holds an array of fieldnames - * - * First dimension keys are the type constants - * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' - */ - private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) - ); + /** + * The column name for the APP_UPDATE_DATE field + */ + const APP_UPDATE_DATE = 'APPLICATION.APP_UPDATE_DATE'; - /** - * Holds an array of keys for quick access to the fieldnames array - * - * First dimension keys are the type constants - * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 - */ - private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppNumber' => 1, 'AppParent' => 2, 'AppStatus' => 3, 'ProUid' => 4, 'AppProcStatus' => 5, 'AppProcCode' => 6, 'AppParallel' => 7, 'AppInitUser' => 8, 'AppCurUser' => 9, 'AppCreateDate' => 10, 'AppInitDate' => 11, 'AppFinishDate' => 12, 'AppUpdateDate' => 13, 'AppData' => 14, ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_NUMBER => 1, ApplicationPeer::APP_PARENT => 2, ApplicationPeer::APP_STATUS => 3, ApplicationPeer::PRO_UID => 4, ApplicationPeer::APP_PROC_STATUS => 5, ApplicationPeer::APP_PROC_CODE => 6, ApplicationPeer::APP_PARALLEL => 7, ApplicationPeer::APP_INIT_USER => 8, ApplicationPeer::APP_CUR_USER => 9, ApplicationPeer::APP_CREATE_DATE => 10, ApplicationPeer::APP_INIT_DATE => 11, ApplicationPeer::APP_FINISH_DATE => 12, ApplicationPeer::APP_UPDATE_DATE => 13, ApplicationPeer::APP_DATA => 14, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_NUMBER' => 1, 'APP_PARENT' => 2, 'APP_STATUS' => 3, 'PRO_UID' => 4, 'APP_PROC_STATUS' => 5, 'APP_PROC_CODE' => 6, 'APP_PARALLEL' => 7, 'APP_INIT_USER' => 8, 'APP_CUR_USER' => 9, 'APP_CREATE_DATE' => 10, 'APP_INIT_DATE' => 11, 'APP_FINISH_DATE' => 12, 'APP_UPDATE_DATE' => 13, 'APP_DATA' => 14, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) - ); + /** + * The column name for the APP_DATA field + */ + const APP_DATA = 'APPLICATION.APP_DATA'; - /** - * @return MapBuilder the map builder for this peer - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function getMapBuilder() - { - include_once 'classes/model/map/ApplicationMapBuilder.php'; - return BasePeer::getMapBuilder('classes.model.map.ApplicationMapBuilder'); - } - /** - * Gets a map (hash) of PHP names to DB column names. - * - * @return array The PHP to DB name map for this peer - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this. - */ - public static function getPhpNameMap() - { - if (self::$phpNameMap === null) { - $map = ApplicationPeer::getTableMap(); - $columns = $map->getColumns(); - $nameMap = array(); - foreach ($columns as $column) { - $nameMap[$column->getPhpName()] = $column->getColumnName(); - } - self::$phpNameMap = $nameMap; + /** + * The PHP to DB Name Mapping + */ + private static $phpNameMap = null; + + /** + * Holds an array of fieldnames + * + * First dimension keys are the type constants + * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' + */ + private static $fieldNames = array (BasePeer::TYPE_PHPNAME => array ('AppUid','AppNumber','AppParent','AppStatus','ProUid','AppProcStatus','AppProcCode','AppParallel','AppInitUser','AppCurUser','AppCreateDate','AppInitDate','AppFinishDate','AppUpdateDate','AppData' + ),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID,ApplicationPeer::APP_NUMBER,ApplicationPeer::APP_PARENT,ApplicationPeer::APP_STATUS,ApplicationPeer::PRO_UID,ApplicationPeer::APP_PROC_STATUS,ApplicationPeer::APP_PROC_CODE,ApplicationPeer::APP_PARALLEL,ApplicationPeer::APP_INIT_USER,ApplicationPeer::APP_CUR_USER,ApplicationPeer::APP_CREATE_DATE,ApplicationPeer::APP_INIT_DATE,ApplicationPeer::APP_FINISH_DATE,ApplicationPeer::APP_UPDATE_DATE,ApplicationPeer::APP_DATA + ),BasePeer::TYPE_FIELDNAME => array ('APP_UID','APP_NUMBER','APP_PARENT','APP_STATUS','PRO_UID','APP_PROC_STATUS','APP_PROC_CODE','APP_PARALLEL','APP_INIT_USER','APP_CUR_USER','APP_CREATE_DATE','APP_INIT_DATE','APP_FINISH_DATE','APP_UPDATE_DATE','APP_DATA' + ),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 + ) + ); + + /** + * Holds an array of keys for quick access to the fieldnames array + * + * First dimension keys are the type constants + * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 + */ + private static $fieldKeys = array (BasePeer::TYPE_PHPNAME => array ('AppUid' => 0,'AppNumber' => 1,'AppParent' => 2,'AppStatus' => 3,'ProUid' => 4,'AppProcStatus' => 5,'AppProcCode' => 6,'AppParallel' => 7,'AppInitUser' => 8,'AppCurUser' => 9,'AppCreateDate' => 10,'AppInitDate' => 11,'AppFinishDate' => 12,'AppUpdateDate' => 13,'AppData' => 14 + ),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0,ApplicationPeer::APP_NUMBER => 1,ApplicationPeer::APP_PARENT => 2,ApplicationPeer::APP_STATUS => 3,ApplicationPeer::PRO_UID => 4,ApplicationPeer::APP_PROC_STATUS => 5,ApplicationPeer::APP_PROC_CODE => 6,ApplicationPeer::APP_PARALLEL => 7,ApplicationPeer::APP_INIT_USER => 8,ApplicationPeer::APP_CUR_USER => 9,ApplicationPeer::APP_CREATE_DATE => 10,ApplicationPeer::APP_INIT_DATE => 11,ApplicationPeer::APP_FINISH_DATE => 12,ApplicationPeer::APP_UPDATE_DATE => 13,ApplicationPeer::APP_DATA => 14 + ),BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0,'APP_NUMBER' => 1,'APP_PARENT' => 2,'APP_STATUS' => 3,'PRO_UID' => 4,'APP_PROC_STATUS' => 5,'APP_PROC_CODE' => 6,'APP_PARALLEL' => 7,'APP_INIT_USER' => 8,'APP_CUR_USER' => 9,'APP_CREATE_DATE' => 10,'APP_INIT_DATE' => 11,'APP_FINISH_DATE' => 12,'APP_UPDATE_DATE' => 13,'APP_DATA' => 14 + ),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 + ) + ); + + /** + * + * @return MapBuilder the map builder for this peer + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getMapBuilder () + { + include_once 'classes/model/map/ApplicationMapBuilder.php'; + return BasePeer::getMapBuilder( 'classes.model.map.ApplicationMapBuilder' ); } - return self::$phpNameMap; - } - /** - * Translates a fieldname to another type - * - * @param string $name field name - * @param string $fromType One of the class type constants TYPE_PHPNAME, - * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM - * @param string $toType One of the class type constants - * @return string translated name of the field. - */ - static public function translateFieldName($name, $fromType, $toType) - { - $toNames = self::getFieldNames($toType); - $key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null; - if ($key === null) { - throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true)); + + /** + * Gets a map (hash) of PHP names to DB column names. + * + * @return array The PHP to DB name map for this peer + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this. + */ + public static function getPhpNameMap () + { + if (self::$phpNameMap === null) { + $map = ApplicationPeer::getTableMap(); + $columns = $map->getColumns(); + $nameMap = array (); + foreach ($columns as $column) { + $nameMap[$column->getPhpName()] = $column->getColumnName(); + } + self::$phpNameMap = $nameMap; + } + return self::$phpNameMap; } - return $toNames[$key]; - } - /** - * Returns an array of of field names. - * - * @param string $type The type of fieldnames to return: - * One of the class type constants TYPE_PHPNAME, - * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM - * @return array A list of field names - */ - - static public function getFieldNames($type = BasePeer::TYPE_PHPNAME) - { - if (!array_key_exists($type, self::$fieldNames)) { - throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.'); + /** + * Translates a fieldname to another type + * + * @param string $name field name + * @param string $fromType One of the class type constants TYPE_PHPNAME, + * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM + * @param string $toType One of the class type constants + * @return string translated name of the field. + */ + static public function translateFieldName ($name, $fromType, $toType) + { + $toNames = self::getFieldNames( $toType ); + $key = isset( self::$fieldKeys[$fromType][$name] ) ? self::$fieldKeys[$fromType][$name] : null; + if ($key === null) { + throw new PropelException( "'$name' could not be found in the field names of type '$fromType'. These are: " . print_r( self::$fieldKeys[$fromType], true ) ); + } + return $toNames[$key]; } - return self::$fieldNames[$type]; - } - /** - * Convenience method which changes table.column to alias.column. - * - * Using this method you can maintain SQL abstraction while using column aliases. - * - * $c->addAlias("alias1", TablePeer::TABLE_NAME); - * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); - * - * @param string $alias The alias for the current table. - * @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME). - * @return string - */ - public static function alias($alias, $column) - { - return str_replace(ApplicationPeer::TABLE_NAME.'.', $alias.'.', $column); - } + /** + * Returns an array of of field names. + * + * @param string $type The type of fieldnames to return: + * One of the class type constants TYPE_PHPNAME, + * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM + * @return array A list of field names + */ - /** - * Add all the columns needed to create a new object. - * - * Note: any columns that were marked with lazyLoad="true" in the - * XML schema will not be added to the select list and only loaded - * on demand. - * - * @param Criteria $criteria object containing the columns to add. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function addSelectColumns(Criteria $criteria) - { + static public function getFieldNames ($type = BasePeer::TYPE_PHPNAME) + { + if (! array_key_exists( $type, self::$fieldNames )) { + throw new PropelException( 'Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.' ); + } + return self::$fieldNames[$type]; + } - } + /** + * Convenience method which changes table.column to alias.column. + * + * Using this method you can maintain SQL abstraction while using column aliases. + * + * $c->addAlias("alias1", TablePeer::TABLE_NAME); + * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); + * + * + * @param string $alias The alias for the current table. + * @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME). + * @return string + */ + public static function alias ($alias, $column) + { + return str_replace( ApplicationPeer::TABLE_NAME . '.', $alias . '.', $column ); + } - - const COUNT = 'COUNT(APPLICATION.APP_UID)'; - const COUNT_DISTINCT = 'COUNT(DISTINCT APPLICATION.APP_UID)'; + /** + * Add all the columns needed to create a new object. + * + * Note: any columns that were marked with lazyLoad="true" in the + * XML schema will not be added to the select list and only loaded + * on demand. + * + * @param Criteria $criteria object containing the columns to add. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function addSelectColumns (Criteria $criteria) + { - /** - * Returns the number of rows matching criteria. - * - * @param Criteria $criteria - * @param boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria). - * @param Connection $con - * @return int Number of matching rows. - * @todo Review declarated constant d'not used COUNT, COUNT_DISTINCT - */ - public static function doCount(Criteria $criteria, $distinct = false, $con = null) - { - // we're going to modify criteria, so copy it first - $criteria = clone $criteria; + } - // clear out anything that might confuse the ORDER BY clause - $criteria->clearSelectColumns()->clearOrderByColumns(); - /* + const COUNT = 'COUNT(APPLICATION.APP_UID)'; + const COUNT_DISTINCT = 'COUNT(DISTINCT APPLICATION.APP_UID)'; + + /** + * Returns the number of rows matching criteria. + * + * @param Criteria $criteria + * @param boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria). + * @param Connection $con + * @return int Number of matching rows. + * @todo Review declarated constant d'not used COUNT, COUNT_DISTINCT + */ + public static function doCount (Criteria $criteria, $distinct = false, $con = null) + { + // we're going to modify criteria, so copy it first + $criteria = clone $criteria; + + // clear out anything that might confuse the ORDER BY clause + $criteria->clearSelectColumns()->clearOrderByColumns(); + /* krumo ( ApplicationPeer::COUNT_DISTINCT ); if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { $criteria->addSelectColumn(ApplicationPeer::COUNT_DISTINCT); @@ -254,578 +301,577 @@ abstract class ArrayBasePeer { $criteria->addSelectColumn(ApplicationPeer::COUNT); } */ - $criteria->addSelectColumn( 'COUNT(*)'); + $criteria->addSelectColumn( 'COUNT(*)' ); - // just in case we're grouping: add those columns to the select statement - foreach($criteria->getGroupByColumns() as $column) { - $criteria->addSelectColumn($column); - } - - $rs = ArrayBasePeer::doSelectRS($criteria, $con); - if ($rs->next()) { - $row = $rs->getRow(); - return $row[1]; - } else { - // no rows returned; we infer that means 0 matches. - return 0; - } - } - /** - * Method to select one object from the DB. - * - * @param Criteria $criteria object used to create the SELECT statement. - * @param Connection $con - * @return Application - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doSelectOne(Criteria $criteria, $con = null) - { - $critcopy = clone $criteria; - $critcopy->setLimit(1); - $objects = ApplicationPeer::doSelect($critcopy, $con); - if ($objects) { - return $objects[0]; - } - return null; - } - - /** - * Method to create select SQL. - * - * @param Criteria $criteria object used to create the SELECT statement. - * @param String $tableName - * @param Array &$params - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - private function createSelectSql($criteria, $tableName, &$params) - { - $db = Propel::getDB($criteria->getDbName()); - - // redundant definition $selectModifiers = array(); - $selectClause = array(); - $fromClause = array(); - $joinClause = array(); - $joinTables = array(); - $whereClause = array(); - $orderByClause = array(); - $groupByClause = array(); - - $orderBy = $criteria->getOrderByColumns(); - $groupBy = $criteria->getGroupByColumns(); - $ignoreCase = $criteria->isIgnoreCase(); - $select = $criteria->getSelectColumns(); - $aliases = $criteria->getAsColumns(); - - $fromClause[] = $criteria->getDBArrayTable(); - - // simple copy - $selectModifiers = $criteria->getSelectModifiers(); - // get selected columns - foreach($select as $columnName) { - $tableName = null; - $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price) - - $parenPos = strpos($columnName, '('); - $dotPos = strpos($columnName, '.'); - - // [HL] I think we really only want to worry about adding stuff to - // the fromClause if this function has a TABLE.COLUMN in it at all. - // e.g. COUNT(*) should not need this treatment -- or there needs to - // be special treatment for '*' - if ($dotPos !== false) { - - if ($parenPos === false) { // table.column - $tableName = substr($columnName, 0, $dotPos); - } else { // FUNC(table.column) - $tableName = substr($columnName, $parenPos + 1, $dotPos - ($parenPos + 1)); - // functions may contain qualifiers so only take the last - // word as the table name. - // COUNT(DISTINCT books.price) - $lastSpace = strpos($tableName, ' '); - if ($lastSpace !== false) { // COUNT(DISTINCT books.price) - $tableName = substr($tableName, $lastSpace + 1); - } + // just in case we're grouping: add those columns to the select statement + foreach ($criteria->getGroupByColumns() as $column) { + $criteria->addSelectColumn( $column ); } - $tableName2 = $criteria->getTableForAlias($tableName); - if ($tableName2 !== null) { - $fromClause[] = $tableName2 . ' ' . $tableName; + + $rs = ArrayBasePeer::doSelectRS( $criteria, $con ); + if ($rs->next()) { + $row = $rs->getRow(); + return $row[1]; } else { - $fromClause[] = $tableName; + // no rows returned; we infer that means 0 matches. + return 0; + } + } + + /** + * Method to select one object from the DB. + * + * @param Criteria $criteria object used to create the SELECT statement. + * @param Connection $con + * @return Application + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelectOne (Criteria $criteria, $con = null) + { + $critcopy = clone $criteria; + $critcopy->setLimit( 1 ); + $objects = ApplicationPeer::doSelect( $critcopy, $con ); + if ($objects) { + return $objects[0]; + } + return null; + } + + /** + * Method to create select SQL. + * + * @param Criteria $criteria object used to create the SELECT statement. + * @param String $tableName + * @param Array &$params + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + private function createSelectSql ($criteria, $tableName, &$params) + { + $db = Propel::getDB( $criteria->getDbName() ); + + // redundant definition $selectModifiers = array(); + $selectClause = array (); + $fromClause = array (); + $joinClause = array (); + $joinTables = array (); + $whereClause = array (); + $orderByClause = array (); + $groupByClause = array (); + + $orderBy = $criteria->getOrderByColumns(); + $groupBy = $criteria->getGroupByColumns(); + $ignoreCase = $criteria->isIgnoreCase(); + $select = $criteria->getSelectColumns(); + $aliases = $criteria->getAsColumns(); + + $fromClause[] = $criteria->getDBArrayTable(); + + // simple copy + $selectModifiers = $criteria->getSelectModifiers(); + // get selected columns + foreach ($select as $columnName) { + $tableName = null; + $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price) + + + $parenPos = strpos( $columnName, '(' ); + $dotPos = strpos( $columnName, '.' ); + + // [HL] I think we really only want to worry about adding stuff to + // the fromClause if this function has a TABLE.COLUMN in it at all. + // e.g. COUNT(*) should not need this treatment -- or there needs to + // be special treatment for '*' + if ($dotPos !== false) { + + if ($parenPos === false) { // table.column + $tableName = substr( $columnName, 0, $dotPos ); + } else { // FUNC(table.column) + $tableName = substr( $columnName, $parenPos + 1, $dotPos - ($parenPos + 1) ); + // functions may contain qualifiers so only take the last + // word as the table name. + // COUNT(DISTINCT books.price) + $lastSpace = strpos( $tableName, ' ' ); + if ($lastSpace !== false) { // COUNT(DISTINCT books.price) + $tableName = substr( $tableName, $lastSpace + 1 ); + } + } + $tableName2 = $criteria->getTableForAlias( $tableName ); + if ($tableName2 !== null) { + $fromClause[] = $tableName2 . ' ' . $tableName; + } else { + $fromClause[] = $tableName; + } + + } // if $dotPost !== null } - } // if $dotPost !== null + // set the aliases + foreach ($aliases as $alias => $col) { + $selectClause[] = $col . " AS " . $alias; + } + + // add the criteria to WHERE clause + foreach ($criteria->keys() as $key) { + + $criterion = $criteria->getCriterion( $key ); + $someCriteria = $criterion->getAttachedCriterion(); + $someCriteriaLength = count( $someCriteria ); + $table = null; + for ($i = 0; $i < $someCriteriaLength; $i ++) { + $tableName = $someCriteria[$i]->getTable(); + $table = $criteria->getTableForAlias( $tableName ); + if ($table !== null) { + $fromClause[] = $table . ' ' . $tableName; + } else { + $fromClause[] = $tableName; + $table = $tableName; + } + + $ignoreCase = (($criteria->isIgnoreCase() || $someCriteria[$i]->isIgnoreCase()) && ($dbMap->getTable( $table )->getColumn( $someCriteria[$i]->getColumn() )->getType() == "string")); + + $someCriteria[$i]->setIgnoreCase( $ignoreCase ); + } + $criterion->setDB( $db ); + + $cri['table'] = $criterion->table; + $cri['field'] = $criterion->column; + $cri['comparison'] = $criterion->comparison == '=' ? '==' : $criterion->comparison; + $cri['value'] = $criterion->getValue(); + $sb = ""; + $sb .= "\$row['" . $cri['field'] . "'] " . $cri['comparison'] . "'" . $cri['value'] . "'"; + $params[] = $cri; + //$criterion->appendPsTo($sb, $params); + + + $whereClause[] = $sb; + + } + // Unique from clause elements + $fromClause = array_unique( $fromClause ); + + if (! empty( $orderBy )) { + + foreach ($orderBy as $orderByColumn) { + // Add function expression as-is. + if (strpos( $orderByColumn, '(' ) !== false) { + $orderByClause[] = $orderByColumn; + continue; + } + + // Split orderByColumn (i.e. "table.column DESC") + $dotPos = strpos( $orderByColumn, '.' ); + if ($dotPos !== false) { + $tableName = substr( $orderByColumn, 0, $dotPos ); + $columnName = substr( $orderByColumn, $dotPos + 1 ); + } else { + $tableName = ''; + $columnName = $orderByColumn; + } + + $spacePos = strpos( $columnName, ' ' ); + if ($spacePos !== false) { + $direction = substr( $columnName, $spacePos ); + $columnName = substr( $columnName, 0, $spacePos ); + } else { + $direction = ''; + } + $orderByClause[] = array ('columnName' => $columnName,'direction' => $direction + ); + } + } + + // Build the SQL from the arrays we compiled + $sql = "SELECT " . ($selectModifiers ? implode( " ", $selectModifiers ) . " " : "") . implode( ", ", $selectClause ) . " FROM " . $fromClause[0] . ($whereClause ? " WHERE " . implode( " AND ", $whereClause ) : "") . ($groupByClause ? " GROUP BY " . implode( ",", $groupByClause ) : ""); + + $dataSql['selectClause'] = $selectClause; + $dataSql['fromClause'] = $fromClause; + $dataSql['whereClause'] = $whereClause; + $dataSql['orderByClause'] = $orderByClause; + $dataSql['sql'] = $sql; + + return $dataSql; } - // set the aliases - foreach($aliases as $alias => $col) { - $selectClause[] = $col . " AS " . $alias; + /** + * Method to do selects. + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param Connection $con + * @return array Array of selected Objects + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelect (Criteria $criteria, $tableName, $con = null) + { + $dbMap = Propel::getDatabaseMap( $criteria->getDbName() ); + + $stmt = null; + + try { + $params = array (); + $sql = self::createSelectSql( $criteria, $tableName, $params ); + $sql['params'] = $params; + $stmt = $con->prepareStatement( $sql ); + //$stmt->setLimit($criteria->getLimit()); + $sql['limit'] = $criteria->getLimit(); + //$stmt->setOffset($criteria->getOffset()); + $sql['offset'] = $criteria->getOffset(); + //$rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM); + $rs = $con->executeQuery( $sql, ResultSet::FETCHMODE_NUM ); + } catch (Exception $e) { + if ($stmt) + $stmt->close(); + throw new PropelException( $e ); + } + + return $rs; } - // add the criteria to WHERE clause - foreach($criteria->keys() as $key) { + /** + * Prepares the Criteria object and uses the parent doSelect() + * method to get a ResultSet. + * + * Use this method directly if you want to just get the resultset + * (instead of an array of objects). + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param Connection $con the connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @return ResultSet The resultset object with numerically-indexed fields. + * @see BasePeer::doSelect() + */ + public static function doSelectRS (Criteria $criteria, $con = null) + { + global $_DBArray; + if (! isset( $_DBArray )) { + $_DBArray = $_SESSION['_DBArray']; + } + $tableName = $criteria->getDBArrayTable(); + if (! isset( $_DBArray[$tableName] )) { + throw new Exception( "Error: the table '$tableName' doesn't exist in DBArray " ); + } - $criterion = $criteria->getCriterion($key); - $someCriteria = $criterion->getAttachedCriterion(); - $someCriteriaLength = count($someCriteria); - $table = null; - for ($i=0; $i < $someCriteriaLength; $i++) { - $tableName = $someCriteria[$i]->getTable(); - $table = $criteria->getTableForAlias($tableName); - if ($table !== null) { - $fromClause[] = $table . ' ' . $tableName; + $arrayTable = $_DBArray[$tableName]; + + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + if (! $criteria->getSelectColumns()) { + foreach (array_keys( $_DBArray[$tableName][0] ) as $key => $val) + $criteria->addSelectColumn( $tableName . '.' . $val ); + } + + // Set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + // BasePeer returns a Creole ResultSet, set to return + // rows indexed numerically. + return ArrayBasePeer::doSelect( $criteria, $tableName, $con ); + } + + /** + * The returned array will contain objects of the default type or + * objects that inherit from the default. + * + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function populateObjects (ResultSet $rs) + { + $results = array (); + + // set the class once to avoid overhead in the loop + $cls = ApplicationPeer::getOMClass(); + $cls = Propel::import( $cls ); + // populate the object(s) + while ($rs->next()) { + $obj = new $cls(); + $obj->hydrate( $rs ); + $results[] = $obj; + } + return $results; + } + + /** + * Returns the TableMap related to this peer. + * This method is not needed for general use but a specific application could have a need. + * + * @return TableMap + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getTableMap () + { + return Propel::getDatabaseMap( self::DATABASE_NAME )->getTable( self::TABLE_NAME ); + } + + /** + * The class that the Peer will make instances of. + * + * This uses a dot-path notation which is tranalted into a path + * relative to a location on the PHP include_path. + * (e.g. path.to.MyClass -> 'path/to/MyClass.php') + * + * @return string path.to.ClassName + */ + public static function getOMClass () + { + return ApplicationPeer::CLASS_DEFAULT; + } + + /** + * Method perform an INSERT on the database, given a Application or Criteria object. + * + * @param mixed $values Criteria or Application object containing data that is used to create the INSERT statement. + * @param Connection $con the connection to use + * @return mixed The new primary key. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doInsert ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity } else { - $fromClause[] = $tableName; - $table = $tableName; + $criteria = $values->buildCriteria(); // build Criteria from Application object } - $ignoreCase = - (($criteria->isIgnoreCase() - || $someCriteria[$i]->isIgnoreCase()) - && ($dbMap->getTable($table)->getColumn($someCriteria[$i]->getColumn())->getType() == "string" ) - ); + // Set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); - $someCriteria[$i]->setIgnoreCase($ignoreCase); - } - $criterion->setDB($db); - - $cri['table'] = $criterion->table; - $cri['field'] = $criterion->column; - $cri['comparison'] = $criterion->comparison == '=' ? '==' : $criterion->comparison; - $cri['value'] = $criterion->getValue(); - $sb = ""; - $sb .= "\$row['" . $cri['field'] . "'] " . $cri['comparison'] . "'" . $cri['value'] . "'"; - $params[] = $cri; - //$criterion->appendPsTo($sb, $params); - - $whereClause[] = $sb; - - } - // Unique from clause elements - $fromClause = array_unique( $fromClause ); - - if (!empty($orderBy)) { - - foreach($orderBy as $orderByColumn) { - // Add function expression as-is. - if (strpos($orderByColumn, '(') !== false) { - $orderByClause[] = $orderByColumn; - continue; + try { + // use transaction because $criteria could contain info + // for more than one table (I guess, conceivably) + $con->begin(); + $pk = BasePeer::doInsert( $criteria, $con ); + $con->commit(); + } catch (PropelException $e) { + $con->rollback(); + throw $e; } - // Split orderByColumn (i.e. "table.column DESC") - $dotPos = strpos($orderByColumn, '.'); - if ($dotPos !== false) { - $tableName = substr($orderByColumn, 0, $dotPos); - $columnName = substr($orderByColumn, $dotPos+1); - } - else { - $tableName = ''; - $columnName = $orderByColumn; + return $pk; + } + + /** + * Method perform an UPDATE on the database, given a Application or Criteria object. + * + * @param mixed $values Criteria or Application object containing data that is used to create the UPDATE statement. + * @param Connection $con The connection to use (specify Connection object to exert more control over transactions). + * @return int The number of affected rows (if supported by underlying database driver). + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doUpdate ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); } - $spacePos = strpos($columnName, ' '); - if ($spacePos !== false) { - $direction = substr($columnName, $spacePos); - $columnName = substr($columnName, 0, $spacePos); + $selectCriteria = new Criteria( self::DATABASE_NAME ); + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + + + $comparison = $criteria->getComparison( ApplicationPeer::APP_UID ); + $selectCriteria->add( ApplicationPeer::APP_UID, $criteria->remove( ApplicationPeer::APP_UID ), $comparison ); + + } else { // $values is Application object + $criteria = $values->buildCriteria(); // gets full criteria + $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) } - else { - $direction = ''; + + // set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + return BasePeer::doUpdate( $selectCriteria, $criteria, $con ); + } + + /** + * Method to DELETE all rows from the APPLICATION table. + * + * @param Connection $con The connection to use + * @return int The number of affected rows (if supported by underlying database driver). + */ + public static function doDeleteAll ($con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); } - $orderByClause[] = array ( 'columnName' => $columnName, 'direction' => $direction ); - } - } - - // Build the SQL from the arrays we compiled - $sql = "SELECT " - .($selectModifiers ? implode(" ", $selectModifiers) . " " : "") - .implode(", ", $selectClause) - ." FROM ". $fromClause[0] - .($whereClause ? " WHERE ".implode(" AND ", $whereClause) : "") - .($groupByClause ? " GROUP BY ".implode(",", $groupByClause) : ""); - - $dataSql['selectClause'] = $selectClause; - $dataSql['fromClause'] = $fromClause; - $dataSql['whereClause'] = $whereClause; - $dataSql['orderByClause']= $orderByClause; - $dataSql['sql'] = $sql; - - return $dataSql; - } - - /** - * Method to do selects. - * - * @param Criteria $criteria The Criteria object used to build the SELECT statement. - * @param Connection $con - * @return array Array of selected Objects - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doSelect(Criteria $criteria, $tableName, $con = null) - { - $dbMap = Propel::getDatabaseMap($criteria->getDbName()); - - $stmt = null; - - try { - $params = array(); - $sql = self::createSelectSql($criteria, $tableName, $params); - $sql['params'] = $params; - $stmt = $con->prepareStatement( $sql); - //$stmt->setLimit($criteria->getLimit()); - $sql['limit']=$criteria->getLimit(); - //$stmt->setOffset($criteria->getOffset()); - $sql['offset']=$criteria->getOffset(); - //$rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM); - $rs = $con->executeQuery($sql, ResultSet::FETCHMODE_NUM); - } catch (Exception $e) { - if ($stmt) $stmt->close(); - throw new PropelException($e); - } - - return $rs; - } - /** - * Prepares the Criteria object and uses the parent doSelect() - * method to get a ResultSet. - * - * Use this method directly if you want to just get the resultset - * (instead of an array of objects). - * - * @param Criteria $criteria The Criteria object used to build the SELECT statement. - * @param Connection $con the connection to use - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - * @return ResultSet The resultset object with numerically-indexed fields. - * @see BasePeer::doSelect() - */ - public static function doSelectRS(Criteria $criteria, $con = null) - { - global $_DBArray; - if ( !isset ($_DBArray) ) { - $_DBArray = $_SESSION['_DBArray']; - } - $tableName = $criteria->getDBArrayTable(); - if ( !isset ( $_DBArray[$tableName] ) ) { - throw new Exception ( "Error: the table '$tableName' doesn't exist in DBArray " ); - } - - $arrayTable = $_DBArray[$tableName]; - - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - if (!$criteria->getSelectColumns()) { - foreach ( array_keys ( $_DBArray[$tableName][0] ) as $key => $val ) - $criteria->addSelectColumn( $tableName.'.'.$val ); - } - - // Set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - // BasePeer returns a Creole ResultSet, set to return - // rows indexed numerically. - return ArrayBasePeer::doSelect($criteria,$tableName, $con); - } - - /** - * The returned array will contain objects of the default type or - * objects that inherit from the default. - * - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function populateObjects(ResultSet $rs) - { - $results = array(); - - // set the class once to avoid overhead in the loop - $cls = ApplicationPeer::getOMClass(); - $cls = Propel::import($cls); - // populate the object(s) - while($rs->next()) { - $obj = new $cls(); - $obj->hydrate($rs); - $results[] = $obj; - } - return $results; - } - /** - * Returns the TableMap related to this peer. - * This method is not needed for general use but a specific application could have a need. - * @return TableMap - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function getTableMap() - { - return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME); - } - - /** - * The class that the Peer will make instances of. - * - * This uses a dot-path notation which is tranalted into a path - * relative to a location on the PHP include_path. - * (e.g. path.to.MyClass -> 'path/to/MyClass.php') - * - * @return string path.to.ClassName - */ - public static function getOMClass() - { - return ApplicationPeer::CLASS_DEFAULT; - } - - /** - * Method perform an INSERT on the database, given a Application or Criteria object. - * - * @param mixed $values Criteria or Application object containing data that is used to create the INSERT statement. - * @param Connection $con the connection to use - * @return mixed The new primary key. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doInsert($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - } else { - $criteria = $values->buildCriteria(); // build Criteria from Application object - } - - - // Set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - try { - // use transaction because $criteria could contain info - // for more than one table (I guess, conceivably) - $con->begin(); - $pk = BasePeer::doInsert($criteria, $con); - $con->commit(); - } catch(PropelException $e) { - $con->rollback(); - throw $e; - } - - return $pk; - } - - /** - * Method perform an UPDATE on the database, given a Application or Criteria object. - * - * @param mixed $values Criteria or Application object containing data that is used to create the UPDATE statement. - * @param Connection $con The connection to use (specify Connection object to exert more control over transactions). - * @return int The number of affected rows (if supported by underlying database driver). - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doUpdate($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - $selectCriteria = new Criteria(self::DATABASE_NAME); - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - - $comparison = $criteria->getComparison(ApplicationPeer::APP_UID); - $selectCriteria->add(ApplicationPeer::APP_UID, $criteria->remove(ApplicationPeer::APP_UID), $comparison); - - } else { // $values is Application object - $criteria = $values->buildCriteria(); // gets full criteria - $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) - } - - // set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - return BasePeer::doUpdate($selectCriteria, $criteria, $con); - } - - /** - * Method to DELETE all rows from the APPLICATION table. - * @param Connection $con The connection to use - * @return int The number of affected rows (if supported by underlying database driver). - */ - public static function doDeleteAll($con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - $affectedRows = 0; // initialize var to track total num of affected rows - try { - // use transaction because $criteria could contain info - // for more than one table or we could emulating ON DELETE CASCADE, etc. - $con->begin(); - $affectedRows += BasePeer::doDeleteAll(ApplicationPeer::TABLE_NAME, $con); - $con->commit(); - return $affectedRows; - } catch (PropelException $e) { - $con->rollback(); - throw $e; - } - } - - /** - * Method perform a DELETE on the database, given a Application or Criteria object OR a primary key value. - * - * @param mixed $values Criteria or Application object or primary key or array of primary keys - * which is used to create the DELETE statement - * @param Connection $con the connection to use - * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows - * if supported by native driver or if emulated using Propel. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doDelete($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(ApplicationPeer::DATABASE_NAME); - } - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - } else { - if ($values instanceof Application) { - $criteria = $values->buildPkeyCriteria(); - } else { - // it must be the primary key - $criteria = new Criteria(self::DATABASE_NAME); - $criteria->add(ApplicationPeer::APP_UID, (array) $values, Criteria::IN); - } - } - // Set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - $affectedRows = 0; // initialize var to track total num of affected rows - - try { - // use transaction because $criteria could contain info - // for more than one table or we could emulating ON DELETE CASCADE, etc. - $con->begin(); - - $affectedRows += BasePeer::doDelete($criteria, $con); - $con->commit(); - return $affectedRows; - } catch (PropelException $e) { - $con->rollback(); - throw $e; - } - } - - /** - * Validates all modified columns of given Application object. - * If parameter $columns is either a single column name or an array of column names - * than only those columns are validated. - * - * NOTICE: This does not apply to primary or foreign keys for now. - * - * @param Application $obj The object to validate. - * @param mixed $cols Column name or array of column names. - * - * @return mixed TRUE if all columns are valid or the error message of the first invalid column. - */ - public static function doValidate(Application $obj, $cols = null) - { - $columns = array(); - - if ($cols) { - $dbMap = Propel::getDatabaseMap(ApplicationPeer::DATABASE_NAME); - $tableMap = $dbMap->getTable(ApplicationPeer::TABLE_NAME); - - if (! is_array($cols)) { - $cols = array($cols); - } - - foreach($cols as $colName) { - if ($tableMap->containsColumn($colName)) { - $get = 'get' . $tableMap->getColumn($colName)->getPhpName(); - $columns[$colName] = $obj->$get(); + $affectedRows = 0; // initialize var to track total num of affected rows + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->begin(); + $affectedRows += BasePeer::doDeleteAll( ApplicationPeer::TABLE_NAME, $con ); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollback(); + throw $e; } - } - } else { - - if ($obj->isNew() || $obj->isColumnModified(ApplicationPeer::APP_STATUS)) - $columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus(); - } - return BasePeer::doValidate(ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns); - } + /** + * Method perform a DELETE on the database, given a Application or Criteria object OR a primary key value. + * + * @param mixed $values Criteria or Application object or primary key or array of primary keys + * which is used to create the DELETE statement + * @param Connection $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows + * if supported by native driver or if emulated using Propel. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doDelete ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( ApplicationPeer::DATABASE_NAME ); + } - /** - * Retrieve a single object by pkey. - * - * @param mixed $pk the primary key. - * @param Connection $con the connection to use - * @return Application - */ - public static function retrieveByPK($pk, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + } else { + if ($values instanceof Application) { + $criteria = $values->buildPkeyCriteria(); + } else { + // it must be the primary key + $criteria = new Criteria( self::DATABASE_NAME ); + $criteria->add( ApplicationPeer::APP_UID, (array) $values, Criteria::IN ); + } + } + // Set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + $affectedRows = 0; // initialize var to track total num of affected rows + + + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->begin(); + + $affectedRows += BasePeer::doDelete( $criteria, $con ); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollback(); + throw $e; + } } - $criteria = new Criteria(ApplicationPeer::DATABASE_NAME); + /** + * Validates all modified columns of given Application object. + * If parameter $columns is either a single column name or an array of column names + * than only those columns are validated. + * + * NOTICE: This does not apply to primary or foreign keys for now. + * + * @param Application $obj The object to validate. + * @param mixed $cols Column name or array of column names. + * + * @return mixed TRUE if all columns are valid or the error message of the first invalid column. + */ + public static function doValidate (Application $obj, $cols = null) + { + $columns = array (); - $criteria->add(ApplicationPeer::APP_UID, $pk); + if ($cols) { + $dbMap = Propel::getDatabaseMap( ApplicationPeer::DATABASE_NAME ); + $tableMap = $dbMap->getTable( ApplicationPeer::TABLE_NAME ); + if (! is_array( $cols )) { + $cols = array ($cols + ); + } - $v = ApplicationPeer::doSelect($criteria, $con); + foreach ($cols as $colName) { + if ($tableMap->containsColumn( $colName )) { + $get = 'get' . $tableMap->getColumn( $colName )->getPhpName(); + $columns[$colName] = $obj->$get(); + } + } + } else { - return !empty($v) > 0 ? $v[0] : null; - } + if ($obj->isNew() || $obj->isColumnModified( ApplicationPeer::APP_STATUS )) + $columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus(); - /** - * Retrieve multiple objects by pkey. - * - * @param array $pks List of primary keys - * @param Connection $con the connection to use - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function retrieveByPKs($pks, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); + } + + return BasePeer::doValidate( ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns ); } - $objs = null; - if (empty($pks)) { - $objs = array(); - } else { - $criteria = new Criteria(); - $criteria->add(ApplicationPeer::APP_UID, $pks, Criteria::IN); - $objs = ApplicationPeer::doSelect($criteria, $con); + /** + * Retrieve a single object by pkey. + * + * @param mixed $pk the primary key. + * @param Connection $con the connection to use + * @return Application + */ + public static function retrieveByPK ($pk, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + $criteria = new Criteria( ApplicationPeer::DATABASE_NAME ); + + $criteria->add( ApplicationPeer::APP_UID, $pk ); + + $v = ApplicationPeer::doSelect( $criteria, $con ); + + return ! empty( $v ) > 0 ? $v[0] : null; + } + + /** + * Retrieve multiple objects by pkey. + * + * @param array $pks List of primary keys + * @param Connection $con the connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function retrieveByPKs ($pks, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + $objs = null; + if (empty( $pks )) { + $objs = array (); + } else { + $criteria = new Criteria(); + $criteria->add( ApplicationPeer::APP_UID, $pks, Criteria::IN ); + $objs = ApplicationPeer::doSelect( $criteria, $con ); + } + return $objs; } - return $objs; - } } // BaseApplicationPeer // static code to register the map builder for this Peer with the main Propel class if (Propel::isInit()) { - // the MapBuilder classes register themselves with Propel during initialization - // so we need to load them here. - try { - BaseApplicationPeer::getMapBuilder(); - } catch (Exception $e) { - Propel::log('Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR); - } + // the MapBuilder classes register themselves with Propel during initialization + // so we need to load them here. + try { + BaseApplicationPeer::getMapBuilder(); + } catch (Exception $e) { + Propel::log( 'Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR ); + } } else { - // even if Propel is not yet initialized, the map builder class can be registered - // now and then it will be loaded when Propel initializes. - require_once 'classes/model/map/ApplicationMapBuilder.php'; - Propel::registerMapBuilder('classes.model.map.ApplicationMapBuilder'); + // even if Propel is not yet initialized, the map builder class can be registered + // now and then it will be loaded when Propel initializes. + require_once 'classes/model/map/ApplicationMapBuilder.php'; + Propel::registerMapBuilder( 'classes.model.map.ApplicationMapBuilder' ); } diff --git a/workflow/engine/classes/class.BasePeer.php b/workflow/engine/classes/class.BasePeer.php index aad2ece71..f3d76b637 100755 --- a/workflow/engine/classes/class.BasePeer.php +++ b/workflow/engine/classes/class.BasePeer.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -34,251 +35,296 @@ include_once 'classes/model/Application.php'; * * * - * @package workflow.engine.classes + * @package workflow.engine.classes */ -abstract class GulliverBasePeer { +abstract class GulliverBasePeer +{ - /** the default database name for this class */ - const DATABASE_NAME = 'workflow'; + /** + * the default database name for this class + */ + const DATABASE_NAME = 'workflow'; - /** the table name for this class */ - const TABLE_NAME = 'APPLICATION'; + /** + * the table name for this class + */ + const TABLE_NAME = 'APPLICATION'; - /** A class that can be returned by this peer. */ - const CLASS_DEFAULT = 'classes.model.Application'; + /** + * A class that can be returned by this peer. + */ + const CLASS_DEFAULT = 'classes.model.Application'; - /** The total number of columns. */ - const NUM_COLUMNS = 15; + /** + * The total number of columns. + */ + const NUM_COLUMNS = 15; - /** The number of lazy-loaded columns. */ - const NUM_LAZY_LOAD_COLUMNS = 0; + /** + * The number of lazy-loaded columns. + */ + const NUM_LAZY_LOAD_COLUMNS = 0; + /** + * the column name for the APP_UID field + */ + const APP_UID = 'APPLICATION.APP_UID'; - /** the column name for the APP_UID field */ - const APP_UID = 'APPLICATION.APP_UID'; + /** + * the column name for the APP_NUMBER field + */ + const APP_NUMBER = 'APPLICATION.APP_NUMBER'; - /** the column name for the APP_NUMBER field */ - const APP_NUMBER = 'APPLICATION.APP_NUMBER'; + /** + * the column name for the APP_PARENT field + */ + const APP_PARENT = 'APPLICATION.APP_PARENT'; - /** the column name for the APP_PARENT field */ - const APP_PARENT = 'APPLICATION.APP_PARENT'; + /** + * the column name for the APP_STATUS field + */ + const APP_STATUS = 'APPLICATION.APP_STATUS'; - /** the column name for the APP_STATUS field */ - const APP_STATUS = 'APPLICATION.APP_STATUS'; + /** + * the column name for the PRO_UID field + */ + const PRO_UID = 'APPLICATION.PRO_UID'; - /** the column name for the PRO_UID field */ - const PRO_UID = 'APPLICATION.PRO_UID'; + /** + * the column name for the APP_PROC_STATUS field + */ + const APP_PROC_STATUS = 'APPLICATION.APP_PROC_STATUS'; - /** the column name for the APP_PROC_STATUS field */ - const APP_PROC_STATUS = 'APPLICATION.APP_PROC_STATUS'; + /** + * the column name for the APP_PROC_CODE field + */ + const APP_PROC_CODE = 'APPLICATION.APP_PROC_CODE'; - /** the column name for the APP_PROC_CODE field */ - const APP_PROC_CODE = 'APPLICATION.APP_PROC_CODE'; + /** + * the column name for the APP_PARALLEL field + */ + const APP_PARALLEL = 'APPLICATION.APP_PARALLEL'; - /** the column name for the APP_PARALLEL field */ - const APP_PARALLEL = 'APPLICATION.APP_PARALLEL'; + /** + * the column name for the APP_INIT_USER field + */ + const APP_INIT_USER = 'APPLICATION.APP_INIT_USER'; - /** the column name for the APP_INIT_USER field */ - const APP_INIT_USER = 'APPLICATION.APP_INIT_USER'; + /** + * the column name for the APP_CUR_USER field + */ + const APP_CUR_USER = 'APPLICATION.APP_CUR_USER'; - /** the column name for the APP_CUR_USER field */ - const APP_CUR_USER = 'APPLICATION.APP_CUR_USER'; + /** + * the column name for the APP_CREATE_DATE field + */ + const APP_CREATE_DATE = 'APPLICATION.APP_CREATE_DATE'; - /** the column name for the APP_CREATE_DATE field */ - const APP_CREATE_DATE = 'APPLICATION.APP_CREATE_DATE'; + /** + * the column name for the APP_INIT_DATE field + */ + const APP_INIT_DATE = 'APPLICATION.APP_INIT_DATE'; - /** the column name for the APP_INIT_DATE field */ - const APP_INIT_DATE = 'APPLICATION.APP_INIT_DATE'; + /** + * the column name for the APP_FINISH_DATE field + */ + const APP_FINISH_DATE = 'APPLICATION.APP_FINISH_DATE'; - /** the column name for the APP_FINISH_DATE field */ - const APP_FINISH_DATE = 'APPLICATION.APP_FINISH_DATE'; + /** + * the column name for the APP_UPDATE_DATE field + */ + const APP_UPDATE_DATE = 'APPLICATION.APP_UPDATE_DATE'; - /** the column name for the APP_UPDATE_DATE field */ - const APP_UPDATE_DATE = 'APPLICATION.APP_UPDATE_DATE'; + /** + * the column name for the APP_DATA field + */ + const APP_DATA = 'APPLICATION.APP_DATA'; - /** the column name for the APP_DATA field */ - const APP_DATA = 'APPLICATION.APP_DATA'; + /** + * The PHP to DB Name Mapping + */ + private static $phpNameMap = null; - /** The PHP to DB Name Mapping */ - private static $phpNameMap = null; + /** + * holds an array of fieldnames + * + * first dimension keys are the type constants + * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' + */ + private static $fieldNames = array (BasePeer::TYPE_PHPNAME => array ('AppUid','AppNumber','AppParent','AppStatus','ProUid','AppProcStatus','AppProcCode','AppParallel','AppInitUser','AppCurUser','AppCreateDate','AppInitDate','AppFinishDate','AppUpdateDate','AppData' + ),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID,ApplicationPeer::APP_NUMBER,ApplicationPeer::APP_PARENT,ApplicationPeer::APP_STATUS,ApplicationPeer::PRO_UID,ApplicationPeer::APP_PROC_STATUS,ApplicationPeer::APP_PROC_CODE,ApplicationPeer::APP_PARALLEL,ApplicationPeer::APP_INIT_USER,ApplicationPeer::APP_CUR_USER,ApplicationPeer::APP_CREATE_DATE,ApplicationPeer::APP_INIT_DATE,ApplicationPeer::APP_FINISH_DATE,ApplicationPeer::APP_UPDATE_DATE,ApplicationPeer::APP_DATA + ),BasePeer::TYPE_FIELDNAME => array ('APP_UID','APP_NUMBER','APP_PARENT','APP_STATUS','PRO_UID','APP_PROC_STATUS','APP_PROC_CODE','APP_PARALLEL','APP_INIT_USER','APP_CUR_USER','APP_CREATE_DATE','APP_INIT_DATE','APP_FINISH_DATE','APP_UPDATE_DATE','APP_DATA' + ),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 + ) + ); + /** + * holds an array of keys for quick access to the fieldnames array + * + * first dimension keys are the type constants + * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 + */ + private static $fieldKeys = array (BasePeer::TYPE_PHPNAME => array ('AppUid' => 0,'AppNumber' => 1,'AppParent' => 2,'AppStatus' => 3,'ProUid' => 4,'AppProcStatus' => 5,'AppProcCode' => 6,'AppParallel' => 7,'AppInitUser' => 8,'AppCurUser' => 9,'AppCreateDate' => 10,'AppInitDate' => 11,'AppFinishDate' => 12,'AppUpdateDate' => 13,'AppData' => 14 + ),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0,ApplicationPeer::APP_NUMBER => 1,ApplicationPeer::APP_PARENT => 2,ApplicationPeer::APP_STATUS => 3,ApplicationPeer::PRO_UID => 4,ApplicationPeer::APP_PROC_STATUS => 5,ApplicationPeer::APP_PROC_CODE => 6,ApplicationPeer::APP_PARALLEL => 7,ApplicationPeer::APP_INIT_USER => 8,ApplicationPeer::APP_CUR_USER => 9,ApplicationPeer::APP_CREATE_DATE => 10,ApplicationPeer::APP_INIT_DATE => 11,ApplicationPeer::APP_FINISH_DATE => 12,ApplicationPeer::APP_UPDATE_DATE => 13,ApplicationPeer::APP_DATA => 14 + ),BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0,'APP_NUMBER' => 1,'APP_PARENT' => 2,'APP_STATUS' => 3,'PRO_UID' => 4,'APP_PROC_STATUS' => 5,'APP_PROC_CODE' => 6,'APP_PARALLEL' => 7,'APP_INIT_USER' => 8,'APP_CUR_USER' => 9,'APP_CREATE_DATE' => 10,'APP_INIT_DATE' => 11,'APP_FINISH_DATE' => 12,'APP_UPDATE_DATE' => 13,'APP_DATA' => 14 + ),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 + ) + ); - /** - * holds an array of fieldnames - * - * first dimension keys are the type constants - * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' - */ - private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) - ); - - /** - * holds an array of keys for quick access to the fieldnames array - * - * first dimension keys are the type constants - * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 - */ - private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppNumber' => 1, 'AppParent' => 2, 'AppStatus' => 3, 'ProUid' => 4, 'AppProcStatus' => 5, 'AppProcCode' => 6, 'AppParallel' => 7, 'AppInitUser' => 8, 'AppCurUser' => 9, 'AppCreateDate' => 10, 'AppInitDate' => 11, 'AppFinishDate' => 12, 'AppUpdateDate' => 13, 'AppData' => 14, ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_NUMBER => 1, ApplicationPeer::APP_PARENT => 2, ApplicationPeer::APP_STATUS => 3, ApplicationPeer::PRO_UID => 4, ApplicationPeer::APP_PROC_STATUS => 5, ApplicationPeer::APP_PROC_CODE => 6, ApplicationPeer::APP_PARALLEL => 7, ApplicationPeer::APP_INIT_USER => 8, ApplicationPeer::APP_CUR_USER => 9, ApplicationPeer::APP_CREATE_DATE => 10, ApplicationPeer::APP_INIT_DATE => 11, ApplicationPeer::APP_FINISH_DATE => 12, ApplicationPeer::APP_UPDATE_DATE => 13, ApplicationPeer::APP_DATA => 14, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_NUMBER' => 1, 'APP_PARENT' => 2, 'APP_STATUS' => 3, 'PRO_UID' => 4, 'APP_PROC_STATUS' => 5, 'APP_PROC_CODE' => 6, 'APP_PARALLEL' => 7, 'APP_INIT_USER' => 8, 'APP_CUR_USER' => 9, 'APP_CREATE_DATE' => 10, 'APP_INIT_DATE' => 11, 'APP_FINISH_DATE' => 12, 'APP_UPDATE_DATE' => 13, 'APP_DATA' => 14, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) - ); - - /** - * @return MapBuilder the map builder for this peer - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function getMapBuilder() - { - include_once 'classes/model/map/ApplicationMapBuilder.php'; - return BasePeer::getMapBuilder('classes.model.map.ApplicationMapBuilder'); - } - /** - * Gets a map (hash) of PHP names to DB column names. - * - * @return array The PHP to DB name map for this peer - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this. - */ - public static function getPhpNameMap() - { - if (self::$phpNameMap === null) { - $map = ApplicationPeer::getTableMap(); - $columns = $map->getColumns(); - $nameMap = array(); - foreach ($columns as $column) { - $nameMap[$column->getPhpName()] = $column->getColumnName(); - } - self::$phpNameMap = $nameMap; + /** + * + * @return MapBuilder the map builder for this peer + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getMapBuilder () + { + include_once 'classes/model/map/ApplicationMapBuilder.php'; + return BasePeer::getMapBuilder( 'classes.model.map.ApplicationMapBuilder' ); } - return self::$phpNameMap; - } - /** - * Translates a fieldname to another type - * - * @param string $name field name - * @param string $fromType One of the class type constants TYPE_PHPNAME, - * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM - * @param string $toType One of the class type constants - * @return string translated name of the field. - */ - static public function translateFieldName($name, $fromType, $toType) - { - $toNames = self::getFieldNames($toType); - $key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null; - if ($key === null) { - throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true)); + + /** + * Gets a map (hash) of PHP names to DB column names. + * + * @return array The PHP to DB name map for this peer + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this. + */ + public static function getPhpNameMap () + { + if (self::$phpNameMap === null) { + $map = ApplicationPeer::getTableMap(); + $columns = $map->getColumns(); + $nameMap = array (); + foreach ($columns as $column) { + $nameMap[$column->getPhpName()] = $column->getColumnName(); + } + self::$phpNameMap = $nameMap; + } + return self::$phpNameMap; } - return $toNames[$key]; - } - /** - * Returns an array of of field names. - * - * @param string $type The type of fieldnames to return: - * One of the class type constants TYPE_PHPNAME, - * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM - * @return array A list of field names - */ - - static public function getFieldNames($type = BasePeer::TYPE_PHPNAME) - { - if (!array_key_exists($type, self::$fieldNames)) { - throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.'); + /** + * Translates a fieldname to another type + * + * @param string $name field name + * @param string $fromType One of the class type constants TYPE_PHPNAME, + * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM + * @param string $toType One of the class type constants + * @return string translated name of the field. + */ + static public function translateFieldName ($name, $fromType, $toType) + { + $toNames = self::getFieldNames( $toType ); + $key = isset( self::$fieldKeys[$fromType][$name] ) ? self::$fieldKeys[$fromType][$name] : null; + if ($key === null) { + throw new PropelException( "'$name' could not be found in the field names of type '$fromType'. These are: " . print_r( self::$fieldKeys[$fromType], true ) ); + } + return $toNames[$key]; } - return self::$fieldNames[$type]; - } - /** - * Convenience method which changes table.column to alias.column. - * - * Using this method you can maintain SQL abstraction while using column aliases. - * - * $c->addAlias("alias1", TablePeer::TABLE_NAME); - * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); - * - * @param string $alias The alias for the current table. - * @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME). - * @return string - */ - public static function alias($alias, $column) - { - return str_replace(ApplicationPeer::TABLE_NAME.'.', $alias.'.', $column); - } + /** + * Returns an array of of field names. + * + * @param string $type The type of fieldnames to return: + * One of the class type constants TYPE_PHPNAME, + * TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM + * @return array A list of field names + */ - /** - * Add all the columns needed to create a new object. - * - * Note: any columns that were marked with lazyLoad="true" in the - * XML schema will not be added to the select list and only loaded - * on demand. - * - * @param criteria object containing the columns to add. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function addSelectColumns(Criteria $criteria) - { - - $criteria->addSelectColumn(ApplicationPeer::APP_UID); - - $criteria->addSelectColumn(ApplicationPeer::APP_NUMBER); - - $criteria->addSelectColumn(ApplicationPeer::APP_PARENT); - - $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); - - $criteria->addSelectColumn(ApplicationPeer::PRO_UID); - - $criteria->addSelectColumn(ApplicationPeer::APP_PROC_STATUS); - - $criteria->addSelectColumn(ApplicationPeer::APP_PROC_CODE); - - $criteria->addSelectColumn(ApplicationPeer::APP_PARALLEL); - - $criteria->addSelectColumn(ApplicationPeer::APP_INIT_USER); - - $criteria->addSelectColumn(ApplicationPeer::APP_CUR_USER); - - $criteria->addSelectColumn(ApplicationPeer::APP_CREATE_DATE); - - $criteria->addSelectColumn(ApplicationPeer::APP_INIT_DATE); - - $criteria->addSelectColumn(ApplicationPeer::APP_FINISH_DATE); - - $criteria->addSelectColumn(ApplicationPeer::APP_UPDATE_DATE); - - $criteria->addSelectColumn(ApplicationPeer::APP_DATA); - - } + static public function getFieldNames ($type = BasePeer::TYPE_PHPNAME) + { + if (! array_key_exists( $type, self::$fieldNames )) { + throw new PropelException( 'Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.' ); + } + return self::$fieldNames[$type]; + } - const COUNT = 'COUNT(APPLICATION.APP_UID)'; - const COUNT_DISTINCT = 'COUNT(DISTINCT APPLICATION.APP_UID)'; + /** + * Convenience method which changes table.column to alias.column. + * + * Using this method you can maintain SQL abstraction while using column aliases. + * + * $c->addAlias("alias1", TablePeer::TABLE_NAME); + * $c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN); + * + * + * @param string $alias The alias for the current table. + * @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME). + * @return string + */ + public static function alias ($alias, $column) + { + return str_replace( ApplicationPeer::TABLE_NAME . '.', $alias . '.', $column ); + } - /** - * Returns the number of rows matching criteria. - * - * @param Criteria $criteria - * @param boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria). - * @param Connection $con - * @return int Number of matching rows. - */ - public static function doCount(Criteria $criteria, $distinct = false, $con = null) - { - - // we're going to modify criteria, so copy it first - $criteria = clone $criteria; - - // clear out anything that might confuse the ORDER BY clause - $criteria->clearSelectColumns()->clearOrderByColumns(); - /* + /** + * Add all the columns needed to create a new object. + * + * Note: any columns that were marked with lazyLoad="true" in the + * XML schema will not be added to the select list and only loaded + * on demand. + * + * @param criteria object containing the columns to add. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function addSelectColumns (Criteria $criteria) + { + + $criteria->addSelectColumn( ApplicationPeer::APP_UID ); + + $criteria->addSelectColumn( ApplicationPeer::APP_NUMBER ); + + $criteria->addSelectColumn( ApplicationPeer::APP_PARENT ); + + $criteria->addSelectColumn( ApplicationPeer::APP_STATUS ); + + $criteria->addSelectColumn( ApplicationPeer::PRO_UID ); + + $criteria->addSelectColumn( ApplicationPeer::APP_PROC_STATUS ); + + $criteria->addSelectColumn( ApplicationPeer::APP_PROC_CODE ); + + $criteria->addSelectColumn( ApplicationPeer::APP_PARALLEL ); + + $criteria->addSelectColumn( ApplicationPeer::APP_INIT_USER ); + + $criteria->addSelectColumn( ApplicationPeer::APP_CUR_USER ); + + $criteria->addSelectColumn( ApplicationPeer::APP_CREATE_DATE ); + + $criteria->addSelectColumn( ApplicationPeer::APP_INIT_DATE ); + + $criteria->addSelectColumn( ApplicationPeer::APP_FINISH_DATE ); + + $criteria->addSelectColumn( ApplicationPeer::APP_UPDATE_DATE ); + + $criteria->addSelectColumn( ApplicationPeer::APP_DATA ); + + } + + const COUNT = 'COUNT(APPLICATION.APP_UID)'; + const COUNT_DISTINCT = 'COUNT(DISTINCT APPLICATION.APP_UID)'; + + /** + * Returns the number of rows matching criteria. + * + * @param Criteria $criteria + * @param boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria). + * @param Connection $con + * @return int Number of matching rows. + */ + public static function doCount (Criteria $criteria, $distinct = false, $con = null) + { + + // we're going to modify criteria, so copy it first + $criteria = clone $criteria; + + // clear out anything that might confuse the ORDER BY clause + $criteria->clearSelectColumns()->clearOrderByColumns(); + /* krumo ( ApplicationPeer::COUNT_DISTINCT ); if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { $criteria->addSelectColumn(ApplicationPeer::COUNT_DISTINCT); @@ -286,383 +332,390 @@ abstract class GulliverBasePeer { $criteria->addSelectColumn(ApplicationPeer::COUNT); } */ - $criteria->addSelectColumn( 'COUNT(*)'); - - // just in case we're grouping: add those columns to the select statement - foreach($criteria->getGroupByColumns() as $column) - { - $criteria->addSelectColumn($column); - } - - $rs = GulliverBasePeer::doSelectRS($criteria, $con); - if ($rs->next()) { - return $rs->getInt(1); - } else { - // no rows returned; we infer that means 0 matches. - return 0; - } - } - /** - * Method to select one object from the DB. - * - * @param Criteria $criteria object used to create the SELECT statement. - * @param Connection $con - * @return Application - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doSelectOne(Criteria $criteria, $con = null) - { - $critcopy = clone $criteria; - $critcopy->setLimit(1); - $objects = ApplicationPeer::doSelect($critcopy, $con); - if ($objects) { - return $objects[0]; - } - return null; - } - /** - * Method to do selects. - * - * @param Criteria $criteria The Criteria object used to build the SELECT statement. - * @param Connection $con - * @return array Array of selected Objects - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doSelect(Criteria $criteria, $con = null) - { - return ApplicationPeer::populateObjects(GulliverBasePeer::doSelectRS($criteria, $con)); - } - /** - * Prepares the Criteria object and uses the parent doSelect() - * method to get a ResultSet. - * - * Use this method directly if you want to just get the resultset - * (instead of an array of objects). - * - * @param Criteria $criteria The Criteria object used to build the SELECT statement. - * @param Connection $con the connection to use - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - * @return ResultSet The resultset object with numerically-indexed fields. - * @see BasePeer::doSelect() - */ - public static function doSelectRS(Criteria $criteria, $con = null) - { - if ($con === null) { - //$con = Propel::getConnection(self::DATABASE_NAME); - $con = Propel::getConnection($criteria->getDbName()); - } - if (!$criteria->getSelectColumns()) { - $criteria = clone $criteria; - //ApplicationPeer::addSelectColumns($criteria); - } - - // Set the correct dbName - //$criteria->setDbName(self::DATABASE_NAME); - $criteria->setDbName($criteria->getDbName()); - - // BasePeer returns a Creole ResultSet, set to return - // rows indexed numerically. - return BasePeer::doSelect($criteria, $con); - } - /** - * The returned array will contain objects of the default type or - * objects that inherit from the default. - * - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function populateObjects(ResultSet $rs) - { - $results = array(); - - // set the class once to avoid overhead in the loop - $cls = ApplicationPeer::getOMClass(); - $cls = Propel::import($cls); - // populate the object(s) - while($rs->next()) { - - $obj = new $cls(); - $obj->hydrate($rs); - $results[] = $obj; - - } - return $results; - } - /** - * Returns the TableMap related to this peer. - * This method is not needed for general use but a specific application could have a need. - * @return TableMap - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function getTableMap() - { - return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME); - } + $criteria->addSelectColumn( 'COUNT(*)' ); - /** - * The class that the Peer will make instances of. - * - * This uses a dot-path notation which is tranalted into a path - * relative to a location on the PHP include_path. - * (e.g. path.to.MyClass -> 'path/to/MyClass.php') - * - * @return string path.to.ClassName - */ - public static function getOMClass() - { - return ApplicationPeer::CLASS_DEFAULT; - } - - /** - * Method perform an INSERT on the database, given a Application or Criteria object. - * - * @param mixed $values Criteria or Application object containing data that is used to create the INSERT statement. - * @param Connection $con the connection to use - * @return mixed The new primary key. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doInsert($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - } else { - $criteria = $values->buildCriteria(); // build Criteria from Application object - } - - - // Set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - try { - // use transaction because $criteria could contain info - // for more than one table (I guess, conceivably) - $con->begin(); - $pk = BasePeer::doInsert($criteria, $con); - $con->commit(); - } catch(PropelException $e) { - $con->rollback(); - throw $e; - } - - return $pk; - } - - /** - * Method perform an UPDATE on the database, given a Application or Criteria object. - * - * @param mixed $values Criteria or Application object containing data that is used to create the UPDATE statement. - * @param Connection $con The connection to use (specify Connection object to exert more control over transactions). - * @return int The number of affected rows (if supported by underlying database driver). - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doUpdate($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - $selectCriteria = new Criteria(self::DATABASE_NAME); - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - - $comparison = $criteria->getComparison(ApplicationPeer::APP_UID); - $selectCriteria->add(ApplicationPeer::APP_UID, $criteria->remove(ApplicationPeer::APP_UID), $comparison); - - } else { // $values is Application object - $criteria = $values->buildCriteria(); // gets full criteria - $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) - } - - // set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - return BasePeer::doUpdate($selectCriteria, $criteria, $con); - } - - /** - * Method to DELETE all rows from the APPLICATION table. - * - * @return int The number of affected rows (if supported by underlying database driver). - */ - public static function doDeleteAll($con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - $affectedRows = 0; // initialize var to track total num of affected rows - try { - // use transaction because $criteria could contain info - // for more than one table or we could emulating ON DELETE CASCADE, etc. - $con->begin(); - $affectedRows += BasePeer::doDeleteAll(ApplicationPeer::TABLE_NAME, $con); - $con->commit(); - return $affectedRows; - } catch (PropelException $e) { - $con->rollback(); - throw $e; - } - } - - /** - * Method perform a DELETE on the database, given a Application or Criteria object OR a primary key value. - * - * @param mixed $values Criteria or Application object or primary key or array of primary keys - * which is used to create the DELETE statement - * @param Connection $con the connection to use - * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows - * if supported by native driver or if emulated using Propel. - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function doDelete($values, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(ApplicationPeer::DATABASE_NAME); - } - - if ($values instanceof Criteria) { - $criteria = clone $values; // rename for clarity - } elseif ($values instanceof Application) { - - $criteria = $values->buildPkeyCriteria(); - } else { - // it must be the primary key - $criteria = new Criteria(self::DATABASE_NAME); - $criteria->add(ApplicationPeer::APP_UID, (array) $values, Criteria::IN); - } - - // Set the correct dbName - $criteria->setDbName(self::DATABASE_NAME); - - $affectedRows = 0; // initialize var to track total num of affected rows - - try { - // use transaction because $criteria could contain info - // for more than one table or we could emulating ON DELETE CASCADE, etc. - $con->begin(); - - $affectedRows += BasePeer::doDelete($criteria, $con); - $con->commit(); - return $affectedRows; - } catch (PropelException $e) { - $con->rollback(); - throw $e; - } - } - - /** - * Validates all modified columns of given Application object. - * If parameter $columns is either a single column name or an array of column names - * than only those columns are validated. - * - * NOTICE: This does not apply to primary or foreign keys for now. - * - * @param Application $obj The object to validate. - * @param mixed $cols Column name or array of column names. - * - * @return mixed TRUE if all columns are valid or the error message of the first invalid column. - */ - public static function doValidate(Application $obj, $cols = null) - { - $columns = array(); - - if ($cols) { - $dbMap = Propel::getDatabaseMap(ApplicationPeer::DATABASE_NAME); - $tableMap = $dbMap->getTable(ApplicationPeer::TABLE_NAME); - - if (! is_array($cols)) { - $cols = array($cols); - } - - foreach($cols as $colName) { - if ($tableMap->containsColumn($colName)) { - $get = 'get' . $tableMap->getColumn($colName)->getPhpName(); - $columns[$colName] = $obj->$get(); + // just in case we're grouping: add those columns to the select statement + foreach ($criteria->getGroupByColumns() as $column) { + $criteria->addSelectColumn( $column ); } - } - } else { - - if ($obj->isNew() || $obj->isColumnModified(ApplicationPeer::APP_STATUS)) - $columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus(); - - } - - return BasePeer::doValidate(ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns); - } - /** - * Retrieve a single object by pkey. - * - * @param mixed $pk the primary key. - * @param Connection $con the connection to use - * @return Application - */ - public static function retrieveByPK($pk, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); + $rs = GulliverBasePeer::doSelectRS( $criteria, $con ); + if ($rs->next()) { + return $rs->getInt( 1 ); + } else { + // no rows returned; we infer that means 0 matches. + return 0; + } } - - $criteria = new Criteria(ApplicationPeer::DATABASE_NAME); - - $criteria->add(ApplicationPeer::APP_UID, $pk); - - - $v = ApplicationPeer::doSelect($criteria, $con); - - return !empty($v) > 0 ? $v[0] : null; - } - /** - * Retrieve multiple objects by pkey. - * - * @param array $pks List of primary keys - * @param Connection $con the connection to use - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function retrieveByPKs($pks, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); + /** + * Method to select one object from the DB. + * + * @param Criteria $criteria object used to create the SELECT statement. + * @param Connection $con + * @return Application + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelectOne (Criteria $criteria, $con = null) + { + $critcopy = clone $criteria; + $critcopy->setLimit( 1 ); + $objects = ApplicationPeer::doSelect( $critcopy, $con ); + if ($objects) { + return $objects[0]; + } + return null; } - - $objs = null; - if (empty($pks)) { - $objs = array(); - } else { - $criteria = new Criteria(); - $criteria->add(ApplicationPeer::APP_UID, $pks, Criteria::IN); - $objs = ApplicationPeer::doSelect($criteria, $con); + + /** + * Method to do selects. + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param Connection $con + * @return array Array of selected Objects + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doSelect (Criteria $criteria, $con = null) + { + return ApplicationPeer::populateObjects( GulliverBasePeer::doSelectRS( $criteria, $con ) ); + } + + /** + * Prepares the Criteria object and uses the parent doSelect() + * method to get a ResultSet. + * + * Use this method directly if you want to just get the resultset + * (instead of an array of objects). + * + * @param Criteria $criteria The Criteria object used to build the SELECT statement. + * @param Connection $con the connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @return ResultSet The resultset object with numerically-indexed fields. + * @see BasePeer::doSelect() + */ + public static function doSelectRS (Criteria $criteria, $con = null) + { + if ($con === null) { + //$con = Propel::getConnection(self::DATABASE_NAME); + $con = Propel::getConnection( $criteria->getDbName() ); + } + if (! $criteria->getSelectColumns()) { + $criteria = clone $criteria; + //ApplicationPeer::addSelectColumns($criteria); + } + + // Set the correct dbName + //$criteria->setDbName(self::DATABASE_NAME); + $criteria->setDbName( $criteria->getDbName() ); + + // BasePeer returns a Creole ResultSet, set to return + // rows indexed numerically. + return BasePeer::doSelect( $criteria, $con ); + } + + /** + * The returned array will contain objects of the default type or + * objects that inherit from the default. + * + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function populateObjects (ResultSet $rs) + { + $results = array (); + + // set the class once to avoid overhead in the loop + $cls = ApplicationPeer::getOMClass(); + $cls = Propel::import( $cls ); + // populate the object(s) + while ($rs->next()) { + + $obj = new $cls(); + $obj->hydrate( $rs ); + $results[] = $obj; + + } + return $results; + } + + /** + * Returns the TableMap related to this peer. + * This method is not needed for general use but a specific application could have a need. + * + * @return TableMap + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getTableMap () + { + return Propel::getDatabaseMap( self::DATABASE_NAME )->getTable( self::TABLE_NAME ); + } + + /** + * The class that the Peer will make instances of. + * + * This uses a dot-path notation which is tranalted into a path + * relative to a location on the PHP include_path. + * (e.g. path.to.MyClass -> 'path/to/MyClass.php') + * + * @return string path.to.ClassName + */ + public static function getOMClass () + { + return ApplicationPeer::CLASS_DEFAULT; + } + + /** + * Method perform an INSERT on the database, given a Application or Criteria object. + * + * @param mixed $values Criteria or Application object containing data that is used to create the INSERT statement. + * @param Connection $con the connection to use + * @return mixed The new primary key. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doInsert ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + } else { + $criteria = $values->buildCriteria(); // build Criteria from Application object + } + + // Set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + try { + // use transaction because $criteria could contain info + // for more than one table (I guess, conceivably) + $con->begin(); + $pk = BasePeer::doInsert( $criteria, $con ); + $con->commit(); + } catch (PropelException $e) { + $con->rollback(); + throw $e; + } + + return $pk; + } + + /** + * Method perform an UPDATE on the database, given a Application or Criteria object. + * + * @param mixed $values Criteria or Application object containing data that is used to create the UPDATE statement. + * @param Connection $con The connection to use (specify Connection object to exert more control over transactions). + * @return int The number of affected rows (if supported by underlying database driver). + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doUpdate ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + $selectCriteria = new Criteria( self::DATABASE_NAME ); + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + + + $comparison = $criteria->getComparison( ApplicationPeer::APP_UID ); + $selectCriteria->add( ApplicationPeer::APP_UID, $criteria->remove( ApplicationPeer::APP_UID ), $comparison ); + + } else { // $values is Application object + $criteria = $values->buildCriteria(); // gets full criteria + $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) + } + + // set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + return BasePeer::doUpdate( $selectCriteria, $criteria, $con ); + } + + /** + * Method to DELETE all rows from the APPLICATION table. + * + * @return int The number of affected rows (if supported by underlying database driver). + */ + public static function doDeleteAll ($con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + $affectedRows = 0; // initialize var to track total num of affected rows + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->begin(); + $affectedRows += BasePeer::doDeleteAll( ApplicationPeer::TABLE_NAME, $con ); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollback(); + throw $e; + } + } + + /** + * Method perform a DELETE on the database, given a Application or Criteria object OR a primary key value. + * + * @param mixed $values Criteria or Application object or primary key or array of primary keys + * which is used to create the DELETE statement + * @param Connection $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows + * if supported by native driver or if emulated using Propel. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doDelete ($values, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( ApplicationPeer::DATABASE_NAME ); + } + + if ($values instanceof Criteria) { + $criteria = clone $values; // rename for clarity + } elseif ($values instanceof Application) { + + $criteria = $values->buildPkeyCriteria(); + } else { + // it must be the primary key + $criteria = new Criteria( self::DATABASE_NAME ); + $criteria->add( ApplicationPeer::APP_UID, (array) $values, Criteria::IN ); + } + + // Set the correct dbName + $criteria->setDbName( self::DATABASE_NAME ); + + $affectedRows = 0; // initialize var to track total num of affected rows + + + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->begin(); + + $affectedRows += BasePeer::doDelete( $criteria, $con ); + $con->commit(); + return $affectedRows; + } catch (PropelException $e) { + $con->rollback(); + throw $e; + } + } + + /** + * Validates all modified columns of given Application object. + * If parameter $columns is either a single column name or an array of column names + * than only those columns are validated. + * + * NOTICE: This does not apply to primary or foreign keys for now. + * + * @param Application $obj The object to validate. + * @param mixed $cols Column name or array of column names. + * + * @return mixed TRUE if all columns are valid or the error message of the first invalid column. + */ + public static function doValidate (Application $obj, $cols = null) + { + $columns = array (); + + if ($cols) { + $dbMap = Propel::getDatabaseMap( ApplicationPeer::DATABASE_NAME ); + $tableMap = $dbMap->getTable( ApplicationPeer::TABLE_NAME ); + + if (! is_array( $cols )) { + $cols = array ($cols + ); + } + + foreach ($cols as $colName) { + if ($tableMap->containsColumn( $colName )) { + $get = 'get' . $tableMap->getColumn( $colName )->getPhpName(); + $columns[$colName] = $obj->$get(); + } + } + } else { + + if ($obj->isNew() || $obj->isColumnModified( ApplicationPeer::APP_STATUS )) + $columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus(); + + } + + return BasePeer::doValidate( ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns ); + } + + /** + * Retrieve a single object by pkey. + * + * @param mixed $pk the primary key. + * @param Connection $con the connection to use + * @return Application + */ + public static function retrieveByPK ($pk, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + $criteria = new Criteria( ApplicationPeer::DATABASE_NAME ); + + $criteria->add( ApplicationPeer::APP_UID, $pk ); + + $v = ApplicationPeer::doSelect( $criteria, $con ); + + return ! empty( $v ) > 0 ? $v[0] : null; + } + + /** + * Retrieve multiple objects by pkey. + * + * @param array $pks List of primary keys + * @param Connection $con the connection to use + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function retrieveByPKs ($pks, $con = null) + { + if ($con === null) { + $con = Propel::getConnection( self::DATABASE_NAME ); + } + + $objs = null; + if (empty( $pks )) { + $objs = array (); + } else { + $criteria = new Criteria(); + $criteria->add( ApplicationPeer::APP_UID, $pks, Criteria::IN ); + $objs = ApplicationPeer::doSelect( $criteria, $con ); + } + return $objs; } - return $objs; - } } // BaseApplicationPeer + // static code to register the map builder for this Peer with the main Propel class if (Propel::isInit()) { - // the MapBuilder classes register themselves with Propel during initialization - // so we need to load them here. - try { - BaseApplicationPeer::getMapBuilder(); - } catch (Exception $e) { - Propel::log('Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR); - } + // the MapBuilder classes register themselves with Propel during initialization + // so we need to load them here. + try { + BaseApplicationPeer::getMapBuilder(); + } catch (Exception $e) { + Propel::log( 'Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR ); + } } else { - // even if Propel is not yet initialized, the map builder class can be registered - // now and then it will be loaded when Propel initializes. - require_once 'classes/model/map/ApplicationMapBuilder.php'; - Propel::registerMapBuilder('classes.model.map.ApplicationMapBuilder'); + // even if Propel is not yet initialized, the map builder class can be registered + // now and then it will be loaded when Propel initializes. + require_once 'classes/model/map/ApplicationMapBuilder.php'; + Propel::registerMapBuilder( 'classes.model.map.ApplicationMapBuilder' ); } diff --git a/workflow/engine/classes/class.Installer.php b/workflow/engine/classes/class.Installer.php index d945ecf2c..262b9e1fa 100755 --- a/workflow/engine/classes/class.Installer.php +++ b/workflow/engine/classes/class.Installer.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -31,8 +33,10 @@ // License: LGPL, see LICENSE //////////////////////////////////////////////////// + /** * Processmaker Installer + * * @package workflow.engine.ProcessMaker * @author maborak * @copyright 2008 COLOSA @@ -40,440 +44,372 @@ class Installer { - public $options = Array(); - public $result = Array(); - public $error = Array(); - public $report = Array(); - private $connection_database; - - /** - * construct of insert - * - * @param string $pPRO_UID - * @return void - */ - function __construct() - { - } - - /** - * create_site - * - * @param array $config - * @param boolean $confirmed - * @return void - */ - public function create_site($config = Array(), $confirmed = false) - { - $this->options=G::array_concat(Array( - 'isset'=>false, - 'password' =>G::generate_password(12), - 'path_data' =>@PATH_DATA, - 'path_compiled' =>@PATH_C, - 'name'=>$config['name'], - 'database'=>Array(), - 'admin'=>Array('username'=>'admin','password'=>'admin'), - 'advanced'=>Array( - 'ao_db_wf'=>'wf_'.$config['name'], - 'ao_db_rb'=>'rb_'.$config['name'], - 'ao_db_rp'=>'rp_'.$config['name'], - 'ao_db_drop'=>false - ) - ),$config); - $a = @explode(SYSTEM_HASH,G::decrypt(HASH_INSTALLATION,SYSTEM_HASH)); - $this->options['database']=G::array_concat(Array( - 'username'=>@$a[1], - 'password'=>@$a[2], - 'hostname'=>@$a[0] - ),$this->options['database']); - return ($confirmed===true)?$this->make_site():$this->create_site_test(); - } - - /** - * isset_site - * - * @param string $name Default value "workflow" - * @return string file_exists(PATH_DATA."sites/".$name); - */ - public function isset_site($name = "workflow") - { - return file_exists(PATH_DATA."sites/".$name); - } + public $options = Array (); + public $result = Array (); + public $error = Array (); + public $report = Array (); + private $connection_database; - /** - * create_site_test - * - * @return void - */ - private function create_site_test() - { - $name = (preg_match('/^[\w]+$/i',trim($this->options['name'])))?true:false; - $result=Array( - 'path_data' =>$this->is_dir_writable($this->options['path_data']), - 'path_compiled' =>$this->is_dir_writable($this->options['path_compiled']), - 'database' =>$this->check_connection(), - 'access_level'=>$this->cc_status, - 'isset'=>($this->options['isset']==true)?$this->isset_site($this->options['name']):false, - 'microtime'=>microtime(), - 'workspace'=>$this->options['name'], - 'name'=>array( - 'status'=>$name, - 'message'=>($name)?'PASSED':'Workspace name invalid' - ), - 'admin'=>array( - 'username'=>(preg_match('/^[\w@\.-]+$/i',trim($this->options['admin']['username'])))?true:false, - 'password'=>((trim($this->options['admin']['password'])=='')?false:true) - ) - ); - $result['name']['message'] = ($result['isset'])?'Workspace already exist':$result['name']['message']; - $result['name']['status'] = ($result['isset'])?false:$result['name']['status']; - //print_r($result); - return Array( - 'created'=>G::var_compare( - true, - $result['path_data'], - $result['database']['connection'], - $result['name']['status'], - $result['database']['version'], - $result['database']['ao']['ao_db_wf']['status'], - $result['database']['ao']['ao_db_rb']['status'], - $result['database']['ao']['ao_db_rp']['status'], - $result['admin']['username'], - (($result['isset'])?false:true), - $result['admin']['password']), - 'result'=>$result - ); - } - - /** - * make_site - * - * @return array $test - */ - private function make_site() - { - $test = $this->create_site_test(); - - if($test["created"] == true || $this->options["advanced"]["ao_db_drop"] == true) + /** + * construct of insert + * + * @param string $pPRO_UID + * @return void + */ + function __construct () { - /* Check if the hostname is local (localhost or 127.0.0.1) */ - $islocal = (strcmp(substr($this->options['database']['hostname'], 0, strlen('localhost')),'localhost')===0) || - (strcmp(substr($this->options['database']['hostname'], 0, strlen('127.0.0.1')),'127.0.0.1')===0); - - $this->wf_site_name = $wf = $this->options['advanced']['ao_db_wf']; - - $this->rbac_site_name = $rb = $this->options['advanced']['ao_db_rb']; - $this->report_site_name = $rp = $this->options['advanced']['ao_db_rp']; - - $schema = "schema.sql"; - $values = "insert.sql"; - - if($this->options['advanced']['ao_db_drop']===true) { - //Delete workspace directory if exists - - //Drop databases - $this->run_query("DROP DATABASE IF EXISTS ".$wf, "Drop database $wf"); - $this->run_query("DROP DATABASE IF EXISTS ".$rb, "Drop database $rb"); - $this->run_query("DROP DATABASE IF EXISTS ".$rp, "Drop database $rp"); - } - - $this->run_query("CREATE DATABASE IF NOT EXISTS ".$wf." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", - "Create database $wf"); - $this->run_query("CREATE DATABASE IF NOT EXISTS ".$rb." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", - "Create database $rb"); - $this->run_query("CREATE DATABASE IF NOT EXISTS ".$rp." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", - "Create database $rp"); - - if($this->cc_status==1) { - $host = ($islocal) ? "localhost" : "%"; - $this->run_query("GRANT ALL PRIVILEGES ON `$wf`.* TO $wf@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", - "Grant privileges for user $wf on database $wf"); - $this->run_query("GRANT ALL PRIVILEGES ON `$rb`.* TO $rb@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", - "Grant privileges for user $rb on database $rb"); - $this->run_query("GRANT ALL PRIVILEGES ON `$rp`.* TO $rp@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", - "Grant privileges for user $rp on database $rp"); - } - - /* Dump schema workflow && data */ - - $this->log("Import database schema:\n"); - $myPortA = explode(":",$this->options['database']['hostname']); - if(count($myPortA)<2) { - $myPortA[1]="3306"; - } - $myPort = $myPortA[1]; - $this->options['database']['hostname'] = $myPortA[0]; - - mysql_select_db($wf,$this->connection_database); - $pws = PATH_WORKFLOW_MYSQL_DATA.$schema; - $qws = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA.$schema,$this->connection_database); - $this->log($qws, isset($qws['errors'])); - $qwv = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA.$values,$this->connection_database); - $this->log($qwv, isset($qwv['errors'])); - - - /* Dump schema rbac && data */ - $pws = PATH_RBAC_MYSQL_DATA.$schema; - mysql_select_db($rb,$this->connection_database); - $qrs = $this->query_sql_file(PATH_RBAC_MYSQL_DATA.$schema,$this->connection_database); - $this->log($qrs, isset($qrs['errors'])); - $qrv = $this->query_sql_file(PATH_RBAC_MYSQL_DATA.$values,$this->connection_database); - $this->log($qrv, isset($qrv['errors'])); - - mysql_select_db($wf,$this->connection_database); - - require_once("propel/Propel.php"); - require_once('classes/model/AppCacheView.php'); - - $appCache = new AppCacheView(); - $appCache->setPathToAppCacheFiles ( PATH_METHODS . 'setup/setupSchemas/' ); - $triggers = $appCache->getTriggers("en"); - $this->log("Create 'cases list cache' triggers"); - foreach ($triggers as $triggerName => $trigger) { - $this->run_query($trigger, "-> Trigger $triggerName"); - } - - $path_site = $this->options['path_data']."/sites/".$this->options['name']."/"; - $db_file = $path_site."db.php"; - @mkdir($path_site,0777,true); - @mkdir($path_site."files/",0777,true); - @mkdir($path_site."mailTemplates/",0777,true); - @mkdir($path_site."public/",0777,true); - @mkdir($path_site."reports/",0777,true); - @mkdir($path_site."xmlForms",0777,true); - - $db_text = "options['database']['hostname'] . ":".$myPort."' );\n" . - "define ('DB_NAME', '" . $wf. "' );\n" . - "define ('DB_USER', '" . (($this->cc_status==1)?$wf:$this->options['database']['username']). "' );\n" . - "define ('DB_PASS', '" . (($this->cc_status==1)?$this->options['password']:$this->options['database']['password']). "' );\n" . - "define ('DB_RBAC_HOST', '". $this->options['database']['hostname'] .":".$myPort."' );\n" . - "define ('DB_RBAC_NAME', '". $rb . "' );\n" . - "define ('DB_RBAC_USER', '".(($this->cc_status==1)?$rb:$this->options['database']['username']) . "' );\n" . - "define ('DB_RBAC_PASS', '". (($this->cc_status==1)?$this->options['password']:$this->options['database']['password']) . "' );\n" . - "define ('DB_REPORT_HOST', '". $this->options['database']['hostname'] .":".$myPort."' );\n" . - "define ('DB_REPORT_NAME', '". $rp . "' );\n" . - "define ('DB_REPORT_USER', '".(($this->cc_status==1)?$rp:$this->options['database']['username']) . "' );\n" . - "define ('DB_REPORT_PASS', '". (($this->cc_status==1)?$this->options['password']:$this->options['database']['password']) . "' );\n" . - "?>"; - $fp = @fopen($db_file, "w"); - $this->log("Create: ".$db_file." => ".((!$fp)?$fp:"OK")."\n", $fp === FALSE); - $ff = @fputs( $fp, $db_text, strlen($db_text)); - $this->log("Write: ".$db_file." => ".((!$ff)?$ff:"OK")."\n", $ff === FALSE); - - fclose( $fp ); - $this->set_admin(); } - return $test; - } - - /** - * set_admin - * - * @return void - */ - public function set_admin() - { - mysql_select_db($this->wf_site_name,$this->connection_database); - // The mysql_escape_string function has been DEPRECATED as of PHP 5.3.0. - // $this->run_query('UPDATE USERS SET USR_USERNAME = \''.mysql_escape_string($this->options['admin']['username']).'\', `USR_PASSWORD` = \''.md5($this->options['admin']['password']).'\' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', - // "Add 'admin' user in ProcessMaker (wf)"); - $this->run_query('UPDATE USERS SET USR_USERNAME = \'' . mysql_real_escape_string($this->options['admin']['username']) . '\', ' . - ' `USR_PASSWORD` = \'' . md5($this->options['admin']['password']) . '\' ' . - ' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', - "Add 'admin' user in ProcessMaker (wf)"); - mysql_select_db($this->rbac_site_name,$this->connection_database); - // The mysql_escape_string function has been DEPRECATED as of PHP 5.3.0. - // $this->run_query('UPDATE USERS SET USR_USERNAME = \''.mysql_escape_string($this->options['admin']['username']).'\', `USR_PASSWORD` = \''.md5($this->options['admin']['password']).'\' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', - // "Add 'admin' user in ProcessMaker (rb)"); - $this->run_query('UPDATE USERS SET USR_USERNAME = \'' . mysql_real_escape_string($this->options['admin']['username']) . '\', ' . - ' `USR_PASSWORD` = \'' . md5($this->options['admin']['password']) . '\' ' . - ' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', - "Add 'admin' user in ProcessMaker (rb)"); - } - /** - * Run a mysql query on the current database and take care of logging and - * error handling. - * - * @param string $query SQL command - * @param string $description Description to log instead of $query - */ - private function run_query($query, $description = NULL) { - $result = @mysql_query($query, $this->connection_database); - $error = ($result) ? false : mysql_error(); - $this->log(($description ? $description : $query) . " => " . (($error) ? $error : "OK") . "\n", - $error); - } - - /** - * query_sql_file - * - * @param string $file - * @param string $connection - * @return array $report - */ - public function query_sql_file($file, $connection) - { - $lines = file($file); - $previous = NULL; - $errors = ''; - @mysql_query("SET NAMES 'utf8';"); - foreach ($lines as $j => $line) { - $line = trim($line); // Remove comments from the script - - if (strpos($line, "--") === 0) { - $line = substr($line, 0, strpos($line, "--")); - } - - if (empty($line)) { - continue; - } - - if (strpos($line, "#") === 0) { - $line = substr($line, 0, strpos($line, "#")); - } - - if (empty($line)) { - continue; - } - - // Concatenate the previous line, if any, with the current - if ($previous) { - $line = $previous . " " . $line; - } - $previous = NULL; - - // If the current line doesnt end with ; then put this line together - // with the next one, thus supporting multi-line statements. - if (strrpos($line, ";") != strlen($line) - 1) { - $previous = $line; - continue; - } - - $line = substr($line, 0, strrpos($line, ";")); - @mysql_query($line, $connection); - } - } - - /** - * check_path - * - * @return void - * @todo Empty function - */ - private function check_path() - { - - } - - /** - * function find_root_path - * - * @param string $path - * @return string $path - */ - private function find_root_path($path) - { - $i = 0; //prevent loop inifinity - while(!is_dir($path) && ($path = dirname($path)) && ((strlen($path)>1) && $i<10)) { - $i++; + /** + * create_site + * + * @param array $config + * @param boolean $confirmed + * @return void + */ + public function create_site ($config = Array(), $confirmed = false) + { + $this->options = G::array_concat( Array ('isset' => false,'password' => G::generate_password( 12 ),'path_data' => @PATH_DATA,'path_compiled' => @PATH_C,'name' => $config['name'],'database' => Array (),'admin' => Array ('username' => 'admin','password' => 'admin' + ),'advanced' => Array ('ao_db_wf' => 'wf_' . $config['name'],'ao_db_rb' => 'rb_' . $config['name'],'ao_db_rp' => 'rp_' . $config['name'],'ao_db_drop' => false + ) + ), $config ); + $a = @explode( SYSTEM_HASH, G::decrypt( HASH_INSTALLATION, SYSTEM_HASH ) ); + $this->options['database'] = G::array_concat( Array ('username' => @$a[1],'password' => @$a[2],'hostname' => @$a[0] + ), $this->options['database'] ); + return ($confirmed === true) ? $this->make_site() : $this->create_site_test(); } - return $path; - } - - /** - * file_permisions - * - * @param string $file - * @param integer $def default value 777 - * @return integer $def - */ - public function file_permisions($file, $def = 777) - { - if ( PHP_OS == 'WINNT' ) - return $def; - else - return (int)substr(sprintf('%o',@fileperms($file)),-4); - } - /** - * is_dir_writable - * - * @param string $dir default value empty - * @return string $path - */ - public function is_dir_writable($dir = '') - { - if (PHP_OS=='WINNT') { - $dir = $this->find_root_path($dir); - return file_exists ( $dir ); + /** + * isset_site + * + * @param string $name Default value "workflow" + * @return string file_exists(PATH_DATA."sites/".$name); + */ + public function isset_site ($name = "workflow") + { + return file_exists( PATH_DATA . "sites/" . $name ); } - else { - $dir = $this->find_root_path($dir); - return (is_writable($dir) && is_readable($dir)); - } - } - /** - * getDirectoryFiles - * - * @param string $dir default value empty - * @return string $path - */ - public function getDirectoryFiles($dir,$extension){ - $filesArray=array(); - if (file_exists($dir)) { - if ($handle = opendir($dir)) { - while (false !== ($file = readdir($handle))) { - $fileParts=explode(".",$file); - if($fileParts[count($fileParts)-1]==$extension) { - $filesArray[]=$file; - } - } - closedir($handle); - } + /** + * create_site_test + * + * @return void + */ + private function create_site_test () + { + $name = (preg_match( '/^[\w]+$/i', trim( $this->options['name'] ) )) ? true : false; + $result = Array ('path_data' => $this->is_dir_writable( $this->options['path_data'] ),'path_compiled' => $this->is_dir_writable( $this->options['path_compiled'] ),'database' => $this->check_connection(),'access_level' => $this->cc_status,'isset' => ($this->options['isset'] == true) ? $this->isset_site( $this->options['name'] ) : false,'microtime' => microtime(),'workspace' => $this->options['name'],'name' => array ('status' => $name,'message' => ($name) ? 'PASSED' : 'Workspace name invalid' + ),'admin' => array ('username' => (preg_match( '/^[\w@\.-]+$/i', trim( $this->options['admin']['username'] ) )) ? true : false,'password' => ((trim( $this->options['admin']['password'] ) == '') ? false : true) + ) + ); + $result['name']['message'] = ($result['isset']) ? 'Workspace already exist' : $result['name']['message']; + $result['name']['status'] = ($result['isset']) ? false : $result['name']['status']; + //print_r($result); + return Array ('created' => G::var_compare( true, $result['path_data'], $result['database']['connection'], $result['name']['status'], $result['database']['version'], $result['database']['ao']['ao_db_wf']['status'], $result['database']['ao']['ao_db_rb']['status'], $result['database']['ao']['ao_db_rp']['status'], $result['admin']['username'], (($result['isset']) ? false : true), $result['admin']['password'] ),'result' => $result + ); } - return $filesArray; - } - /** - * check_db_empty - * - * @param string $dbName - * @return boolean true or false - */ - public function check_db_empty($dbName) - { - $a = @mysql_select_db($dbName,$this->connection_database); - if(!$a) { - return true; + /** + * make_site + * + * @return array $test + */ + private function make_site () + { + $test = $this->create_site_test(); + + if ($test["created"] == true || $this->options["advanced"]["ao_db_drop"] == true) { + /* Check if the hostname is local (localhost or 127.0.0.1) */ + $islocal = (strcmp( substr( $this->options['database']['hostname'], 0, strlen( 'localhost' ) ), 'localhost' ) === 0) || (strcmp( substr( $this->options['database']['hostname'], 0, strlen( '127.0.0.1' ) ), '127.0.0.1' ) === 0); + + $this->wf_site_name = $wf = $this->options['advanced']['ao_db_wf']; + + $this->rbac_site_name = $rb = $this->options['advanced']['ao_db_rb']; + $this->report_site_name = $rp = $this->options['advanced']['ao_db_rp']; + + $schema = "schema.sql"; + $values = "insert.sql"; + + if ($this->options['advanced']['ao_db_drop'] === true) { + //Delete workspace directory if exists + + + //Drop databases + $this->run_query( "DROP DATABASE IF EXISTS " . $wf, "Drop database $wf" ); + $this->run_query( "DROP DATABASE IF EXISTS " . $rb, "Drop database $rb" ); + $this->run_query( "DROP DATABASE IF EXISTS " . $rp, "Drop database $rp" ); + } + + $this->run_query( "CREATE DATABASE IF NOT EXISTS " . $wf . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", "Create database $wf" ); + $this->run_query( "CREATE DATABASE IF NOT EXISTS " . $rb . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", "Create database $rb" ); + $this->run_query( "CREATE DATABASE IF NOT EXISTS " . $rp . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", "Create database $rp" ); + + if ($this->cc_status == 1) { + $host = ($islocal) ? "localhost" : "%"; + $this->run_query( "GRANT ALL PRIVILEGES ON `$wf`.* TO $wf@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", "Grant privileges for user $wf on database $wf" ); + $this->run_query( "GRANT ALL PRIVILEGES ON `$rb`.* TO $rb@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", "Grant privileges for user $rb on database $rb" ); + $this->run_query( "GRANT ALL PRIVILEGES ON `$rp`.* TO $rp@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", "Grant privileges for user $rp on database $rp" ); + } + + /* Dump schema workflow && data */ + + $this->log( "Import database schema:\n" ); + $myPortA = explode( ":", $this->options['database']['hostname'] ); + if (count( $myPortA ) < 2) { + $myPortA[1] = "3306"; + } + $myPort = $myPortA[1]; + $this->options['database']['hostname'] = $myPortA[0]; + + mysql_select_db( $wf, $this->connection_database ); + $pws = PATH_WORKFLOW_MYSQL_DATA . $schema; + $qws = $this->query_sql_file( PATH_WORKFLOW_MYSQL_DATA . $schema, $this->connection_database ); + $this->log( $qws, isset( $qws['errors'] ) ); + $qwv = $this->query_sql_file( PATH_WORKFLOW_MYSQL_DATA . $values, $this->connection_database ); + $this->log( $qwv, isset( $qwv['errors'] ) ); + + /* Dump schema rbac && data */ + $pws = PATH_RBAC_MYSQL_DATA . $schema; + mysql_select_db( $rb, $this->connection_database ); + $qrs = $this->query_sql_file( PATH_RBAC_MYSQL_DATA . $schema, $this->connection_database ); + $this->log( $qrs, isset( $qrs['errors'] ) ); + $qrv = $this->query_sql_file( PATH_RBAC_MYSQL_DATA . $values, $this->connection_database ); + $this->log( $qrv, isset( $qrv['errors'] ) ); + + mysql_select_db( $wf, $this->connection_database ); + + require_once ("propel/Propel.php"); + require_once ('classes/model/AppCacheView.php'); + + $appCache = new AppCacheView(); + $appCache->setPathToAppCacheFiles( PATH_METHODS . 'setup/setupSchemas/' ); + $triggers = $appCache->getTriggers( "en" ); + $this->log( "Create 'cases list cache' triggers" ); + foreach ($triggers as $triggerName => $trigger) { + $this->run_query( $trigger, "-> Trigger $triggerName" ); + } + + $path_site = $this->options['path_data'] . "/sites/" . $this->options['name'] . "/"; + $db_file = $path_site . "db.php"; + @mkdir( $path_site, 0777, true ); + @mkdir( $path_site . "files/", 0777, true ); + @mkdir( $path_site . "mailTemplates/", 0777, true ); + @mkdir( $path_site . "public/", 0777, true ); + @mkdir( $path_site . "reports/", 0777, true ); + @mkdir( $path_site . "xmlForms", 0777, true ); + + $db_text = "options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_NAME', '" . $wf . "' );\n" . "define ('DB_USER', '" . (($this->cc_status == 1) ? $wf : $this->options['database']['username']) . "' );\n" . "define ('DB_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_RBAC_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_RBAC_NAME', '" . $rb . "' );\n" . "define ('DB_RBAC_USER', '" . (($this->cc_status == 1) ? $rb : $this->options['database']['username']) . "' );\n" . "define ('DB_RBAC_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_REPORT_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_REPORT_NAME', '" . $rp . "' );\n" . "define ('DB_REPORT_USER', '" . (($this->cc_status == 1) ? $rp : $this->options['database']['username']) . "' );\n" . "define ('DB_REPORT_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "?>"; + $fp = @fopen( $db_file, "w" ); + $this->log( "Create: " . $db_file . " => " . ((! $fp) ? $fp : "OK") . "\n", $fp === FALSE ); + $ff = @fputs( $fp, $db_text, strlen( $db_text ) ); + $this->log( "Write: " . $db_file . " => " . ((! $ff) ? $ff : "OK") . "\n", $ff === FALSE ); + + fclose( $fp ); + $this->set_admin(); + } + return $test; } - $q = @mysql_query('SHOW TABLES',$this->connection_database); - return (@mysql_num_rows($q)>0)?false:true; - } - - /** - * check_db - * - * @param string $dbName - * @return Array Array('status' => true or false,'message' => string) - */ - public function check_db($dbName) - { - if(!$this->connection_database) { - //erik: new verification if the mysql extension is enabled - $error = class_exists('mysql_error') ? mysql_error() : 'Mysql Module for PHP is not enabled!'; - return Array('status' => false, 'message' => $error); + + /** + * set_admin + * + * @return void + */ + public function set_admin () + { + mysql_select_db( $this->wf_site_name, $this->connection_database ); + // The mysql_escape_string function has been DEPRECATED as of PHP 5.3.0. + // $this->run_query('UPDATE USERS SET USR_USERNAME = \''.mysql_escape_string($this->options['admin']['username']).'\', `USR_PASSWORD` = \''.md5($this->options['admin']['password']).'\' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', + // "Add 'admin' user in ProcessMaker (wf)"); + $this->run_query( 'UPDATE USERS SET USR_USERNAME = \'' . mysql_real_escape_string( $this->options['admin']['username'] ) . '\', ' . ' `USR_PASSWORD` = \'' . md5( $this->options['admin']['password'] ) . '\' ' . ' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', "Add 'admin' user in ProcessMaker (wf)" ); + mysql_select_db( $this->rbac_site_name, $this->connection_database ); + // The mysql_escape_string function has been DEPRECATED as of PHP 5.3.0. + // $this->run_query('UPDATE USERS SET USR_USERNAME = \''.mysql_escape_string($this->options['admin']['username']).'\', `USR_PASSWORD` = \''.md5($this->options['admin']['password']).'\' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', + // "Add 'admin' user in ProcessMaker (rb)"); + $this->run_query( 'UPDATE USERS SET USR_USERNAME = \'' . mysql_real_escape_string( $this->options['admin']['username'] ) . '\', ' . ' `USR_PASSWORD` = \'' . md5( $this->options['admin']['password'] ) . '\' ' . ' WHERE `USR_UID` = \'00000000000000000000000000000001\' LIMIT 1', "Add 'admin' user in ProcessMaker (rb)" ); } - else { - if(!mysql_select_db($dbName,$this->connection_database) && $this->cc_status!=1) { - return Array('status' => false, 'message' => mysql_error()); - } - else { -/* var_dump($this->options['advanced']['ao_db_drop'],$this->cc_status,$this->check_db_empty($dbName)); + + /** + * Run a mysql query on the current database and take care of logging and + * error handling. + * + * @param string $query SQL command + * @param string $description Description to log instead of $query + */ + private function run_query ($query, $description = NULL) + { + $result = @mysql_query( $query, $this->connection_database ); + $error = ($result) ? false : mysql_error(); + $this->log( ($description ? $description : $query) . " => " . (($error) ? $error : "OK") . "\n", $error ); + } + + /** + * query_sql_file + * + * @param string $file + * @param string $connection + * @return array $report + */ + public function query_sql_file ($file, $connection) + { + $lines = file( $file ); + $previous = NULL; + $errors = ''; + @mysql_query( "SET NAMES 'utf8';" ); + foreach ($lines as $j => $line) { + $line = trim( $line ); // Remove comments from the script + + + if (strpos( $line, "--" ) === 0) { + $line = substr( $line, 0, strpos( $line, "--" ) ); + } + + if (empty( $line )) { + continue; + } + + if (strpos( $line, "#" ) === 0) { + $line = substr( $line, 0, strpos( $line, "#" ) ); + } + + if (empty( $line )) { + continue; + } + + // Concatenate the previous line, if any, with the current + if ($previous) { + $line = $previous . " " . $line; + } + $previous = NULL; + + // If the current line doesnt end with ; then put this line together + // with the next one, thus supporting multi-line statements. + if (strrpos( $line, ";" ) != strlen( $line ) - 1) { + $previous = $line; + continue; + } + + $line = substr( $line, 0, strrpos( $line, ";" ) ); + @mysql_query( $line, $connection ); + } + } + + /** + * check_path + * + * @return void + * @todo Empty function + */ + private function check_path () + { + + } + + /** + * function find_root_path + * + * @param string $path + * @return string $path + */ + private function find_root_path ($path) + { + $i = 0; //prevent loop inifinity + while (! is_dir( $path ) && ($path = dirname( $path )) && ((strlen( $path ) > 1) && $i < 10)) { + $i ++; + } + return $path; + } + + /** + * file_permisions + * + * @param string $file + * @param integer $def default value 777 + * @return integer $def + */ + public function file_permisions ($file, $def = 777) + { + if (PHP_OS == 'WINNT') + return $def; + else + return (int) substr( sprintf( '%o', @fileperms( $file ) ), - 4 ); + } + + /** + * is_dir_writable + * + * @param string $dir default value empty + * @return string $path + */ + public function is_dir_writable ($dir = '') + { + if (PHP_OS == 'WINNT') { + $dir = $this->find_root_path( $dir ); + return file_exists( $dir ); + } else { + $dir = $this->find_root_path( $dir ); + return (is_writable( $dir ) && is_readable( $dir )); + } + } + + /** + * getDirectoryFiles + * + * @param string $dir default value empty + * @return string $path + */ + public function getDirectoryFiles ($dir, $extension) + { + $filesArray = array (); + if (file_exists( $dir )) { + if ($handle = opendir( $dir )) { + while (false !== ($file = readdir( $handle ))) { + $fileParts = explode( ".", $file ); + if ($fileParts[count( $fileParts ) - 1] == $extension) { + $filesArray[] = $file; + } + } + closedir( $handle ); + } + } + return $filesArray; + } + + /** + * check_db_empty + * + * @param string $dbName + * @return boolean true or false + */ + public function check_db_empty ($dbName) + { + $a = @mysql_select_db( $dbName, $this->connection_database ); + if (! $a) { + return true; + } + $q = @mysql_query( 'SHOW TABLES', $this->connection_database ); + return (@mysql_num_rows( $q ) > 0) ? false : true; + } + + /** + * check_db + * + * @param string $dbName + * @return Array Array('status' => true or false,'message' => string) + */ + public function check_db ($dbName) + { + if (! $this->connection_database) { + //erik: new verification if the mysql extension is enabled + $error = class_exists( 'mysql_error' ) ? mysql_error() : 'Mysql Module for PHP is not enabled!'; + return Array ('status' => false,'message' => $error + ); + } else { + if (! mysql_select_db( $dbName, $this->connection_database ) && $this->cc_status != 1) { + return Array ('status' => false,'message' => mysql_error() + ); + } else { + /* var_dump($this->options['advanced']['ao_db_drop'],$this->cc_status,$this->check_db_empty($dbName)); if(($this->options['advanced']['ao_db_drop']===false && $this->cc_status!=1 && !$this->check_db_empty($dbName)) ) { return Array('status'=>false,'message'=>'Database is not empty'); @@ -482,107 +418,91 @@ class Installer { return Array('status'=>true,'message'=>'OK'); }*/ - if($this->options['advanced']['ao_db_drop']===true || $this->check_db_empty($dbName)) { - return Array('status' => true, 'message' => 'PASSED'); + if ($this->options['advanced']['ao_db_drop'] === true || $this->check_db_empty( $dbName )) { + return Array ('status' => true,'message' => 'PASSED' + ); + } else { + return Array ('status' => false,'message' => 'Database is not empty' + ); + } + } } - else { - return Array('status' => false, 'message' => 'Database is not empty'); - } - } } - } - - /** - * check_connection - * - * @return Array $rt - */ - private function check_connection() - { - if(!function_exists("mysql_connect")) { - $this->cc_status = 0; - $rt = Array( - 'connection' => false, - 'grant' => 0, - 'version' => false, - 'message' => "ERROR: Mysql Module for PHP is not enabled, try install php-mysql package.", - 'ao'=>Array( - 'ao_db_wf' => false, - 'ao_db_rb' => false, - 'ao_db_rp' => false - ) - ); - } - else { - $this->connection_database = @mysql_connect($this->options['database']['hostname'],$this->options['database']['username'],$this->options['database']['password']); - $rt = Array( - 'version' => false, - 'ao'=>Array( - 'ao_db_wf' => false, - 'ao_db_rb' => false, - 'ao_db_rp' => false + + /** + * check_connection + * + * @return Array $rt + */ + private function check_connection () + { + if (! function_exists( "mysql_connect" )) { + $this->cc_status = 0; + $rt = Array ('connection' => false,'grant' => 0,'version' => false,'message' => "ERROR: Mysql Module for PHP is not enabled, try install php-mysql package.",'ao' => Array ('ao_db_wf' => false,'ao_db_rb' => false,'ao_db_rp' => false ) - ); - if(!$this->connection_database) { - $this->cc_status = 0; - $rt['connection'] = false; - $rt['grant'] = 0; - $rt['message'] = "Mysql error: ".mysql_error(); - } - else { - preg_match('@[0-9]+\.[0-9]+\.[0-9]+@',mysql_get_server_info($this->connection_database),$version); - $rt['version'] = version_compare(@$version[0],"4.1.0",">="); - $rt['connection'] = true; + ); + } else { + $this->connection_database = @mysql_connect( $this->options['database']['hostname'], $this->options['database']['username'], $this->options['database']['password'] ); + $rt = Array ('version' => false,'ao' => Array ('ao_db_wf' => false,'ao_db_rb' => false,'ao_db_rp' => false + ) + ); + if (! $this->connection_database) { + $this->cc_status = 0; + $rt['connection'] = false; + $rt['grant'] = 0; + $rt['message'] = "Mysql error: " . mysql_error(); + } else { + preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', mysql_get_server_info( $this->connection_database ), $version ); + $rt['version'] = version_compare( @$version[0], "4.1.0", ">=" ); + $rt['connection'] = true; - $dbNameTest = "PROCESSMAKERTESTDC"; - $db = @mysql_query("CREATE DATABASE ".$dbNameTest,$this->connection_database); - if(!$db) { - $this->cc_status = 3; - $rt['grant'] = 3; - //$rt['message'] = "Db GRANTS error: ".mysql_error(); - $rt['message'] = "Successful connection"; + $dbNameTest = "PROCESSMAKERTESTDC"; + $db = @mysql_query( "CREATE DATABASE " . $dbNameTest, $this->connection_database ); + if (! $db) { + $this->cc_status = 3; + $rt['grant'] = 3; + //$rt['message'] = "Db GRANTS error: ".mysql_error(); + $rt['message'] = "Successful connection"; + } else { + + //@mysql_drop_db("processmaker_testGA"); + $usrTest = "wfrbtest"; + $chkG = "GRANT ALL PRIVILEGES ON `" . $dbNameTest . "`.* TO " . $usrTest . "@'%' IDENTIFIED BY 'sample' WITH GRANT OPTION"; + $ch = @mysql_query( $chkG, $this->connection_database ); + if (! $ch) { + $this->cc_status = 2; + $rt['grant'] = 2; + //$rt['message'] = "USER PRIVILEGES ERROR"; + $rt['message'] = "Successful connection"; + } else { + $this->cc_status = 1; + @mysql_query( "DROP USER " . $usrTest . "@'%'", $this->connection_database ); + $rt['grant'] = 1; + $rt['message'] = "Successful connection"; + } + @mysql_query( "DROP DATABASE " . $dbNameTest, $this->connection_database ); + + } + // var_dump($wf,$rb,$rp); + } } - else { - - //@mysql_drop_db("processmaker_testGA"); - $usrTest = "wfrbtest"; - $chkG = "GRANT ALL PRIVILEGES ON `".$dbNameTest."`.* TO ".$usrTest."@'%' IDENTIFIED BY 'sample' WITH GRANT OPTION"; - $ch = @mysql_query($chkG,$this->connection_database); - if(!$ch) { - $this->cc_status = 2; - $rt['grant'] = 2; - //$rt['message'] = "USER PRIVILEGES ERROR"; - $rt['message'] = "Successful connection"; - } - else { - $this->cc_status = 1; - @mysql_query("DROP USER ".$usrTest."@'%'",$this->connection_database); - $rt['grant'] = 1; - $rt['message'] = "Successful connection"; - } - @mysql_query("DROP DATABASE ".$dbNameTest,$this->connection_database); - - } -// var_dump($wf,$rb,$rp); - } + $rt['ao']['ao_db_wf'] = $this->check_db( $this->options['advanced']['ao_db_wf'] ); + $rt['ao']['ao_db_rb'] = $this->check_db( $this->options['advanced']['ao_db_rb'] ); + $rt['ao']['ao_db_rp'] = $this->check_db( $this->options['advanced']['ao_db_rp'] ); + return $rt; + } + + /** + * log + * + * @param string $text + * @return void + */ + public function log ($text, $failed = NULL) + { + array_push( $this->report, $text ); + if ($failed) + throw new Exception( is_string( $text ) ? $text : var_export( $text, true ) ); } - $rt['ao']['ao_db_wf'] = $this->check_db($this->options['advanced']['ao_db_wf']); - $rt['ao']['ao_db_rb'] = $this->check_db($this->options['advanced']['ao_db_rb']); - $rt['ao']['ao_db_rp'] = $this->check_db($this->options['advanced']['ao_db_rp']); - return $rt; - } - - /** - * log - * - * @param string $text - * @return void - */ - public function log($text, $failed = NULL) - { - array_push($this->report,$text); - if ($failed) - throw new Exception(is_string($text) ? $text : var_export($text, true)); - } } ?> diff --git a/workflow/engine/classes/class.archive.php b/workflow/engine/classes/class.archive.php index 57d2b718d..7419ca6c2 100755 --- a/workflow/engine/classes/class.archive.php +++ b/workflow/engine/classes/class.archive.php @@ -1,721 +1,706 @@ options = array ( - 'basedir' => ".", - 'name' => $name, - 'prepend' => "", - 'inmemory' => 0, - 'overwrite' => 0, - 'recurse' => 1, - 'storepaths' => 1, - 'followlinks' => 0, - 'level' => 3, - 'method' => 1, - 'sfx' => "", - 'type' => "", - 'comment' => "" - ); - $this->files = array (); - $this->exclude = array (); - $this->storeonly = array (); - $this->error = array (); - } -/** - * This function gives options to a archive - * @param array $options - * @return void - */ - function set_options($options) - { - foreach ($options as $key => $value) - $this->options[$key] = $value; - if (!empty ($this->options['basedir'])){ - $this->options['basedir'] = str_replace("\\", "/", $this->options['basedir']); - $this->options['basedir'] = preg_replace("/\/+/", "/", $this->options['basedir']); - $this->options['basedir'] = preg_replace("/\/$/", "", $this->options['basedir']); + /** + * This function is the constructor of the class archive + * + * @param string $name + * @return void + * + */ + public function archive ($name) + { + $this->options = array ('basedir' => ".",'name' => $name,'prepend' => "",'inmemory' => 0,'overwrite' => 0,'recurse' => 1,'storepaths' => 1,'followlinks' => 0,'level' => 3,'method' => 1,'sfx' => "",'type' => "",'comment' => "" + ); + $this->files = array (); + $this->exclude = array (); + $this->storeonly = array (); + $this->error = array (); } - if (!empty ($this->options['name'])){ - $this->options['name'] = str_replace("\\", "/", $this->options['name']); - $this->options['name'] = preg_replace("/\/+/", "/", $this->options['name']); - } - if (!empty ($this->options['prepend'])){ - $this->options['prepend'] = str_replace("\\", "/", $this->options['prepend']); - $this->options['prepend'] = preg_replace("/^(\.*\/+)+/", "", $this->options['prepend']); - $this->options['prepend'] = preg_replace("/\/+/", "/", $this->options['prepend']); - $this->options['prepend'] = preg_replace("/\/$/", "", $this->options['prepend']) . "/"; - } - } -/** - * This function is used to create a archive. - * @return boolean - */ - function create_archive() - { - $this->make_list(); - if ($this->options['inmemory'] == 0){ - $pwd = getcwd(); - chdir($this->options['basedir']); - if ($this->options['overwrite'] == 0 && file_exists($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""))){ - $this->error[] = "File {$this->options['name']} already exist."; - chdir($pwd); + /** + * This function gives options to a archive + * + * @param array $options + * @return void + */ + public function set_options ($options) + { + foreach ($options as $key => $value) { + $this->options[$key] = $value; + } + if (! empty( $this->options['basedir'] )) { + $this->options['basedir'] = str_replace( "\\", "/", $this->options['basedir'] ); + $this->options['basedir'] = preg_replace( "/\/+/", "/", $this->options['basedir'] ); + $this->options['basedir'] = preg_replace( "/\/$/", "", $this->options['basedir'] ); + } + if (! empty( $this->options['name'] )) { + $this->options['name'] = str_replace( "\\", "/", $this->options['name'] ); + $this->options['name'] = preg_replace( "/\/+/", "/", $this->options['name'] ); + } + if (! empty( $this->options['prepend'] )) { + $this->options['prepend'] = str_replace( "\\", "/", $this->options['prepend'] ); + $this->options['prepend'] = preg_replace( "/^(\.*\/+)+/", "", $this->options['prepend'] ); + $this->options['prepend'] = preg_replace( "/\/+/", "/", $this->options['prepend'] ); + $this->options['prepend'] = preg_replace( "/\/$/", "", $this->options['prepend'] ) . "/"; + } + } + + /** + * This function is used to create a archive. + * + * @return boolean + */ + public function create_archive () + { + $this->make_list(); + if ($this->options['inmemory'] == 0) { + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + if ($this->options['overwrite'] == 0 && file_exists( $this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : "") )) { + $this->error[] = "File {$this->options['name']} already exist."; + chdir( $pwd ); + return 0; + } else if ($this->archive = @fopen( $this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""), "wb+" )) { + chdir( $pwd ); + } else { + $this->error[] = "Could not open {$this->options['name']} for writing."; + chdir( $pwd ); + return 0; + } + } else + $this->archive = ""; + switch ($this->options['type']) { + case "zip": + if (! $this->create_zip()) { + $this->error[] = "Could not create zip file."; + return 0; + } + break; + case "bzip": + if (! $this->create_tar()) { + $this->error[] = "Could not create tar file."; + return 0; + } + if (! $this->create_bzip()) { + $this->error[] = "Could not create bzip2 file."; + return 0; + } + break; + case "gzip": + if (! $this->create_tar()) { + $this->error[] = "Could not create tar file."; + return 0; + } + if (! $this->create_gzip()) { + $this->error[] = "Could not create gzip file."; + return 0; + } + break; + case "tar": + if (! $this->create_tar()) { + $this->error[] = "Could not create tar file."; + return 0; + } + } + if ($this->options['inmemory'] == 0) { + fclose( $this->archive ); + if ($this->options['type'] == "gzip" || $this->options['type'] == "bzip") { + unlink( $this->options['basedir'] . "/" . $this->options['name'] . ".tmp" ); + } + } + } + + /** + * This function is used for add data to a archive + * + * @param string $data + * @return void + */ + public function add_data ($data) + { + if ($this->options['inmemory'] == 0) { + fwrite( $this->archive, $data ); + } + else { + $this->archive .= $data; + } + } + + /** + * This function make a list + * + * @return void + */ + public function make_list () + { + if (! empty( $this->exclude )) + foreach ($this->files as $key => $value) + foreach ($this->exclude as $current) + if ($value['name'] == $current['name']) + unset( $this->files[$key] ); + if (! empty( $this->storeonly )) + foreach ($this->files as $key => $value) + foreach ($this->storeonly as $current) + if ($value['name'] == $current['name']) + $this->files[$key]['method'] = 0; + unset( $this->exclude, $this->storeonly ); + } + + /** + * Add files a list + * + * @param array $list + * @return void + */ + public function add_files ($list) + { + $temp = $this->list_files( $list ); + foreach ($temp as $current) + $this->files[] = $current; + } + + /** + * This function exclude files of a list + * + * @param array $list + * @return void + */ + public function exclude_files ($list) + { + $temp = $this->list_files( $list ); + foreach ($temp as $current) + $this->exclude[] = $current; + } + + /** + * This function store files + * + * @param array $list + */ + public function store_files ($list) + { + $temp = $this->list_files( $list ); + foreach ($temp as $current) + $this->storeonly[] = $current; + } + + /** + * List files gives a List + * + * @param array $list + * @return array + */ + public function list_files ($list) + { + if (! is_array( $list )) { + $temp = $list; + $list = array ($temp + ); + unset( $temp ); + } + $files = array (); + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + foreach ($list as $current) { + $current = str_replace( "\\", "/", $current ); + $current = preg_replace( "/\/+/", "/", $current ); + $current = preg_replace( "/\/$/", "", $current ); + if (strstr( $current, "*" )) { + $regex = preg_replace( "/([\\\^\$\.\[\]\|\(\)\?\+\{\}\/])/", "\\\\\\1", $current ); + $regex = str_replace( "*", ".*", $regex ); + $dir = strstr( $current, "/" ) ? substr( $current, 0, strrpos( $current, "/" ) ) : "."; + $temp = $this->parse_dir( $dir ); + foreach ($temp as $current2) + if (preg_match( "/^{$regex}$/i", $current2['name'] )) + $files[] = $current2; + unset( $regex, $dir, $temp, $current ); + } else if (@is_dir( $current )) { + $temp = $this->parse_dir( $current ); + foreach ($temp as $file) + $files[] = $file; + unset( $temp, $file ); + } else if (@file_exists( $current )) + $files[] = array ('name' => $current,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $current, "/" )) ? substr( $current, strrpos( $current, "/" ) + 1 ) : $current ),'type' => @is_link( $current ) && $this->options['followlinks'] == 0 ? 2 : 0,'ext' => substr( $current, strrpos( $current, "." ) ),'stat' => stat( $current ) + ); + } + chdir( $pwd ); + unset( $current, $pwd ); + usort( $files, array ("archive","sort_files" + ) ); + return $files; + } + + /** + * This function is for parse a directory name + * + * @param string $dirname + * @return array + */ + public function parse_dir ($dirname) + { + if ($this->options['storepaths'] == 1 && ! preg_match( "/^(\.+\/*)+$/", $dirname )) + $files = array (array ('name' => $dirname,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $dirname, "/" )) ? substr( $dirname, strrpos( $dirname, "/" ) + 1 ) : $dirname ),'type' => 5,'stat' => stat( $dirname ) + ) + ); + else + $files = array (); + $dir = @opendir( $dirname ); + while ($file = @readdir( $dir )) { + $fullname = $dirname . "/" . $file; + if ($file == "." || $file == "..") + continue; + else if (@is_dir( $fullname )) { + if (empty( $this->options['recurse'] )) + continue; + $temp = $this->parse_dir( $fullname ); + foreach ($temp as $file2) + $files[] = $file2; + } else if (@file_exists( $fullname )) + $files[] = array ('name' => $fullname,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $fullname, "/" )) ? substr( $fullname, strrpos( $fullname, "/" ) + 1 ) : $fullname ),'type' => @is_link( $fullname ) && $this->options['followlinks'] == 0 ? 2 : 0,'ext' => substr( $file, strrpos( $file, "." ) ),'stat' => stat( $fullname ) + ); + } + @closedir( $dir ); + return $files; + } + + /** + * This function sort two files + * + * @param array $a + * @param array $b + * @return boolean + */ + public function sort_files ($a, $b) + { + if ($a['type'] != $b['type']) + if ($a['type'] == 5 || $b['type'] == 2) + return - 1; + else if ($a['type'] == 2 || $b['type'] == 5) + return 1; + else if ($a['type'] == 5) + return strcmp( strtolower( $a['name'] ), strtolower( $b['name'] ) ); + else if ($a['ext'] != $b['ext']) + return strcmp( $a['ext'], $b['ext'] ); + else if ($a['stat'][7] != $b['stat'][7]) + return $a['stat'][7] > $b['stat'][7] ? - 1 : 1; + else + return strcmp( strtolower( $a['name'] ), strtolower( $b['name'] ) ); return 0; - } - else if ($this->archive = @fopen($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""), "wb+")) - chdir($pwd); - else{ - $this->error[] = "Could not open {$this->options['name']} for writing."; - chdir($pwd); - return 0; - } } - else - $this->archive = ""; - switch ($this->options['type']){ - case "zip": - if (!$this->create_zip()){ - $this->error[] = "Could not create zip file."; - return 0; - } - break; - case "bzip": - if (!$this->create_tar()){ - $this->error[] = "Could not create tar file."; - return 0; - } - if (!$this->create_bzip()){ - $this->error[] = "Could not create bzip2 file."; - return 0; - } - break; - case "gzip": - if (!$this->create_tar()){ - $this->error[] = "Could not create tar file."; - return 0; - } - if (!$this->create_gzip()){ - $this->error[] = "Could not create gzip file."; - return 0; - } - break; - case "tar": - if (!$this->create_tar()){ - $this->error[] = "Could not create tar file."; - return 0; - } + + /** + * This function download a file + * + * @return void + */ + public function download_file () + { + if ($this->options['inmemory'] == 0) { + $this->error[] = "Can only use download_file() if archive is in memory. Redirect to file otherwise, it is faster."; + return; + } + switch ($this->options['type']) { + case "zip": + header( "Content-Type: application/zip" ); + break; + case "bzip": + header( "Content-Type: application/x-bzip2" ); + break; + case "gzip": + header( "Content-Type: application/x-gzip" ); + break; + case "tar": + header( "Content-Type: application/x-tar" ); + } + $header = "Content-Disposition: attachment; filename=\""; + $header .= strstr( $this->options['name'], "/" ) ? substr( $this->options['name'], strrpos( $this->options['name'], "/" ) + 1 ) : $this->options['name']; + $header .= "\""; + header( $header ); + header( "Content-Length: " . strlen( $this->archive ) ); + header( "Content-Transfer-Encoding: binary" ); + header( "Cache-Control: no-cache, must-revalidate, max-age=60" ); + header( "Expires: Sat, 01 Jan 2000 12:00:00 GMT" ); + print ($this->archive) ; } - if ($this->options['inmemory'] == 0){ - fclose($this->archive); - if ($this->options['type'] == "gzip" || $this->options['type'] == "bzip") - unlink($this->options['basedir'] . "/" . $this->options['name'] . ".tmp"); - } - } - -/** - * This function is used for add data to a archive - * @param string $data - * @return void - */ - function add_data($data) - { - if ($this->options['inmemory'] == 0) - fwrite($this->archive, $data); - else - $this->archive .= $data; - } - - /** - * This function make a list - * @return void - */ - function make_list() - { - if (!empty ($this->exclude)) - foreach ($this->files as $key => $value) - foreach ($this->exclude as $current) - if ($value['name'] == $current['name']) - unset ($this->files[$key]); - if (!empty ($this->storeonly)) - foreach ($this->files as $key => $value) - foreach ($this->storeonly as $current) - if ($value['name'] == $current['name']) - $this->files[$key]['method'] = 0; - unset ($this->exclude, $this->storeonly); - } - -/** - * Add files a list - * @param array $list - * @return void - */ - function add_files($list) - { - $temp = $this->list_files($list); - foreach ($temp as $current) - $this->files[] = $current; - } - - /** - * This function exclude files of a list - * @param array $list - * @return void - */ - function exclude_files($list) - { - $temp = $this->list_files($list); - foreach ($temp as $current) - $this->exclude[] = $current; - } - -/** - * This function store files - * @param array $list - */ - function store_files($list) - { - $temp = $this->list_files($list); - foreach ($temp as $current) - $this->storeonly[] = $current; - } - -/** - * List files gives a List - * @param array $list - * @return array - */ - function list_files($list) - { - if (!is_array ($list)){ - $temp = $list; - $list = array ($temp); - unset ($temp); - } - $files = array (); - $pwd = getcwd(); - chdir($this->options['basedir']); - foreach ($list as $current){ - $current = str_replace("\\", "/", $current); - $current = preg_replace("/\/+/", "/", $current); - $current = preg_replace("/\/$/", "", $current); - if (strstr($current, "*")){ - $regex = preg_replace("/([\\\^\$\.\[\]\|\(\)\?\+\{\}\/])/", "\\\\\\1", $current); - $regex = str_replace("*", ".*", $regex); - $dir = strstr($current, "/") ? substr($current, 0, strrpos($current, "/")) : "."; - $temp = $this->parse_dir($dir); - foreach ($temp as $current2) - if (preg_match("/^{$regex}$/i", $current2['name'])) - $files[] = $current2; - unset ($regex, $dir, $temp, $current); - } - else if (@is_dir($current)){ - $temp = $this->parse_dir($current); - foreach ($temp as $file) - $files[] = $file; - unset ($temp, $file); - } - else if (@file_exists($current)) - $files[] = array ('name' => $current, 'name2' => $this->options['prepend'] . - preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($current, "/")) ? - substr($current, strrpos($current, "/") + 1) : $current), - 'type' => @is_link($current) && $this->options['followlinks'] == 0 ? 2 : 0, - 'ext' => substr($current, strrpos($current, ".")), 'stat' => stat($current)); - } - chdir($pwd); - unset ($current, $pwd); - usort($files, array ("archive", "sort_files")); - return $files; - } - -/** - * This function is for parse a directory name - * @param string $dirname - * @return array - */ - function parse_dir($dirname) - { - if ($this->options['storepaths'] == 1 && !preg_match("/^(\.+\/*)+$/", $dirname)) - $files = array (array ('name' => $dirname, 'name2' => $this->options['prepend'] . - preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($dirname, "/")) ? - substr($dirname, strrpos($dirname, "/") + 1) : $dirname), 'type' => 5, 'stat' => stat($dirname))); - else - $files = array (); - $dir = @opendir($dirname); - while ($file = @readdir($dir)){ - $fullname = $dirname . "/" . $file; - if ($file == "." || $file == "..") - continue; - else if (@is_dir($fullname)){ - if (empty ($this->options['recurse'])) - continue; - $temp = $this->parse_dir($fullname); - foreach ($temp as $file2) - $files[] = $file2; - } - else if (@file_exists($fullname)) - $files[] = array ('name' => $fullname, 'name2' => $this->options['prepend'] . - preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($fullname, "/")) ? - substr($fullname, strrpos($fullname, "/") + 1) : $fullname), - 'type' => @is_link($fullname) && $this->options['followlinks'] == 0 ? 2 : 0, - 'ext' => substr($file, strrpos($file, ".")), 'stat' => stat($fullname)); - } - @closedir($dir); - return $files; - } - - /** - * This function sort two files - * @param array $a - * @param array $b - * @return boolean - */ - function sort_files($a, $b) - { - if ($a['type'] != $b['type']) - if ($a['type'] == 5 || $b['type'] == 2) - return -1; - else if ($a['type'] == 2 || $b['type'] == 5) - return 1; - else if ($a['type'] == 5) - return strcmp(strtolower($a['name']), strtolower($b['name'])); - else if ($a['ext'] != $b['ext']) - return strcmp($a['ext'], $b['ext']); - else if ($a['stat'][7] != $b['stat'][7]) - return $a['stat'][7] > $b['stat'][7] ? -1 : 1; - else - return strcmp(strtolower($a['name']), strtolower($b['name'])); - return 0; - } - - /** - * This function download a file - * @return void - */ - function download_file() - { - if ($this->options['inmemory'] == 0){ - $this->error[] = "Can only use download_file() if archive is in memory. Redirect to file otherwise, it is faster."; - return; - } - switch ($this->options['type']){ - case "zip": - header("Content-Type: application/zip"); - break; - case "bzip": - header("Content-Type: application/x-bzip2"); - break; - case "gzip": - header("Content-Type: application/x-gzip"); - break; - case "tar": - header("Content-Type: application/x-tar"); - } - $header = "Content-Disposition: attachment; filename=\""; - $header .= strstr($this->options['name'], "/") ? substr($this->options['name'], strrpos($this->options['name'], "/") + 1) : $this->options['name']; - $header .= "\""; - header($header); - header("Content-Length: " . strlen($this->archive)); - header("Content-Transfer-Encoding: binary"); - header("Cache-Control: no-cache, must-revalidate, max-age=60"); - header("Expires: Sat, 01 Jan 2000 12:00:00 GMT"); - print($this->archive); - } } /** - * This class is derived from the class archive, is imployed to use files .tar - * @package workflow.engine.classes - * - */ + * This class is derived from the class archive, is imployed to use files . + * tar + * + * @package workflow.engine.classes + * + */ class tar_file extends archive { - /** - * This function is the constructor of the class tar_file - * @param string $name - */ - function tar_file($name) - { - $this->archive($name); - $this->options['type'] = "tar"; - } -/** - * This function create a file .tar - * @return boolean - */ - function create_tar() - { - $pwd = getcwd(); - chdir($this->options['basedir']); - foreach ($this->files as $current){ - if ($current['name'] == $this->options['name']) - continue; - if (strlen($current['name2']) > 99){ - $path = substr($current['name2'], 0, strpos($current['name2'], "/", strlen($current['name2']) - 100) + 1); - $current['name2'] = substr($current['name2'], strlen($path)); - if (strlen($path) > 154 || strlen($current['name2']) > 99){ - $this->error[] = "Could not add {$path}{$current['name2']} to archive because the filename is too long."; - continue; - } - } - $block = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", $current['name2'], sprintf("%07o", - $current['stat'][2]), sprintf("%07o", $current['stat'][4]), sprintf("%07o", $current['stat'][5]), - sprintf("%011o", $current['type'] == 2 ? 0 : $current['stat'][7]), sprintf("%011o", $current['stat'][9]), - " ", $current['type'], $current['type'] == 2 ? @readlink($current['name']) : "", "ustar ", " ", - "Unknown", "Unknown", "", "", !empty ($path) ? $path : "", ""); - $checksum = 0; - for ($i = 0; $i < 512; $i++) - $checksum += ord(substr($block, $i, 1)); - $checksum = pack("a8", sprintf("%07o", $checksum)); - $block = substr_replace($block, $checksum, 148, 8); - if ($current['type'] == 2 || $current['stat'][7] == 0) - $this->add_data($block); - else if ($fp = @fopen($current['name'], "rb")){ - $this->add_data($block); - while ($temp = fread($fp, 1048576)) - $this->add_data($temp); - if ($current['stat'][7] % 512 > 0){ - $temp = ""; - for ($i = 0; $i < 512 - $current['stat'][7] % 512; $i++) - $temp .= "\0"; - $this->add_data($temp); - } - fclose($fp); - } - else - $this->error[] = "Could not open file {$current['name']} for reading. It was not added."; + /** + * This function is the constructor of the class tar_file + * + * @param string $name + */ + public function tar_file ($name) + { + $this->archive( $name ); + $this->options['type'] = "tar"; } - $this->add_data(pack("a1024", "")); - chdir($pwd); - return 1; - } - /** - * This function is used for extract files of the class tar_file - * @return void - */ - function extract_files() - { - $pwd = getcwd(); - chdir($this->options['basedir']); - if ($fp = $this->open_archive()){ - if ($this->options['inmemory'] == 1) - $this->files = array (); - while ($block = fread($fp, 512)){ - $temp = unpack("a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2temp/a32temp/a32temp/a8temp/a8temp/a155prefix/a12temp", $block); - $file = array ( - 'name' => $this->options['basedir'] . '/' . $temp['prefix'] . $temp['name'], - 'stat' => array ( - 2 => $temp['mode'], - 4 => octdec($temp['uid']), - 5 => octdec($temp['gid']), - 7 => octdec($temp['size']), - 9 => octdec($temp['mtime']), - ), - 'checksum' => octdec($temp['checksum']), - 'type' => $temp['type'], - 'magic' => $temp['magic'], - ); - if ($file['checksum'] == 0x00000000) - break; - else if (substr($file['magic'], 0, 5) != "ustar"){ - $this->error[] = "This script does not support extracting this type of tar file."; - break; + /** + * This function create a file . + * tar + * + * @return boolean + */ + public function create_tar () + { + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + foreach ($this->files as $current) { + if ($current['name'] == $this->options['name']) + continue; + if (strlen( $current['name2'] ) > 99) { + $path = substr( $current['name2'], 0, strpos( $current['name2'], "/", strlen( $current['name2'] ) - 100 ) + 1 ); + $current['name2'] = substr( $current['name2'], strlen( $path ) ); + if (strlen( $path ) > 154 || strlen( $current['name2'] ) > 99) { + $this->error[] = "Could not add {$path}{$current['name2']} to archive because the filename is too long."; + continue; + } + } + $block = pack( "a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", $current['name2'], sprintf( "%07o", $current['stat'][2] ), sprintf( "%07o", $current['stat'][4] ), sprintf( "%07o", $current['stat'][5] ), sprintf( "%011o", $current['type'] == 2 ? 0 : $current['stat'][7] ), sprintf( "%011o", $current['stat'][9] ), " ", $current['type'], $current['type'] == 2 ? @readlink( $current['name'] ) : "", "ustar ", " ", "Unknown", "Unknown", "", "", ! empty( $path ) ? $path : "", "" ); + $checksum = 0; + for ($i = 0; $i < 512; $i ++) + $checksum += ord( substr( $block, $i, 1 ) ); + $checksum = pack( "a8", sprintf( "%07o", $checksum ) ); + $block = substr_replace( $block, $checksum, 148, 8 ); + if ($current['type'] == 2 || $current['stat'][7] == 0) + $this->add_data( $block ); + else if ($fp = @fopen( $current['name'], "rb" )) { + $this->add_data( $block ); + while ($temp = fread( $fp, 1048576 )) + $this->add_data( $temp ); + if ($current['stat'][7] % 512 > 0) { + $temp = ""; + for ($i = 0; $i < 512 - $current['stat'][7] % 512; $i ++) + $temp .= "\0"; + $this->add_data( $temp ); + } + fclose( $fp ); + } else + $this->error[] = "Could not open file {$current['name']} for reading. It was not added."; } - $block = substr_replace($block, " ", 148, 8); - $checksum = 0; - for ($i = 0; $i < 512; $i++) - $checksum += ord(substr($block, $i, 1)); - if ($file['checksum'] != $checksum) - $this->error[] = "Could not extract from {$this->options['name']}, it is corrupt."; - if ($this->options['inmemory'] == 1){ - $file['data'] = fread($fp, $file['stat'][7]); - fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512)); - unset ($file['checksum'], $file['magic']); - $this->files[] = $file; - } - else if ($file['type'] == 5){ - if (!is_dir($file['name'])) - //mkdir($file['name'], $file['stat'][2]); - mkdir($file['name'], 0775); - } - else if ($this->options['overwrite'] == 0 && file_exists($file['name'])){ - $this->error[] = "{$file['name']} already exist."; - continue; - } - else if ($file['type'] == 2){ - symlink($temp['symlink'], $file['name']); - //chmod($file['name'], $file['stat'][2]); - } - else if ($new = @fopen($file['name'], "wb")){ - fwrite($new, fread($fp, $file['stat'][7])); - if ((512 - $file['stat'][7] % 512) != 512) { - fread($fp, (512 - $file['stat'][7] % 512)); - } - //fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512)); - fclose($new); - //chmod($file['name'], $file['stat'][2]); - chmod($file['name'], 0777); - $this->files[] = $file['name']; - } - else{ - $this->error[] = "Could not open {$file['name']} for writing."; - continue; - } - //chown($file['name'], $file['stat'][4]); - //chgrp($file['name'], $file['stat'][5]); - @touch($file['name'], $file['stat'][9]); - unset ($file); - } + $this->add_data( pack( "a1024", "" ) ); + chdir( $pwd ); + return 1; } - else - $this->error[] = "Could not open file {$this->options['name']}"; - chdir($pwd); - } -/** - * This function open a archive of the class tar_file - * @return void - */ - function open_archive() - { - return @fopen($this->options['name'], "rb"); - } + /** + * This function is used for extract files of the class tar_file + * + * @return void + */ + public function extract_files () + { + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + if ($fp = $this->open_archive()) { + if ($this->options['inmemory'] == 1) + $this->files = array (); + while ($block = fread( $fp, 512 )) { + $temp = unpack( "a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2temp/a32temp/a32temp/a8temp/a8temp/a155prefix/a12temp", $block ); + $file = array ('name' => $this->options['basedir'] . '/' . $temp['prefix'] . $temp['name'],'stat' => array (2 => $temp['mode'],4 => octdec( $temp['uid'] ),5 => octdec( $temp['gid'] ),7 => octdec( $temp['size'] ),9 => octdec( $temp['mtime'] ) + ),'checksum' => octdec( $temp['checksum'] ),'type' => $temp['type'],'magic' => $temp['magic'] + ); + if ($file['checksum'] == 0x00000000) + break; + else if (substr( $file['magic'], 0, 5 ) != "ustar") { + $this->error[] = "This script does not support extracting this type of tar file."; + break; + } + $block = substr_replace( $block, " ", 148, 8 ); + $checksum = 0; + for ($i = 0; $i < 512; $i ++) + $checksum += ord( substr( $block, $i, 1 ) ); + if ($file['checksum'] != $checksum) + $this->error[] = "Could not extract from {$this->options['name']}, it is corrupt."; + if ($this->options['inmemory'] == 1) { + $file['data'] = fread( $fp, $file['stat'][7] ); + fread( $fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512) ); + unset( $file['checksum'], $file['magic'] ); + $this->files[] = $file; + } else if ($file['type'] == 5) { + if (! is_dir( $file['name'] )) + //mkdir($file['name'], $file['stat'][2]); + mkdir( $file['name'], 0775 ); + } else if ($this->options['overwrite'] == 0 && file_exists( $file['name'] )) { + $this->error[] = "{$file['name']} already exist."; + continue; + } else if ($file['type'] == 2) { + symlink( $temp['symlink'], $file['name'] ); + //chmod($file['name'], $file['stat'][2]); + } else if ($new = @fopen( $file['name'], "wb" )) { + fwrite( $new, fread( $fp, $file['stat'][7] ) ); + if ((512 - $file['stat'][7] % 512) != 512) { + fread( $fp, (512 - $file['stat'][7] % 512) ); + } + //fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512)); + fclose( $new ); + //chmod($file['name'], $file['stat'][2]); + chmod( $file['name'], 0777 ); + $this->files[] = $file['name']; + } else { + $this->error[] = "Could not open {$file['name']} for writing."; + continue; + } + //chown($file['name'], $file['stat'][4]); + //chgrp($file['name'], $file['stat'][5]); + @touch( $file['name'], $file['stat'][9] ); + unset( $file ); + } + } else + $this->error[] = "Could not open file {$this->options['name']}"; + chdir( $pwd ); + } + + /** + * This function open a archive of the class tar_file + * + * @return void + */ + public function open_archive () + { + return @fopen( $this->options['name'], "rb" ); + } } - /** - * This class is derived of the class archive, is employed to use archives .gzip - * @package workflow.engine.classes - * - */ +/** + * This class is derived of the class archive, is employed to use archives . + * gzip + * + * @package workflow.engine.classes + * + */ class gzip_file extends tar_file { - /** - * This function is the constructor of the class gzip_file - * @param string $name - * @return void - */ - function gzip_file($name) - { - $this->tar_file($name); - $this->options['type'] = "gzip"; - } -/** - * This function is employed to create files .gzip - * @return boolean - */ - function create_gzip() - { - if ($this->options['inmemory'] == 0){ - $pwd = getcwd(); - chdir($this->options['basedir']); - if ($fp = gzopen($this->options['name'], "wb{$this->options['level']}")){ - fseek($this->archive, 0); - while ($temp = fread($this->archive, 1048576)) - gzwrite($fp, $temp); - gzclose($fp); - chdir($pwd); - } - else{ - $this->error[] = "Could not open {$this->options['name']} for writing."; - chdir($pwd); - return 0; - } + /** + * This function is the constructor of the class gzip_file + * + * @param string $name + * @return void + */ + public function gzip_file ($name) + { + $this->tar_file( $name ); + $this->options['type'] = "gzip"; } - else - $this->archive = gzencode($this->archive, $this->options['level']); - return 1; - } - /** - * This function open a archive of the class gzip_file - * @return void - */ - function open_archive() - { - return @gzopen($this->options['name'], "rb"); - } + /** + * This function is employed to create files . + * gzip + * + * @return boolean + */ + public function create_gzip () + { + if ($this->options['inmemory'] == 0) { + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + if ($fp = gzopen( $this->options['name'], "wb{$this->options['level']}" )) { + fseek( $this->archive, 0 ); + while ($temp = fread( $this->archive, 1048576 )) + gzwrite( $fp, $temp ); + gzclose( $fp ); + chdir( $pwd ); + } else { + $this->error[] = "Could not open {$this->options['name']} for writing."; + chdir( $pwd ); + return 0; + } + } else + $this->archive = gzencode( $this->archive, $this->options['level'] ); + return 1; + } + + /** + * This function open a archive of the class gzip_file + * + * @return void + */ + public function open_archive () + { + return @gzopen( $this->options['name'], "rb" ); + } } /** + * * * This class is derived from the class archive, is employed to use files .bzip - * @package workflow.engine.classes - * - */ + * + * @package workflow.engine.classes + * + */ class bzip_file extends tar_file { - /** - * This function is the constructor of the class bzip_file - * @param string $name - * @return void - */ - function bzip_file($name) - { - $this->tar_file($name); - $this->options['type'] = "bzip"; - } - /** - * This function is employed to create files .bzip - * @return boolean - */ - function create_bzip() - { - if ($this->options['inmemory'] == 0){ - $pwd = getcwd(); - chdir($this->options['basedir']); - if ($fp = bzopen($this->options['name'], "wb")){ - fseek($this->archive, 0); - while ($temp = fread($this->archive, 1048576)) - bzwrite($fp, $temp); - bzclose($fp); - chdir($pwd); - } - else{ - $this->error[] = "Could not open {$this->options['name']} for writing."; - chdir($pwd); - return 0; - } + /** + * This function is the constructor of the class bzip_file + * + * @param string $name + * @return void + */ + public function bzip_file ($name) + { + $this->tar_file( $name ); + $this->options['type'] = "bzip"; } - else - $this->archive = bzcompress($this->archive, $this->options['level']); - return 1; - } + /** + * This function is employed to create files . + * bzip + * + * @return boolean + */ + public function create_bzip () + { + if ($this->options['inmemory'] == 0) { + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + if ($fp = bzopen( $this->options['name'], "wb" )) { + fseek( $this->archive, 0 ); + while ($temp = fread( $this->archive, 1048576 )) + bzwrite( $fp, $temp ); + bzclose( $fp ); + chdir( $pwd ); + } else { + $this->error[] = "Could not open {$this->options['name']} for writing."; + chdir( $pwd ); + return 0; + } + } else + $this->archive = bzcompress( $this->archive, $this->options['level'] ); -/** - * This function open a archive of the class bzip_file - * @return void - */ - function open_archive() - { - return @bzopen($this->options['name'], "rb"); - } + return 1; + } + + /** + * This function open a archive of the class bzip_file + * + * @return void + */ + public function open_archive () + { + return @bzopen( $this->options['name'], "rb" ); + } } - /** - * This class is derived from the class archive, is imployed to use files .zip - * @package workflow.engine.classes - */ +/** + * This class is derived from the class archive, is imployed to use files . + * zip + * + * @package workflow.engine.classes + */ class zip_file extends archive { - function zip_file($name) - { - $this->archive($name); - $this->options['type'] = "zip"; - } - /** - * This function is used to create archives .zip - * @return boolean - */ - function create_zip() - { - $files = 0; - $offset = 0; - $central = ""; - if (!empty ($this->options['sfx'])) - if ($fp = @fopen($this->options['sfx'], "rb")){ - $temp = fread($fp, filesize($this->options['sfx'])); - fclose($fp); - $this->add_data($temp); - $offset += strlen($temp); - unset ($temp); - } - else - $this->error[] = "Could not open sfx module from {$this->options['sfx']}."; - $pwd = getcwd(); - chdir($this->options['basedir']); - foreach ($this->files as $current){ - if ($current['name'] == $this->options['name']) - continue; - $timedate = explode(" ", date("Y n j G i s", $current['stat'][9])); - $timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) | - ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]); - $block = pack("VvvvV", 0x04034b50, 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate); - if ($current['stat'][7] == 0 && $current['type'] == 5){ - $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000); - $block .= $current['name2'] . "/"; - $this->add_data($block); - $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, - (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, - 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset); - $central .= $current['name2'] . "/"; - $files++; - $offset += (31 + strlen($current['name2'])); - } - else if ($current['stat'][7] == 0){ - $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000); - $block .= $current['name2']; - $this->add_data($block); - $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, - (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, - 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset); - $central .= $current['name2']; - $files++; - $offset += (30 + strlen($current['name2'])); - } - else if ($fp = @fopen($current['name'], "rb")){ - $temp = fread($fp, $current['stat'][7]); - fclose($fp); - $crc32 = crc32($temp); - if (!isset($current['method']) && $this->options['method'] == 1){ - $temp = gzcompress($temp, $this->options['level']); - $size = strlen($temp) - 6; - $temp = substr($temp, 2, $size); - } - else - $size = strlen($temp); - $block .= pack("VVVvv", $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000); - $block .= $current['name2']; - $this->add_data($block); - $this->add_data($temp); - unset ($temp); - $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, - (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, - $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset); - $central .= $current['name2']; - $files++; - $offset += (30 + strlen($current['name2']) + $size); - } - else - $this->error[] = "Could not open file {$current['name']} for reading. It was not added."; + public function zip_file ($name) + { + $this->archive( $name ); + $this->options['type'] = "zip"; } - $this->add_data($central); - $this->add_data(pack("VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen($central), $offset, - !empty ($this->options['comment']) ? strlen($this->options['comment']) : 0x0000)); - if (!empty ($this->options['comment'])) - $this->add_data($this->options['comment']); - chdir($pwd); - return 1; - } -} -?> \ No newline at end of file + + /** + * This function is used to create archives . + * zip + * + * @return boolean + */ + public function create_zip () + { + $files = 0; + $offset = 0; + $central = ""; + if (! empty( $this->options['sfx'] )) + if ($fp = @fopen( $this->options['sfx'], "rb" )) { + $temp = fread( $fp, filesize( $this->options['sfx'] ) ); + fclose( $fp ); + $this->add_data( $temp ); + $offset += strlen( $temp ); + unset( $temp ); + } else + $this->error[] = "Could not open sfx module from {$this->options['sfx']}."; + $pwd = getcwd(); + chdir( $this->options['basedir'] ); + foreach ($this->files as $current) { + if ($current['name'] == $this->options['name']) + continue; + $timedate = explode( " ", date( "Y n j G i s", $current['stat'][9] ) ); + $timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) | ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]); + $block = pack( "VvvvV", 0x04034b50, 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate ); + if ($current['stat'][7] == 0 && $current['type'] == 5) { + $block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000 ); + $block .= $current['name2'] . "/"; + $this->add_data( $block ); + $central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset ); + $central .= $current['name2'] . "/"; + $files ++; + $offset += (31 + strlen( $current['name2'] )); + } else if ($current['stat'][7] == 0) { + $block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000 ); + $block .= $current['name2']; + $this->add_data( $block ); + $central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset ); + $central .= $current['name2']; + $files ++; + $offset += (30 + strlen( $current['name2'] )); + } else if ($fp = @fopen( $current['name'], "rb" )) { + $temp = fread( $fp, $current['stat'][7] ); + fclose( $fp ); + $crc32 = crc32( $temp ); + if (! isset( $current['method'] ) && $this->options['method'] == 1) { + $temp = gzcompress( $temp, $this->options['level'] ); + $size = strlen( $temp ) - 6; + $temp = substr( $temp, 2, $size ); + } else + $size = strlen( $temp ); + $block .= pack( "VVVvv", $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000 ); + $block .= $current['name2']; + $this->add_data( $block ); + $this->add_data( $temp ); + unset( $temp ); + $central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset ); + $central .= $current['name2']; + $files ++; + $offset += (30 + strlen( $current['name2'] ) + $size); + } else + $this->error[] = "Could not open file {$current['name']} for reading. It was not added."; + } + $this->add_data( $central ); + $this->add_data( pack( "VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen( $central ), $offset, ! empty( $this->options['comment'] ) ? strlen( $this->options['comment'] ) : 0x0000 ) ); + if (! empty( $this->options['comment'] )) + $this->add_data( $this->options['comment'] ); + chdir( $pwd ); + return 1; + } +} + diff --git a/workflow/engine/classes/class.calendar.php b/workflow/engine/classes/class.calendar.php index 8d303107b..dc13dcbc3 100755 --- a/workflow/engine/classes/class.calendar.php +++ b/workflow/engine/classes/class.calendar.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -27,207 +28,205 @@ * @name calendar * created 2010-03-22 * - * @author Hugo Loza 2010-03-22 * + * @author Hugo Loza 2010-03-22 * */ - - require_once ( "classes/model/CalendarDefinition.php" ); - + +require_once ("classes/model/CalendarDefinition.php"); + /** * A Calendar object where it is defined Working Days, Business Hours and Holidays * A Calendar is applied to a User, Process or Task * Extends CalendarDefinition. - * + * * @author Hugo Loza 2010-03-22 * @uses CalendarDefinition - * @package workflow.engine.classes + * @package workflow.engine.classes * */ class calendar extends CalendarDefinition { - /** - * @param string(32) $userUid - * @param string(32) $proUid - * @param string(32) $tasUid - */ - function calendar($userUid = NULL, $proUid = NULL, $tasUid = NULL) - { - $this->userUid = $userUid; - $this->proUid = $proUid; - $this->tasUid = $tasUid; - $this->calendarLog = ""; - $this->setupCalendar($userUid,$proUid,$tasUid); - } - - /** - * Small function used to add important information about the calcs and actions - * to the log (that log will be saved) - * - * @name addCalendarLog - * @param text $msg - * @access public - * - */ - function addCalendarLog($msg) - { - $this->calendarLog .= "\n".date("D M j G:i:s T Y").": " . $msg; - } - - /** - * setupCalendar is used to generate a valid instance of calendar using $userUid, $proUid and $tasUid - * to find a valid calendar. If there is no valid calendar then use the Default - * - * @name setupCalendar - * @param string(32) $userUid - * @param string(32) $proUid - * @param string(32) $tasUid - * @return void - */ - function setupCalendar($userUid,$proUid,$tasUid) - { - $calendarDefinition = $this->getCalendarFor($userUid,$proUid,$tasUid); - $this->calendarUid = $calendarDefinition['CALENDAR_UID']; - $this->calendarDefinition = $calendarDefinition; - } - /** - * getnextValidBusinessHoursrange is used recursivily to find a valid BusinessHour - * for the given $date and $time. This function use all the exeptions defined for - * Working days, Business Hours and Holidays. - * - * @author Hugo Loza - * @name getNextValidBusinessHoursRange - * @param date $date - * @param time $time - * - * @var array $businessHoursA Object with all the infromation about the valid Business Hours found - * $return array('DATE'=>$date,'TIME'=>$time,'BUSINESS_HOURS'=>$businessHoursA) - */ - function getNextValidBusinessHoursRange($date, $time) - { - $this->addCalendarLog("================= Start : $date,$time ================"); - - //First Validate if is a valid date - $sw_valid_date = false; - $sw_date_changed = false; - while (!$sw_valid_date) { - $dateArray = explode("-",$date); - $hour = 0; - $minute = 0; - $second = 0; - $month = $dateArray[1]; - $day = $dateArray[2]; - $year = $dateArray[0]; - $weekDay = date("w",mktime($hour,$minute,$second,$month,$day,$year)); - $weekDayLabel = date("l",mktime($hour,$minute,$second,$month,$day,$year)); - $dateInt = mktime($hour,$minute,$second,$month,$day,$year); - - - $this->addCalendarLog("**** $weekDayLabel ($weekDay) * $date"); - $sw_week_day = false; - $sw_not_holiday = true; - - - if(in_array($weekDay,$this->calendarDefinition['CALENDAR_WORK_DAYS_A'])){ - $sw_week_day = true; - } - if(!$sw_week_day){ - $this->addCalendarLog("Valid working Dates: ".$this->calendarDefinition['CALENDAR_WORK_DAYS_A']); - $this->addCalendarLog("- Non working Day"); - } - - - foreach ($this->calendarDefinition['HOLIDAY'] as $key => $holiday) { - //Normalize Holiday date to SAME year of date - $holidayStartA = explode(" ",$holiday['CALENDAR_HOLIDAY_START']); - $holidayStartA = explode("-",$holidayStartA[0]); - - $normalizedHolidayStart = date("Y-m-d",mktime($hour,$minute,$second,$holidayStartA[1],$holidayStartA[2],$year)); - $normalizedHolidayStartInt = mktime($hour,$minute,$second,$holidayStartA[1],$holidayStartA[2],$year); - - $holidayEndA = explode(" ",$holiday['CALENDAR_HOLIDAY_END']); - $holidayEndA = explode("-",$holidayEndA[0]); - $normalizedHolidayEnd = date("Y-m-d",mktime($hour,$minute,$second,$holidayEndA[1],$holidayEndA[2],$year)); - $normalizedHolidayEndInt = mktime($hour,$minute,$second,$holidayEndA[1],$holidayEndA[2],$year); - $sw_not_holiday_aux = true; - if( $dateInt >= $normalizedHolidayStartInt && $dateInt <= $normalizedHolidayEndInt ){ - $sw_not_holiday = false; - $sw_not_holiday_aux = false; - } - if(!$sw_not_holiday_aux){ - $this->addCalendarLog("It is a holiday -> ".$holiday['CALENDAR_HOLIDAY_NAME']." ($normalizedHolidayStart - $normalizedHolidayEnd)"); - } - } - $sw_valid_date=$sw_week_day && $sw_not_holiday; - - if(!$sw_valid_date){//Go to next day - $date=date("Y-m-d",mktime($hour,$minute+1,$second,$month,$day+1,$year)); - $sw_date_changed=true; - }else{ - $this->addCalendarLog("FOUND VALID DATE -> $date"); + /** + * + * @param string(32) $userUid + * @param string(32) $proUid + * @param string(32) $tasUid + */ + function calendar ($userUid = NULL, $proUid = NULL, $tasUid = NULL) + { + $this->userUid = $userUid; + $this->proUid = $proUid; + $this->tasUid = $tasUid; + $this->calendarLog = ""; + $this->setupCalendar( $userUid, $proUid, $tasUid ); + } - - //We got a valid day, now get the valid Business Hours - //Here Need to find a rule to get the most nea - $businessHoursA=array(); - $prevHour="00:00"; - - if($sw_date_changed){// If date has changed then Use the first available period - $time="00:01"; - } - - foreach($this->calendarDefinition['BUSINESS_DAY'] as $keyBH => $businessHours){ - - // First the period may correspond to ALL or to the current week day - if(($businessHours['CALENDAR_BUSINESS_DAY']==7)||($businessHours['CALENDAR_BUSINESS_DAY']==$weekDay)){ - $this->addCalendarLog("Validating ($time/$prevHour) From: ".$businessHours['CALENDAR_BUSINESS_START']." to ".$businessHours['CALENDAR_BUSINESS_END']); - - //Prev Hour - $prevHourA = explode(":",$prevHour); - $prevHourSeconds = ($prevHourA[0]*60*60)+($prevHour[1]*60); - - $calendarBusinessStartA = explode(":",$businessHours['CALENDAR_BUSINESS_START']); - $calendarBusinessStartSeconds = ($calendarBusinessStartA[0]*60*60)+($calendarBusinessStartA[1]*60); - - $calendarBusinessEndA = explode(":",$businessHours['CALENDAR_BUSINESS_END']); - $calendarBusinessEndSeconds = ($calendarBusinessEndA[0]*60*60)+($calendarBusinessEndA[1]*60); - - $timeAuxA = explode(":",$time); - $timeAuxSeconds = ($timeAuxA[0]*60*60)+($timeAuxA[1]*60); - - if(($timeAuxSeconds>=$prevHourSeconds)&&($timeAuxSeconds<$calendarBusinessEndSeconds)){ - $this->addCalendarLog("*** FOUND VALID BUSINESS HOUR ".$businessHours['CALENDAR_BUSINESS_START']." - ".$businessHours['CALENDAR_BUSINESS_END']); - - if($timeAuxSeconds<$calendarBusinessStartSeconds){//Out of range then assign first hour - $this->addCalendarLog("Set to default start hour to: ".$businessHours['CALENDAR_BUSINESS_START']); - $time = $businessHours['CALENDAR_BUSINESS_START']; - } - $prevHour = $businessHours['CALENDAR_BUSINESS_END']; - $businessHoursA = $businessHours; - } - - - + /** + * Small function used to add important information about the calcs and actions + * to the log (that log will be saved) + * + * @name addCalendarLog + * @param text $msg + * @access public + * + */ + function addCalendarLog ($msg) + { + $this->calendarLog .= "\n" . date( "D M j G:i:s T Y" ) . ": " . $msg; + } + + /** + * setupCalendar is used to generate a valid instance of calendar using $userUid, $proUid and $tasUid + * to find a valid calendar. + * If there is no valid calendar then use the Default + * + * @name setupCalendar + * @param string(32) $userUid + * @param string(32) $proUid + * @param string(32) $tasUid + * @return void + */ + function setupCalendar ($userUid, $proUid, $tasUid) + { + $calendarDefinition = $this->getCalendarFor( $userUid, $proUid, $tasUid ); + $this->calendarUid = $calendarDefinition['CALENDAR_UID']; + $this->calendarDefinition = $calendarDefinition; + } + + /** + * getnextValidBusinessHoursrange is used recursivily to find a valid BusinessHour + * for the given $date and $time. + * This function use all the exeptions defined for + * Working days, Business Hours and Holidays. + * + * @author Hugo Loza + * @name getNextValidBusinessHoursRange + * @param date $date + * @param time $time + * + * @var array $businessHoursA Object with all the infromation about the valid Business Hours found + * $return array('DATE'=>$date,'TIME'=>$time,'BUSINESS_HOURS'=>$businessHoursA) + */ + function getNextValidBusinessHoursRange ($date, $time) + { + $this->addCalendarLog( "================= Start : $date,$time ================" ); + + //First Validate if is a valid date + $sw_valid_date = false; + $sw_date_changed = false; + while (! $sw_valid_date) { + $dateArray = explode( "-", $date ); + $hour = 0; + $minute = 0; + $second = 0; + $month = $dateArray[1]; + $day = $dateArray[2]; + $year = $dateArray[0]; + $weekDay = date( "w", mktime( $hour, $minute, $second, $month, $day, $year ) ); + $weekDayLabel = date( "l", mktime( $hour, $minute, $second, $month, $day, $year ) ); + $dateInt = mktime( $hour, $minute, $second, $month, $day, $year ); + + $this->addCalendarLog( "**** $weekDayLabel ($weekDay) * $date" ); + $sw_week_day = false; + $sw_not_holiday = true; + + if (in_array( $weekDay, $this->calendarDefinition['CALENDAR_WORK_DAYS_A'] )) { + $sw_week_day = true; + } + if (! $sw_week_day) { + $this->addCalendarLog( "Valid working Dates: " . $this->calendarDefinition['CALENDAR_WORK_DAYS_A'] ); + $this->addCalendarLog( "- Non working Day" ); } - } - } - - if(empty($businessHoursA)){ - $this->addCalendarLog("> No Valid Business Hour found for current date, go to next"); - $date = date("Y-m-d", mktime($hour,$minute+1,$second,$month,$day+1,$year)); - $sw_date_changed = true; - $sw_valid_date = false; - } - - - } - - $return['DATE'] = $date; - $return['TIME'] = $time; - $return['BUSINESS_HOURS'] = $businessHoursA; - - return $return; + foreach ($this->calendarDefinition['HOLIDAY'] as $key => $holiday) { + //Normalize Holiday date to SAME year of date + + + $holidayStartA = explode( " ", $holiday['CALENDAR_HOLIDAY_START'] ); + $holidayStartA = explode( "-", $holidayStartA[0] ); + + $normalizedHolidayStart = date( "Y-m-d", mktime( $hour, $minute, $second, $holidayStartA[1], $holidayStartA[2], $year ) ); + $normalizedHolidayStartInt = mktime( $hour, $minute, $second, $holidayStartA[1], $holidayStartA[2], $year ); + + $holidayEndA = explode( " ", $holiday['CALENDAR_HOLIDAY_END'] ); + $holidayEndA = explode( "-", $holidayEndA[0] ); + $normalizedHolidayEnd = date( "Y-m-d", mktime( $hour, $minute, $second, $holidayEndA[1], $holidayEndA[2], $year ) ); + $normalizedHolidayEndInt = mktime( $hour, $minute, $second, $holidayEndA[1], $holidayEndA[2], $year ); + $sw_not_holiday_aux = true; + if ($dateInt >= $normalizedHolidayStartInt && $dateInt <= $normalizedHolidayEndInt) { + $sw_not_holiday = false; + $sw_not_holiday_aux = false; + } + if (! $sw_not_holiday_aux) { + $this->addCalendarLog( "It is a holiday -> " . $holiday['CALENDAR_HOLIDAY_NAME'] . " ($normalizedHolidayStart - $normalizedHolidayEnd)" ); + } + } + $sw_valid_date = $sw_week_day && $sw_not_holiday; + + if (! $sw_valid_date) { //Go to next day + $date = date( "Y-m-d", mktime( $hour, $minute + 1, $second, $month, $day + 1, $year ) ); + $sw_date_changed = true; + } else { + $this->addCalendarLog( "FOUND VALID DATE -> $date" ); + + //We got a valid day, now get the valid Business Hours + //Here Need to find a rule to get the most nea + $businessHoursA = array (); + $prevHour = "00:00"; + + if ($sw_date_changed) { // If date has changed then Use the first available period + $time = "00:01"; + } + + foreach ($this->calendarDefinition['BUSINESS_DAY'] as $keyBH => $businessHours) { + + // First the period may correspond to ALL or to the current week day + if (($businessHours['CALENDAR_BUSINESS_DAY'] == 7) || ($businessHours['CALENDAR_BUSINESS_DAY'] == $weekDay)) { + $this->addCalendarLog( "Validating ($time/$prevHour) From: " . $businessHours['CALENDAR_BUSINESS_START'] . " to " . $businessHours['CALENDAR_BUSINESS_END'] ); + + //Prev Hour + $prevHourA = explode( ":", $prevHour ); + $prevHourSeconds = ($prevHourA[0] * 60 * 60) + ($prevHour[1] * 60); + + $calendarBusinessStartA = explode( ":", $businessHours['CALENDAR_BUSINESS_START'] ); + $calendarBusinessStartSeconds = ($calendarBusinessStartA[0] * 60 * 60) + ($calendarBusinessStartA[1] * 60); + + $calendarBusinessEndA = explode( ":", $businessHours['CALENDAR_BUSINESS_END'] ); + $calendarBusinessEndSeconds = ($calendarBusinessEndA[0] * 60 * 60) + ($calendarBusinessEndA[1] * 60); + + $timeAuxA = explode( ":", $time ); + $timeAuxSeconds = ($timeAuxA[0] * 60 * 60) + ($timeAuxA[1] * 60); + + if (($timeAuxSeconds >= $prevHourSeconds) && ($timeAuxSeconds < $calendarBusinessEndSeconds)) { + $this->addCalendarLog( "*** FOUND VALID BUSINESS HOUR " . $businessHours['CALENDAR_BUSINESS_START'] . " - " . $businessHours['CALENDAR_BUSINESS_END'] ); + + if ($timeAuxSeconds < $calendarBusinessStartSeconds) { //Out of range then assign first hour + $this->addCalendarLog( "Set to default start hour to: " . $businessHours['CALENDAR_BUSINESS_START'] ); + $time = $businessHours['CALENDAR_BUSINESS_START']; + } + $prevHour = $businessHours['CALENDAR_BUSINESS_END']; + $businessHoursA = $businessHours; + } + + } + } + } + + if (empty( $businessHoursA )) { + $this->addCalendarLog( "> No Valid Business Hour found for current date, go to next" ); + $date = date( "Y-m-d", mktime( $hour, $minute + 1, $second, $month, $day + 1, $year ) ); + $sw_date_changed = true; + $sw_valid_date = false; + } + + } + + $return['DATE'] = $date; + $return['TIME'] = $time; + $return['BUSINESS_HOURS'] = $businessHoursA; + + return $return; } - + } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.cli.php b/workflow/engine/classes/class.cli.php index b452de2cd..0ab097300 100755 --- a/workflow/engine/classes/class.cli.php +++ b/workflow/engine/classes/class.cli.php @@ -1,7 +1,9 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -26,297 +28,313 @@ */ /** - * @package workflow.engine.classes + * + * @package workflow.engine.classes */ -class CLI { - public static $tasks = array(); - public static $currentTask = NULL; +class CLI +{ + public static $tasks = array (); + public static $currentTask = NULL; - /** - * Adds a new task defined by it's name. All other task functions will - * remember the current task defined here. - * - * @param string $name name of the task, used in the command-line - */ - public static function taskName($name) { - self::$currentTask = $name; - self::$tasks[$name] = array( - 'name' => $name, - 'description' => NULL, - 'args' => array(), - 'function' => NULL, - 'opt' => array('short' => '', 'long' => array(), 'descriptions' => array()) - ); - } + /** + * Adds a new task defined by it's name. + * All other task functions will + * remember the current task defined here. + * + * @param string $name name of the task, used in the command-line + */ + public static function taskName ($name) + { + self::$currentTask = $name; + self::$tasks[$name] = array ('name' => $name,'description' => NULL,'args' => array (),'function' => NULL,'opt' => array ('short' => '','long' => array (),'descriptions' => array () + ) + ); + } - /** - * Adds a description to the current task. The description should contain a - * one-line description of the command and a few lines of text with more - * information. - * - * @param string $description task description - */ - public static function taskDescription($description) { - assert(self::$currentTask !== NULL); - self::$tasks[self::$currentTask]["description"] = $description; - } + /** + * Adds a description to the current task. + * The description should contain a + * one-line description of the command and a few lines of text with more + * information. + * + * @param string $description task description + */ + public static function taskDescription ($description) + { + assert( self::$currentTask !== NULL ); + self::$tasks[self::$currentTask]["description"] = $description; + } - /** - * Adds an argument to the current task. The options will affect how it is - * displayed in the help command. Optional will put [] in the argument and - * multiple will put ... in the end. Arguments are displayed together with - * the task name in the help command. - * - * @param string $name argument name - */ - public static function taskArg($name, $optional = true, $multiple = false) { - assert(self::$currentTask !== NULL); - self::$tasks[self::$currentTask]["args"][$name] = array( - 'optional' => $optional, - 'multiple' => $multiple - ); - } + /** + * Adds an argument to the current task. + * The options will affect how it is + * displayed in the help command. Optional will put [] in the argument and + * multiple will put ... in the end. Arguments are displayed together with + * the task name in the help command. + * + * @param string $name argument name + */ + public static function taskArg ($name, $optional = true, $multiple = false) + { + assert( self::$currentTask !== NULL ); + self::$tasks[self::$currentTask]["args"][$name] = array ('optional' => $optional,'multiple' => $multiple + ); + } - /** - * Defines short and long options as used by getopt to the current task. - * - * @param string $short short options - * @param array $long long options - */ - public static function taskOpt($name, $description, $short, $long = NULL) { - assert(self::$currentTask !== NULL); - $opts = self::$tasks[self::$currentTask]["opt"]; - if ($short) - $opts['short'] .= $short; - if ($long) - $opts['long'][] = $long; - $opts['descriptions'][$name] = array('short' => $short, 'long' => $long, - 'description' => $description); - self::$tasks[self::$currentTask]["opt"] = $opts; - } + /** + * Defines short and long options as used by getopt to the current task. + * + * @param string $short short options + * @param array $long long options + */ + public static function taskOpt ($name, $description, $short, $long = NULL) + { + assert( self::$currentTask !== NULL ); + $opts = self::$tasks[self::$currentTask]["opt"]; + if ($short) + $opts['short'] .= $short; + if ($long) + $opts['long'][] = $long; + $opts['descriptions'][$name] = array ('short' => $short,'long' => $long,'description' => $description + ); + self::$tasks[self::$currentTask]["opt"] = $opts; + } - /** - * Defines the function to run for the current task. - * - * @param callback $function function to run - */ - public static function taskRun($function) { - assert(self::$currentTask !== NULL); - self::$tasks[self::$currentTask]["function"] = $function; - } + /** + * Defines the function to run for the current task. + * + * @param callback $function function to run + */ + public static function taskRun ($function) + { + assert( self::$currentTask !== NULL ); + self::$tasks[self::$currentTask]["function"] = $function; + } - /** - * Displays the help instructions. - * - * @param array $args if defined, the task name should be argument 0 - * @param array $opts options as returned by getopt - */ - public static function help($args, $opts = NULL) { - global $argv; - $scriptName = $argv[0]; - if (is_array($args)) - $taskName = $args[0]; - else - $taskName = $args; + /** + * Displays the help instructions. + * + * @param array $args if defined, the task name should be argument 0 + * @param array $opts options as returned by getopt + */ + public static function help ($args, $opts = NULL) + { + global $argv; + $scriptName = $argv[0]; + if (is_array( $args )) + $taskName = $args[0]; + else + $taskName = $args; - if (!$taskName) { - echo "usage: $scriptName [options] [args]\n"; - echo "Type '$scriptName help ' for help on a specific task\n"; - echo "\nAvailable tasks:\n"; - $tasks = array(); - ksort(self::$tasks); - foreach (self::$tasks as $name => $data) { - $description = explode("\n", $data['description']); - $tasks[] = " $name"; - } - $tasks = join("\n", $tasks); - echo $tasks . "\n\n"; - } else { - $valid_args = array(); - foreach(self::$tasks[$taskName]['args'] as $arg => $data) { - $arg = strtoupper($arg); - if ($data['multiple']) - $arg = "$arg..."; - if ($data['optional']) - $arg = "[$arg]"; - $valid_args[] = $arg; - } - $valid_args = join(" ", $valid_args); - $description = explode("\n", self::$tasks[$taskName]['description']); - $taskDescription = trim(array_shift($description)); - $description = trim(implode("\n", $description)); - $message = <<< EOT + if (! $taskName) { + echo "usage: $scriptName [options] [args]\n"; + echo "Type '$scriptName help ' for help on a specific task\n"; + echo "\nAvailable tasks:\n"; + $tasks = array (); + ksort( self::$tasks ); + foreach (self::$tasks as $name => $data) { + $description = explode( "\n", $data['description'] ); + $tasks[] = " $name"; + } + $tasks = join( "\n", $tasks ); + echo $tasks . "\n\n"; + } else { + $valid_args = array (); + foreach (self::$tasks[$taskName]['args'] as $arg => $data) { + $arg = strtoupper( $arg ); + if ($data['multiple']) + $arg = "$arg..."; + if ($data['optional']) + $arg = "[$arg]"; + $valid_args[] = $arg; + } + $valid_args = join( " ", $valid_args ); + $description = explode( "\n", self::$tasks[$taskName]['description'] ); + $taskDescription = trim( array_shift( $description ) ); + $description = trim( implode( "\n", $description ) ); + $message = <<< EOT $taskName: {$taskDescription} Usage: $scriptName $taskName $valid_args $description EOT; - $valid_options = array(); - foreach(self::$tasks[$taskName]['opt']['descriptions'] as $opt => $data) { - $optString = array(); - if ($data['short']) - $optString[] = "-{$data['short']}"; - if ($data['long']) - $optString[] = "--{$data['long']}"; - $valid_options[] = " " . join(", ", $optString) . "\n\t" . wordwrap($data['description'], 70, "\n\t"); - } - $valid_options = join("\n", $valid_options); - if ($valid_options) { - $message .= <<< EOT + $valid_options = array (); + foreach (self::$tasks[$taskName]['opt']['descriptions'] as $opt => $data) { + $optString = array (); + if ($data['short']) + $optString[] = "-{$data['short']}"; + if ($data['long']) + $optString[] = "--{$data['long']}"; + $valid_options[] = " " . join( ", ", $optString ) . "\n\t" . wordwrap( $data['description'], 70, "\n\t" ); + } + $valid_options = join( "\n", $valid_options ); + if ($valid_options) { + $message .= <<< EOT Options: - + $valid_options EOT; - } - echo $message . "\n"; - } - } - - /** - * Run the CLI task, which will check which command is specified and run it. - */ - public static function run() { - CLI::taskName("help"); - CLI::taskRun(array('self', 'help')); - global $argv; - $args = $argv; - $cliname = array_shift($args); - $taskName = array_shift($args); - while ($taskName{0} == '-') - $taskName = array_shift($args); - if (!$taskName) { - echo self::error("Specify a task from the list below.") . "\n\n"; - self::help(NULL, NULL); - return; - } - $taskData = NULL; - foreach (self::$tasks as $name => $data) { - if (strcasecmp($name, $taskName) === 0) { - $taskData = $data; - break; - } - } - if (!$taskData) { - echo self::error("Command not found: '$taskName'") . "\n\n"; - self::help(NULL, NULL); - return; - } - G::LoadThirdParty('pear/Console', 'Getopt'); - $short = "h" . $taskData['opt']['short']; - $long = array_merge(array("help"), $taskData['opt']['long']); - $getopt = Console_GetOpt::getopt2($args, $short, $long); - if (!is_array($getopt)) { - echo self::error("Invalid options (" . $getopt->getMessage() . ")") . "\n\n"; - self::help($taskName); - return; - } - list($options, $arguments) = $getopt; - foreach ($taskData['opt']['descriptions'] as $optName => $optDescription) { - $short = str_replace(":", "", $optDescription['short']); - $long = str_replace("=", "", $optDescription['long']); - $validOpts[$short] = $optName; - $validOpts[$long] = $optName; - } - $taskOpts = array(); - try { - foreach ($options as $opt) { - list($optName, $optArg) = $opt; - if ($optName === "h" || $optName === "--help") { - self::help($taskName); - return; + } + echo $message . "\n"; } - if (strpos($optName, '--') === 0) - $optName = substr($optName, 2); - if (!array_key_exists($optName, $validOpts)) - throw new Exception("option not found: $optName"); - if (array_key_exists($validOpts[$optName], $taskOpts)) - throw new Exception("'$optName' specified more then once"); - $taskOpts[$validOpts[$optName]] = $optArg; - } - } catch (Exception $e) { - echo self::error("Invalid options: " . $e->getMessage()) . "\n\n"; - self::help($taskName); - return; } - try { - call_user_func($taskData['function'], $arguments, $taskOpts); - } catch (Exception $e) { - echo self::error("\n Error executing '$taskName':\n\n {$e->getMessage()}\n") . "\n"; + + /** + * Run the CLI task, which will check which command is specified and run it. + */ + public static function run () + { + CLI::taskName( "help" ); + CLI::taskRun( array ('self','help' + ) ); + global $argv; + $args = $argv; + $cliname = array_shift( $args ); + $taskName = array_shift( $args ); + while ($taskName{0} == '-') + $taskName = array_shift( $args ); + if (! $taskName) { + echo self::error( "Specify a task from the list below." ) . "\n\n"; + self::help( NULL, NULL ); + return; + } + $taskData = NULL; + foreach (self::$tasks as $name => $data) { + if (strcasecmp( $name, $taskName ) === 0) { + $taskData = $data; + break; + } + } + if (! $taskData) { + echo self::error( "Command not found: '$taskName'" ) . "\n\n"; + self::help( NULL, NULL ); + return; + } + G::LoadThirdParty( 'pear/Console', 'Getopt' ); + $short = "h" . $taskData['opt']['short']; + $long = array_merge( array ("help" + ), $taskData['opt']['long'] ); + $getopt = Console_GetOpt::getopt2( $args, $short, $long ); + if (! is_array( $getopt )) { + echo self::error( "Invalid options (" . $getopt->getMessage() . ")" ) . "\n\n"; + self::help( $taskName ); + return; + } + list ($options, $arguments) = $getopt; + foreach ($taskData['opt']['descriptions'] as $optName => $optDescription) { + $short = str_replace( ":", "", $optDescription['short'] ); + $long = str_replace( "=", "", $optDescription['long'] ); + $validOpts[$short] = $optName; + $validOpts[$long] = $optName; + } + $taskOpts = array (); + try { + foreach ($options as $opt) { + list ($optName, $optArg) = $opt; + if ($optName === "h" || $optName === "--help") { + self::help( $taskName ); + return; + } + if (strpos( $optName, '--' ) === 0) + $optName = substr( $optName, 2 ); + if (! array_key_exists( $optName, $validOpts )) + throw new Exception( "option not found: $optName" ); + if (array_key_exists( $validOpts[$optName], $taskOpts )) + throw new Exception( "'$optName' specified more then once" ); + $taskOpts[$validOpts[$optName]] = $optArg; + } + } catch (Exception $e) { + echo self::error( "Invalid options: " . $e->getMessage() ) . "\n\n"; + self::help( $taskName ); + return; + } + try { + call_user_func( $taskData['function'], $arguments, $taskOpts ); + } catch (Exception $e) { + echo self::error( "\n Error executing '$taskName':\n\n {$e->getMessage()}\n" ) . "\n"; + } } - } - /** - * Returns an information colorized version of the message. - * - * @param string $message the message to colorize - */ - public static function info($message) { - return pakeColor::colorize($message, "INFO"); - } - - /** - * Returns a warning colorized version of the message. - * - * @param string $message the message to colorize - */ - public static function warning($message) { - return pakeColor::colorize($message, "COMMENT"); - } - - /** - * Returns an error colorized version of the message. - * - * @param string $message the message to colorize - */ - public static function error($message) { - return pakeColor::colorize($message, "ERROR"); - } - - /** - * Prompt the user for information. - * - * @param string $message the message to display - * @return string the text typed by the user - */ - public static function prompt($message) { - echo "$message"; - $handle = fopen ("php://stdin","r"); - $line = fgets($handle); - return $line; - } - - /** - * Ask a question of yes or no. - * - * @param string $message the message to display - * @return bool true if the user choosed no, false otherwise - */ - public static function question($message) { - $input = strtolower(self::prompt("$message [Y/n] ")); - return (array_search(trim($input), array("y", "")) !== false); - } - - /** - * Display a message to the user. If filename is specified, it will setup - * a logging file where all messages will be recorded. - * - * @param string $message the message to display - * @param string $filename the log file to write messages - */ - public static function logging($message, $filename = NULL) { - static $log_file = NULL; - if (isset($filename)) { - $log_file = fopen($filename, "a"); - fwrite($log_file, " -- " . date("c") . " " . $message . " --\n"); - } else { - if (isset($log_file)) - fwrite($log_file, $message); - echo $message; + /** + * Returns an information colorized version of the message. + * + * @param string $message the message to colorize + */ + public static function info ($message) + { + return pakeColor::colorize( $message, "INFO" ); + } + + /** + * Returns a warning colorized version of the message. + * + * @param string $message the message to colorize + */ + public static function warning ($message) + { + return pakeColor::colorize( $message, "COMMENT" ); + } + + /** + * Returns an error colorized version of the message. + * + * @param string $message the message to colorize + */ + public static function error ($message) + { + return pakeColor::colorize( $message, "ERROR" ); + } + + /** + * Prompt the user for information. + * + * @param string $message the message to display + * @return string the text typed by the user + */ + public static function prompt ($message) + { + echo "$message"; + $handle = fopen( "php://stdin", "r" ); + $line = fgets( $handle ); + return $line; + } + + /** + * Ask a question of yes or no. + * + * @param string $message the message to display + * @return bool true if the user choosed no, false otherwise + */ + public static function question ($message) + { + $input = strtolower( self::prompt( "$message [Y/n] " ) ); + return (array_search( trim( $input ), array ("y","" + ) ) !== false); + } + + /** + * Display a message to the user. + * If filename is specified, it will setup + * a logging file where all messages will be recorded. + * + * @param string $message the message to display + * @param string $filename the log file to write messages + */ + public static function logging ($message, $filename = NULL) + { + static $log_file = NULL; + if (isset( $filename )) { + $log_file = fopen( $filename, "a" ); + fwrite( $log_file, " -- " . date( "c" ) . " " . $message . " --\n" ); + } else { + if (isset( $log_file )) + fwrite( $log_file, $message ); + echo $message; + } } - } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.configuration.php b/workflow/engine/classes/class.configuration.php index 1bec05267..41d8bc6dd 100755 --- a/workflow/engine/classes/class.configuration.php +++ b/workflow/engine/classes/class.configuration.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -31,528 +32,483 @@ // License: LGPL, see LICENSE //////////////////////////////////////////////////// + /** * ProcessConfiguration - ProcessConfiguration class - * @author David S. Callizaya S. + * + * @author David S. Callizaya S. * @copyright 2007 COLOSA */ require_once 'classes/model/Configuration.php'; - /** * Extends Configuration * * - * @copyright 2007 COLOSA - * @version Release: @package_version@ - * @package workflow.engine.ProcessMaker + * @copyright 2007 COLOSA + * @version Release: @package_version@ + * @package workflow.engine.ProcessMaker */ class Configurations // extends Configuration { - var $aConfig = array(); - private $Configuration = null; - private $UserConfig = null; + var $aConfig = array (); + private $Configuration = null; + private $UserConfig = null; - /** - * Set Configurations - * @return void - */ - function Configurations() - { - $this->Configuration = new Configuration(); - } + /** + * Set Configurations + * + * @return void + */ + function Configurations () + { + $this->Configuration = new Configuration(); + } - /** - * arrayClone - * - * @param array &$object Source array - * @param array &$cloneObject Array duplicate - * @return void - */ - function arrayClone( &$object, &$cloneObject ) - { - if (is_array($object)) { - foreach($object as $k => $v ) { - $cloneObject[$k] = NULL; - $this->arrayClone( $object[$k], $cloneObject[$k] ); - } - } else { - if (is_object($object)) { + /** + * arrayClone + * + * @param array &$object Source array + * @param array &$cloneObject Array duplicate + * @return void + */ + function arrayClone (&$object, &$cloneObject) + { + if (is_array( $object )) { + foreach ($object as $k => $v) { + $cloneObject[$k] = NULL; + $this->arrayClone( $object[$k], $cloneObject[$k] ); + } } else { - $cloneObject=NULL; + if (is_object( $object )) { + } else { + $cloneObject = NULL; + } } } - } - /** - * configObject - * - * @param object &$object - * @param array &$from - * @return void - */ - function configObject( &$object, &$from ) - { - if (!(is_object($object) || is_array($object))) - return; + /** + * configObject + * + * @param object &$object + * @param array &$from + * @return void + */ + function configObject (&$object, &$from) + { + if (! (is_object( $object ) || is_array( $object ))) + return; - if (!isset($from)) - $from = &$this->aConfig; + if (! isset( $from )) + $from = &$this->aConfig; - foreach($from as $k => $v ) { - if (isset($v) && array_key_exists($k,$object)) { - if (is_object($v)) - throw new Exception( 'Object is not permited inside configuration array.' ); + foreach ($from as $k => $v) { + if (isset( $v ) && array_key_exists( $k, $object )) { + if (is_object( $v )) + throw new Exception( 'Object is not permited inside configuration array.' ); - if (is_object($object)) { - if (is_array($v)) - $this->configObject($object->{$k}, $v); - else - $object->{$k} = $v; + if (is_object( $object )) { + if (is_array( $v )) + $this->configObject( $object->{$k}, $v ); + else + $object->{$k} = $v; + } else { + if (is_array( $object )) { + if (is_array( $v )) + $this->configObject( $object[$k], $v ); + else + $object[$k] = $v; + } + } + } } - else { - if (is_array($object)) { - if (is_array($v)) - $this->configObject($object[$k], $v); - else - $object[$k] = $v; - } + } + + /** + * loadConfig + * + * @param object &$object + * @param string $cfg + * @param object $obj + * @param string $pro + * @param string $usr + * @param string $app + * @return void + */ + function loadConfig (&$object, $cfg, $obj = '', $pro = '', $usr = '', $app = '') + { + $this->load( $cfg, $obj, $pro, $usr, $app ); + $this->configObject( $object, $this->aConfig ); + } + + /** + * loadConf + * + * @param string $cfg + * @param object $obj + * @param string $pro + * @param string $usr + * @param string $app + * @return void + */ + function load ($cfg, $obj = '', $pro = '', $usr = '', $app = '') + { + $this->Fields = array (); + + try { + $this->Fields = $this->Configuration->load( $cfg, $obj, $pro, $usr, $app ); + } catch (Exception $e) { + } // the configuration does not exist + + + if (isset( $this->Fields['CFG_VALUE'] )) + $this->aConfig = unserialize( $this->Fields['CFG_VALUE'] ); + + if (! is_array( $this->aConfig )) + $this->aConfig = Array (); + + return $this->aConfig; + } + + /** + * saveConfig + * + * @param object &$object + * @param array &$from + * @return void + */ + function saveConfig ($cfg, $obj, $pro = '', $usr = '', $app = '') + { + $aFields = array ('CFG_UID' => $cfg,'OBJ_UID' => $obj,'PRO_UID' => $pro,'USR_UID' => $usr,'APP_UID' => $app,'CFG_VALUE' => serialize( $this->aConfig ) + ); + if ($this->Configuration->exists( $cfg, $obj, $pro, $usr, $app )) { + $this->Configuration->update( $aFields ); + } else { + $this->Configuration->create( $aFields ); + $this->Configuration->update( $aFields ); } - } } - } - /** - * loadConfig - * - * @param object &$object - * @param string $cfg - * @param object $obj - * @param string $pro - * @param string $usr - * @param string $app - * @return void - */ - function loadConfig(&$object, $cfg, $obj='', $pro = '', $usr = '', $app = '') - { - $this->load($cfg, $obj, $pro, $usr, $app); - $this->configObject($object, $this->aConfig); - } - - /** - * loadConf - * - * @param string $cfg - * @param object $obj - * @param string $pro - * @param string $usr - * @param string $app - * @return void - */ - function load($cfg, $obj='', $pro = '', $usr = '', $app = '') - { - $this->Fields = array(); - - try { - $this->Fields = $this->Configuration->load($cfg, $obj, $pro, $usr, $app); - } - catch(Exception $e) {} // the configuration does not exist - - if (isset($this->Fields['CFG_VALUE'])) - $this->aConfig = unserialize($this->Fields['CFG_VALUE']); - - if (!is_array($this->aConfig)) - $this->aConfig = Array(); - - return $this->aConfig; - } - - /** - * saveConfig - * - * @param object &$object - * @param array &$from - * @return void - */ - function saveConfig($cfg,$obj,$pro='',$usr='',$app='') - { - $aFields = array( - 'CFG_UID' => $cfg, - 'OBJ_UID' => $obj, - 'PRO_UID' => $pro, - 'USR_UID' => $usr, - 'APP_UID' => $app, - 'CFG_VALUE' => serialize($this->aConfig) - ); - if ($this->Configuration->exists($cfg,$obj,$pro,$usr,$app)) { - $this->Configuration->update($aFields); - } else { - $this->Configuration->create($aFields); - $this->Configuration->update($aFields); - } - } - - /** - * saveObject - * - * @param object &$object - * @param array &$from - * @return void - */ - function saveObject(&$object,$cfg,$obj,$pro='',$usr='',$app='') - { - $aFields = array( - 'CFG_UID' => $cfg, - 'OBJ_UID' => $obj, - 'PRO_UID' => $pro, - 'USR_UID' => $usr, - 'APP_UID' => $app, - 'CFG_VALUE' => serialize(array(&$object)) - ); - if ($this->Configuration->exists($cfg,$obj,$pro,$usr,$app)) { - $this->Configuration->update($aFields); - } else { - $this->Configuration->create($aFields); - $this->Configuration->update($aFields); - } - } - - /** - * loadObject - * this function is deprecated, we dont know why return an object, use the function getConfiguration below - * - * @param string $cfg - * @param object $obj - * @param string $pro - * @param string $usr - * @param string $app - * @return void - */ - function loadObject($cfg, $obj, $pro = '', $usr = '', $app = '') - { - $objectContainer=array((object) array()); - $this->Fields = array(); - if ($this->Configuration->exists( $cfg, $obj, $pro, $usr, $app )) - $this->Fields = $this->Configuration->load( $cfg, $obj, $pro, $usr, $app ); - else - return $objectContainer[0]; - - if (isset($this->Fields['CFG_VALUE'])) - $objectContainer = unserialize($this->Fields['CFG_VALUE']); - if (!is_array($objectContainer)||sizeof($objectContainer)!=1) - return (object) array(); - else - return $objectContainer[0]; - } - - /** - * getConfiguration - * - * @param string $cfg - * @param object $obj - * @param string $pro - * @param string $usr - * @param string $app - * @return void - */ - function getConfiguration($cfg, $obj, $pro = '', $usr = '', $app = '') - { - try { - $oCfg = ConfigurationPeer::retrieveByPK( $cfg, $obj, $pro, $usr, $app ); - if (!is_null($oCfg)) { - $row = $oCfg->toArray(BasePeer::TYPE_FIELDNAME); - $result = unserialize($row['CFG_VALUE']); - if ( is_array($result) && sizeof($result)==1 ) { - $arrayKeys = Array_keys( $result ); - return $result[ $arrayKeys[0]]; + /** + * saveObject + * + * @param object &$object + * @param array &$from + * @return void + */ + function saveObject (&$object, $cfg, $obj, $pro = '', $usr = '', $app = '') + { + $aFields = array ('CFG_UID' => $cfg,'OBJ_UID' => $obj,'PRO_UID' => $pro,'USR_UID' => $usr,'APP_UID' => $app,'CFG_VALUE' => serialize( array (&$object + ) ) + ); + if ($this->Configuration->exists( $cfg, $obj, $pro, $usr, $app )) { + $this->Configuration->update( $aFields ); + } else { + $this->Configuration->create( $aFields ); + $this->Configuration->update( $aFields ); } - else { - return $result; + } + + /** + * loadObject + * this function is deprecated, we dont know why return an object, use the function getConfiguration below + * + * @param string $cfg + * @param object $obj + * @param string $pro + * @param string $usr + * @param string $app + * @return void + */ + function loadObject ($cfg, $obj, $pro = '', $usr = '', $app = '') + { + $objectContainer = array ((object) array () + ); + $this->Fields = array (); + if ($this->Configuration->exists( $cfg, $obj, $pro, $usr, $app )) + $this->Fields = $this->Configuration->load( $cfg, $obj, $pro, $usr, $app ); + else + return $objectContainer[0]; + + if (isset( $this->Fields['CFG_VALUE'] )) + $objectContainer = unserialize( $this->Fields['CFG_VALUE'] ); + if (! is_array( $objectContainer ) || sizeof( $objectContainer ) != 1) + return (object) array (); + else + return $objectContainer[0]; + } + + /** + * getConfiguration + * + * @param string $cfg + * @param object $obj + * @param string $pro + * @param string $usr + * @param string $app + * @return void + */ + function getConfiguration ($cfg, $obj, $pro = '', $usr = '', $app = '') + { + try { + $oCfg = ConfigurationPeer::retrieveByPK( $cfg, $obj, $pro, $usr, $app ); + if (! is_null( $oCfg )) { + $row = $oCfg->toArray( BasePeer::TYPE_FIELDNAME ); + $result = unserialize( $row['CFG_VALUE'] ); + if (is_array( $result ) && sizeof( $result ) == 1) { + $arrayKeys = Array_keys( $result ); + return $result[$arrayKeys[0]]; + } else { + return $result; + } + } else { + return null; + } + } catch (Exception $oError) { + return null; } - } - else { - return null; - } } - catch (Exception $oError) { - return null; + + /** + * usersNameFormat + * + * @author Enrique Ponce de Leon enrique@colosa.com + * @param string $username + * @param string $firstname + * @param string $lastname + * @return string User Name Well-Formatted + */ + + function usersNameFormat ($username, $firstname, $lastname) + { + try { + if (! isset( $this->UserConfig )) + $this->UserConfig = $this->getConfiguration( 'ENVIRONMENT_SETTINGS', '' ); + if (isset( $this->UserConfig['format'] )) { + $aux = ''; + $aux = str_replace( '@userName', $username, $this->UserConfig['format'] ); + $aux = str_replace( '@firstName', $firstname, $aux ); + $aux = str_replace( '@lastName', $lastname, $aux ); + return $aux; + } else { + return $username; + } + } catch (Exception $oError) { + return null; + } } - } - - /** - * usersNameFormat - * @author Enrique Ponce de Leon enrique@colosa.com - * @param string $username - * @param string $firstname - * @param string $lastname - * @return string User Name Well-Formatted - */ - - function usersNameFormat($username, $firstname, $lastname){ - try{ - if (!isset($this->UserConfig)) $this->UserConfig = $this->getConfiguration('ENVIRONMENT_SETTINGS', ''); - if (isset($this->UserConfig['format'])){ - $aux = ''; - $aux = str_replace('@userName', $username, $this->UserConfig['format']); - $aux = str_replace('@firstName', $firstname, $aux); - $aux = str_replace('@lastName', $lastname, $aux); - return $aux; - }else{ - return $username; - } - }catch(Exception $oError){ - return null; - } - } /** * getFormats + * * @author Enrique Ponce de Leon enrique@colosa.com * @return FORMATS array */ - public function getFormats() + public function getFormats () { - if (!isset($this->UserConfig)) { - $this->UserConfig = $this->getConfiguration("ENVIRONMENT_SETTINGS", ""); + if (! isset( $this->UserConfig )) { + $this->UserConfig = $this->getConfiguration( "ENVIRONMENT_SETTINGS", "" ); } //Setting defaults - if (!isset($this->UserConfig["format"])) { + if (! isset( $this->UserConfig["format"] )) { $this->UserConfig["format"] = "@lastName, @firstName (@userName)"; } - if (!isset($this->UserConfig["dateFormat"])) { + if (! isset( $this->UserConfig["dateFormat"] )) { $this->UserConfig["dateFormat"] = "Y-m-d H:i:s"; } - if (!isset($this->UserConfig["startCaseHideProcessInf"])) { + if (! isset( $this->UserConfig["startCaseHideProcessInf"] )) { $this->UserConfig["startCaseHideProcessInf"] = false; } - if (!isset($this->UserConfig["casesListDateFormat"])) { + if (! isset( $this->UserConfig["casesListDateFormat"] )) { $this->UserConfig["casesListDateFormat"] = "Y-m-d H:i:s"; } - if (!isset($this->UserConfig["casesListRowNumber"])) { + if (! isset( $this->UserConfig["casesListRowNumber"] )) { $this->UserConfig["casesListRowNumber"] = 25; } - if (!isset($this->UserConfig["casesListRefreshTime"]) || - (isset($this->UserConfig["casesListRefreshTime"]) && empty($this->UserConfig["casesListRefreshTime"])) - ) { + if (! isset( $this->UserConfig["casesListRefreshTime"] ) || (isset( $this->UserConfig["casesListRefreshTime"] ) && empty( $this->UserConfig["casesListRefreshTime"] ))) { $this->UserConfig["casesListRefreshTime"] = 120; //2 minutes } - $this->UserConfig["TimeZone"] = date("T"); + $this->UserConfig["TimeZone"] = date( "T" ); return $this->UserConfig; } - /** - * setConfig - * - * @param string $route - * @param object &$object - * @param object &$to - * @return void - */ - function setConfig( $route , &$object , &$to ) - { - if (!isset($to)) - $to = &$this->aConfig; - $routes = explode(',',$route); - foreach($routes as $r) { - $ro = explode('/',$r); - if (count($ro)>1) { - $rou = $ro; - unset($rou[0]); - if ($ro[0]==='*') { - foreach($object as $k => $v ) { - if (is_object($object)) { - if (!isset($to[$k])) - $to[$k] = array(); - $this->setConfig(implode('/',$rou),$object->{$k},$to[$k]); - } else { - if (is_array($object)) { - if (!isset($to[$k])) - $to[$k] = array(); - $this->setConfig(implode('/',$rou),$object[$k],$to[$k]); - } - } - } - } else { - if (is_object($object)) { - if (!isset($to[$ro[0]])) - $to[$ro[0]] = array(); - $this->setConfig(implode('/',$rou),$object->{$ro[0]},$to[$ro[0]]); - } else { - if (is_array($object)) { - if (!isset($to[$ro[0]])) - $to[$ro[0]] = array(); - $this->setConfig(implode('/',$rou),$object[$ro[0]],$to[$ro[0]]); - } else { - $to = $object; - } - } + /** + * setConfig + * + * @param string $route + * @param object &$object + * @param object &$to + * @return void + */ + function setConfig ($route, &$object, &$to) + { + if (! isset( $to )) + $to = &$this->aConfig; + $routes = explode( ',', $route ); + foreach ($routes as $r) { + $ro = explode( '/', $r ); + if (count( $ro ) > 1) { + $rou = $ro; + unset( $rou[0] ); + if ($ro[0] === '*') { + foreach ($object as $k => $v) { + if (is_object( $object )) { + if (! isset( $to[$k] )) + $to[$k] = array (); + $this->setConfig( implode( '/', $rou ), $object->{$k}, $to[$k] ); + } else { + if (is_array( $object )) { + if (! isset( $to[$k] )) + $to[$k] = array (); + $this->setConfig( implode( '/', $rou ), $object[$k], $to[$k] ); + } + } + } + } else { + if (is_object( $object )) { + if (! isset( $to[$ro[0]] )) + $to[$ro[0]] = array (); + $this->setConfig( implode( '/', $rou ), $object->{$ro[0]}, $to[$ro[0]] ); + } else { + if (is_array( $object )) { + if (! isset( $to[$ro[0]] )) + $to[$ro[0]] = array (); + $this->setConfig( implode( '/', $rou ), $object[$ro[0]], $to[$ro[0]] ); + } else { + $to = $object; + } + } + } + } else { + if ($ro[0] === '*') { + foreach ($object as $k => $v) { + if (is_object( $object )) { + if (! isset( $to[$k] )) + $to[$k] = array (); + $to[$k] = $object->{$k}; + } else { + if (is_array( $object )) { + if (! isset( $to[$k] )) + $to[$k] = array (); + $to[$k] = $object[$k]; + } + } + } + } else { + if (! isset( $to[$r] )) + $to[$r] = array (); + if (is_object( $object )) { + $to[$r] = $object->{$r}; + } elseif (is_array( $object )) { + $to[$r] = $object[$r]; + } else { + $to[$r] = $object; + } + } + } } - } else { - if ($ro[0]==='*') { - foreach($object as $k => $v ) { - if (is_object($object)) { - if (!isset($to[$k])) - $to[$k] = array(); - $to[$k] = $object->{$k}; - } else { - if (is_array($object)) { - if (!isset($to[$k])) - $to[$k] = array(); - $to[$k] = $object[$k]; - } - } - } - } else { - if (!isset($to[$r])) - $to[$r] = array(); - if (is_object($object)) { - $to[$r] = $object->{$r}; - } elseif (is_array($object)) { - $to[$r] = $object[$r]; - } else { - $to[$r] = $object; - } - } - } - } - } - - function getDateFormats(){ - $formats[] = Array( - 'id'=>'Y-m-d H:i:s', //the id , don't translate - 'name'=>G::loadTranslation('ID_DATE_FORMAT_1') //'Y-m-d H:i:s' i.e: '2010-11-17 10:25:07' - ); - $formats[] = Array( - 'id'=>'d/m/Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_2') //'d/m/Y' i.e:'17/11/2010' - ); - $formats[] = Array( - 'id'=>'m/d/Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_3')//'m/d/Y' i.e:'11/17/2010' - ); - $formats[] = Array( - 'id'=>'Y/d/m', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_4')//'Y/d/m' i.e:'2010/17/11' - ); - $formats[] = Array( - 'id'=>'Y/m/d', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_5')//'Y/m/d' i.e:'2010/11/17' - ); - $formats[] = Array( - 'id'=>'F j, Y, g:i a', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_6')//'F j, Y, g:i a' i.e:'November 17, 2010, 10:45 am' - ); - $formats[] = Array( - 'id'=>'m.d.y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_7')//'m.d.y' i.e: '11.17.10' - ); - $formats[] = Array( - 'id'=>'j, n, Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_8')//'j, n, Y' i.e:'17,11,2010' - ); - $formats[] = Array( - 'id'=>'D M j G:i:s T Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_9')//'D M j G:i:s T Y' i.e:'Thu Nov 17 10:48:18 BOT 2010' - ); - $formats[] = Array( - 'id'=>'D d M, Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_10')//'D d M, Y' i.e:'Thu 17 Nov, 2010' - ); - $formats[] = Array( - 'id'=>'D M, Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_11')//'D M, Y' i.e:'Thu Nov, 2010' - ); - $formats[] = Array( - 'id'=>'d M, Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_12')//'d M, Y' i.e:'17 Nov, 2010' - ); - $formats[] = Array( - 'id'=>'d m, Y', - 'name'=>G::loadTranslation('ID_DATE_FORMAT_13')//'d m, Y' i.e:'17 11, 2010' - ); - - return $formats; - } - - function getUserNameFormats(){ - $formats[] = Array( - 'id'=>'@firstName @lastName', //the id , don't translate - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_1') //label displayed, can be translated - ); - $formats[] = Array( - 'id'=>'@firstName @lastName (@userName)', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_2') - ); - $formats[] = Array( - 'id'=>'@userName', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_3') - ); - $formats[] = Array( - 'id'=>'@userName (@firstName @lastName)', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_4') - ); - $formats[] = Array( - 'id'=>'@lastName @firstName', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_5') - ); - $formats[] = Array( - 'id'=>'@lastName, @firstName', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_6') - ); - $formats[] = Array( - 'id'=>'@lastName, @firstName (@userName)', - 'name'=>G::loadTranslation('ID_USERNAME_FORMAT_7') - ); - - return $formats; - } - - function getSystemDate($dateTime) - { - $oConf = new Configurations; - $oConf->loadConfig($obj, 'ENVIRONMENT_SETTINGS',''); - $creationDateMask = isset($oConf->aConfig['dateFormat'])? $oConf->aConfig['dateFormat']: ''; - - if( $creationDateMask != '' ) { - if( strpos($dateTime, ' ') !== false ) { - list($date, $time) = explode(' ', $dateTime); - list($y, $m, $d) = explode('-', $date); - list($h, $i, $s) = explode(':', $time); - $dateTime = date($creationDateMask, mktime($h, $i, $s, $m, $d, $y)); - } else { - list($y, $m, $d) = explode('-', $dateTime); - $dateTime = date($creationDateMask, mktime(0, 0, 0, $m, $d, $y)); - } } - return $dateTime; - } + function getDateFormats () + { + $formats[] = Array ('id' => 'Y-m-d H:i:s', //the id , don't translate +'name' => G::loadTranslation( 'ID_DATE_FORMAT_1' ) //'Y-m-d H:i:s' i.e: '2010-11-17 10:25:07' + ); + $formats[] = Array ('id' => 'd/m/Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_2' ) //'d/m/Y' i.e:'17/11/2010' + ); + $formats[] = Array ('id' => 'm/d/Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_3' ) //'m/d/Y' i.e:'11/17/2010' + ); + $formats[] = Array ('id' => 'Y/d/m','name' => G::loadTranslation( 'ID_DATE_FORMAT_4' ) //'Y/d/m' i.e:'2010/17/11' + ); + $formats[] = Array ('id' => 'Y/m/d','name' => G::loadTranslation( 'ID_DATE_FORMAT_5' ) //'Y/m/d' i.e:'2010/11/17' + ); + $formats[] = Array ('id' => 'F j, Y, g:i a','name' => G::loadTranslation( 'ID_DATE_FORMAT_6' ) //'F j, Y, g:i a' i.e:'November 17, 2010, 10:45 am' + ); + $formats[] = Array ('id' => 'm.d.y','name' => G::loadTranslation( 'ID_DATE_FORMAT_7' ) //'m.d.y' i.e: '11.17.10' + ); + $formats[] = Array ('id' => 'j, n, Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_8' ) //'j, n, Y' i.e:'17,11,2010' + ); + $formats[] = Array ('id' => 'D M j G:i:s T Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_9' ) //'D M j G:i:s T Y' i.e:'Thu Nov 17 10:48:18 BOT 2010' + ); + $formats[] = Array ('id' => 'D d M, Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_10' ) //'D d M, Y' i.e:'Thu 17 Nov, 2010' + ); + $formats[] = Array ('id' => 'D M, Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_11' ) //'D M, Y' i.e:'Thu Nov, 2010' + ); + $formats[] = Array ('id' => 'd M, Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_12' ) //'d M, Y' i.e:'17 Nov, 2010' + ); + $formats[] = Array ('id' => 'd m, Y','name' => G::loadTranslation( 'ID_DATE_FORMAT_13' ) //'d m, Y' i.e:'17 11, 2010' + ); - function getEnvSetting($key=null, $data=null) - { - $this->loadConfig($obj, 'ENVIRONMENT_SETTINGS',''); + return $formats; + } - if( isset($key) ) { - if( isset($this->aConfig[$key]) ) { - if( isset($data) && is_array($data) ) - foreach($data as $k=>$v) - $this->aConfig[$key] = str_replace('@'.$k, $v, $this->aConfig[$key]); + function getUserNameFormats () + { + $formats[] = Array ('id' => '@firstName @lastName', //the id , don't translate +'name' => G::loadTranslation( 'ID_USERNAME_FORMAT_1' ) //label displayed, can be translated + ); + $formats[] = Array ('id' => '@firstName @lastName (@userName)','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_2' ) + ); + $formats[] = Array ('id' => '@userName','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_3' ) + ); + $formats[] = Array ('id' => '@userName (@firstName @lastName)','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_4' ) + ); + $formats[] = Array ('id' => '@lastName @firstName','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_5' ) + ); + $formats[] = Array ('id' => '@lastName, @firstName','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_6' ) + ); + $formats[] = Array ('id' => '@lastName, @firstName (@userName)','name' => G::loadTranslation( 'ID_USERNAME_FORMAT_7' ) + ); - return $this->aConfig[$key]; - } else - return ''; - } else - return $this->aConfig; - } + return $formats; + } + + function getSystemDate ($dateTime) + { + $oConf = new Configurations(); + $oConf->loadConfig( $obj, 'ENVIRONMENT_SETTINGS', '' ); + $creationDateMask = isset( $oConf->aConfig['dateFormat'] ) ? $oConf->aConfig['dateFormat'] : ''; + + if ($creationDateMask != '') { + if (strpos( $dateTime, ' ' ) !== false) { + list ($date, $time) = explode( ' ', $dateTime ); + list ($y, $m, $d) = explode( '-', $date ); + list ($h, $i, $s) = explode( ':', $time ); + $dateTime = date( $creationDateMask, mktime( $h, $i, $s, $m, $d, $y ) ); + } else { + list ($y, $m, $d) = explode( '-', $dateTime ); + $dateTime = date( $creationDateMask, mktime( 0, 0, 0, $m, $d, $y ) ); + } + } + + return $dateTime; + } + + function getEnvSetting ($key = null, $data = null) + { + $this->loadConfig( $obj, 'ENVIRONMENT_SETTINGS', '' ); + + if (isset( $key )) { + if (isset( $this->aConfig[$key] )) { + if (isset( $data ) && is_array( $data )) + foreach ($data as $k => $v) + $this->aConfig[$key] = str_replace( '@' . $k, $v, $this->aConfig[$key] ); + + return $this->aConfig[$key]; + } else + return ''; + } else + return $this->aConfig; + } } diff --git a/workflow/engine/classes/class.dashletOpenVSCompleted.php b/workflow/engine/classes/class.dashletOpenVSCompleted.php index b8ed76889..b923d7e93 100644 --- a/workflow/engine/classes/class.dashletOpenVSCompleted.php +++ b/workflow/engine/classes/class.dashletOpenVSCompleted.php @@ -2,236 +2,295 @@ require_once 'classes/interfaces/dashletInterface.php'; -class dashletOpenVSCompleted implements DashletInterface { +class dashletOpenVSCompleted implements DashletInterface +{ - const version = '1.0'; + const version = '1.0'; - private $value; - private $open; - private $completed; - private $centerLabel; - private $redFrom; - private $redTo; - private $yellowFrom; - private $yellowTo; - private $greenFrom; - private $greenTo; + private $value; + private $open; + private $completed; + private $centerLabel; + private $redFrom; + private $redTo; + private $yellowFrom; + private $yellowTo; + private $greenFrom; + private $greenTo; - public static function getAdditionalFields($className) { - $additionalFields = array(); + public static function getAdditionalFields ($className) + { + $additionalFields = array (); - $contextTimeStore = new stdclass(); - $contextTimeStore->xtype = 'arraystore'; - $contextTimeStore->fields = array('id', 'value'); - $contextTimeStore->data = array(array('TODAY', 'Today'), - array('YESTERDAY', 'Yesterday'), - array('THIS_WEEK', 'This week'), - array('PREVIOUS_WEEK', 'Previous Week'), - array('THIS_MONTH', 'This Month'), - array('PREVIOUS_MONTH', 'Previous Month'), - array('THIS_YEAR', 'This Year'), - array('PREVIOUS_YEAR', 'Previous Year')); + $contextTimeStore = new stdclass(); + $contextTimeStore->xtype = 'arraystore'; + $contextTimeStore->fields = array ('id','value' + ); + $contextTimeStore->data = array (array ('TODAY','Today' + ),array ('YESTERDAY','Yesterday' + ),array ('THIS_WEEK','This week' + ),array ('PREVIOUS_WEEK','Previous Week' + ),array ('THIS_MONTH','This Month' + ),array ('PREVIOUS_MONTH','Previous Month' + ),array ('THIS_YEAR','This Year' + ),array ('PREVIOUS_YEAR','Previous Year' + ) + ); - $contextTime = new stdclass(); - $contextTime->xtype = 'combo'; - $contextTime->name = 'DAS_INS_CONTEXT_TIME'; - $contextTime->fieldLabel = G::LoadTranslation('ID_PERIOD'); - $contextTime->editable = false; - $contextTime->width = 320; - $contextTime->store = $contextTimeStore; - $contextTime->mode = 'local'; - $contextTime->triggerAction = 'all'; - $contextTime->valueField = 'id'; - $contextTime->displayField = 'value'; - $contextTime->value = 'TODAY'; - $additionalFields[] = $contextTime; + $contextTime = new stdclass(); + $contextTime->xtype = 'combo'; + $contextTime->name = 'DAS_INS_CONTEXT_TIME'; + $contextTime->fieldLabel = G::LoadTranslation( 'ID_PERIOD' ); + $contextTime->editable = false; + $contextTime->width = 320; + $contextTime->store = $contextTimeStore; + $contextTime->mode = 'local'; + $contextTime->triggerAction = 'all'; + $contextTime->valueField = 'id'; + $contextTime->displayField = 'value'; + $contextTime->value = 'TODAY'; + $additionalFields[] = $contextTime; - $redFrom = new stdclass(); - $redFrom->xtype = 'numberfield'; - $redFrom->name = 'DAS_RED_FROM'; - $redFrom->fieldLabel = G::LoadTranslation('ID_RED_STARTS_IN'); - $redFrom->width = 50; - $redFrom->maxLength = 3; - $redFrom->maxValue = 100; - $redFrom->minValue = 0; - $redFrom->allowBlank = false; - $redFrom->value = 0; - $additionalFields[] = $redFrom; + $redFrom = new stdclass(); + $redFrom->xtype = 'numberfield'; + $redFrom->name = 'DAS_RED_FROM'; + $redFrom->fieldLabel = G::LoadTranslation( 'ID_RED_STARTS_IN' ); + $redFrom->width = 50; + $redFrom->maxLength = 3; + $redFrom->maxValue = 100; + $redFrom->minValue = 0; + $redFrom->allowBlank = false; + $redFrom->value = 0; + $additionalFields[] = $redFrom; - $redTo = new stdclass(); - $redTo->xtype = 'numberfield'; - $redTo->name = 'DAS_RED_TO'; - $redTo->fieldLabel = G::LoadTranslation('ID_RED_ENDS_IN'); - $redTo->width = 50; - $redTo->maxLength = 3; - $redTo->maxValue = 100; - $redTo->minValue = 0; - $redTo->allowBlank = false; - $redTo->value = 30; - $additionalFields[] = $redTo; + $redTo = new stdclass(); + $redTo->xtype = 'numberfield'; + $redTo->name = 'DAS_RED_TO'; + $redTo->fieldLabel = G::LoadTranslation( 'ID_RED_ENDS_IN' ); + $redTo->width = 50; + $redTo->maxLength = 3; + $redTo->maxValue = 100; + $redTo->minValue = 0; + $redTo->allowBlank = false; + $redTo->value = 30; + $additionalFields[] = $redTo; - $yellowFrom = new stdclass(); - $yellowFrom->xtype = 'numberfield'; - $yellowFrom->name = 'DAS_YELLOW_FROM'; - $yellowFrom->fieldLabel = G::LoadTranslation('ID_YELLOW_STARTS_IN'); - $yellowFrom->width = 50; - $yellowFrom->maxLength = 3; - $yellowFrom->maxValue = 100; - $yellowFrom->minValue = 0; - $yellowFrom->allowBlank = false; - $yellowFrom->value = 30; - $additionalFields[] = $yellowFrom; + $yellowFrom = new stdclass(); + $yellowFrom->xtype = 'numberfield'; + $yellowFrom->name = 'DAS_YELLOW_FROM'; + $yellowFrom->fieldLabel = G::LoadTranslation( 'ID_YELLOW_STARTS_IN' ); + $yellowFrom->width = 50; + $yellowFrom->maxLength = 3; + $yellowFrom->maxValue = 100; + $yellowFrom->minValue = 0; + $yellowFrom->allowBlank = false; + $yellowFrom->value = 30; + $additionalFields[] = $yellowFrom; - $yellowTo = new stdclass(); - $yellowTo->xtype = 'numberfield'; - $yellowTo->name = 'DAS_YELLOW_TO'; - $yellowTo->fieldLabel = G::LoadTranslation('ID_YELLOW_ENDS_IN'); - $yellowTo->width = 50; - $yellowTo->maxLength = 3; - $yellowTo->maxValue = 100; - $yellowTo->minValue = 0; - $yellowTo->allowBlank = false; - $yellowTo->value = 50; - $additionalFields[] = $yellowTo; + $yellowTo = new stdclass(); + $yellowTo->xtype = 'numberfield'; + $yellowTo->name = 'DAS_YELLOW_TO'; + $yellowTo->fieldLabel = G::LoadTranslation( 'ID_YELLOW_ENDS_IN' ); + $yellowTo->width = 50; + $yellowTo->maxLength = 3; + $yellowTo->maxValue = 100; + $yellowTo->minValue = 0; + $yellowTo->allowBlank = false; + $yellowTo->value = 50; + $additionalFields[] = $yellowTo; - $greenFrom = new stdclass(); - $greenFrom->xtype = 'numberfield'; - $greenFrom->name = 'DAS_GREEN_FROM'; - $greenFrom->fieldLabel = G::LoadTranslation('ID_GREEN_STARTS_IN'); - $greenFrom->width = 50; - $greenFrom->maxLength = 3; - $greenFrom->maxValue = 100; - $greenFrom->minValue = 0; - $greenFrom->allowBlank = false; - $greenFrom->value = 50; - $additionalFields[] = $greenFrom; + $greenFrom = new stdclass(); + $greenFrom->xtype = 'numberfield'; + $greenFrom->name = 'DAS_GREEN_FROM'; + $greenFrom->fieldLabel = G::LoadTranslation( 'ID_GREEN_STARTS_IN' ); + $greenFrom->width = 50; + $greenFrom->maxLength = 3; + $greenFrom->maxValue = 100; + $greenFrom->minValue = 0; + $greenFrom->allowBlank = false; + $greenFrom->value = 50; + $additionalFields[] = $greenFrom; - $greenTo = new stdclass(); - $greenTo->xtype = 'numberfield'; - $greenTo->name = 'DAS_GREEN_TO'; - $greenTo->fieldLabel = G::LoadTranslation('ID_GREEN_ENDS_IN'); - $greenTo->width = 50; - $greenTo->maxLength = 3; - $greenTo->maxValue = 100; - $greenTo->minValue = 0; - $greenTo->allowBlank = false; - $greenTo->value = 100; - $additionalFields[] = $greenTo; + $greenTo = new stdclass(); + $greenTo->xtype = 'numberfield'; + $greenTo->name = 'DAS_GREEN_TO'; + $greenTo->fieldLabel = G::LoadTranslation( 'ID_GREEN_ENDS_IN' ); + $greenTo->width = 50; + $greenTo->maxLength = 3; + $greenTo->maxValue = 100; + $greenTo->minValue = 0; + $greenTo->allowBlank = false; + $greenTo->value = 100; + $additionalFields[] = $greenTo; - return $additionalFields; - } - - public static function getXTemplate($className) { - return ""; - } - - public function setup($config) { - $this->redFrom = isset($config['DAS_RED_FROM']) ? (int) $config['DAS_RED_FROM'] : 0; - $this->redTo = isset($config['DAS_RED_TO']) ? (int) $config['DAS_RED_TO'] : 30; - $this->yellowFrom = isset($config['DAS_YELLOW_FROM']) ? (int) $config['DAS_YELLOW_FROM'] : 30; - $this->yellowTo = isset($config['DAS_YELLOW_TO']) ? (int) $config['DAS_YELLOW_TO'] : 50; - $this->greenFrom = isset($config['DAS_GREEN_FROM']) ? (int) $config['DAS_GREEN_FROM'] : 50; - $this->greenTo = isset($config['DAS_GREEN_TO']) ? (int) $config['DAS_GREEN_TO'] : 100; - - $thisYear = date('Y'); - $lastYear = $thisYear -1; - $thisMonth = date('M'); - $lastMonth = date('M', strtotime( "31 days ago") ); - - $todayIni = date('Y-m-d H:i:s', strtotime( "today 00:00:00")); - $todayEnd = date('Y-m-d H:i:s', strtotime( "today 23:59:59")); - $yesterdayIni = date('Y-m-d H:i:s', strtotime( "yesterday 00:00:00")); - $yesterdayEnd = date('Y-m-d H:i:s', strtotime( "yesterday 23:59:59")); - $thisWeekIni = date('Y-m-d H:i:s', strtotime( "monday 00:00:00")); - $thisWeekEnd = date('Y-m-d H:i:s', strtotime( "sunday 23:59:59")); - $previousWeekIni = date('Y-m-d H:i:s', strtotime( "last monday 00:00:00")); - $previousWeekEnd = date('Y-m-d H:i:s', strtotime( "last sunday 23:59:59")); - - $thisMonthIni = date('Y-m-d H:i:s', strtotime( "$thisMonth 1st 00:00:00")); - $thisMonthEnd = date('Y-m-d H:i:s', strtotime( "$thisMonth last day 23:59:59")); - - $previousMonthIni = date('Y-m-d H:i:s', strtotime( "$lastMonth 1st 00:00:00")); - $previousMonthEnd = date('Y-m-d H:i:s', strtotime( "$lastMonth last day 23:59:59")); - - $thisYearIni = date('Y-m-d H:i:s', strtotime( "jan $thisYear 00:00:00")); - $thisYearEnd = date('Y-m-d H:i:s', strtotime( "Dec 31 $thisYear 23:59:59")); - $previousYearIni = date('Y-m-d H:i:s', strtotime( "jan $lastYear 00:00:00")); - $previousYearEnd = date('Y-m-d H:i:s', strtotime( "Dec 31 $lastYear 23:59:59")); - - if (!isset($config['DAS_INS_CONTEXT_TIME'])) { - $config['DAS_INS_CONTEXT_TIME'] = 'TODAY'; + return $additionalFields; } - switch ( $config['DAS_INS_CONTEXT_TIME'] ) { - case 'TODAY' : $dateIni = $todayIni; $dateEnd = $todayEnd; break; - case 'YESTERDAY' : $dateIni = $yesterdayIni; $dateEnd = $yesterdayEnd; break; - case 'THIS_WEEK' : $dateIni = $thisWeekIni; $dateEnd = $thisWeekEnd; break; - case 'PREVIOUS_WEEK' : $dateIni = $previousWeekIni; $dateEnd = $previousWeekEnd; break; - case 'THIS_MONTH' : $dateIni = $todayIni; $dateEnd = $todayEnd; break; - case 'PREVIOUS_MONTH' : $dateIni = $todayIni; $dateEnd = $todayEnd; break; - case 'THIS_QUARTER' : $dateIni = $todayIni; $dateEnd = $todayEnd; break; - case 'PREVIOUS_QUARTER' : $dateIni = $todayIni; $dateEnd = $todayEnd; break; - case 'THIS_YEAR' : $dateIni = $thisYearIni; $dateEnd = $thisYearEnd; break; - case 'PREVIOUS_YEAR' : $dateIni = $previousYearIni; $dateEnd = $previousYearEnd; break; + public static function getXTemplate ($className) + { + return ""; } - $con = Propel::getConnection("workflow"); - $stmt = $con->createStatement(); - $sql = "select count(*) as CANT from APPLICATION where APP_STATUS in ( 'DRAFT', 'TO_DO' ) "; - $sql .= "and APP_CREATE_DATE > '$dateIni' and APP_CREATE_DATE <= '$dateEnd' "; - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $casesTodo = $row['CANT']; + public function setup ($config) + { + $this->redFrom = isset( $config['DAS_RED_FROM'] ) ? (int) $config['DAS_RED_FROM'] : 0; + $this->redTo = isset( $config['DAS_RED_TO'] ) ? (int) $config['DAS_RED_TO'] : 30; + $this->yellowFrom = isset( $config['DAS_YELLOW_FROM'] ) ? (int) $config['DAS_YELLOW_FROM'] : 30; + $this->yellowTo = isset( $config['DAS_YELLOW_TO'] ) ? (int) $config['DAS_YELLOW_TO'] : 50; + $this->greenFrom = isset( $config['DAS_GREEN_FROM'] ) ? (int) $config['DAS_GREEN_FROM'] : 50; + $this->greenTo = isset( $config['DAS_GREEN_TO'] ) ? (int) $config['DAS_GREEN_TO'] : 100; - $stmt = $con->createStatement(); - $sql = "select count(*) as CANT from APPLICATION where APP_STATUS = 'COMPLETED' "; - $sql .= "and APP_CREATE_DATE > '$dateIni' and APP_CREATE_DATE <= '$dateEnd' "; - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $casesCompleted = $row['CANT']; - if ( $casesCompleted + $casesTodo != 0 ) { - $this->value = $casesCompleted / ($casesCompleted + $casesTodo)*100; + $thisYear = date( 'Y' ); + $lastYear = $thisYear - 1; + $thisMonth = date( 'M' ); + $lastMonth = date( 'M', strtotime( "31 days ago" ) ); + + $todayIni = date( 'Y-m-d H:i:s', strtotime( "today 00:00:00" ) ); + $todayEnd = date( 'Y-m-d H:i:s', strtotime( "today 23:59:59" ) ); + $yesterdayIni = date( 'Y-m-d H:i:s', strtotime( "yesterday 00:00:00" ) ); + $yesterdayEnd = date( 'Y-m-d H:i:s', strtotime( "yesterday 23:59:59" ) ); + $thisWeekIni = date( 'Y-m-d H:i:s', strtotime( "monday 00:00:00" ) ); + $thisWeekEnd = date( 'Y-m-d H:i:s', strtotime( "sunday 23:59:59" ) ); + $previousWeekIni = date( 'Y-m-d H:i:s', strtotime( "last monday 00:00:00" ) ); + $previousWeekEnd = date( 'Y-m-d H:i:s', strtotime( "last sunday 23:59:59" ) ); + + $thisMonthIni = date( 'Y-m-d H:i:s', strtotime( "$thisMonth 1st 00:00:00" ) ); + $thisMonthEnd = date( 'Y-m-d H:i:s', strtotime( "$thisMonth last day 23:59:59" ) ); + + $previousMonthIni = date( 'Y-m-d H:i:s', strtotime( "$lastMonth 1st 00:00:00" ) ); + $previousMonthEnd = date( 'Y-m-d H:i:s', strtotime( "$lastMonth last day 23:59:59" ) ); + + $thisYearIni = date( 'Y-m-d H:i:s', strtotime( "jan $thisYear 00:00:00" ) ); + $thisYearEnd = date( 'Y-m-d H:i:s', strtotime( "Dec 31 $thisYear 23:59:59" ) ); + $previousYearIni = date( 'Y-m-d H:i:s', strtotime( "jan $lastYear 00:00:00" ) ); + $previousYearEnd = date( 'Y-m-d H:i:s', strtotime( "Dec 31 $lastYear 23:59:59" ) ); + + if (! isset( $config['DAS_INS_CONTEXT_TIME'] )) { + $config['DAS_INS_CONTEXT_TIME'] = 'TODAY'; + } + + switch ($config['DAS_INS_CONTEXT_TIME']) { + case 'TODAY': + $dateIni = $todayIni; + $dateEnd = $todayEnd; + break; + case 'YESTERDAY': + $dateIni = $yesterdayIni; + $dateEnd = $yesterdayEnd; + break; + case 'THIS_WEEK': + $dateIni = $thisWeekIni; + $dateEnd = $thisWeekEnd; + break; + case 'PREVIOUS_WEEK': + $dateIni = $previousWeekIni; + $dateEnd = $previousWeekEnd; + break; + case 'THIS_MONTH': + $dateIni = $todayIni; + $dateEnd = $todayEnd; + break; + case 'PREVIOUS_MONTH': + $dateIni = $todayIni; + $dateEnd = $todayEnd; + break; + case 'THIS_QUARTER': + $dateIni = $todayIni; + $dateEnd = $todayEnd; + break; + case 'PREVIOUS_QUARTER': + $dateIni = $todayIni; + $dateEnd = $todayEnd; + break; + case 'THIS_YEAR': + $dateIni = $thisYearIni; + $dateEnd = $thisYearEnd; + break; + case 'PREVIOUS_YEAR': + $dateIni = $previousYearIni; + $dateEnd = $previousYearEnd; + break; + } + + $con = Propel::getConnection( "workflow" ); + $stmt = $con->createStatement(); + $sql = "select count(*) as CANT from APPLICATION where APP_STATUS in ( 'DRAFT', 'TO_DO' ) "; + $sql .= "and APP_CREATE_DATE > '$dateIni' and APP_CREATE_DATE <= '$dateEnd' "; + $rs = $stmt->executeQuery( $sql, ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + $casesTodo = $row['CANT']; + + $stmt = $con->createStatement(); + $sql = "select count(*) as CANT from APPLICATION where APP_STATUS = 'COMPLETED' "; + $sql .= "and APP_CREATE_DATE > '$dateIni' and APP_CREATE_DATE <= '$dateEnd' "; + $rs = $stmt->executeQuery( $sql, ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + $casesCompleted = $row['CANT']; + if ($casesCompleted + $casesTodo != 0) { + $this->value = $casesCompleted / ($casesCompleted + $casesTodo) * 100; + } else { + $this->value = 0; + } + $this->open = $casesCompleted; + $this->completed = $casesCompleted + $casesTodo; + switch ($config['DAS_INS_CONTEXT_TIME']) { + case 'TODAY': + $this->centerLabel = 'Today'; + break; + case 'YESTERDAY': + $this->centerLabel = 'Yesterday'; + break; + case 'THIS_WEEK': + $this->centerLabel = 'This week'; + break; + case 'PREVIOUS_WEEK': + $this->centerLabel = 'Previous week'; + break; + case 'THIS_MONTH': + $this->centerLabel = 'This month'; + break; + case 'PREVIOUS_MONTH': + $this->centerLabel = 'Previous month'; + break; + case 'THIS_QUARTER': + $this->centerLabel = 'This quarter'; + break; + case 'PREVIOUS_QUARTER': + $this->centerLabel = 'Previous quarter'; + break; + case 'THIS_YEAR': + $this->centerLabel = 'This year'; + break; + case 'PREVIOUS_YEAR': + $this->centerLabel = 'Previous year'; + break; + default: + $this->centerLabel = ''; + break; + } + return true; } - else { - $this->value = 0; + + public function render ($width = 300) + { + G::LoadClass( 'pmGauge' ); + $g = new pmGauge(); + $g->w = $width; + $g->value = $this->value; + + $g->redFrom = $this->redFrom; + $g->redTo = $this->redTo; + $g->yellowFrom = $this->yellowFrom; + $g->yellowTo = $this->yellowTo; + $g->greenFrom = $this->greenFrom; + $g->greenTo = $this->greenTo; + + $g->centerLabel = $this->centerLabel; + $g->open = $this->open; + $g->completed = $this->completed; + $g->render(); } - $this->open = $casesCompleted; - $this->completed = $casesCompleted + $casesTodo; - switch ( $config['DAS_INS_CONTEXT_TIME'] ) { - case 'TODAY' : $this->centerLabel = 'Today'; break; - case 'YESTERDAY' : $this->centerLabel = 'Yesterday'; break; - case 'THIS_WEEK' : $this->centerLabel = 'This week'; break; - case 'PREVIOUS_WEEK' : $this->centerLabel = 'Previous week'; break; - case 'THIS_MONTH' : $this->centerLabel = 'This month'; break; - case 'PREVIOUS_MONTH' : $this->centerLabel = 'Previous month'; break; - case 'THIS_QUARTER' : $this->centerLabel = 'This quarter'; break; - case 'PREVIOUS_QUARTER' : $this->centerLabel = 'Previous quarter'; break; - case 'THIS_YEAR' : $this->centerLabel = 'This year'; break; - case 'PREVIOUS_YEAR' : $this->centerLabel = 'Previous year'; break; - default : $this->centerLabel = '';break; - } - return true; - } - - public function render ($width = 300) { - G::LoadClass('pmGauge'); - $g = new pmGauge(); - $g->w = $width; - $g->value = $this->value; - - $g->redFrom = $this->redFrom; - $g->redTo = $this->redTo; - $g->yellowFrom = $this->yellowFrom; - $g->yellowTo = $this->yellowTo; - $g->greenFrom = $this->greenFrom; - $g->greenTo = $this->greenTo; - - $g->centerLabel = $this->centerLabel; - $g->open = $this->open; - $g->completed = $this->completed; - $g->render(); - } } \ No newline at end of file diff --git a/workflow/engine/classes/class.dashletProcessMakerCommunity.php b/workflow/engine/classes/class.dashletProcessMakerCommunity.php index 0c01c9898..bf19fd9e9 100644 --- a/workflow/engine/classes/class.dashletProcessMakerCommunity.php +++ b/workflow/engine/classes/class.dashletProcessMakerCommunity.php @@ -2,26 +2,31 @@ require_once 'classes/interfaces/dashletInterface.php'; -class dashletProcessMakerCommunity implements DashletInterface { +class dashletProcessMakerCommunity implements DashletInterface +{ - const version = '1.0'; + const version = '1.0'; - public static function getAdditionalFields($className) { - $additionalFields = array(); + public static function getAdditionalFields ($className) + { + $additionalFields = array (); - return $additionalFields; - } + return $additionalFields; + } - public static function getXTemplate($className) { - return ""; - } + public static function getXTemplate ($className) + { + return ""; + } - public function setup($config) { - return true; - } + public function setup ($config) + { + return true; + } - public function render ($width = 300) { - $html = " + public function render ($width = 300) + { + $html = " @@ -139,7 +144,7 @@ class dashletProcessMakerCommunity implements DashletInterface { "; - echo $html; - } + echo $html; + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.dashletProcessMakerEnterprise.php b/workflow/engine/classes/class.dashletProcessMakerEnterprise.php index 6aa9b5f27..edc7347f2 100644 --- a/workflow/engine/classes/class.dashletProcessMakerEnterprise.php +++ b/workflow/engine/classes/class.dashletProcessMakerEnterprise.php @@ -2,26 +2,31 @@ require_once 'classes/interfaces/dashletInterface.php'; -class dashletProcessMakerEnterprise implements DashletInterface { +class dashletProcessMakerEnterprise implements DashletInterface +{ - const version = '1.0'; + const version = '1.0'; - public static function getAdditionalFields($className) { - $additionalFields = array(); + public static function getAdditionalFields ($className) + { + $additionalFields = array (); - return $additionalFields; - } + return $additionalFields; + } - public static function getXTemplate($className) { - return ""; - } + public static function getXTemplate ($className) + { + return ""; + } - public function setup($config) { - return true; - } + public function setup ($config) + { + return true; + } - public function render ($width = 300) { - $html = " + public function render ($width = 300) + { + $html = " @@ -247,7 +252,7 @@ class dashletProcessMakerEnterprise implements DashletInterface { "; - echo $html; - } + echo $html; + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.dashletRssReader.php b/workflow/engine/classes/class.dashletRssReader.php index 28d5fea61..4e3d6e9ed 100644 --- a/workflow/engine/classes/class.dashletRssReader.php +++ b/workflow/engine/classes/class.dashletRssReader.php @@ -2,107 +2,111 @@ require_once 'classes/interfaces/dashletInterface.php'; -class dashletRssReader implements DashletInterface { +class dashletRssReader implements DashletInterface +{ - const version = '1.0'; + const version = '1.0'; - public static function getAdditionalFields($className) { - $additionalFields = array(); - - $urlFrom = new stdclass(); - $urlFrom->xtype = 'textfield'; - $urlFrom->name = 'DAS_URL'; - $urlFrom->fieldLabel = 'Url'; - $urlFrom->width = 320; - $urlFrom->maxLength = 200; - $urlFrom->allowBlank = false; - $urlFrom->value = "http://license.processmaker.com/syspmLicenseSrv/en/green/services/rssAP"; - $additionalFields[] = $urlFrom; - - return $additionalFields; - } - - public static function getXTemplate($className) { - return ""; - } - - public function setup($config) { - $this->urlFrom = isset($config['DAS_URL']) ? $config['DAS_URL'] : "http://license.processmaker.com/syspmLicenseSrv/en/green/services/rssAP"; - return true; - } - - public function render ($width = 300) { - $pCurl = curl_init(); - curl_setopt($pCurl, CURLOPT_URL, $this->urlFrom); - curl_setopt($pCurl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($pCurl, CURLOPT_FOLLOWLOCATION, false); - curl_setopt($pCurl, CURLOPT_AUTOREFERER, true); - //To avoid SSL error - curl_setopt($pCurl, CURLOPT_SSL_VERIFYHOST, 0); - curl_setopt($pCurl, CURLOPT_SSL_VERIFYPEER, 0); - - //To avoid timeouts - curl_setopt($pCurl, CURLOPT_CONNECTTIMEOUT, 10); - curl_setopt($pCurl, CURLOPT_TIMEOUT, 20); - - curl_setopt($pCurl, CURLOPT_NOPROGRESS, false); - curl_setopt($pCurl, CURLOPT_VERBOSE, true); - - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($pCurl, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($pCurl, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($pCurl, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($pCurl, CURLOPT_HTTPHEADER, array('Expect:')); - } - - $self->rss = @simplexml_load_string(curl_exec($pCurl)); - if($self->rss) + public static function getAdditionalFields ($className) { - $index= 0; - $render = ''; - $self->items = $self->rss->channel->item; - if (count($self->rss->channel)!= 0) { - $status = 'true'; - foreach($self->items as $self->item) - { - $self->title = $self->item->title; - $self->link = $self->item->link; + $additionalFields = array (); - $self->des = $self->item->description; - $render[] = array('link' => ''.$self->title.'
','description' => $self->des.'

'); - $index++; + $urlFrom = new stdclass(); + $urlFrom->xtype = 'textfield'; + $urlFrom->name = 'DAS_URL'; + $urlFrom->fieldLabel = 'Url'; + $urlFrom->width = 320; + $urlFrom->maxLength = 200; + $urlFrom->allowBlank = false; + $urlFrom->value = "http://license.processmaker.com/syspmLicenseSrv/en/green/services/rssAP"; + $additionalFields[] = $urlFrom; + + return $additionalFields; + } + + public static function getXTemplate ($className) + { + return ""; + } + + public function setup ($config) + { + $this->urlFrom = isset( $config['DAS_URL'] ) ? $config['DAS_URL'] : "http://license.processmaker.com/syspmLicenseSrv/en/green/services/rssAP"; + return true; + } + + public function render ($width = 300) + { + $pCurl = curl_init(); + curl_setopt( $pCurl, CURLOPT_URL, $this->urlFrom ); + curl_setopt( $pCurl, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $pCurl, CURLOPT_FOLLOWLOCATION, false ); + curl_setopt( $pCurl, CURLOPT_AUTOREFERER, true ); + //To avoid SSL error + curl_setopt( $pCurl, CURLOPT_SSL_VERIFYHOST, 0 ); + curl_setopt( $pCurl, CURLOPT_SSL_VERIFYPEER, 0 ); + + //To avoid timeouts + curl_setopt( $pCurl, CURLOPT_CONNECTTIMEOUT, 10 ); + curl_setopt( $pCurl, CURLOPT_TIMEOUT, 20 ); + + curl_setopt( $pCurl, CURLOPT_NOPROGRESS, false ); + curl_setopt( $pCurl, CURLOPT_VERBOSE, true ); + + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $pCurl, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $pCurl, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $pCurl, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $pCurl, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); } - } - else { - $status = 'Error'; - $render[] =array('link' => 'Error', 'description' =>"Unable to parse XML"); - } - } - else { - $status = 'Error'; - $render[] =array('link' => 'Error', 'description' =>"Unable to parse XML"); - } - G::verifyPath ( PATH_SMARTY_C, true ); - $smarty = new Smarty(); - $smarty->template_dir = PATH_CORE.'templates/dashboard/'; - $smarty->compile_dir = PATH_SMARTY_C; - try { - $smarty->assign('url', $this->urlFrom); - $smarty->assign('render', $render); - $smarty->assign('status', $status); - } - catch (Exception $ex) { - print $item->key; - } - $smarty->display('dashletRssReaderTemplate.html',null,null); + $self->rss = @simplexml_load_string( curl_exec( $pCurl ) ); + if ($self->rss) { + $index = 0; + $render = ''; + $self->items = $self->rss->channel->item; + if (count( $self->rss->channel ) != 0) { + $status = 'true'; + foreach ($self->items as $self->item) { + $self->title = $self->item->title; + $self->link = $self->item->link; - } + $self->des = $self->item->description; + $render[] = array ('link' => '' . $self->title . '
','description' => $self->des . '

' + ); + $index ++; + } + } else { + $status = 'Error'; + $render[] = array ('link' => 'Error','description' => "Unable to parse XML" + ); + } + } else { + $status = 'Error'; + $render[] = array ('link' => 'Error','description' => "Unable to parse XML" + ); + } + G::verifyPath( PATH_SMARTY_C, true ); + $smarty = new Smarty(); + $smarty->template_dir = PATH_CORE . 'templates/dashboard/'; + $smarty->compile_dir = PATH_SMARTY_C; + + try { + $smarty->assign( 'url', $this->urlFrom ); + $smarty->assign( 'render', $render ); + $smarty->assign( 'status', $status ); + } catch (Exception $ex) { + print $item->key; + } + $smarty->display( 'dashletRssReaderTemplate.html', null, null ); + + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.dates.php b/workflow/engine/classes/class.dates.php index d1ff56fd1..5d9dea6da 100755 --- a/workflow/engine/classes/class.dates.php +++ b/workflow/engine/classes/class.dates.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * / - -/* + * + * /* * Created on 21/01/2008 * This class is used for handling dates * * @author David Callizaya */ - - require_once ( "classes/model/TaskPeer.php" ); - require_once ( "classes/model/HolidayPeer.php" ); - - /** - * @package workflow.engine.classes - */ -class dates { - private $holidays = array(); - private $weekends = array(); - private $range = array(); - private $skipEveryYear = true; - private $calendarDays = false; //by default we are using working days - private $hoursPerDay = 8; //you should change this - - - /** - * Function that calculate a final date based on $sInitDate and $iDuration - * This function also uses a Calendar component (class.calendar.php) where all the definition of - * a User, task, Process or default calendar is defined. base on that information is possible to setup different calendars - * and apply them to a task, process or user. Each calendar have Working Days, Business Hours and Holidays - * - * @name calculateDate - * @access public - * @author Hugo Loza - * @param date $sInitDate - * @param double $iDuration - * @param string $sTimeUnit - * @param string $iTypeDay - * @param string $UsrUid - * @param string $ProUid - * @param string $TasUid - * @return array('DUE_DATE'=>'Final calculated date formatted as Y-m-d H:i:s','DUE_DATE_SECONDS'=>'Final calculated date in seconds','OLD_DUE_DATE'=>'Using deprecate4d function','OLD_DUE_DATE_SECONDS'=>'Using deprecated function','DUE_DATE_LOG'=>'Log of all the calculations made') - * @todo test this function with negative durations (for events) - * - * - */ - function calculateDate( $sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid = NULL, $ProUid = NULL, $TasUid =NULL ) - { - //$oldDate=$this->calculateDate_noCalendar( $sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid, $ProUid, $TasUid); - //Set Calendar when the object is instanced in this order/priority (Task, User, Process, Default) - G::LoadClass('calendar'); - $calendarObj=new calendar($UsrUid,$ProUid,$TasUid); - //Get next Business Hours/Range based on : - switch(strtoupper($sTimeUnit)){ - case 'DAYS': $hoursToProcess=$iDuration*8; break;//In Hours - default: $hoursToProcess=$iDuration; break;//In Hours - } - $dateArray = explode(" ",$sInitDate); - $currentDate = $dateArray[0]; - $currentTime = isset($dateArray[1])? $dateArray[1]: "00:00:00"; - - $startTime=(float) array_sum(explode(' ',microtime())); - - $calendarObj->addCalendarLog("* Starting at: $startTime"); - $calendarObj->addCalendarLog(">>>>> Hours to Process: $hoursToProcess"); - $calendarObj->addCalendarLog(">>>>> Current Date: $currentDate"); - $calendarObj->addCalendarLog(">>>>> Current Time: $currentTime"); - $array_hours = explode(":",$currentTime); - $seconds2 = $array_hours[2]; - $minutes2 = 0; - while($hoursToProcess>0){ - $validBusinessHour=$calendarObj->getNextValidBusinessHoursRange($currentDate,$currentTime); - //For Date/Time operations - $currentDateA = explode("-",$validBusinessHour['DATE']); - $currentTimeA = explode(":",$validBusinessHour['TIME']); - $hour = $currentTimeA[0]; - $minute = $currentTimeA[1]; - $second = isset($currentTimeA[2])?$currentTimeA[2]:0; - $month = $currentDateA[1]; - $day = $currentDateA[2]; - $year = $currentDateA[0]; - $normalizedDate = date("Y-m-d H:i:s",mktime($hour,$minute,$second,$month,$day,$year)); - $normalizedDateInt = mktime($hour,$minute,$second,$month,$day,$year); - $normalizedDateSeconds = ($hour*60*60)+($minute*60); - $arrayHour = explode(".",$hoursToProcess); - if(isset($arrayHour[1])){ - $minutes1 = $arrayHour[1]; - $cadm = strlen($minutes1); - $minutes2 = (($minutes1/pow(10,$cadm))*60); - } - $possibleTime=date("Y-m-d H:i:s",mktime($hour+$hoursToProcess,$minute+$minutes2,$second+$seconds2,$month,$day,$year)); - $possibleTimeInt=mktime($hour+$hoursToProcess,$minute+$minutes2,$second+$seconds2,$month,$day,$year); - $offsetPermitedMinutes="0"; - $calendarBusinessEndA=explode(":",$validBusinessHour['BUSINESS_HOURS']['CALENDAR_BUSINESS_END']); - $calendarBusinessEndNormalized=date("Y-m-d H:i:s",mktime($calendarBusinessEndA[0],$calendarBusinessEndA[1]+$offsetPermitedMinutes,0,$month,$day,$year)); - $calendarBusinessEndInt=mktime($calendarBusinessEndA[0],$calendarBusinessEndA[1]+$offsetPermitedMinutes,0,$month,$day,$year); - $calendarBusinessEndSeconds=($calendarBusinessEndA[0]*60*60)+($calendarBusinessEndA[1]*60); - $calendarObj->addCalendarLog("Possible time: $possibleTime"); - $calendarObj->addCalendarLog("Current Start Date/Time: $normalizedDate"); - $calendarObj->addCalendarLog("Calendar Business End: $calendarBusinessEndNormalized"); - if($possibleTimeInt>$calendarBusinessEndInt){ - $currentDateTimeB = explode(" ",$calendarBusinessEndNormalized); - $currentDate = $currentDateTimeB[0]; - $currentTime = $currentDateTimeB[1]; - $diff = abs($normalizedDateSeconds-$calendarBusinessEndSeconds); - $diffHours = $diff/3600; - $hoursToProcess = $hoursToProcess-$diffHours; - } - else{ - $currentDateTimeA = explode(" ",$possibleTime); - $currentDate = $currentDateTimeA[0]; - $currentTime = $currentDateTimeA[1]; - $hoursToProcess = 0; - } - $calendarObj->addCalendarLog("** Hours to Process: $hoursToProcess"); - } - $calendarObj->addCalendarLog("+++++++++++ Calculated Due Date $currentDate $currentTime"); - $result['DUE_DATE'] = $currentDate." ".$currentTime; - $result['DUE_DATE_SECONDS'] = strtotime($currentDate." ".$currentTime); - //$result['OLD_DUE_DATE'] = date("Y-m-d H:i:s",$oldDate); - //$result['OLD_DUE_DATE_SECONDS']= $oldDate; - - $endTime=(float) array_sum(explode(' ',microtime())); - $calendarObj->addCalendarLog("* Ending at: $endTime"); - $calcTime=round($endTime-$startTime,3); - $calendarObj->addCalendarLog("** Processing time: ". sprintf("%.4f", ($endTime-$startTime))." seconds"); - $result['DUE_DATE_LOG'] = $calendarObj->calendarLog; - return $result; - } - - /** - * Calculate $sInitDate + $iDaysCount, skipping non laborable days. - * Input: Any valid strtotime function type input. - * Returns: Integer timestamp of the result. - * Warning: It will hangs if there is no possible days to count as - * "laborable". - * @param date $sInitDate - * @param double $iDuration - * @param string $sTimeUnit - * @param string $iTypeDay - * @param string $UsrUid - * @param string $ProUid - * @param string $TasUid - * @return integer timestamp of the result - * @deprecated renamed by Hugo Loza (see calculateDate new function) - */ - - function calculateDate_noCalendar( $sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid = NULL, $ProUid = NULL, $TasUid =NULL ) { - //load in class variables the config of working days, holidays etc.. - $this->prepareInformation( $UsrUid , $ProUid , $TasUid ); - $iHours = 0; $iDays = 0; - //convert the $iDuration and $sTimeUnit in hours and days, take in mind 8 hours = 1 day. and then we will have similar for 5 days = 1 weekends - if ( strtolower ( $sTimeUnit ) == 'hours' ) { - $iAux = intval(abs($iDuration)); - $iHours = $iAux % $this->hoursPerDay; - $iDays = intval( $iAux / $this->hoursPerDay ); - } - if ( strtolower ( $sTimeUnit ) == 'days' ) { - $iAux = intval(abs($iDuration * $this->hoursPerDay)); - $iHours = $iAux % 8; - $iDays = intval( $iAux / 8 ); - } - $addSign = ( $iDuration >= 0 ) ? '+' : '-'; - $iInitDate = strtotime( $sInitDate ); - if ( $iTypeDay == 1 ) { // working days - // if there are days calculate the days, - $iEndDate = $this->addDays( $iInitDate , $iDays, $addSign ); - // if there are hours calculate the hours, and probably add a day if the quantity of hours for last day > 8 hours - $iEndDate = $this->addHours( $iEndDate , $iHours, $addSign ); - } - else { // $task->getTasTypeDay() == 2 // calendar days - $iEndDate = strtotime( $addSign . $iDays . ' days ' , $iInitDate ); - $iEndDate = strtotime( $addSign . $iHours . ' hours ' , $iEndDate ); - } - return $iEndDate; - } +require_once ("classes/model/TaskPeer.php"); +require_once ("classes/model/HolidayPeer.php"); /** - * Calculate duration of the $sInitDate - $sEndDate. - * @param date $sInitDate - * @param date $sEndDate - * @param string $UsrUid - * @param string $ProUid - * @param string $TasUid - * @return int - * + * + * @package workflow.engine.classes */ - function calculateDuration( $sInitDate, $sEndDate = '', $UsrUid = NULL, $ProUid = NULL, $TasUid = NULL) { - $this->prepareInformation($UsrUid, $ProUid, $TasUid); - if ((string)$sEndDate == '') { - $sEndDate = date('Y-m-d H:i:s'); - } - if (strtotime($sInitDate) > strtotime($sEndDate)) { - $sAux = $sInitDate; - $sInitDate = $sEndDate; - $sEndDate = $sAux; - } - $aAux1 = explode(' ', $sInitDate); - $aAux2 = explode(' ', $sEndDate); - $aInitDate = explode('-', $aAux1[0]); - $aEndDate = explode('-', $aAux2[0]); - $i = 1; - $iWorkedDays = 0; - $bFinished = false; - $fHours1 = 0.0; - $fHours2 = 0.0; - if (count($aInitDate) != 3) { - $aInitDate = array(0, 0, 0); - } - if (count($aEndDate) != 3) { - $aEndDate = array(0, 0, 0); - } - if ($aInitDate !== $aEndDate) { - while (!$bFinished && ($i < 10000)) { - $sAux = date('Y-m-d', mktime(0, 0, 0, $aInitDate[1], $aInitDate[2] + $i, $aInitDate[0])); - if ($sAux != implode('-', $aEndDate)) { - if (!in_array($sAux, $this->holidays)) { - if (!in_array(date('w', mktime(0, 0, 0, $aInitDate[1], $aInitDate[2] + $i, $aInitDate[0])), $this->weekends)) { - $iWorkedDays++; +class dates +{ + private $holidays = array (); + private $weekends = array (); + private $range = array (); + private $skipEveryYear = true; + private $calendarDays = false; //by default we are using working days + private $hoursPerDay = 8; //you should change this + + + /** + * Function that calculate a final date based on $sInitDate and $iDuration + * This function also uses a Calendar component (class.calendar.php) where all the definition of + * a User, task, Process or default calendar is defined. + * base on that information is possible to setup different calendars + * and apply them to a task, process or user. Each calendar have Working Days, Business Hours and Holidays + * + * @name calculateDate + * @access public + * @author Hugo Loza + * @param date $sInitDate + * @param double $iDuration + * @param string $sTimeUnit + * @param string $iTypeDay + * @param string $UsrUid + * @param string $ProUid + * @param string $TasUid + * @return array('DUE_DATE'=>'Final calculated date formatted as Y-m-d H:i:s','DUE_DATE_SECONDS'=>'Final calculated date in seconds','OLD_DUE_DATE'=>'Using deprecate4d function','OLD_DUE_DATE_SECONDS'=>'Using deprecated function','DUE_DATE_LOG'=>'Log of all the calculations made') + * @todo test this function with negative durations (for events) + * + * + */ + function calculateDate ($sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid = NULL, $ProUid = NULL, $TasUid = NULL) + { + //$oldDate=$this->calculateDate_noCalendar( $sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid, $ProUid, $TasUid); + //Set Calendar when the object is instanced in this order/priority (Task, User, Process, Default) + G::LoadClass( 'calendar' ); + $calendarObj = new calendar( $UsrUid, $ProUid, $TasUid ); + //Get next Business Hours/Range based on : + switch (strtoupper( $sTimeUnit )) { + case 'DAYS': + $hoursToProcess = $iDuration * 8; + break; //In Hours + default: + $hoursToProcess = $iDuration; + break; //In Hours + } + $dateArray = explode( " ", $sInitDate ); + $currentDate = $dateArray[0]; + $currentTime = isset( $dateArray[1] ) ? $dateArray[1] : "00:00:00"; + + $startTime = (float) array_sum( explode( ' ', microtime() ) ); + + $calendarObj->addCalendarLog( "* Starting at: $startTime" ); + $calendarObj->addCalendarLog( ">>>>> Hours to Process: $hoursToProcess" ); + $calendarObj->addCalendarLog( ">>>>> Current Date: $currentDate" ); + $calendarObj->addCalendarLog( ">>>>> Current Time: $currentTime" ); + $array_hours = explode( ":", $currentTime ); + $seconds2 = $array_hours[2]; + $minutes2 = 0; + while ($hoursToProcess > 0) { + $validBusinessHour = $calendarObj->getNextValidBusinessHoursRange( $currentDate, $currentTime ); + //For Date/Time operations + $currentDateA = explode( "-", $validBusinessHour['DATE'] ); + $currentTimeA = explode( ":", $validBusinessHour['TIME'] ); + $hour = $currentTimeA[0]; + $minute = $currentTimeA[1]; + $second = isset( $currentTimeA[2] ) ? $currentTimeA[2] : 0; + $month = $currentDateA[1]; + $day = $currentDateA[2]; + $year = $currentDateA[0]; + $normalizedDate = date( "Y-m-d H:i:s", mktime( $hour, $minute, $second, $month, $day, $year ) ); + $normalizedDateInt = mktime( $hour, $minute, $second, $month, $day, $year ); + $normalizedDateSeconds = ($hour * 60 * 60) + ($minute * 60); + $arrayHour = explode( ".", $hoursToProcess ); + if (isset( $arrayHour[1] )) { + $minutes1 = $arrayHour[1]; + $cadm = strlen( $minutes1 ); + $minutes2 = (($minutes1 / pow( 10, $cadm )) * 60); } - } - $i++; + $possibleTime = date( "Y-m-d H:i:s", mktime( $hour + $hoursToProcess, $minute + $minutes2, $second + $seconds2, $month, $day, $year ) ); + $possibleTimeInt = mktime( $hour + $hoursToProcess, $minute + $minutes2, $second + $seconds2, $month, $day, $year ); + $offsetPermitedMinutes = "0"; + $calendarBusinessEndA = explode( ":", $validBusinessHour['BUSINESS_HOURS']['CALENDAR_BUSINESS_END'] ); + $calendarBusinessEndNormalized = date( "Y-m-d H:i:s", mktime( $calendarBusinessEndA[0], $calendarBusinessEndA[1] + $offsetPermitedMinutes, 0, $month, $day, $year ) ); + $calendarBusinessEndInt = mktime( $calendarBusinessEndA[0], $calendarBusinessEndA[1] + $offsetPermitedMinutes, 0, $month, $day, $year ); + $calendarBusinessEndSeconds = ($calendarBusinessEndA[0] * 60 * 60) + ($calendarBusinessEndA[1] * 60); + $calendarObj->addCalendarLog( "Possible time: $possibleTime" ); + $calendarObj->addCalendarLog( "Current Start Date/Time: $normalizedDate" ); + $calendarObj->addCalendarLog( "Calendar Business End: $calendarBusinessEndNormalized" ); + if ($possibleTimeInt > $calendarBusinessEndInt) { + $currentDateTimeB = explode( " ", $calendarBusinessEndNormalized ); + $currentDate = $currentDateTimeB[0]; + $currentTime = $currentDateTimeB[1]; + $diff = abs( $normalizedDateSeconds - $calendarBusinessEndSeconds ); + $diffHours = $diff / 3600; + $hoursToProcess = $hoursToProcess - $diffHours; + } else { + $currentDateTimeA = explode( " ", $possibleTime ); + $currentDate = $currentDateTimeA[0]; + $currentTime = $currentDateTimeA[1]; + $hoursToProcess = 0; + } + $calendarObj->addCalendarLog( "** Hours to Process: $hoursToProcess" ); } - else { - $bFinished = true; - } - } - if (isset($aAux1[1])) { - $aAux1[1] = explode(':', $aAux1[1]); - $fHours1 = 24 - ($aAux1[1][0] + ($aAux1[1][1] / 60) + ($aAux1[1][2] / 3600)); - } - if (isset($aAux2[1])) { - $aAux2[1] = explode(':', $aAux2[1]); - $fHours2 = $aAux2[1][0] + ($aAux2[1][1] / 60) + ($aAux2[1][2] / 3600); - } - $fDuration = ($iWorkedDays * 24) + $fHours1 + $fHours2; - } - else { - $fDuration = (strtotime($sEndDate) - strtotime($sInitDate)) / 3600; - } - return $fDuration; - } - - /** - * Configuration functions - * @param string $UsrUid - * @param string $ProUid - * @param string $TasUid - * @return void - */ - function prepareInformation( $UsrUid = NULL , $ProUid = NULL , $TasUid =NULL ) - { - // setup calendarDays according the task - if (isset($TasUid)) - { - $task = TaskPeer::retrieveByPK( $TasUid ); - if (!is_null($task)) { - $this->calendarDays = ($task->getTasTypeDay()==2); - } + $calendarObj->addCalendarLog( "+++++++++++ Calculated Due Date $currentDate $currentTime" ); + $result['DUE_DATE'] = $currentDate . " " . $currentTime; + $result['DUE_DATE_SECONDS'] = strtotime( $currentDate . " " . $currentTime ); + //$result['OLD_DUE_DATE'] = date("Y-m-d H:i:s",$oldDate); + //$result['OLD_DUE_DATE_SECONDS']= $oldDate; + + + $endTime = (float) array_sum( explode( ' ', microtime() ) ); + $calendarObj->addCalendarLog( "* Ending at: $endTime" ); + $calcTime = round( $endTime - $startTime, 3 ); + $calendarObj->addCalendarLog( "** Processing time: " . sprintf( "%.4f", ($endTime - $startTime) ) . " seconds" ); + $result['DUE_DATE_LOG'] = $calendarObj->calendarLog; + return $result; } - //get an array with all holidays. - $aoHolidays=HolidayPeer::doSelect(new Criteria()); - $holidays=array(); - foreach($aoHolidays as $holiday) - $holidays[] = strtotime($holiday->getHldDate()); - - // by default the weekdays are from monday to friday - $this->weekends = array(0,6); - $this->holidays = $holidays; - return ; - } - - /** - * Set to repeat for every year all dates defined in $this->holiday - * @param $bSkipEveryYear - * @return void - */ - function setSkipEveryYear( $bSkipEveryYear ) - { - $this->skipEveryYear = $bSkipEveryYear===true; - } - - /** - * Add a single date to holidays - * @param data $sDate - * @return void - */ - function addHoliday( $sDate ) - { - if ($date=strtotime( $sDate )) $this->holidays[]=self::truncateTime($date); - else throw new Exception("Invalid date: $sDate."); - } - - /** - * Set all the holidays - * @param date/array $aDate must be an array of (strtotime type) dates - * @return void - */ - function setHolidays( $aDates ) - { - foreach($aDates as $sDate) $this->holidays = $aDates; - } - - /** - * Set all the weekends - * @param array/integers $aWeekends must be an array of integers [1,7] - * 1=Sunday - * 7=Saturday - * @return void - */ - function setWeekends( $aWeekends ) - { - $this->weekends = $aWeekends; - } - - /** - * Add one day of week to the weekends list - * @param $iDayNumber must be an array of integers [1,7] - * 1=Sunday - * 7=Saturday - * @return void - */ - function skipDayOfWeek( $iDayNumber ) - { - if ($iDayNumber<1 || $iDayNumber>7) throw new Exception("The day of week must be a number from 1 to 7."); - $this->weekends[]=$iDayNumber; - } - - /** - * Add a range of non working dates - * @param date $sDateA must be a (strtotime type) dates - * @param date $sDateB must be a (strtotime type) dates - * @return void - */ - function addNonWorkingRange( $sDateA , $sDateB ) - { - if ($date=strtotime( $sDateA )) $iDateA=self::truncateTime($date); - else throw new Exception("Invalid date: $sDateA."); - if ($date=strtotime( $sDateB )) $iDateB=self::truncateTime($date); - else throw new Exception("Invalid date: $sDateB."); - if ($iDateA>$iDateB) { $s=$iDateA;$iDateA=$iDateB;$iDateB=$s; }; - $this->range[]=array( $iDateA , $iDateB ); - } - - /** - * PRIVATE UTILITARY FUNCTIONS - * Add days to the date - * @param date $iInitDate - * @param int $iDaysCount - * @param string $addSign - * @return date $iEndDate - */ - private function addDays( $iInitDate , $iDaysCount, $addSign = '+' ) - { - $iEndDate = $iInitDate; - $aList = $this->holidays; - for( $r=1; $r <= $iDaysCount ; $r++) { - $iEndDate = strtotime( $addSign . "1 day", $iEndDate ); - $dayOfWeek = idate('w',$iEndDate); //now sunday=0 - if ( array_search( $dayOfWeek, $this->weekends )!== false ) $r--; //continue loop, but we are adding one more day. - } - return $iEndDate; - } - - /** - * Add hours to the date - * @param date $iInitDate - * @param int $iHoursCount - * @param string $addSign - * @return $iEndDate - */ - - private function addHours( $sInitDate , $iHoursCount, $addSign = '+' ) - { - $iEndDate = strtotime( $addSign . $iHoursCount ." hours", $sInitDate ); - return $iEndDate; - } - - /** - * Compare if the date is in range - * @param $iDate = valid timestamp - * @return true if it is within any of the ranges defined. - */ - private function inRange( $iDate ) - { - $aRange = $this->range; - $iYear = idate( 'Y', $iDate ); - foreach($aRange as $key => $rang) - { - if ($this->skipEveryYear) - { - $deltaYears = idate( 'Y', $rang[1] ) - idate( 'Y', $rang[0] ); - $rang[0]=self::changeYear( $rang[0] , $iYear ); - $rang[1]=self::changeYear( $rang[1] , $iYear + $deltaYears ); - } - if (($iDate>=$rang[0]) && ($iDate<=$rang[1])) return true; - } - return false; - } - - /** - * Truncate a date - * @param $iDate = valid timestamp - * @return date - */ - private function truncateTime( $iDate ) - { - return mktime(0,0,0,idate('m',$iDate),idate('d',$iDate),idate('Y',$iDate)); - } - - /** - * Get time - * @param timestamp $iDate - * @return date - */ - private function getTime( $iDate ) - { - return array(idate('H',$iDate),idate('m',$iDate),idate('s',$iDate)); - } - - /** - * Set time - * @param timestamp $iDate - * @param timestamp $aTime - * @return date - */ - private function setTime( $iDate , $aTime ) - { - return mktime($aTime[0],$aTime[1],$aTime[2],idate('m',$iDate),idate('d',$iDate),idate('Y',$iDate)); - } - -/** - * Returns an array with all the dates of $this->skip['List'] with its - * year changed to $iYear. - * Warning: Don't know what to do if change a 29-02-2004 to 29-02-2005 - * the last one doesn't exist. - * @param List $iYear - * @return array - */ - private function listForYear( $iYear ) - { - $aList = $this->holidays; - foreach($aList as $k => $v) - { - $aList[$k] = self::changeYear( $v , $iYear ); - } - return $aList; - } + /** + * Calculate $sInitDate + $iDaysCount, skipping non laborable days. + * Input: Any valid strtotime function type input. + * Returns: Integer timestamp of the result. + * Warning: It will hangs if there is no possible days to count as + * "laborable". + * + * @param date $sInitDate + * @param double $iDuration + * @param string $sTimeUnit + * @param string $iTypeDay + * @param string $UsrUid + * @param string $ProUid + * @param string $TasUid + * @return integer timestamp of the result + * @deprecated renamed by Hugo Loza (see calculateDate new function) + */ -/** - * Returns an array with all the dates of $this->skip['List'] with its - * year changed to $iYear. - * Warning: Don't know what to do if change a 29-02-2004 to 29-02-2005 - * the last one doesn't exist. - * @param array $iYear - * @param date $iDate - * @return array - */ - private function changeYear( $iDate , $iYear ) - { - if ($delta = ( $iYear - idate('Y',$iDate) ) ) + function calculateDate_noCalendar ($sInitDate, $iDuration, $sTimeUnit, $iTypeDay, $UsrUid = NULL, $ProUid = NULL, $TasUid = NULL) { - $iDate = strtotime( "$delta year" , $iDate ); + //load in class variables the config of working days, holidays etc.. + $this->prepareInformation( $UsrUid, $ProUid, $TasUid ); + $iHours = 0; + $iDays = 0; + //convert the $iDuration and $sTimeUnit in hours and days, take in mind 8 hours = 1 day. and then we will have similar for 5 days = 1 weekends + if (strtolower( $sTimeUnit ) == 'hours') { + $iAux = intval( abs( $iDuration ) ); + $iHours = $iAux % $this->hoursPerDay; + $iDays = intval( $iAux / $this->hoursPerDay ); + } + if (strtolower( $sTimeUnit ) == 'days') { + $iAux = intval( abs( $iDuration * $this->hoursPerDay ) ); + $iHours = $iAux % 8; + $iDays = intval( $iAux / 8 ); + } + $addSign = ($iDuration >= 0) ? '+' : '-'; + $iInitDate = strtotime( $sInitDate ); + if ($iTypeDay == 1) { // working days + // if there are days calculate the days, + $iEndDate = $this->addDays( $iInitDate, $iDays, $addSign ); + // if there are hours calculate the hours, and probably add a day if the quantity of hours for last day > 8 hours + $iEndDate = $this->addHours( $iEndDate, $iHours, $addSign ); + } else { // $task->getTasTypeDay() == 2 // calendar days + $iEndDate = strtotime( $addSign . $iDays . ' days ', $iInitDate ); + $iEndDate = strtotime( $addSign . $iHours . ' hours ', $iEndDate ); + } + return $iEndDate; + } + + /** + * Calculate duration of the $sInitDate - $sEndDate. + * + * @param date $sInitDate + * @param date $sEndDate + * @param string $UsrUid + * @param string $ProUid + * @param string $TasUid + * @return int + * + */ + function calculateDuration ($sInitDate, $sEndDate = '', $UsrUid = NULL, $ProUid = NULL, $TasUid = NULL) + { + $this->prepareInformation( $UsrUid, $ProUid, $TasUid ); + if ((string) $sEndDate == '') { + $sEndDate = date( 'Y-m-d H:i:s' ); + } + if (strtotime( $sInitDate ) > strtotime( $sEndDate )) { + $sAux = $sInitDate; + $sInitDate = $sEndDate; + $sEndDate = $sAux; + } + $aAux1 = explode( ' ', $sInitDate ); + $aAux2 = explode( ' ', $sEndDate ); + $aInitDate = explode( '-', $aAux1[0] ); + $aEndDate = explode( '-', $aAux2[0] ); + $i = 1; + $iWorkedDays = 0; + $bFinished = false; + $fHours1 = 0.0; + $fHours2 = 0.0; + if (count( $aInitDate ) != 3) { + $aInitDate = array (0,0,0 + ); + } + if (count( $aEndDate ) != 3) { + $aEndDate = array (0,0,0 + ); + } + if ($aInitDate !== $aEndDate) { + while (! $bFinished && ($i < 10000)) { + $sAux = date( 'Y-m-d', mktime( 0, 0, 0, $aInitDate[1], $aInitDate[2] + $i, $aInitDate[0] ) ); + if ($sAux != implode( '-', $aEndDate )) { + if (! in_array( $sAux, $this->holidays )) { + if (! in_array( date( 'w', mktime( 0, 0, 0, $aInitDate[1], $aInitDate[2] + $i, $aInitDate[0] ) ), $this->weekends )) { + $iWorkedDays ++; + } + } + $i ++; + } else { + $bFinished = true; + } + } + if (isset( $aAux1[1] )) { + $aAux1[1] = explode( ':', $aAux1[1] ); + $fHours1 = 24 - ($aAux1[1][0] + ($aAux1[1][1] / 60) + ($aAux1[1][2] / 3600)); + } + if (isset( $aAux2[1] )) { + $aAux2[1] = explode( ':', $aAux2[1] ); + $fHours2 = $aAux2[1][0] + ($aAux2[1][1] / 60) + ($aAux2[1][2] / 3600); + } + $fDuration = ($iWorkedDays * 24) + $fHours1 + $fHours2; + } else { + $fDuration = (strtotime( $sEndDate ) - strtotime( $sInitDate )) / 3600; + } + return $fDuration; + } + + /** + * Configuration functions + * + * @param string $UsrUid + * @param string $ProUid + * @param string $TasUid + * @return void + */ + function prepareInformation ($UsrUid = NULL, $ProUid = NULL, $TasUid = NULL) + { + // setup calendarDays according the task + if (isset( $TasUid )) { + $task = TaskPeer::retrieveByPK( $TasUid ); + if (! is_null( $task )) { + $this->calendarDays = ($task->getTasTypeDay() == 2); + } + } + + //get an array with all holidays. + $aoHolidays = HolidayPeer::doSelect( new Criteria() ); + $holidays = array (); + foreach ($aoHolidays as $holiday) + $holidays[] = strtotime( $holiday->getHldDate() ); + + // by default the weekdays are from monday to friday + $this->weekends = array (0,6 + ); + $this->holidays = $holidays; + return; + } + + /** + * Set to repeat for every year all dates defined in $this->holiday + * + * @param $bSkipEveryYear + * @return void + */ + function setSkipEveryYear ($bSkipEveryYear) + { + $this->skipEveryYear = $bSkipEveryYear === true; + } + + /** + * Add a single date to holidays + * + * @param data $sDate + * @return void + */ + function addHoliday ($sDate) + { + if ($date = strtotime( $sDate )) + $this->holidays[] = self::truncateTime( $date ); + else + throw new Exception( "Invalid date: $sDate." ); + } + + /** + * Set all the holidays + * + * @param date/array $aDate must be an array of (strtotime type) dates + * @return void + */ + function setHolidays ($aDates) + { + foreach ($aDates as $sDate) + $this->holidays = $aDates; + } + + /** + * Set all the weekends + * + * @param array/integers $aWeekends must be an array of integers [1,7] + * 1=Sunday + * 7=Saturday + * @return void + */ + function setWeekends ($aWeekends) + { + $this->weekends = $aWeekends; + } + + /** + * Add one day of week to the weekends list + * + * @param $iDayNumber must be an array of integers [1,7] + * 1=Sunday + * 7=Saturday + * @return void + */ + function skipDayOfWeek ($iDayNumber) + { + if ($iDayNumber < 1 || $iDayNumber > 7) + throw new Exception( "The day of week must be a number from 1 to 7." ); + $this->weekends[] = $iDayNumber; + } + + /** + * Add a range of non working dates + * + * @param date $sDateA must be a (strtotime type) dates + * @param date $sDateB must be a (strtotime type) dates + * @return void + */ + function addNonWorkingRange ($sDateA, $sDateB) + { + if ($date = strtotime( $sDateA )) + $iDateA = self::truncateTime( $date ); + else + throw new Exception( "Invalid date: $sDateA." ); + if ($date = strtotime( $sDateB )) + $iDateB = self::truncateTime( $date ); + else + throw new Exception( "Invalid date: $sDateB." ); + if ($iDateA > $iDateB) { + $s = $iDateA; + $iDateA = $iDateB; + $iDateB = $s; + } + ; + $this->range[] = array ($iDateA,$iDateB + ); + } + + /** + * PRIVATE UTILITARY FUNCTIONS + * Add days to the date + * + * @param date $iInitDate + * @param int $iDaysCount + * @param string $addSign + * @return date $iEndDate + */ + private function addDays ($iInitDate, $iDaysCount, $addSign = '+') + { + $iEndDate = $iInitDate; + $aList = $this->holidays; + for ($r = 1; $r <= $iDaysCount; $r ++) { + $iEndDate = strtotime( $addSign . "1 day", $iEndDate ); + $dayOfWeek = idate( 'w', $iEndDate ); //now sunday=0 + if (array_search( $dayOfWeek, $this->weekends ) !== false) + $r --; //continue loop, but we are adding one more day. + } + return $iEndDate; + } + + /** + * Add hours to the date + * + * @param date $iInitDate + * @param int $iHoursCount + * @param string $addSign + * @return $iEndDate + */ + + private function addHours ($sInitDate, $iHoursCount, $addSign = '+') + { + $iEndDate = strtotime( $addSign . $iHoursCount . " hours", $sInitDate ); + return $iEndDate; + } + + /** + * Compare if the date is in range + * + * @param $iDate = valid timestamp + * @return true if it is within any of the ranges defined. + */ + private function inRange ($iDate) + { + $aRange = $this->range; + $iYear = idate( 'Y', $iDate ); + foreach ($aRange as $key => $rang) { + if ($this->skipEveryYear) { + $deltaYears = idate( 'Y', $rang[1] ) - idate( 'Y', $rang[0] ); + $rang[0] = self::changeYear( $rang[0], $iYear ); + $rang[1] = self::changeYear( $rang[1], $iYear + $deltaYears ); + } + if (($iDate >= $rang[0]) && ($iDate <= $rang[1])) + return true; + } + return false; + } + + /** + * Truncate a date + * + * @param $iDate = valid timestamp + * @return date + */ + private function truncateTime ($iDate) + { + return mktime( 0, 0, 0, idate( 'm', $iDate ), idate( 'd', $iDate ), idate( 'Y', $iDate ) ); + } + + /** + * Get time + * + * @param timestamp $iDate + * @return date + */ + private function getTime ($iDate) + { + return array (idate( 'H', $iDate ),idate( 'm', $iDate ),idate( 's', $iDate ) + ); + } + + /** + * Set time + * + * @param timestamp $iDate + * @param timestamp $aTime + * @return date + */ + private function setTime ($iDate, $aTime) + { + return mktime( $aTime[0], $aTime[1], $aTime[2], idate( 'm', $iDate ), idate( 'd', $iDate ), idate( 'Y', $iDate ) ); + } + + /** + * Returns an array with all the dates of $this->skip['List'] with its + * year changed to $iYear. + * Warning: Don't know what to do if change a 29-02-2004 to 29-02-2005 + * the last one doesn't exist. + * + * @param List $iYear + * @return array + */ + private function listForYear ($iYear) + { + $aList = $this->holidays; + foreach ($aList as $k => $v) { + $aList[$k] = self::changeYear( $v, $iYear ); + } + return $aList; + } + + /** + * Returns an array with all the dates of $this->skip['List'] with its + * year changed to $iYear. + * Warning: Don't know what to do if change a 29-02-2004 to 29-02-2005 + * the last one doesn't exist. + * + * @param array $iYear + * @param date $iDate + * @return array + */ + private function changeYear ($iDate, $iYear) + { + if ($delta = ($iYear - idate( 'Y', $iDate ))) { + $iDate = strtotime( "$delta year", $iDate ); + } + return $iDate; } - return $iDate; - } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.dbConnections.php b/workflow/engine/classes/class.dbConnections.php index 937847614..2f3e35ecc 100755 --- a/workflow/engine/classes/class.dbConnections.php +++ b/workflow/engine/classes/class.dbConnections.php @@ -1,14 +1,13 @@ + * Author: Erik Amaru Ortiz * Description:This is a class for load all additional connections; if exist in a particular proccess - * Date: 15-05-2008 + * Date: 15-05-2008 * * * class.dbConnections.php * - * Email bugs/suggestions to erik@colosa.com - * + * Email bugs/suggestions to erik@colosa.com */ require_once 'model/DbSource.php'; @@ -18,199 +17,171 @@ require_once 'model/Content.php'; * dbConnections * * - * @copyright 2008 Colosa - * @package workflow.engine.classes + * @copyright 2008 Colosa + * @package workflow.engine.classes * - */ + */ class dbConnections { - private $PRO_UID; - public $connections; - private $types; + private $PRO_UID; + public $connections; + private $types; - /*errors handle*/ - private $errno; - private $errstr; - - private $encodesList; + /*errors handle*/ + private $errno; + private $errstr; - /** - * construct of dbConnections - * - * @param string $pPRO_UID - * @return void - */ - public function __construct($pPRO_UID = null) - { - $this->errno = 0; - $this->errstr = ""; - $this->PRO_UID = $pPRO_UID; - - $this->getAllConnections(); - } + private $encodesList; - /** - * getAllConnections - * - * @return Array $connections - */ - public function getAllConnections() - { - if( isset($this->PRO_UID) ){ - $oDBSource = new DbSource(); - $oContent = new Content(); - $connections = Array(); - $types = Array(); - $this->have_any_connectios = false; - - $c = new Criteria(); - - $c->clearSelectColumns(); - $c->addSelectColumn(DbSourcePeer::DBS_UID); - $c->addSelectColumn(DbSourcePeer::PRO_UID); - $c->addSelectColumn(DbSourcePeer::DBS_TYPE); - $c->addSelectColumn(DbSourcePeer::DBS_SERVER); - $c->addSelectColumn(DbSourcePeer::DBS_DATABASE_NAME); - $c->addSelectColumn(DbSourcePeer::DBS_USERNAME); - $c->addSelectColumn(DbSourcePeer::DBS_PASSWORD); - $c->addSelectColumn(DbSourcePeer::DBS_PORT); - $c->addSelectColumn(DbSourcePeer::DBS_ENCODE); - $c->addSelectColumn(ContentPeer::CON_VALUE); + /** + * construct of dbConnections + * + * @param string $pPRO_UID + * @return void + */ + public function __construct ($pPRO_UID = null) + { + $this->errno = 0; + $this->errstr = ""; + $this->PRO_UID = $pPRO_UID; - $c->add(DbSourcePeer::PRO_UID, $this->PRO_UID); - $c->add(ContentPeer::CON_CATEGORY, 'DBS_DESCRIPTION'); - $c->addJoin(DbSourcePeer::DBS_UID, ContentPeer::CON_ID); + $this->getAllConnections(); + } - $result = DbSourcePeer::doSelectRS($c); - $result->next(); - $row = $result->getRow(); + /** + * getAllConnections + * + * @return Array $connections + */ + public function getAllConnections () + { + if (isset( $this->PRO_UID )) { + $oDBSource = new DbSource(); + $oContent = new Content(); + $connections = Array (); + $types = Array (); + $this->have_any_connectios = false; - while ($row = $result->getRow()) { - $connections[] = Array( - 'DBS_UID' => $row[0], - 'DBS_TYPE' => $row[2], - 'DBS_SERVER' => $row[3], - 'DBS_DATABASE_NAME' => $row[4], - 'DBS_USERNAME' => $row[5], - 'DBS_PASSWORD' => $row[6], - 'DBS_PORT' => $row[7], - 'DBS_ENCODE' => $row[8], - 'CON_VALUE' => $row[9], - ); + $c = new Criteria(); + + $c->clearSelectColumns(); + $c->addSelectColumn( DbSourcePeer::DBS_UID ); + $c->addSelectColumn( DbSourcePeer::PRO_UID ); + $c->addSelectColumn( DbSourcePeer::DBS_TYPE ); + $c->addSelectColumn( DbSourcePeer::DBS_SERVER ); + $c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME ); + $c->addSelectColumn( DbSourcePeer::DBS_USERNAME ); + $c->addSelectColumn( DbSourcePeer::DBS_PASSWORD ); + $c->addSelectColumn( DbSourcePeer::DBS_PORT ); + $c->addSelectColumn( DbSourcePeer::DBS_ENCODE ); + $c->addSelectColumn( ContentPeer::CON_VALUE ); + + $c->add( DbSourcePeer::PRO_UID, $this->PRO_UID ); + $c->add( ContentPeer::CON_CATEGORY, 'DBS_DESCRIPTION' ); + $c->addJoin( DbSourcePeer::DBS_UID, ContentPeer::CON_ID ); + + $result = DbSourcePeer::doSelectRS( $c ); + $result->next(); + $row = $result->getRow(); + + while ($row = $result->getRow()) { + $connections[] = Array ('DBS_UID' => $row[0],'DBS_TYPE' => $row[2],'DBS_SERVER' => $row[3],'DBS_DATABASE_NAME' => $row[4],'DBS_USERNAME' => $row[5],'DBS_PASSWORD' => $row[6],'DBS_PORT' => $row[7],'DBS_ENCODE' => $row[8],'CON_VALUE' => $row[9] + ); + $result->next(); + } + if (! in_array( $row[2], $types )) { + $types[] = $row[2]; + } + $this->connections = $connections; + return $connections; + } + } + + /** + * getConnections + * + * @param string $pType + * @return Array $connections + */ + public function getConnections ($pType) + { + $connections = Array (); + foreach ($this->connections as $c) { + if (trim( $pType ) == trim( $c['DBS_TYPE'] )) { + $connections[] = $c; + } + } + if (count( $connections ) > 0) { + return $connections; + } else { + return false; + } + + } + + /** + * getConnectionsProUid + * + * @param string $pType + * @return Array $connections + */ + public function getConnectionsProUid ($pProUid) + { + $connections = Array (); + $c = new Criteria(); + $c->clearSelectColumns(); + + $c->addSelectColumn( DbSourcePeer::DBS_UID ); + $c->addSelectColumn( DbSourcePeer::PRO_UID ); + $c->addSelectColumn( DbSourcePeer::DBS_TYPE ); + $c->addSelectColumn( DbSourcePeer::DBS_SERVER ); + $c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME ); + + $result = DbSourcePeer::doSelectRS( $c ); $result->next(); - } - if(!in_array($row[2], $types)) { - $types[] = $row[2]; - } - $this->connections = $connections; - return $connections; + $row = $result->getRow(); + while ($row = $result->getRow()) { + if (trim( $pProUid ) == trim( $row[1] )) { + $connections[] = Array ('DBS_UID' => $row[0],'DBS_NAME' => '[' . $row[3] . '] ' . $row[2] . ': ' . $row[4] + ); + } + $result->next(); + } + + if (count( $connections ) > 0) { + return $connections; + } else { + return Array (); + } + } - } - /** - * getConnections - * - * @param string $pType - * @return Array $connections - */ - public function getConnections($pType){ - $connections = Array(); - foreach($this->connections as $c){ - if(trim($pType) == trim($c['DBS_TYPE'])){ - $connections[] = $c; - } + /** + * loadAdditionalConnections + * + * @return void + */ + public function loadAdditionalConnections () + { + PROPEL::Init( PATH_METHODS . 'dbConnections/genericDbConnections.php' ); } - if(count($connections) > 0){ - return $connections; - } else { - return false; - } - - } + /** + * getDbServicesAvailables + * + * @return array $servicesAvailables + */ + public function getDbServicesAvailables () + { + $servicesAvailables = Array (); - /** - * getConnectionsProUid - * - * @param string $pType - * @return Array $connections - */ - public function getConnectionsProUid($pProUid) - { - $connections = Array(); - $c = new Criteria(); - $c->clearSelectColumns(); - - $c->addSelectColumn(DbSourcePeer::DBS_UID); - $c->addSelectColumn(DbSourcePeer::PRO_UID); - $c->addSelectColumn(DbSourcePeer::DBS_TYPE); - $c->addSelectColumn(DbSourcePeer::DBS_SERVER); - $c->addSelectColumn(DbSourcePeer::DBS_DATABASE_NAME); - - $result = DbSourcePeer::doSelectRS($c); - $result->next(); - $row = $result->getRow(); - while ($row = $result->getRow()) { - if(trim($pProUid) == trim($row[1])){ - $connections[] = Array( - 'DBS_UID' => $row[0], - 'DBS_NAME' => '[' . $row[3] . '] ' . $row[2] . ': ' . $row[4] + $dbServices = Array ('mysql' => Array ('id' => 'mysql','command' => 'mysql_connect','name' => 'MySql' + ),'pgsql' => Array ('id' => 'pgsql','command' => 'pg_connect','name' => 'PostgreSql' + ),'mssql' => Array ('id' => 'mssql','command' => 'mssql_connect','name' => 'Microsoft SQL Server' + ),'oracle' => Array ('id' => 'oracle','command' => 'oci_connect','name' => 'Oracle' + ) ); - } - $result->next(); - } - - if(count($connections) > 0){ - return $connections; - } else { - return Array(); - } - - } - - - - /** - * loadAdditionalConnections - * - * @return void - */ - public function loadAdditionalConnections() - { - PROPEL::Init ( PATH_METHODS.'dbConnections/genericDbConnections.php'); - } - - /** - * getDbServicesAvailables - * - * @return array $servicesAvailables - */ - public function getDbServicesAvailables() - { - $servicesAvailables = Array(); - - $dbServices = Array( - 'mysql' => Array( - 'id' => 'mysql', - 'command' => 'mysql_connect', - 'name' => 'MySql' - ), - 'pgsql' => Array( - 'id' => 'pgsql', - 'command' => 'pg_connect', - 'name' => 'PostgreSql' - ), - 'mssql' => Array( - 'id' => 'mssql', - 'command' => 'mssql_connect', - 'name' => 'Microsoft SQL Server'), - 'oracle'=> Array( - 'id' => 'oracle', - 'command' => 'oci_connect', - 'name' => 'Oracle' - ) - ); - /*, + /*, 'informix'=> Array( 'id' => 'informix', 'command' => 'ifx_connect', @@ -222,231 +193,240 @@ class dbConnections 'name' => 'SQLite' ) */ - - foreach($dbServices as $service) { - if(@function_exists($service['command'])){ - $servicesAvailables[] = $service; - } + + foreach ($dbServices as $service) { + if (@function_exists( $service['command'] )) { + $servicesAvailables[] = $service; + } + } + return $servicesAvailables; } - return $servicesAvailables; - } - - /** - * showMsg - * - * @return void - */ - public function showMsg() - { - if ($this->errno != 0) { - $msg = " + + /** + * showMsg + * + * @return void + */ + public function showMsg () + { + if ($this->errno != 0) { + $msg = "
Class NET -
+
NET::ERROR NO -> $this->errno
NET::ERROR MSG -> $this->errstr
-
+
"; - print ($msg); + print ($msg) ; + } } - } - /** - * getEncondeList - * - * @param string $engine - * @return $this->ordx($this->encodesList); - */ - public function getEncondeList($engine = ''){ - switch( $engine ){ - default: - case 'mysql': - $encodes = Array( - Array('big5', 'big5 - Big5 Traditional Chinese'), - Array('dec8', 'dec8 - DEC West European'), - Array('cp850', 'cp850 - DOS West European'), - Array('hp8', 'hp8 - HP West European'), - Array('koi8r', 'koi8r - KOI8-R Relcom Russian'), - Array('latin1', 'latin1 - cp1252 West European'), - Array('latin2', 'latin2 - ISO 8859-2 Central European'), - Array('swe7', 'swe7 - 7bit Swedish'), - Array('ascii', 'ascii - US ASCII'), - Array('ujis', 'ujis - EUC-JP Japanese'), - Array('sjis', 'sjis - Shift-JIS Japanese'), - Array('hebrew', 'hebrew - ISO 8859-8 Hebrew'), - Array('tis620', 'tis620 - TIS620 Thai'), - Array('euckr', 'euckr - EUC-KR Korean'), - Array('koi8u', 'koi8u - KOI8-U Ukrainian'), - Array('gb2312', 'gb2312 - GB2312 Simplified Chinese'), - Array('greek', 'greek - ISO 8859-7 Greek'), - Array('cp1250', 'cp1250 - Windows Central European'), - Array('gbk', 'gbk - GBK Simplified Chinese'), - Array('latin5', 'latin5 - ISO 8859-9 Turkish'), - Array('armscii8', 'armscii8 - ARMSCII-8 Armenian'), - Array('utf8', 'utf8 - UTF-8 Unicode'), - Array('ucs2', 'ucs2 - UCS-2 Unicode'), - Array('cp866', 'cp866 - DOS Russian'), - Array('keybcs2', 'keybcs2 - DOS Kamenicky Czech-Slovak'), - Array('macce', 'macce - Mac Central European'), - Array('macroman', 'macroman - Mac West European'), - Array('cp852', 'cp852 - DOS Central European'), - Array('latin7', 'atin7 - ISO 8859-13 Baltic'), - Array('cp1251', 'cp1251 - Windows Cyrillic'), - Array('cp1256', 'cp1256 - Windows Arabic'), - Array('cp1257', 'cp1257 - Windows Baltic'), - Array('binary', 'binary - Binary pseudo charset'), - Array('geostd8', 'geostd8 - GEOSTD8 Georgian'), - Array('cp932', 'cp932] - SJIS for Windows Japanese'), - Array('eucjpms', 'eucjpms - UJIS for Windows Japanese') - ); + /** + * getEncondeList + * + * @param string $engine + * @return $this->ordx($this->encodesList); + */ + public function getEncondeList ($engine = '') + { + switch ($engine) { + default: + case 'mysql': + $encodes = Array (Array ('big5','big5 - Big5 Traditional Chinese' + ),Array ('dec8','dec8 - DEC West European' + ),Array ('cp850','cp850 - DOS West European' + ),Array ('hp8','hp8 - HP West European' + ),Array ('koi8r','koi8r - KOI8-R Relcom Russian' + ),Array ('latin1','latin1 - cp1252 West European' + ),Array ('latin2','latin2 - ISO 8859-2 Central European' + ),Array ('swe7','swe7 - 7bit Swedish' + ),Array ('ascii','ascii - US ASCII' + ),Array ('ujis','ujis - EUC-JP Japanese' + ),Array ('sjis','sjis - Shift-JIS Japanese' + ),Array ('hebrew','hebrew - ISO 8859-8 Hebrew' + ),Array ('tis620','tis620 - TIS620 Thai' + ),Array ('euckr','euckr - EUC-KR Korean' + ),Array ('koi8u','koi8u - KOI8-U Ukrainian' + ),Array ('gb2312','gb2312 - GB2312 Simplified Chinese' + ),Array ('greek','greek - ISO 8859-7 Greek' + ),Array ('cp1250','cp1250 - Windows Central European' + ),Array ('gbk','gbk - GBK Simplified Chinese' + ),Array ('latin5','latin5 - ISO 8859-9 Turkish' + ),Array ('armscii8','armscii8 - ARMSCII-8 Armenian' + ),Array ('utf8','utf8 - UTF-8 Unicode' + ),Array ('ucs2','ucs2 - UCS-2 Unicode' + ),Array ('cp866','cp866 - DOS Russian' + ),Array ('keybcs2','keybcs2 - DOS Kamenicky Czech-Slovak' + ),Array ('macce','macce - Mac Central European' + ),Array ('macroman','macroman - Mac West European' + ),Array ('cp852','cp852 - DOS Central European' + ),Array ('latin7','atin7 - ISO 8859-13 Baltic' + ),Array ('cp1251','cp1251 - Windows Cyrillic' + ),Array ('cp1256','cp1256 - Windows Arabic' + ),Array ('cp1257','cp1257 - Windows Baltic' + ),Array ('binary','binary - Binary pseudo charset' + ),Array ('geostd8','geostd8 - GEOSTD8 Georgian' + ),Array ('cp932','cp932] - SJIS for Windows Japanese' + ),Array ('eucjpms','eucjpms - UJIS for Windows Japanese' + ) + ); - break; - case 'pgsql': - $encodes = Array( - Array("BIG5", "BIG5"), - Array("EUC_CN", "EUC_CN"), - Array("EUC_JP", "EUC_JP"), - Array("EUC_KR", "EUC_KR"), - Array("EUC_TW", "EUC_TW"), - Array("GB18030", "GB18030"), - Array("GBK", "GBK"), - Array("ISO_8859_5", "ISO_8859_5"), - Array("ISO_8859_6", "ISO_8859_6"), - Array("ISO_8859_7", "ISO_8859_7"), - Array("ISO_8859_8", "ISO_8859_8"), - Array("JOHAB", "JOHAB"), - Array("KOI8", "KOI8"), - Array("selected", "LATIN1"), - Array("LATIN2", "LATIN2"), - Array("LATIN3", "LATIN3"), - Array("LATIN4", "LATIN4"), - Array("LATIN5", "LATIN5"), - Array("LATIN6", "LATIN6"), - Array("LATIN7", "LATIN7"), - Array("LATIN8", "LATIN8"), - Array("LATIN9", "LATIN9"), - Array("LATIN10", "LATIN10"), - Array("SJIS", "SJIS"), - Array("SQL_ASCII", "SQL_ASCII"), - Array("UHC", "UHC"), - Array("UTF8", "UTF8"), - Array("WIN866", "WIN866"), - Array("WIN874", "WIN874"), - Array("WIN1250", "WIN1250"), - Array("WIN1251", "WIN1251"), - Array("WIN1252", "WIN1252"), - Array("WIN1256", "WIN1256"), - Array("WIN1258", "WIN1258") - ); - break; - case 'mssql': - $encodes = Array(Array('utf8', 'utf8 - UTF-8 Unicode')); - break; - case 'oracle': - $encodes = Array(); - break; - } - - $this->encodesList = $encodes; - return $this->ordx($this->encodesList); - } + break; + case 'pgsql': + $encodes = Array (Array ("BIG5","BIG5" + ),Array ("EUC_CN","EUC_CN" + ),Array ("EUC_JP","EUC_JP" + ),Array ("EUC_KR","EUC_KR" + ),Array ("EUC_TW","EUC_TW" + ),Array ("GB18030","GB18030" + ),Array ("GBK","GBK" + ),Array ("ISO_8859_5","ISO_8859_5" + ),Array ("ISO_8859_6","ISO_8859_6" + ),Array ("ISO_8859_7","ISO_8859_7" + ),Array ("ISO_8859_8","ISO_8859_8" + ),Array ("JOHAB","JOHAB" + ),Array ("KOI8","KOI8" + ),Array ("selected","LATIN1" + ),Array ("LATIN2","LATIN2" + ),Array ("LATIN3","LATIN3" + ),Array ("LATIN4","LATIN4" + ),Array ("LATIN5","LATIN5" + ),Array ("LATIN6","LATIN6" + ),Array ("LATIN7","LATIN7" + ),Array ("LATIN8","LATIN8" + ),Array ("LATIN9","LATIN9" + ),Array ("LATIN10","LATIN10" + ),Array ("SJIS","SJIS" + ),Array ("SQL_ASCII","SQL_ASCII" + ),Array ("UHC","UHC" + ),Array ("UTF8","UTF8" + ),Array ("WIN866","WIN866" + ),Array ("WIN874","WIN874" + ),Array ("WIN1250","WIN1250" + ),Array ("WIN1251","WIN1251" + ),Array ("WIN1252","WIN1252" + ),Array ("WIN1256","WIN1256" + ),Array ("WIN1258","WIN1258" + ) + ); + break; + case 'mssql': + $encodes = Array (Array ('utf8','utf8 - UTF-8 Unicode' + ) + ); + break; + case 'oracle': + $encodes = Array (); + break; + } - /** - * getErrno - * - * @return integer $errno - */ - public function getErrno() - { - return $this->errno; - } + $this->encodesList = $encodes; + return $this->ordx( $this->encodesList ); + } - /** - * getErrmsg - * - * @return string errstr - */ - public function getErrmsg() - { - return $this->errstr; - } + /** + * getErrno + * + * @return integer $errno + */ + public function getErrno () + { + return $this->errno; + } - /** - * getErrmsg - * - * @param array $m - * @return array $aRet - */ - public function ordx($m) - { - $aTmp = Array(); - $aRet = Array(); - for($i=0; $ierrstr; } - usort($aTmp,"strnatcasecmp"); - - for($i=0; $i - * @access public - * @param string proUid - * @return void - */ - public function encryptThepassw($proUid){ - $oDBSource = new DbSource(); - - $c = new Criteria(); - $c->clearSelectColumns(); - $c->addSelectColumn(DbSourcePeer::DBS_UID); - $c->addSelectColumn(DbSourcePeer::DBS_DATABASE_NAME); - $c->addSelectColumn(DbSourcePeer::DBS_PASSWORD); - $c->add(DbSourcePeer::PRO_UID, $proUid); - $result = DbSourcePeer::doSelectRS($c); - $result->next(); - $row = $result->getRow(); - while ($row = $result->getRow()) { - if($row[2]!=''){ - $aPass = explode('_', $row[2]); - if(count($aPass)==1) { - $passEncrypt = G::encrypt($row[2], $row[1]); - $passEncrypt.="_2NnV3ujj3w"; - $c2 = new Criteria('workflow'); - $c2->add(DbSourcePeer::DBS_PASSWORD, $passEncrypt); - $c3 = new Criteria('workflow'); - $c3->add(DbSourcePeer::DBS_UID, $row[0]); - BasePeer::doUpdate($c3, $c2, Propel::getConnection('workflow')); - } - } - $result->next(); + + /** + * Function encryptThepassw + * + * @author krlos Pacha C. + * @access public + * @param string proUid + * @return void + */ + public function encryptThepassw ($proUid) + { + $oDBSource = new DbSource(); + + $c = new Criteria(); + $c->clearSelectColumns(); + $c->addSelectColumn( DbSourcePeer::DBS_UID ); + $c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME ); + $c->addSelectColumn( DbSourcePeer::DBS_PASSWORD ); + $c->add( DbSourcePeer::PRO_UID, $proUid ); + $result = DbSourcePeer::doSelectRS( $c ); + $result->next(); + $row = $result->getRow(); + while ($row = $result->getRow()) { + if ($row[2] != '') { + $aPass = explode( '_', $row[2] ); + if (count( $aPass ) == 1) { + $passEncrypt = G::encrypt( $row[2], $row[1] ); + $passEncrypt .= "_2NnV3ujj3w"; + $c2 = new Criteria( 'workflow' ); + $c2->add( DbSourcePeer::DBS_PASSWORD, $passEncrypt ); + $c3 = new Criteria( 'workflow' ); + $c3->add( DbSourcePeer::DBS_UID, $row[0] ); + BasePeer::doUpdate( $c3, $c2, Propel::getConnection( 'workflow' ) ); + } + } + $result->next(); + } + return 1; } - return 1; - } - /** - * Function getPassWithoutEncrypt - * @author krlos Pacha C. - * @access public - * @param string passw - * @return string - */ - public function getPassWithoutEncrypt($aInfoCon){ - $passw=''; - if($aInfoCon['DBS_PASSWORD']!=''){ - $aPassw =explode('_',$aInfoCon['DBS_PASSWORD']); - $passw = $aPassw[0]; - if(sizeof($aPassw)>1) - $passw = ($passw == 'none') ? "": G::decrypt($passw,$aInfoCon['DBS_DATABASE_NAME']); + + /** + * Function getPassWithoutEncrypt + * + * @author krlos Pacha C. + * @access public + * @param string passw + * @return string + */ + public function getPassWithoutEncrypt ($aInfoCon) + { + $passw = ''; + if ($aInfoCon['DBS_PASSWORD'] != '') { + $aPassw = explode( '_', $aInfoCon['DBS_PASSWORD'] ); + $passw = $aPassw[0]; + if (sizeof( $aPassw ) > 1) + $passw = ($passw == 'none') ? "" : G::decrypt( $passw, $aInfoCon['DBS_DATABASE_NAME'] ); + } + return $passw; } - return $passw; - } } diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 3e4d8427f..2808ed1d1 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - require_once ( "classes/model/Task.php" ); - require_once ( "classes/model/Process.php" ); - require_once ( "classes/model/Step.php" ); - require_once ( "classes/model/Application.php" ); - require_once ( 'classes/model/Groupwf.php' ); - require_once ( "classes/model/GroupUser.php" ); - require_once ( "classes/model/AppDelegation.php" ); - require_once ( "classes/model/Route.php" ); - require_once ( 'classes/model/SubApplication.php'); - require_once ( 'classes/model/SubProcess.php' ); - require_once ( "classes/model/Users.php" ); +require_once ("classes/model/Task.php"); +require_once ("classes/model/Process.php"); +require_once ("classes/model/Step.php"); +require_once ("classes/model/Application.php"); +require_once ('classes/model/Groupwf.php'); +require_once ("classes/model/GroupUser.php"); +require_once ("classes/model/AppDelegation.php"); +require_once ("classes/model/Route.php"); +require_once ('classes/model/SubApplication.php'); +require_once ('classes/model/SubProcess.php'); +require_once ("classes/model/Users.php"); - G::LoadClass( "plugin" ); +G::LoadClass( "plugin" ); /** * derivation - derivation class + * * @package workflow.engine.ProcessMaker * */ - class Derivation { - var $case; + var $case; - /** - * prepareInformation - * - * @param array $aData - * @return $taskInfo - */ - function prepareInformation($aData) - { - $oTask = new Task(); - //SELECT * - //FROM APP_DELEGATION AS A - //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) - //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) - //WHERE - //APP_UID = '$aData['APP_UID']' - //AND DEL_INDEX = '$aData['DEL_INDEX']' - $c = new Criteria ( 'workflow' ); - $c->clearSelectColumns(); - $c->addSelectColumn ( AppDelegationPeer::TAS_UID ); - $c->addSelectColumn ( RoutePeer::ROU_CONDITION ); - $c->addSelectColumn ( RoutePeer::ROU_NEXT_TASK ); - $c->addSelectColumn ( RoutePeer::ROU_TYPE ); - $c->addJoin ( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); - $c->addJoin ( AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN ); - $c->add ( AppDelegationPeer::APP_UID, $aData['APP_UID'] ); - $c->add ( AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX'] ); - $c->addAscendingOrderByColumn ( RoutePeer::ROU_CASE ); - $rs = AppDelegationPeer::doSelectRs ( $c ); - $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $aDerivation = $rs->getRow(); - $i = 0; - $taskInfo = array(); + /** + * prepareInformation + * + * @param array $aData + * @return $taskInfo + */ + function prepareInformation ($aData) + { + $oTask = new Task(); + //SELECT * + //FROM APP_DELEGATION AS A + //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) + //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) + //WHERE + //APP_UID = '$aData['APP_UID']' + //AND DEL_INDEX = '$aData['DEL_INDEX']' + $c = new Criteria( 'workflow' ); + $c->clearSelectColumns(); + $c->addSelectColumn( AppDelegationPeer::TAS_UID ); + $c->addSelectColumn( RoutePeer::ROU_CONDITION ); + $c->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); + $c->addSelectColumn( RoutePeer::ROU_TYPE ); + $c->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); + $c->addJoin( AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN ); + $c->add( AppDelegationPeer::APP_UID, $aData['APP_UID'] ); + $c->add( AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX'] ); + $c->addAscendingOrderByColumn( RoutePeer::ROU_CASE ); + $rs = AppDelegationPeer::doSelectRs( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $aDerivation = $rs->getRow(); + $i = 0; + $taskInfo = array (); - $oUser = new Users(); - $this->case = new Cases(); - // 1. there is no rule - if ( is_null ( $aDerivation['ROU_NEXT_TASK'] ) ) { - throw ( new Exception ( G::LoadTranslation ( 'ID_NO_DERIVATION_RULE') ) ); - } - - while( is_array( $aDerivation) ) { - $oTask = new Task(); - $aDerivation = G::array_merges( $aDerivation, $aData ); - $bContinue = true; - - //evaluate the condition if there are conditions defined. - if( isset( $aDerivation['ROU_CONDITION'] ) && trim($aDerivation['ROU_CONDITION']) != '' - && ( $aDerivation['ROU_TYPE'] != 'SELECT' || $aDerivation['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION') ) { - $AppFields = $this->case->loadCase( $aData['APP_UID'] ); - G::LoadClass('pmScript'); - $oPMScript = new PMScript(); - $oPMScript->setFields( $AppFields['APP_DATA'] ); - $oPMScript->setScript( $aDerivation['ROU_CONDITION'] ); - $bContinue = $oPMScript->evaluate(); - } - - if ( $aDerivation['ROU_TYPE'] == 'EVALUATE' ) { - if ( count ( $taskInfo) >= 1) { - $bContinue = false; - } - } - - if ($bContinue) { - $i++; - $TaskFields = $oTask->load( $aDerivation['TAS_UID'] ); - - $aDerivation = G::array_merges( $aDerivation, $TaskFields ); - - //2. if next case is an special case - if ( (int)$aDerivation['ROU_NEXT_TASK'] < 0) { - $aDerivation['NEXT_TASK']['TAS_UID'] = (int)$aDerivation['ROU_NEXT_TASK']; - $aDerivation['NEXT_TASK']['TAS_ASSIGN_TYPE'] = 'nobody'; - $aDerivation['NEXT_TASK']['TAS_PRIORITY_VARIABLE'] = ''; - $aDerivation['NEXT_TASK']['TAS_DEF_PROC_CODE'] = ''; - $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; - $aDerivation['NEXT_TASK']['TAS_TRANSFER_FLY'] = ''; - - switch ($aDerivation['ROU_NEXT_TASK']) { - case -1: $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation('ID_END_OF_PROCESS'); - break; - case -2: $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation('ID_TAREA_COLGANTE'); - break; - } - $aDerivation['NEXT_TASK']['USR_UID'] = ''; - } - else { - //3. load the task information of normal NEXT_TASK - $aDerivation['NEXT_TASK'] = $oTask->load( $aDerivation['ROU_NEXT_TASK'] );//print $aDerivation['ROU_NEXT_TASK']." **** ".$aDerivation['NEXT_TASK']['TAS_TYPE']."
"; - - if ($aDerivation['NEXT_TASK']['TAS_TYPE'] === 'SUBPROCESS') { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $aDerivation['PRO_UID']); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $aDerivation['NEXT_TASK']['TAS_UID']); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $sTaskParent = $aDerivation['NEXT_TASK']['TAS_UID']; - $aDerivation['ROU_NEXT_TASK'] = $aRow['TAS_UID'];//print "
Life is just a lonely highway"; - $aDerivation['NEXT_TASK'] = $oTask->load( $aDerivation['ROU_NEXT_TASK'] );//print "
Life is just a lonely highway";print"
"; - $oProcess = new Process(); - $aRow = $oProcess->load($aRow['PRO_UID']); - $aDerivation['NEXT_TASK']['TAS_TITLE'] .= ' (' . $aRow['PRO_TITLE'] . ')'; - $aDerivation['NEXT_TASK']['TAS_PARENT'] = $sTaskParent; - unset($oTask, $oProcess, $aRow, $sTaskParent); - } - else { - $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; - } - $aDerivation['NEXT_TASK']['USER_ASSIGNED'] = $this->getNextAssignedUser($aDerivation); + $oUser = new Users(); + $this->case = new Cases(); + // 1. there is no rule + if (is_null( $aDerivation['ROU_NEXT_TASK'] )) { + throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) )); } - $taskInfo[$i] = $aDerivation; - } - $rs->next(); - $aDerivation = $rs->getRow(); + while (is_array( $aDerivation )) { + $oTask = new Task(); + $aDerivation = G::array_merges( $aDerivation, $aData ); + $bContinue = true; + + //evaluate the condition if there are conditions defined. + if (isset( $aDerivation['ROU_CONDITION'] ) && trim( $aDerivation['ROU_CONDITION'] ) != '' && ($aDerivation['ROU_TYPE'] != 'SELECT' || $aDerivation['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION')) { + $AppFields = $this->case->loadCase( $aData['APP_UID'] ); + G::LoadClass( 'pmScript' ); + $oPMScript = new PMScript(); + $oPMScript->setFields( $AppFields['APP_DATA'] ); + $oPMScript->setScript( $aDerivation['ROU_CONDITION'] ); + $bContinue = $oPMScript->evaluate(); + } + + if ($aDerivation['ROU_TYPE'] == 'EVALUATE') { + if (count( $taskInfo ) >= 1) { + $bContinue = false; + } + } + + if ($bContinue) { + $i ++; + $TaskFields = $oTask->load( $aDerivation['TAS_UID'] ); + + $aDerivation = G::array_merges( $aDerivation, $TaskFields ); + + //2. if next case is an special case + if ((int) $aDerivation['ROU_NEXT_TASK'] < 0) { + $aDerivation['NEXT_TASK']['TAS_UID'] = (int) $aDerivation['ROU_NEXT_TASK']; + $aDerivation['NEXT_TASK']['TAS_ASSIGN_TYPE'] = 'nobody'; + $aDerivation['NEXT_TASK']['TAS_PRIORITY_VARIABLE'] = ''; + $aDerivation['NEXT_TASK']['TAS_DEF_PROC_CODE'] = ''; + $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; + $aDerivation['NEXT_TASK']['TAS_TRANSFER_FLY'] = ''; + + switch ($aDerivation['ROU_NEXT_TASK']) { + case - 1: + $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation( 'ID_END_OF_PROCESS' ); + break; + case - 2: + $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation( 'ID_TAREA_COLGANTE' ); + break; + } + $aDerivation['NEXT_TASK']['USR_UID'] = ''; + } else { + //3. load the task information of normal NEXT_TASK + $aDerivation['NEXT_TASK'] = $oTask->load( $aDerivation['ROU_NEXT_TASK'] ); //print $aDerivation['ROU_NEXT_TASK']." **** ".$aDerivation['NEXT_TASK']['TAS_TYPE']."
"; + + + if ($aDerivation['NEXT_TASK']['TAS_TYPE'] === 'SUBPROCESS') { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $aDerivation['PRO_UID'] ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $aDerivation['NEXT_TASK']['TAS_UID'] ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + $sTaskParent = $aDerivation['NEXT_TASK']['TAS_UID']; + $aDerivation['ROU_NEXT_TASK'] = $aRow['TAS_UID']; //print "
Life is just a lonely highway"; + $aDerivation['NEXT_TASK'] = $oTask->load( $aDerivation['ROU_NEXT_TASK'] ); //print "
Life is just a lonely highway";print"
"; + $oProcess = new Process(); + $aRow = $oProcess->load( $aRow['PRO_UID'] ); + $aDerivation['NEXT_TASK']['TAS_TITLE'] .= ' (' . $aRow['PRO_TITLE'] . ')'; + $aDerivation['NEXT_TASK']['TAS_PARENT'] = $sTaskParent; + unset( $oTask, $oProcess, $aRow, $sTaskParent ); + } else { + $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; + } + $aDerivation['NEXT_TASK']['USER_ASSIGNED'] = $this->getNextAssignedUser( $aDerivation ); + } + + $taskInfo[$i] = $aDerivation; + } + $rs->next(); + $aDerivation = $rs->getRow(); + } + return $taskInfo; } - return $taskInfo; - } + /** + * getRouteCondition + * + * @param array $aData + * @return $routeCondition + */ + function getRouteCondition ($aData) + { + //SELECT * + //FROM APP_DELEGATION AS A + //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) + //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) + //WHERE + //APP_UID = '$aData['APP_UID']' + //AND DEL_INDEX = '$aData['DEL_INDEX']' + $c = new Criteria( 'workflow' ); + $c->clearSelectColumns(); + $c->addSelectColumn( AppDelegationPeer::TAS_UID ); + $c->addSelectColumn( RoutePeer::ROU_CONDITION ); + $c->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); + $c->addSelectColumn( RoutePeer::ROU_TYPE ); + $c->addSelectColumn( RoutePeer::ROU_OPTIONAL ); + $c->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); + $c->addJoin( AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN ); + $c->add( AppDelegationPeer::APP_UID, $aData['APP_UID'] ); + $c->add( AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX'] ); + $c->addAscendingOrderByColumn( RoutePeer::ROU_CASE ); + $rs = AppDelegationPeer::doSelectRs( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $aDerivation = $rs->getRow(); + while (is_array( $aDerivation )) { + return $aDerivation; + } - /** - * getRouteCondition - * - * @param array $aData - * @return $routeCondition - */ - function getRouteCondition($aData) - { - //SELECT * - //FROM APP_DELEGATION AS A - //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) - //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) - //WHERE - //APP_UID = '$aData['APP_UID']' - //AND DEL_INDEX = '$aData['DEL_INDEX']' - $c = new Criteria ( 'workflow' ); - $c->clearSelectColumns(); - $c->addSelectColumn ( AppDelegationPeer::TAS_UID ); - $c->addSelectColumn ( RoutePeer::ROU_CONDITION ); - $c->addSelectColumn ( RoutePeer::ROU_NEXT_TASK ); - $c->addSelectColumn ( RoutePeer::ROU_TYPE ); - $c->addSelectColumn ( RoutePeer::ROU_OPTIONAL); - $c->addJoin ( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); - $c->addJoin ( AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN ); - $c->add ( AppDelegationPeer::APP_UID, $aData['APP_UID'] ); - $c->add ( AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX'] ); - $c->addAscendingOrderByColumn ( RoutePeer::ROU_CASE ); - $rs = AppDelegationPeer::doSelectRs ( $c ); - $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $aDerivation = $rs->getRow(); - while( is_array( $aDerivation) ) { - return $aDerivation; - } - - } - - function GetAppParentIndex($aData) - { - //('SELECT * FROM APP_THREAD WHERE APP_UID='".$aData['APP_UID']."' AND DEL_INDEX = '".$aData['DEL_INDEX']."'"); - try { - $aThreads = array(); - $c = new Criteria(); - $c->addSelectColumn(AppThreadPeer::APP_THREAD_PARENT); - $c->add(AppThreadPeer::APP_UID, $aData['APP_UID']); - $c->add(AppThreadPeer::DEL_INDEX, $aData['DEL_INDEX']); - $rs = AppThreadPeer::doSelectRs($c); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while (is_array($row)) { - $aThreads = $row; - $rs->next(); - $row = $rs->getRow(); - } - return $aThreads; } - catch (exception $e) { - throw ($e); + + function GetAppParentIndex ($aData) + { + //('SELECT * FROM APP_THREAD WHERE APP_UID='".$aData['APP_UID']."' AND DEL_INDEX = '".$aData['DEL_INDEX']."'"); + try { + $aThreads = array (); + $c = new Criteria(); + $c->addSelectColumn( AppThreadPeer::APP_THREAD_PARENT ); + $c->add( AppThreadPeer::APP_UID, $aData['APP_UID'] ); + $c->add( AppThreadPeer::DEL_INDEX, $aData['DEL_INDEX'] ); + $rs = AppThreadPeer::doSelectRs( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + while (is_array( $row )) { + $aThreads = $row; + $rs->next(); + $row = $rs->getRow(); + } + return $aThreads; + } catch (exception $e) { + throw ($e); + } } - } - - - /* get all users, from any task, if the task have Groups, the function expand the group + /* get all users, from any task, if the task have Groups, the function expand the group * * @param string $sTasUid the task uidUser * @return Array $users an array with userID order by USR_UID */ - function getAllUsersFromAnyTask ( $sTasUid ) { - $users = array(); - $c = new Criteria ( 'workflow' ); - $c->clearSelectColumns(); - $c->addSelectColumn( TaskUserPeer::USR_UID); - $c->addSelectColumn( TaskUserPeer::TU_RELATION); - $c->add ( TaskUserPeer::TAS_UID, $sTasUid); - $c->add ( TaskUserPeer::TU_TYPE, 1); - $rs = TaskUserPeer::DoSelectRs ($c); - $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - if ( $row['TU_RELATION'] == '2' ) { - $cGrp = new Criteria ('workflow'); - $cGrp->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $cGrp->add(GroupUserPeer::GRP_UID, $row['USR_UID']); - $cGrp->addJoin(GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN); - $cGrp->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $cGrp->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $rsGrp = GroupUserPeer::DoSelectRs ($cGrp); - $rsGrp->setFetchmode (ResultSet::FETCHMODE_ASSOC); - $rsGrp->next(); - $rowGrp = $rsGrp->getRow(); - while ( is_array ( $rowGrp ) ) { - $users[$rowGrp['USR_UID']] = $rowGrp['USR_UID']; - $rsGrp->next(); - $rowGrp = $rsGrp->getRow(); + function getAllUsersFromAnyTask ($sTasUid) + { + $users = array (); + $c = new Criteria( 'workflow' ); + $c->clearSelectColumns(); + $c->addSelectColumn( TaskUserPeer::USR_UID ); + $c->addSelectColumn( TaskUserPeer::TU_RELATION ); + $c->add( TaskUserPeer::TAS_UID, $sTasUid ); + $c->add( TaskUserPeer::TU_TYPE, 1 ); + $rs = TaskUserPeer::DoSelectRs( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + while (is_array( $row )) { + if ($row['TU_RELATION'] == '2') { + $cGrp = new Criteria( 'workflow' ); + $cGrp->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $cGrp->add( GroupUserPeer::GRP_UID, $row['USR_UID'] ); + $cGrp->addJoin( GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN ); + $cGrp->addJoin( GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $cGrp->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $rsGrp = GroupUserPeer::DoSelectRs( $cGrp ); + $rsGrp->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rsGrp->next(); + $rowGrp = $rsGrp->getRow(); + while (is_array( $rowGrp )) { + $users[$rowGrp['USR_UID']] = $rowGrp['USR_UID']; + $rsGrp->next(); + $rowGrp = $rsGrp->getRow(); + } + } else { + //filter to users that is in vacation or has an inactive estatus, and others + $oUser = UsersPeer::retrieveByPK( $row['USR_UID'] ); + if ($oUser->getUsrStatus() == 'ACTIVE') { + $users[$row['USR_UID']] = $row['USR_UID']; + } else { + $userUID = $this->checkReplacedByUser( $oUser ); + if ($userUID != '') { + $users[$userUID] = $userUID; + } + } + } + $rs->next(); + $row = $rs->getRow(); } - } - else { - //filter to users that is in vacation or has an inactive estatus, and others - $oUser = UsersPeer::retrieveByPK( $row['USR_UID'] ); - if( $oUser->getUsrStatus() == 'ACTIVE' ){ - $users[$row['USR_UID']] = $row['USR_UID']; - } else { - $userUID = $this->checkReplacedByUser($oUser); - if ($userUID != '') { - $users[$userUID] = $userUID; - } - } - } - $rs->next(); - $row = $rs->getRow(); + //to do: different types of sort + sort( $users ); + + return $users; } - //to do: different types of sort - sort($users); - return $users; - } - - /* get an array of users, and returns the same arrays with User's fullname and other fields + /* get an array of users, and returns the same arrays with User's fullname and other fields * * @param Array $aUsers the task uidUser * @return Array $aUsersData an array with with User's fullname */ - function getUsersFullNameFromArray ( $aUsers ) { - $oUser = new Users(); - $aUsersData = array(); - if ( is_array ( $aUsers ) ) { - foreach ( $aUsers as $key => $val ) { - $userFields = $oUser->load($val); - $auxFields['USR_UID'] = $userFields['USR_UID']; - $auxFields['USR_USERNAME'] = $userFields['USR_USERNAME']; - $auxFields['USR_FIRSTNAME'] = $userFields['USR_FIRSTNAME']; - $auxFields['USR_LASTNAME'] = $userFields['USR_LASTNAME']; - $auxFields['USR_FULLNAME'] = $userFields['USR_LASTNAME'] . ($userFields['USR_LASTNAME'] != '' ? ', ' : '') . $userFields['USR_FIRSTNAME']; - $auxFields['USR_EMAIL'] = $userFields['USR_EMAIL']; - $auxFields['USR_STATUS'] = $userFields['USR_STATUS']; - $auxFields['USR_COUNTRY'] = $userFields['USR_COUNTRY']; - $auxFields['USR_CITY'] = $userFields['USR_CITY']; - $auxFields['USR_LOCATION'] = $userFields['USR_LOCATION']; - $auxFields['DEP_UID'] = $userFields['DEP_UID']; - $auxFields['USR_HIDDEN_FIELD'] = ''; - $aUsersData[] = $auxFields; - } - } - else { - $oCriteria = new Criteria(); - $oCriteria->add(UsersPeer::USR_UID, $aUsers); + function getUsersFullNameFromArray ($aUsers) + { + $oUser = new Users(); + $aUsersData = array (); + if (is_array( $aUsers )) { + foreach ($aUsers as $key => $val) { + $userFields = $oUser->load( $val ); + $auxFields['USR_UID'] = $userFields['USR_UID']; + $auxFields['USR_USERNAME'] = $userFields['USR_USERNAME']; + $auxFields['USR_FIRSTNAME'] = $userFields['USR_FIRSTNAME']; + $auxFields['USR_LASTNAME'] = $userFields['USR_LASTNAME']; + $auxFields['USR_FULLNAME'] = $userFields['USR_LASTNAME'] . ($userFields['USR_LASTNAME'] != '' ? ', ' : '') . $userFields['USR_FIRSTNAME']; + $auxFields['USR_EMAIL'] = $userFields['USR_EMAIL']; + $auxFields['USR_STATUS'] = $userFields['USR_STATUS']; + $auxFields['USR_COUNTRY'] = $userFields['USR_COUNTRY']; + $auxFields['USR_CITY'] = $userFields['USR_CITY']; + $auxFields['USR_LOCATION'] = $userFields['USR_LOCATION']; + $auxFields['DEP_UID'] = $userFields['DEP_UID']; + $auxFields['USR_HIDDEN_FIELD'] = ''; + $aUsersData[] = $auxFields; + } + } else { + $oCriteria = new Criteria(); + $oCriteria->add( UsersPeer::USR_UID, $aUsers ); - if (UsersPeer::doCount($oCriteria) < 1) { - return null; - } - $userFields = $oUser->load( $aUsers ); - $auxFields['USR_UID'] = $userFields['USR_UID']; - $auxFields['USR_USERNAME'] = $userFields['USR_USERNAME']; - $auxFields['USR_FIRSTNAME'] = $userFields['USR_FIRSTNAME']; - $auxFields['USR_LASTNAME'] = $userFields['USR_LASTNAME']; - $auxFields['USR_FULLNAME'] = $userFields['USR_LASTNAME'] . ($userFields['USR_LASTNAME'] != '' ? ', ' : '') . $userFields['USR_FIRSTNAME']; - $auxFields['USR_EMAIL'] = $userFields['USR_EMAIL']; - $auxFields['USR_STATUS'] = $userFields['USR_STATUS']; - $auxFields['USR_COUNTRY'] = $userFields['USR_COUNTRY']; - $auxFields['USR_CITY'] = $userFields['USR_CITY']; - $auxFields['USR_LOCATION'] = $userFields['USR_LOCATION']; - $auxFields['DEP_UID'] = $userFields['DEP_UID']; - $aUsersData = $auxFields; + if (UsersPeer::doCount( $oCriteria ) < 1) { + return null; + } + $userFields = $oUser->load( $aUsers ); + $auxFields['USR_UID'] = $userFields['USR_UID']; + $auxFields['USR_USERNAME'] = $userFields['USR_USERNAME']; + $auxFields['USR_FIRSTNAME'] = $userFields['USR_FIRSTNAME']; + $auxFields['USR_LASTNAME'] = $userFields['USR_LASTNAME']; + $auxFields['USR_FULLNAME'] = $userFields['USR_LASTNAME'] . ($userFields['USR_LASTNAME'] != '' ? ', ' : '') . $userFields['USR_FIRSTNAME']; + $auxFields['USR_EMAIL'] = $userFields['USR_EMAIL']; + $auxFields['USR_STATUS'] = $userFields['USR_STATUS']; + $auxFields['USR_COUNTRY'] = $userFields['USR_COUNTRY']; + $auxFields['USR_CITY'] = $userFields['USR_CITY']; + $auxFields['USR_LOCATION'] = $userFields['USR_LOCATION']; + $auxFields['DEP_UID'] = $userFields['DEP_UID']; + $aUsersData = $auxFields; + } + return $aUsersData; } - return $aUsersData; - } - /* get next assigned user + /* get next assigned user * * @param Array $tasInfo * @return Array $userFields */ - function getNextAssignedUser( $tasInfo ){ - $oUser = new Users(); - $nextAssignedTask = $tasInfo['NEXT_TASK']; - $lastAssigned = $tasInfo['NEXT_TASK']['TAS_LAST_ASSIGNED']; - $sTasUid = $tasInfo['NEXT_TASK']['TAS_UID']; - // to do: we can increase the LOCATION by COUNTRY, STATE and LOCATION - /* Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */ - $assignLocation = ''; - if ($tasInfo['NEXT_TASK']['TAS_ASSIGN_LOCATION'] == 'TRUE') + function getNextAssignedUser ($tasInfo) { - $oUser->load( $tasInfo['USER_UID'] ); - krumo ($oUser->getUsrLocation() ); - //to do: assign for location - //$assignLocation = " AND USR_LOCATION = " . $oUser->Fields['USR_LOCATION']; + $oUser = new Users(); + $nextAssignedTask = $tasInfo['NEXT_TASK']; + $lastAssigned = $tasInfo['NEXT_TASK']['TAS_LAST_ASSIGNED']; + $sTasUid = $tasInfo['NEXT_TASK']['TAS_UID']; + // to do: we can increase the LOCATION by COUNTRY, STATE and LOCATION + /* Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */ + $assignLocation = ''; + if ($tasInfo['NEXT_TASK']['TAS_ASSIGN_LOCATION'] == 'TRUE') { + $oUser->load( $tasInfo['USER_UID'] ); + krumo( $oUser->getUsrLocation() ); + //to do: assign for location + //$assignLocation = " AND USR_LOCATION = " . $oUser->Fields['USR_LOCATION']; + } + /* End - Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */ + + $uidUser = ''; + switch ($nextAssignedTask['TAS_ASSIGN_TYPE']) { + case 'BALANCED': + $users = $this->getAllUsersFromAnyTask( $sTasUid ); + if (is_array( $users ) && count( $users ) > 0) { + //to do apply any filter like LOCATION assignment + $uidUser = $users[0]; + $i = count( $users ) - 1; + while ($i > 0) { + if ($lastAssigned < $users[$i]) + $uidUser = $users[$i]; + $i --; + } + } else { + throw (new Exception( G::LoadTranslation( 'ID_NO_USERS' ) )); + } + $userFields = $this->getUsersFullNameFromArray( $uidUser ); + break; + case 'STATIC_MI': + case 'CANCEL_MI': + case 'MANUAL': + $users = $this->getAllUsersFromAnyTask( $sTasUid ); + $userFields = $this->getUsersFullNameFromArray( $users ); + break; + case 'EVALUATE': + $AppFields = $this->case->loadCase( $tasInfo['APP_UID'] ); + $variable = str_replace( '@@', '', $nextAssignedTask['TAS_ASSIGN_VARIABLE'] ); + if (isset( $AppFields['APP_DATA'][$variable] )) { + if ($AppFields['APP_DATA'][$variable] != '') { + $value = $this->checkReplacedByUser( $AppFields['APP_DATA'][$variable] ); + $userFields = $this->getUsersFullNameFromArray( $value ); + if (is_null( $userFields )) { + throw (new Exception( "Task doesn't have a valid user in variable $variable." )); + } + } else { + throw (new Exception( "Task doesn't have a valid user in variable $variable." )); + } + } else + throw (new Exception( "Task doesn't have a valid user in variable $variable or this variable doesn't exist." )); + break; + + case 'REPORT_TO': + //default error user when the reportsTo is not assigned to that user + //look for USR_REPORTS_TO to this user + $userFields['USR_UID'] = ''; + $userFields['USR_FULLNAME'] = 'Current user does not have a valid Reports To user'; + $userFields['USR_USERNAME'] = 'Current user does not have a valid Reports To user'; + $userFields['USR_FIRSTNAME'] = ''; + $userFields['USR_LASTNAME'] = ''; + $userFields['USR_EMAIL'] = ''; + + //get the report_to user & its full info + $useruid = $this->getDenpendentUser( $this->checkReplacedByUser( $tasInfo['USER_UID'] ) ); + + if (isset( $useruid ) && $useruid != '') { + $userFields = $this->getUsersFullNameFromArray( $useruid ); + } + + // if there is no report_to user info, throw an exception indicating this + if (! isset( $userFields ) || $userFields['USR_UID'] == '') { + throw (new Exception( G::LoadTranslation( 'ID_MSJ_REPORSTO' ) )); // "The current user does not have a valid Reports To user. Please contact administrator.") ) ; + } + break; + + case 'SELF_SERVICE': + //look for USR_REPORTS_TO to this user + $userFields['USR_UID'] = ''; + $userFields['USR_FULLNAME'] = '' . G::LoadTranslation( 'ID_UNASSIGNED' ) . ''; + $userFields['USR_USERNAME'] = '' . G::LoadTranslation( 'ID_UNASSIGNED' ) . ''; + $userFields['USR_FIRSTNAME'] = ''; + $userFields['USR_LASTNAME'] = ''; + $userFields['USR_EMAIL'] = ''; + break; + + default: + throw (new Exception( 'Invalid Task Assignment method for Next Task ' )); + } + return $userFields; } - /* End - Verify if the next Task is set with the option "TAS_ASSIGN_LOCATION == TRUE" */ - $uidUser = ''; - switch( $nextAssignedTask['TAS_ASSIGN_TYPE'] ) { - case 'BALANCED' : - $users = $this->getAllUsersFromAnyTask ($sTasUid); - if ( is_array( $users) && count( $users ) > 0 ) { - //to do apply any filter like LOCATION assignment - $uidUser = $users[ 0 ]; - $i = count($users) -1; - while ( $i > 0 ) { - if ( $lastAssigned < $users[$i] ) - $uidUser = $users[ $i ]; - $i--; - } - } - else { - throw ( new Exception (G::LoadTranslation( 'ID_NO_USERS' ) ) ); - } - $userFields = $this->getUsersFullNameFromArray ($uidUser); - break; - case 'STATIC_MI': - case 'CANCEL_MI': - case 'MANUAL' : - $users = $this->getAllUsersFromAnyTask ($sTasUid); - $userFields = $this->getUsersFullNameFromArray ($users); - break; - case 'EVALUATE' : - $AppFields = $this->case->loadCase( $tasInfo['APP_UID'] ); - $variable = str_replace ( '@@', '', $nextAssignedTask['TAS_ASSIGN_VARIABLE'] ); - if ( isset ( $AppFields['APP_DATA'][$variable] ) ) { - if ($AppFields['APP_DATA'][$variable] != '') { - $value = $this->checkReplacedByUser($AppFields['APP_DATA'][$variable]); - $userFields = $this->getUsersFullNameFromArray ($value); - if (is_null($userFields)) { - throw ( new Exception("Task doesn't have a valid user in variable $variable.") ) ; - } - } - else { - throw ( new Exception("Task doesn't have a valid user in variable $variable.") ) ; - } - } - else - throw ( new Exception("Task doesn't have a valid user in variable $variable or this variable doesn't exist.") ) ; - break; - - case 'REPORT_TO' : - //default error user when the reportsTo is not assigned to that user - //look for USR_REPORTS_TO to this user - $userFields['USR_UID'] = ''; - $userFields['USR_FULLNAME'] = 'Current user does not have a valid Reports To user'; - $userFields['USR_USERNAME'] = 'Current user does not have a valid Reports To user'; - $userFields['USR_FIRSTNAME'] = ''; - $userFields['USR_LASTNAME'] = ''; - $userFields['USR_EMAIL'] = ''; - - //get the report_to user & its full info - $useruid = $this->getDenpendentUser($this->checkReplacedByUser($tasInfo['USER_UID'])); - - if (isset($useruid) && $useruid != '') { - $userFields = $this->getUsersFullNameFromArray($useruid); - } - - // if there is no report_to user info, throw an exception indicating this - if (!isset($userFields) || $userFields['USR_UID'] == '') { - throw ( new Exception(G::LoadTranslation('ID_MSJ_REPORSTO')));// "The current user does not have a valid Reports To user. Please contact administrator.") ) ; - } - break; - - case 'SELF_SERVICE' : - //look for USR_REPORTS_TO to this user - $userFields['USR_UID'] = ''; - $userFields['USR_FULLNAME'] = '' . G::LoadTranslation('ID_UNASSIGNED') . ''; - $userFields['USR_USERNAME'] = '' . G::LoadTranslation('ID_UNASSIGNED') . ''; - $userFields['USR_FIRSTNAME'] = ''; - $userFields['USR_LASTNAME'] = ''; - $userFields['USR_EMAIL'] = ''; - break; - - default : - throw ( new Exception('Invalid Task Assignment method for Next Task ') ) ; - } - return $userFields; - } - - /* getDenpendentUser + /* getDenpendentUser * * @param string $USR_UID * @return string $aRow['USR_REPORTS_TO'] */ - function getDenpendentUser($USR_UID) - { - //require_once 'classes/model/Users.php'; - //here the uid to next Users - $oC=new Criteria(); - $oC->addSelectColumn(UsersPeer::USR_REPORTS_TO); - $oC->add(UsersPeer::USR_UID,$USR_UID); - $oDataset=UsersPeer::doSelectRS($oC); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - return $aRow['USR_REPORTS_TO']; - } + function getDenpendentUser ($USR_UID) + { + //require_once 'classes/model/Users.php'; + //here the uid to next Users + $oC = new Criteria(); + $oC->addSelectColumn( UsersPeer::USR_REPORTS_TO ); + $oC->add( UsersPeer::USR_UID, $USR_UID ); + $oDataset = UsersPeer::doSelectRS( $oC ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + return $aRow['USR_REPORTS_TO']; + } - /* setTasLastAssigned + /* setTasLastAssigned * * @param string $tasUid * @param string $usrUid * @throws Exception $e * @return void */ - function setTasLastAssigned ( $tasUid, $usrUid ) - { - try { - $oTask = TaskPeer::retrieveByPk( $tasUid ); - $oTask->setTasLastAssigned( $usrUid ); - $oTask->save(); + function setTasLastAssigned ($tasUid, $usrUid) + { + try { + $oTask = TaskPeer::retrieveByPk( $tasUid ); + $oTask->setTasLastAssigned( $usrUid ); + $oTask->save(); + } catch (Exception $e) { + throw ($e); + } } - catch ( Exception $e ) { - throw ( $e ); - } - } - /* derivate + /* derivate * * @param array $currentDelegation * @param array $nextDelegations * @return void */ - function derivate($currentDelegation=array(), $nextDelegations =array()) - { - //define this... - if ( !defined('TASK_FINISH_PROCESS')) define('TASK_FINISH_PROCESS',-1); - if ( !defined('TASK_FINISH_TASK')) define('TASK_FINISH_TASK', -2); + function derivate ($currentDelegation = array(), $nextDelegations = array()) + { + //define this... + if (! defined( 'TASK_FINISH_PROCESS' )) + define( 'TASK_FINISH_PROCESS', - 1 ); + if (! defined( 'TASK_FINISH_TASK' )) + define( 'TASK_FINISH_TASK', - 2 ); - $this->case = new cases(); + $this->case = new cases(); - //first, we close the current derivation, then we'll try to derivate to each defined route - $appFields = $this->case->loadCase($currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); - $this->case->CloseCurrentDelegation ( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); + //first, we close the current derivation, then we'll try to derivate to each defined route + $appFields = $this->case->loadCase( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); + $this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); - //Count how many tasks should be derivated. - //$countNextTask = count($nextDelegations); - foreach($nextDelegations as $nextDel) { - //subprocesses?? - if ($nextDel['TAS_PARENT'] != '') { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $appFields['PRO_UID']); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $nextDel['TAS_PARENT']); - if (SubProcessPeer::doCount($oCriteria) > 0) { - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aSP = $oDataset->getRow(); - $aSP['USR_UID'] = $nextDel['USR_UID']; - $oTask = new Task(); - $aTask = $oTask->load($nextDel['TAS_PARENT']); - $nextDel = array('TAS_UID' => $aTask['TAS_UID'], - 'USR_UID' => $aSP['USR_UID'], - 'TAS_ASSIGN_TYPE' => $aTask['TAS_ASSIGN_TYPE'], - 'TAS_DEF_PROC_CODE' => $aTask['TAS_DEF_PROC_CODE'], - 'DEL_PRIORITY' => 3, - 'TAS_PARENT' => ''); - } - else { - continue; - } - } - //get TAS_ASSIGN_TYPE for current Delegation - $oTask = new Task(); - $aTask = $oTask->load($currentDelegation['TAS_UID']); - $currentDelegation['TAS_ASSIGN_TYPE'] = $aTask['TAS_ASSIGN_TYPE']; - $currentDelegation['TAS_MI_COMPLETE_VARIABLE'] = $aTask['TAS_MI_COMPLETE_VARIABLE']; - $currentDelegation['TAS_MI_INSTANCE_VARIABLE'] = $aTask['TAS_MI_INSTANCE_VARIABLE']; + //Count how many tasks should be derivated. + //$countNextTask = count($nextDelegations); + foreach ($nextDelegations as $nextDel) { + //subprocesses?? + if ($nextDel['TAS_PARENT'] != '') { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $appFields['PRO_UID'] ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $nextDel['TAS_PARENT'] ); + if (SubProcessPeer::doCount( $oCriteria ) > 0) { + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aSP = $oDataset->getRow(); + $aSP['USR_UID'] = $nextDel['USR_UID']; + $oTask = new Task(); + $aTask = $oTask->load( $nextDel['TAS_PARENT'] ); + $nextDel = array ('TAS_UID' => $aTask['TAS_UID'],'USR_UID' => $aSP['USR_UID'],'TAS_ASSIGN_TYPE' => $aTask['TAS_ASSIGN_TYPE'],'TAS_DEF_PROC_CODE' => $aTask['TAS_DEF_PROC_CODE'],'DEL_PRIORITY' => 3,'TAS_PARENT' => '' + ); + } else { + continue; + } + } + //get TAS_ASSIGN_TYPE for current Delegation + $oTask = new Task(); + $aTask = $oTask->load( $currentDelegation['TAS_UID'] ); + $currentDelegation['TAS_ASSIGN_TYPE'] = $aTask['TAS_ASSIGN_TYPE']; + $currentDelegation['TAS_MI_COMPLETE_VARIABLE'] = $aTask['TAS_MI_COMPLETE_VARIABLE']; + $currentDelegation['TAS_MI_INSTANCE_VARIABLE'] = $aTask['TAS_MI_INSTANCE_VARIABLE']; - //get open threads - $openThreads = $this->case->GetOpenThreads( $currentDelegation['APP_UID'] ); - //if we are derivating to finish process but there are no more open thread then we are finishing only the task, we are not finishing the whole process - if (($nextDel['TAS_UID'] == TASK_FINISH_PROCESS) && (($openThreads + 1) > 1)) { - $nextDel['TAS_UID'] = TASK_FINISH_TASK; - } - switch ( $nextDel['TAS_UID'] ) { - case TASK_FINISH_PROCESS: + //get open threads + $openThreads = $this->case->GetOpenThreads( $currentDelegation['APP_UID'] ); + //if we are derivating to finish process but there are no more open thread then we are finishing only the task, we are not finishing the whole process + if (($nextDel['TAS_UID'] == TASK_FINISH_PROCESS) && (($openThreads + 1) > 1)) { + $nextDel['TAS_UID'] = TASK_FINISH_TASK; + } + switch ($nextDel['TAS_UID']) { + case TASK_FINISH_PROCESS: /*Close all delegations of $currentDelegation['APP_UID'] */ - $this->case->closeAllDelegations ( $currentDelegation['APP_UID'] ); - $this->case->closeAllThreads ( $currentDelegation['APP_UID']); - //I think we need to change the APP_STATUS to completed, - break; + $this->case->closeAllDelegations( $currentDelegation['APP_UID'] ); + $this->case->closeAllThreads( $currentDelegation['APP_UID'] ); + //I think we need to change the APP_STATUS to completed, + break; - case TASK_FINISH_TASK: - $iAppThreadIndex = $appFields['DEL_THREAD']; - $this->case->closeAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex); - break; + case TASK_FINISH_TASK: + $iAppThreadIndex = $appFields['DEL_THREAD']; + $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); + break; - default: - // get all siblingThreads - //if($currentDelegation['TAS_ASSIGN_TYPE'] == 'STATIC_MI') - switch ($currentDelegation['TAS_ASSIGN_TYPE']) { - case 'CANCEL_MI': - case 'STATIC_MI': - $siblingThreads = $this->case->GetAllOpenDelegation($currentDelegation); - $aData = $this->case->loadCase($currentDelegation['APP_UID']); + default: + // get all siblingThreads + //if($currentDelegation['TAS_ASSIGN_TYPE'] == 'STATIC_MI') + switch ($currentDelegation['TAS_ASSIGN_TYPE']) { + case 'CANCEL_MI': + case 'STATIC_MI': + $siblingThreads = $this->case->GetAllOpenDelegation( $currentDelegation ); + $aData = $this->case->loadCase( $currentDelegation['APP_UID'] ); - if (isset($aData['APP_DATA'][str_replace('@@', '', $currentDelegation['TAS_MI_INSTANCE_VARIABLE'])])) - $sMIinstanceVar = $aData['APP_DATA'][str_replace('@@', '', $currentDelegation['TAS_MI_INSTANCE_VARIABLE'])]; - else - $sMIinstanceVar = $aData['APP_DATA']['TAS_MI_INSTANCE_VARIABLE']; + if (isset( $aData['APP_DATA'][str_replace( '@@', '', $currentDelegation['TAS_MI_INSTANCE_VARIABLE'] )] )) + $sMIinstanceVar = $aData['APP_DATA'][str_replace( '@@', '', $currentDelegation['TAS_MI_INSTANCE_VARIABLE'] )]; + else + $sMIinstanceVar = $aData['APP_DATA']['TAS_MI_INSTANCE_VARIABLE']; - if (isset($aData['APP_DATA'][str_replace('@@', '', $currentDelegation['TAS_MI_COMPLETE_VARIABLE'])])) - $sMIcompleteVar = $aData['APP_DATA'][str_replace('@@', '', $currentDelegation['TAS_MI_COMPLETE_VARIABLE'])]; - else - $sMIcompleteVar = $aData['APP_DATA']['TAS_MI_COMPLETE_VARIABLE']; + if (isset( $aData['APP_DATA'][str_replace( '@@', '', $currentDelegation['TAS_MI_COMPLETE_VARIABLE'] )] )) + $sMIcompleteVar = $aData['APP_DATA'][str_replace( '@@', '', $currentDelegation['TAS_MI_COMPLETE_VARIABLE'] )]; + else + $sMIcompleteVar = $aData['APP_DATA']['TAS_MI_COMPLETE_VARIABLE']; - $discriminateThread = $sMIinstanceVar - $sMIcompleteVar; + $discriminateThread = $sMIinstanceVar - $sMIcompleteVar; - // -1 because One App Delegation is closed by above Code - if($discriminateThread == count($siblingThreads)) - $canDerivate =true; - else - $canDerivate =false; - break; + // -1 because One App Delegation is closed by above Code + if ($discriminateThread == count( $siblingThreads )) + $canDerivate = true; + else + $canDerivate = false; + break; - default: - if ( $currentDelegation['ROU_TYPE'] == 'SEC-JOIN') { - $siblingThreads = $this->case->getOpenSiblingThreads( - $nextDel['TAS_UID'], - $currentDelegation['APP_UID'], - $currentDelegation['DEL_INDEX'], - $currentDelegation['TAS_UID'], - $currentDelegation['ROU_TYPE'] - ); - $canDerivate = count($siblingThreads) == 0; - } - else if($currentDelegation['ROU_TYPE'] == 'DISCRIMINATOR') { - //First get the total threads of Next Task where route type='Discriminator' - $siblingThreads = $this->case->getOpenSiblingThreads($nextDel['TAS_UID'], $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'], $currentDelegation['TAS_UID'],$currentDelegation['ROU_TYPE']); - $siblingThreadsCount = count($siblingThreads); - $discriminateThread = $currentDelegation['ROU_CONDITION']; - //$checkThread = count($totalThreads) - $cond; - if($discriminateThread == $siblingThreadsCount) - $canDerivate = true; - else - $canDerivate = false; - } - else { - $canDerivate = true; - } - } //end switch - - if ( $canDerivate ) { - $aSP = isset($aSP) ? $aSP : null; - $iNewDelIndex = $this->doDerivation($currentDelegation, $nextDel, $appFields, $aSP); - } - else { //when the task doesnt generate a new AppDelegation - $iAppThreadIndex = $appFields['DEL_THREAD']; - switch ( $currentDelegation['ROU_TYPE'] ) { - case 'DISCRIMINATOR': - case 'SEC-JOIN' : - $this->case->closeAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex); - break; - default : - if($currentDelegation['TAS_ASSIGN_TYPE'] == 'STATIC_MI' || $currentDelegation['TAS_ASSIGN_TYPE'] == 'CANCEL_MI') - $this->case->closeAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex); - }//switch - } - } - //SETS THE APP_PROC_CODE - //if (isset($nextDel['TAS_DEF_PROC_CODE'])) - //$appFields['APP_PROC_CODE'] = $nextDel['TAS_DEF_PROC_CODE']; - unset($aSP); - - } //end foreach - - /* Start Block : UPDATES APPLICATION */ - - //Set THE APP_STATUS - $appFields['APP_STATUS'] = $currentDelegation['APP_STATUS']; - /* Start Block : Count the open threads of $currentDelegation['APP_UID'] */ - $openThreads = $this->case->GetOpenThreads( $currentDelegation['APP_UID'] ); - - /////// - $sw = 0; - - if ($openThreads == 0) { - //Close case - $appFields["APP_STATUS"] = "COMPLETED"; - $appFields["APP_FINISH_DATE"] = "now"; - $this->verifyIsCaseChild($currentDelegation["APP_UID"]); - - $sw = 1; - } - - if (isset($iNewDelIndex)) { - $appFields["DEL_INDEX"] = $iNewDelIndex; - $appFields["TAS_UID"] = $nextDel["TAS_UID"]; - - $sw = 1; - } - - if ($sw == 1) { - //Start Block : UPDATES APPLICATION - $this->case->updateCase($currentDelegation["APP_UID"], $appFields); - //End Block : UPDATES APPLICATION - } - } + default: + if ($currentDelegation['ROU_TYPE'] == 'SEC-JOIN') { + $siblingThreads = $this->case->getOpenSiblingThreads( $nextDel['TAS_UID'], $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'], $currentDelegation['TAS_UID'], $currentDelegation['ROU_TYPE'] ); + $canDerivate = count( $siblingThreads ) == 0; + } else if ($currentDelegation['ROU_TYPE'] == 'DISCRIMINATOR') { + //First get the total threads of Next Task where route type='Discriminator' + $siblingThreads = $this->case->getOpenSiblingThreads( $nextDel['TAS_UID'], $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'], $currentDelegation['TAS_UID'], $currentDelegation['ROU_TYPE'] ); + $siblingThreadsCount = count( $siblingThreads ); + $discriminateThread = $currentDelegation['ROU_CONDITION']; + //$checkThread = count($totalThreads) - $cond; + if ($discriminateThread == $siblingThreadsCount) + $canDerivate = true; + else + $canDerivate = false; + } else { + $canDerivate = true; + } + } //end switch - function doDerivation($currentDelegation, $nextDel, $appFields, $aSP = null) - { - $iAppThreadIndex = $appFields['DEL_THREAD']; - $delType = 'NORMAL'; - - if (is_numeric($nextDel['DEL_PRIORITY'])) { - $nextDel['DEL_PRIORITY'] = (isset($nextDel['DEL_PRIORITY']) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3'); - } - else { - $nextDel['DEL_PRIORITY'] = 3; - } - switch ( $nextDel['TAS_ASSIGN_TYPE'] ) { - case 'CANCEL_MI': - case 'STATIC_MI': - // Create new delegation depending on the no of users in the group - $iNewAppThreadIndex = $appFields['DEL_THREAD']; - $this->case->closeAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex); - - foreach($nextDel['NEXT_TASK']['USER_ASSIGNED'] as $key=>$aValue){ - //Incrementing the Del_thread First so that new delegation has new del_thread - $iNewAppThreadIndex += 1; - //Creating new delegation according to users in group - $iMIDelIndex = $this->case->newAppDelegation( - $appFields['PRO_UID'], - $currentDelegation['APP_UID'], - $nextDel['TAS_UID'], - (isset($aValue['USR_UID']) ? $aValue['USR_UID'] : ''), - $currentDelegation['DEL_INDEX'], - $nextDel['DEL_PRIORITY'], - $delType, - $iNewAppThreadIndex, - $nextDel - ); - - $iNewThreadIndex = $this->case->newAppThread ( $currentDelegation['APP_UID'], $iMIDelIndex, $iAppThreadIndex ); - - //Setting the del Index for Updating the AppThread delIndex - if($key == 0) - $iNewDelIndex = $iMIDelIndex -1; + if ($canDerivate) { + $aSP = isset( $aSP ) ? $aSP : null; + $iNewDelIndex = $this->doDerivation( $currentDelegation, $nextDel, $appFields, $aSP ); + } else { //when the task doesnt generate a new AppDelegation + $iAppThreadIndex = $appFields['DEL_THREAD']; + switch ($currentDelegation['ROU_TYPE']) { + case 'DISCRIMINATOR': + case 'SEC-JOIN': + $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); + break; + default: + if ($currentDelegation['TAS_ASSIGN_TYPE'] == 'STATIC_MI' || $currentDelegation['TAS_ASSIGN_TYPE'] == 'CANCEL_MI') + $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); + } //switch + } + } + //SETS THE APP_PROC_CODE + //if (isset($nextDel['TAS_DEF_PROC_CODE'])) + //$appFields['APP_PROC_CODE'] = $nextDel['TAS_DEF_PROC_CODE']; + unset( $aSP ); } //end foreach - break; - case 'BALANCED' : - $this->setTasLastAssigned ($nextDel['TAS_UID'], $nextDel['USR_UID']); - //No Break, need no execute the default ones.... - default: - // Create new delegation - $iNewDelIndex = $this->case->newAppDelegation( - $appFields['PRO_UID'], - $currentDelegation['APP_UID'], - $nextDel['TAS_UID'], - (isset($nextDel['USR_UID']) ? $nextDel['USR_UID'] : ''), - $currentDelegation['DEL_INDEX'], - $nextDel['DEL_PRIORITY'], - $delType, - $iAppThreadIndex, - $nextDel - ); - break; - } - $iAppThreadIndex = $appFields['DEL_THREAD']; + /* Start Block : UPDATES APPLICATION */ - switch ( $currentDelegation['ROU_TYPE'] ) { - case 'PARALLEL' : - case 'PARALLEL-BY-EVALUATION' : - $this->case->closeAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex); - $iNewThreadIndex = $this->case->newAppThread ( $currentDelegation['APP_UID'], $iNewDelIndex, $iAppThreadIndex ); - $this->case->updateAppDelegation ( $currentDelegation['APP_UID'], $iNewDelIndex, $iNewThreadIndex ); - //print " this->case->updateAppDelegation ( " . $currentDelegation['APP_UID'] .", " . $iNewDelIndex ." , " . $iNewThreadIndex . " )
"; - break; + //Set THE APP_STATUS + $appFields['APP_STATUS'] = $currentDelegation['APP_STATUS']; + /* Start Block : Count the open threads of $currentDelegation['APP_UID'] */ + $openThreads = $this->case->GetOpenThreads( $currentDelegation['APP_UID'] ); - case 'DISCRIMINATOR': - if($currentDelegation['ROU_OPTIONAL'] == 'TRUE') { - $this->case->discriminateCases($currentDelegation); - } //No Break, executing Default Condition + /////// + $sw = 0; - default : - switch ($currentDelegation['TAS_ASSIGN_TYPE']) { + if ($openThreads == 0) { + //Close case + $appFields["APP_STATUS"] = "COMPLETED"; + $appFields["APP_FINISH_DATE"] = "now"; + $this->verifyIsCaseChild( $currentDelegation["APP_UID"] ); + + $sw = 1; + } + + if (isset( $iNewDelIndex )) { + $appFields["DEL_INDEX"] = $iNewDelIndex; + $appFields["TAS_UID"] = $nextDel["TAS_UID"]; + + $sw = 1; + } + + if ($sw == 1) { + //Start Block : UPDATES APPLICATION + $this->case->updateCase( $currentDelegation["APP_UID"], $appFields ); + //End Block : UPDATES APPLICATION + } + } + + function doDerivation ($currentDelegation, $nextDel, $appFields, $aSP = null) + { + $iAppThreadIndex = $appFields['DEL_THREAD']; + $delType = 'NORMAL'; + + if (is_numeric( $nextDel['DEL_PRIORITY'] )) { + $nextDel['DEL_PRIORITY'] = (isset( $nextDel['DEL_PRIORITY'] ) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3'); + } else { + $nextDel['DEL_PRIORITY'] = 3; + } + switch ($nextDel['TAS_ASSIGN_TYPE']) { case 'CANCEL_MI': - $this->case->discriminateCases($currentDelegation); - } //No Break, executing updateAppThread - $this->case->updateAppThread ( $currentDelegation['APP_UID'], $iAppThreadIndex, $iNewDelIndex ); + case 'STATIC_MI': + // Create new delegation depending on the no of users in the group + $iNewAppThreadIndex = $appFields['DEL_THREAD']; + $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); - }//en switch + foreach ($nextDel['NEXT_TASK']['USER_ASSIGNED'] as $key => $aValue) { + //Incrementing the Del_thread First so that new delegation has new del_thread + $iNewAppThreadIndex += 1; + //Creating new delegation according to users in group + $iMIDelIndex = $this->case->newAppDelegation( $appFields['PRO_UID'], $currentDelegation['APP_UID'], $nextDel['TAS_UID'], (isset( $aValue['USR_UID'] ) ? $aValue['USR_UID'] : ''), $currentDelegation['DEL_INDEX'], $nextDel['DEL_PRIORITY'], $delType, $iNewAppThreadIndex, $nextDel ); - //if there are subprocess to create - if (isset($aSP)) { - //Create the new case in the sub-process - // set the initial date to null the time its created - $aNewCase = $this->case->startCase($aSP['TAS_UID'], $aSP['USR_UID'],true); - //Copy case variables to sub-process case - $aFields = unserialize($aSP['SP_VARIABLES_OUT']); - $aNewFields = array(); - $aOldFields = $this->case->loadCase($aNewCase['APPLICATION']); + $iNewThreadIndex = $this->case->newAppThread( $currentDelegation['APP_UID'], $iMIDelIndex, $iAppThreadIndex ); - foreach ($aFields as $sOriginField => $sTargetField) { - $sOriginField = str_replace('@', '', $sOriginField); - $sOriginField = str_replace('#', '', $sOriginField); - $sTargetField = str_replace('@', '', $sTargetField); - $sTargetField = str_replace('#', '', $sTargetField); - $aNewFields[$sTargetField] = isset($appFields['APP_DATA'][$sOriginField]) ? $appFields['APP_DATA'][$sOriginField] : ''; + //Setting the del Index for Updating the AppThread delIndex + if ($key == 0) + $iNewDelIndex = $iMIDelIndex - 1; + + } //end foreach + break; + + case 'BALANCED': + $this->setTasLastAssigned( $nextDel['TAS_UID'], $nextDel['USR_UID'] ); + //No Break, need no execute the default ones.... + default: + // Create new delegation + $iNewDelIndex = $this->case->newAppDelegation( $appFields['PRO_UID'], $currentDelegation['APP_UID'], $nextDel['TAS_UID'], (isset( $nextDel['USR_UID'] ) ? $nextDel['USR_UID'] : ''), $currentDelegation['DEL_INDEX'], $nextDel['DEL_PRIORITY'], $delType, $iAppThreadIndex, $nextDel ); + break; } - $aOldFields['APP_DATA'] = array_merge($aOldFields['APP_DATA'], $aNewFields); - $aOldFields['APP_STATUS'] = 'TO_DO'; + $iAppThreadIndex = $appFields['DEL_THREAD']; - $this->case->updateCase($aNewCase['APPLICATION'], $aOldFields); - //Create a registry in SUB_APPLICATION table - $aSubApplication = array('APP_UID' => $aNewCase['APPLICATION'], - 'APP_PARENT' => $currentDelegation['APP_UID'], - 'DEL_INDEX_PARENT' => $iNewDelIndex, - 'DEL_THREAD_PARENT' => $iAppThreadIndex, - 'SA_STATUS' => 'ACTIVE', - 'SA_VALUES_OUT' => serialize($aNewFields), - 'SA_INIT_DATE' => date('Y-m-d H:i:s')); + switch ($currentDelegation['ROU_TYPE']) { + case 'PARALLEL': + case 'PARALLEL-BY-EVALUATION': + $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); + $iNewThreadIndex = $this->case->newAppThread( $currentDelegation['APP_UID'], $iNewDelIndex, $iAppThreadIndex ); + $this->case->updateAppDelegation( $currentDelegation['APP_UID'], $iNewDelIndex, $iNewThreadIndex ); + //print " this->case->updateAppDelegation ( " . $currentDelegation['APP_UID'] .", " . $iNewDelIndex ." , " . $iNewThreadIndex . " )
"; + break; - if ($aSP['SP_SYNCHRONOUS'] == 0) { - $aSubApplication['SA_STATUS'] = 'FINISHED'; - $aSubApplication['SA_FINISH_DATE'] = $aSubApplication['SA_INIT_DATE']; - } + case 'DISCRIMINATOR': + if ($currentDelegation['ROU_OPTIONAL'] == 'TRUE') { + $this->case->discriminateCases( $currentDelegation ); + } //No Break, executing Default Condition - $oSubApplication = new SubApplication(); - $oSubApplication->create($aSubApplication); - //Update the AppDelegation to execute the update trigger - $AppDelegation = AppDelegationPeer::retrieveByPK($aNewCase['APPLICATION'], $aNewCase['INDEX']); - // note added by krlos pacha carlos[at]colosa[dot]com - // the following line of code was commented because it is related to the 6878 bug - //$AppDelegation->setDelInitDate("+1 second"); + default: + switch ($currentDelegation['TAS_ASSIGN_TYPE']) { + case 'CANCEL_MI': + $this->case->discriminateCases( $currentDelegation ); + } //No Break, executing updateAppThread + $this->case->updateAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex, $iNewDelIndex ); - $AppDelegation->save(); - //If not is SYNCHRONOUS derivate one more time + } //en switch - if ($aSP['SP_SYNCHRONOUS'] == 0) { - $this->case->setDelInitDate($currentDelegation['APP_UID'], $iNewDelIndex); - $aDeriveTasks = $this->prepareInformation( - array( 'USER_UID' => -1, - 'APP_UID' => $currentDelegation['APP_UID'], - 'DEL_INDEX' => $iNewDelIndex) - ); - if (isset($aDeriveTasks[1])) { - if ($aDeriveTasks[1]['ROU_TYPE'] != 'SELECT') { - $nextDelegations2 = array(); - foreach ($aDeriveTasks as $aDeriveTask) { - $nextDelegations2[] = array( - 'TAS_UID' => $aDeriveTask['NEXT_TASK']['TAS_UID'], - 'USR_UID' => $aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID'], - 'TAS_ASSIGN_TYPE' => $aDeriveTask['NEXT_TASK']['TAS_ASSIGN_TYPE'], - 'TAS_DEF_PROC_CODE' => $aDeriveTask['NEXT_TASK']['TAS_DEF_PROC_CODE'], - 'DEL_PRIORITY' => 3, - 'TAS_PARENT' => $aDeriveTask['NEXT_TASK']['TAS_PARENT'] - ); - } - $currentDelegation2 = array( - 'APP_UID' => $currentDelegation['APP_UID'], - 'DEL_INDEX' => $iNewDelIndex, - 'APP_STATUS' => 'TO_DO', - 'TAS_UID' => $currentDelegation['TAS_UID'], - 'ROU_TYPE' => $aDeriveTasks[1]['ROU_TYPE'] - ); - $this->derivate($currentDelegation2, $nextDelegations2); + //if there are subprocess to create + if (isset( $aSP )) { + //Create the new case in the sub-process + // set the initial date to null the time its created + $aNewCase = $this->case->startCase( $aSP['TAS_UID'], $aSP['USR_UID'], true ); + //Copy case variables to sub-process case + $aFields = unserialize( $aSP['SP_VARIABLES_OUT'] ); + $aNewFields = array (); + $aOldFields = $this->case->loadCase( $aNewCase['APPLICATION'] ); + + foreach ($aFields as $sOriginField => $sTargetField) { + $sOriginField = str_replace( '@', '', $sOriginField ); + $sOriginField = str_replace( '#', '', $sOriginField ); + $sTargetField = str_replace( '@', '', $sTargetField ); + $sTargetField = str_replace( '#', '', $sTargetField ); + $aNewFields[$sTargetField] = isset( $appFields['APP_DATA'][$sOriginField] ) ? $appFields['APP_DATA'][$sOriginField] : ''; } - } - } - } //end switch - return $iNewDelIndex; - } - /* verifyIsCaseChild + $aOldFields['APP_DATA'] = array_merge( $aOldFields['APP_DATA'], $aNewFields ); + $aOldFields['APP_STATUS'] = 'TO_DO'; + + $this->case->updateCase( $aNewCase['APPLICATION'], $aOldFields ); + //Create a registry in SUB_APPLICATION table + $aSubApplication = array ('APP_UID' => $aNewCase['APPLICATION'],'APP_PARENT' => $currentDelegation['APP_UID'],'DEL_INDEX_PARENT' => $iNewDelIndex,'DEL_THREAD_PARENT' => $iAppThreadIndex,'SA_STATUS' => 'ACTIVE','SA_VALUES_OUT' => serialize( $aNewFields ),'SA_INIT_DATE' => date( 'Y-m-d H:i:s' ) + ); + + if ($aSP['SP_SYNCHRONOUS'] == 0) { + $aSubApplication['SA_STATUS'] = 'FINISHED'; + $aSubApplication['SA_FINISH_DATE'] = $aSubApplication['SA_INIT_DATE']; + } + + $oSubApplication = new SubApplication(); + $oSubApplication->create( $aSubApplication ); + //Update the AppDelegation to execute the update trigger + $AppDelegation = AppDelegationPeer::retrieveByPK( $aNewCase['APPLICATION'], $aNewCase['INDEX'] ); + + // note added by krlos pacha carlos[at]colosa[dot]com + // the following line of code was commented because it is related to the 6878 bug + //$AppDelegation->setDelInitDate("+1 second"); + + + $AppDelegation->save(); + //If not is SYNCHRONOUS derivate one more time + + + if ($aSP['SP_SYNCHRONOUS'] == 0) { + $this->case->setDelInitDate( $currentDelegation['APP_UID'], $iNewDelIndex ); + $aDeriveTasks = $this->prepareInformation( array ('USER_UID' => - 1,'APP_UID' => $currentDelegation['APP_UID'],'DEL_INDEX' => $iNewDelIndex + ) ); + + if (isset( $aDeriveTasks[1] )) { + if ($aDeriveTasks[1]['ROU_TYPE'] != 'SELECT') { + $nextDelegations2 = array (); + foreach ($aDeriveTasks as $aDeriveTask) { + $nextDelegations2[] = array ('TAS_UID' => $aDeriveTask['NEXT_TASK']['TAS_UID'],'USR_UID' => $aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID'],'TAS_ASSIGN_TYPE' => $aDeriveTask['NEXT_TASK']['TAS_ASSIGN_TYPE'],'TAS_DEF_PROC_CODE' => $aDeriveTask['NEXT_TASK']['TAS_DEF_PROC_CODE'],'DEL_PRIORITY' => 3,'TAS_PARENT' => $aDeriveTask['NEXT_TASK']['TAS_PARENT'] + ); + } + $currentDelegation2 = array ('APP_UID' => $currentDelegation['APP_UID'],'DEL_INDEX' => $iNewDelIndex,'APP_STATUS' => 'TO_DO','TAS_UID' => $currentDelegation['TAS_UID'],'ROU_TYPE' => $aDeriveTasks[1]['ROU_TYPE'] + ); + $this->derivate( $currentDelegation2, $nextDelegations2 ); + } + } + } + } //end switch + return $iNewDelIndex; + } + + /* verifyIsCaseChild * * @param string $sApplicationUID * @return void */ - function verifyIsCaseChild($sApplicationUID) - { - //Obtain the related row in the table SUB_APPLICATION - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubApplicationPeer::APP_UID, $sApplicationUID); - $oDataset = SubApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aSA = $oDataset->getRow(); - if ($aSA) { - //Obtain the related row in the table SUB_PROCESS - $oCase = new Cases(); - $aParentCase = $oCase->loadCase($aSA['APP_PARENT'], $aSA['DEL_INDEX_PARENT']); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $aParentCase['PRO_UID']); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $aParentCase['TAS_UID']); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aSP = $oDataset->getRow(); - if ($aSP['SP_SYNCHRONOUS'] == 1) { - $appFields = $oCase->loadCase($sApplicationUID); - //Copy case variables to parent case - $aFields = unserialize($aSP['SP_VARIABLES_IN']); - $aNewFields = array(); - foreach ($aFields as $sOriginField => $sTargetField) { - $sOriginField = str_replace('@', '', $sOriginField); - $sOriginField = str_replace('#', '', $sOriginField); - $sTargetField = str_replace('@', '', $sTargetField); - $sTargetField = str_replace('#', '', $sTargetField); - $aNewFields[$sTargetField] = isset($appFields['APP_DATA'][$sOriginField]) ? $appFields['APP_DATA'][$sOriginField] : ''; - } - $aParentCase['APP_DATA'] = array_merge($aParentCase['APP_DATA'], $aNewFields); - $oCase->updateCase($aSA['APP_PARENT'], $aParentCase); - //Update table SUB_APPLICATION - $oSubApplication = new SubApplication(); - $oSubApplication->update(array('APP_UID' => $sApplicationUID, - 'APP_PARENT' => $aSA['APP_PARENT'], - 'DEL_INDEX_PARENT' => $aSA['DEL_INDEX_PARENT'], - 'DEL_THREAD_PARENT' => $aSA['DEL_THREAD_PARENT'], - 'SA_STATUS' => 'FINISHED', - 'SA_VALUES_IN' => serialize($aNewFields), - 'SA_FINISH_DATE' => date('Y-m-d H:i:s'))); - //Derive the parent case - $aDeriveTasks = $this->prepareInformation( - array( 'USER_UID' => -1, - 'APP_UID' => $aSA['APP_PARENT'], - 'DEL_INDEX' => $aSA['DEL_INDEX_PARENT']) - ); - if (isset($aDeriveTasks[1])) { - if ($aDeriveTasks[1]['ROU_TYPE'] != 'SELECT') { - $nextDelegations2 = array(); - foreach ($aDeriveTasks as $aDeriveTask) { - if ( !isset($aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID']) ) { - $selectedUser = $aDeriveTask['NEXT_TASK']['USER_ASSIGNED'][0]; - unset ($aDeriveTask['NEXT_TASK']['USER_ASSIGNED']); - $aDeriveTask['NEXT_TASK']['USER_ASSIGNED'] = $selectedUser; - $myLabels = array ( $aDeriveTask['NEXT_TASK']['TAS_TITLE'], $aParentCase['APP_NUMBER'], $selectedUser['USR_USERNAME'], $selectedUser['USR_FIRSTNAME'], $selectedUser['USR_LASTNAME'] ); - G::SendTemporalMessage( 'ID_TASK_WAS_ASSIGNED_TO_USER', 'warning', 'labels', 10, null, $myLabels); + function verifyIsCaseChild ($sApplicationUID) + { + //Obtain the related row in the table SUB_APPLICATION + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubApplicationPeer::APP_UID, $sApplicationUID ); + $oDataset = SubApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aSA = $oDataset->getRow(); + if ($aSA) { + //Obtain the related row in the table SUB_PROCESS + $oCase = new Cases(); + $aParentCase = $oCase->loadCase( $aSA['APP_PARENT'], $aSA['DEL_INDEX_PARENT'] ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $aParentCase['PRO_UID'] ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $aParentCase['TAS_UID'] ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aSP = $oDataset->getRow(); + if ($aSP['SP_SYNCHRONOUS'] == 1) { + $appFields = $oCase->loadCase( $sApplicationUID ); + //Copy case variables to parent case + $aFields = unserialize( $aSP['SP_VARIABLES_IN'] ); + $aNewFields = array (); + foreach ($aFields as $sOriginField => $sTargetField) { + $sOriginField = str_replace( '@', '', $sOriginField ); + $sOriginField = str_replace( '#', '', $sOriginField ); + $sTargetField = str_replace( '@', '', $sTargetField ); + $sTargetField = str_replace( '#', '', $sTargetField ); + $aNewFields[$sTargetField] = isset( $appFields['APP_DATA'][$sOriginField] ) ? $appFields['APP_DATA'][$sOriginField] : ''; + } + $aParentCase['APP_DATA'] = array_merge( $aParentCase['APP_DATA'], $aNewFields ); + $oCase->updateCase( $aSA['APP_PARENT'], $aParentCase ); + //Update table SUB_APPLICATION + $oSubApplication = new SubApplication(); + $oSubApplication->update( array ('APP_UID' => $sApplicationUID,'APP_PARENT' => $aSA['APP_PARENT'],'DEL_INDEX_PARENT' => $aSA['DEL_INDEX_PARENT'],'DEL_THREAD_PARENT' => $aSA['DEL_THREAD_PARENT'],'SA_STATUS' => 'FINISHED','SA_VALUES_IN' => serialize( $aNewFields ),'SA_FINISH_DATE' => date( 'Y-m-d H:i:s' ) + ) ); + //Derive the parent case + $aDeriveTasks = $this->prepareInformation( array ('USER_UID' => - 1,'APP_UID' => $aSA['APP_PARENT'],'DEL_INDEX' => $aSA['DEL_INDEX_PARENT'] + ) ); + if (isset( $aDeriveTasks[1] )) { + if ($aDeriveTasks[1]['ROU_TYPE'] != 'SELECT') { + $nextDelegations2 = array (); + foreach ($aDeriveTasks as $aDeriveTask) { + if (! isset( $aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] )) { + $selectedUser = $aDeriveTask['NEXT_TASK']['USER_ASSIGNED'][0]; + unset( $aDeriveTask['NEXT_TASK']['USER_ASSIGNED'] ); + $aDeriveTask['NEXT_TASK']['USER_ASSIGNED'] = $selectedUser; + $myLabels = array ($aDeriveTask['NEXT_TASK']['TAS_TITLE'],$aParentCase['APP_NUMBER'],$selectedUser['USR_USERNAME'],$selectedUser['USR_FIRSTNAME'],$selectedUser['USR_LASTNAME'] + ); + G::SendTemporalMessage( 'ID_TASK_WAS_ASSIGNED_TO_USER', 'warning', 'labels', 10, null, $myLabels ); - } - $nextDelegations2[] = array( - 'TAS_UID' => $aDeriveTask['NEXT_TASK']['TAS_UID'], - 'USR_UID' => $aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID'], - 'TAS_ASSIGN_TYPE' => $aDeriveTask['NEXT_TASK']['TAS_ASSIGN_TYPE'], - 'TAS_DEF_PROC_CODE' => $aDeriveTask['NEXT_TASK']['TAS_DEF_PROC_CODE'], - 'DEL_PRIORITY' => 3, - 'TAS_PARENT' => $aDeriveTask['NEXT_TASK']['TAS_PARENT'] - ); + } + $nextDelegations2[] = array ('TAS_UID' => $aDeriveTask['NEXT_TASK']['TAS_UID'],'USR_UID' => $aDeriveTask['NEXT_TASK']['USER_ASSIGNED']['USR_UID'],'TAS_ASSIGN_TYPE' => $aDeriveTask['NEXT_TASK']['TAS_ASSIGN_TYPE'],'TAS_DEF_PROC_CODE' => $aDeriveTask['NEXT_TASK']['TAS_DEF_PROC_CODE'],'DEL_PRIORITY' => 3,'TAS_PARENT' => $aDeriveTask['NEXT_TASK']['TAS_PARENT'] + ); + } + $currentDelegation2 = array ('APP_UID' => $aSA['APP_PARENT'],'DEL_INDEX' => $aSA['DEL_INDEX_PARENT'],'APP_STATUS' => 'TO_DO','TAS_UID' => $aParentCase['TAS_UID'],'ROU_TYPE' => $aDeriveTasks[1]['ROU_TYPE'] + ); + $this->derivate( $currentDelegation2, $nextDelegations2 ); + } + } } - $currentDelegation2 = array( - 'APP_UID' => $aSA['APP_PARENT'], - 'DEL_INDEX' => $aSA['DEL_INDEX_PARENT'], - 'APP_STATUS' => 'TO_DO', - 'TAS_UID' => $aParentCase['TAS_UID'], - 'ROU_TYPE' => $aDeriveTasks[1]['ROU_TYPE'] - ); - $this->derivate($currentDelegation2, $nextDelegations2); - } } - } } - } - /* getDerivatedCases + /* getDerivatedCases * get all derivated cases and subcases from any task, * this function is useful to know who users have been assigned and what task they do. * @@ -936,121 +864,110 @@ class Derivation * @return array $derivation * */ - function getDerivatedCases ( $sParentUid, $sDelIndexParent ) - { - $oCriteria = new Criteria('workflow'); - $cases = array(); - $derivation = array(); - //get the child delegations , of parent delIndex - $children = array(); - $oCriteria->clearSelectColumns(); - $oCriteria->addSelectColumn ( AppDelegationPeer::DEL_INDEX ); - $oCriteria->add(AppDelegationPeer::APP_UID, $sParentUid); - $oCriteria->add(AppDelegationPeer::DEL_PREVIOUS, $sDelIndexParent ); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - while ( is_array( $aRow) ) { - $children[] = $aRow['DEL_INDEX']; - - $oDataset->next(); - $aRow = $oDataset->getRow(); - } - - //foreach child , get the info of their derivations and subprocesses - foreach ( $children as $keyChild => $child ) { - $oCriteria = new Criteria('workflow'); - $oCriteria->clearSelectColumns(); - $oCriteria->addSelectColumn ( SubApplicationPeer::APP_UID ); - $oCriteria->addSelectColumn ( AppDelegationPeer::APP_UID ); - $oCriteria->addSelectColumn ( AppDelegationPeer::DEL_INDEX ); - $oCriteria->addSelectColumn ( AppDelegationPeer::PRO_UID ); - $oCriteria->addSelectColumn ( AppDelegationPeer::TAS_UID ); - $oCriteria->addSelectColumn ( AppDelegationPeer::USR_UID ); - $oCriteria->addSelectColumn ( UsersPeer::USR_USERNAME ); - $oCriteria->addSelectColumn ( UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn ( UsersPeer::USR_LASTNAME ); - - $oCriteria->add(SubApplicationPeer::APP_PARENT, $sParentUid); - $oCriteria->add(SubApplicationPeer::DEL_INDEX_PARENT, $child ); - $oCriteria->addJoin ( SubApplicationPeer::APP_UID, AppDelegationPeer::APP_UID); - $oCriteria->addJoin ( AppDelegationPeer::USR_UID, UsersPeer::USR_UID); - $oDataset = SubApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - while ( is_array( $aRow) ) { - $oProcess = new Process(); - $proFields = $oProcess->load($aRow['PRO_UID']); - $oCase = new Application(); - $appFields = $oCase->load($aRow['APP_UID']); - $oTask = new Task(); - $tasFields = $oTask->load($aRow['TAS_UID']); - $derivation[] = array ( - 'processId' => $aRow['PRO_UID'], - 'processTitle' => $proFields['PRO_TITLE'], - 'caseId' => $aRow['APP_UID'], - 'caseNumber' => $appFields['APP_NUMBER'], - 'taskId' => $aRow['TAS_UID'], - 'taskTitle' => $tasFields['TAS_TITLE'], - 'userId' => $aRow['USR_UID'], - 'userName' => $aRow['USR_USERNAME'], - 'userFullname' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'] - ); - + function getDerivatedCases ($sParentUid, $sDelIndexParent) + { + $oCriteria = new Criteria( 'workflow' ); + $cases = array (); + $derivation = array (); + //get the child delegations , of parent delIndex + $children = array (); + $oCriteria->clearSelectColumns(); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sParentUid ); + $oCriteria->add( AppDelegationPeer::DEL_PREVIOUS, $sDelIndexParent ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - } + while (is_array( $aRow )) { + $children[] = $aRow['DEL_INDEX']; + + $oDataset->next(); + $aRow = $oDataset->getRow(); + } + + //foreach child , get the info of their derivations and subprocesses + foreach ($children as $keyChild => $child) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->clearSelectColumns(); + $oCriteria->addSelectColumn( SubApplicationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + + $oCriteria->add( SubApplicationPeer::APP_PARENT, $sParentUid ); + $oCriteria->add( SubApplicationPeer::DEL_INDEX_PARENT, $child ); + $oCriteria->addJoin( SubApplicationPeer::APP_UID, AppDelegationPeer::APP_UID ); + $oCriteria->addJoin( AppDelegationPeer::USR_UID, UsersPeer::USR_UID ); + $oDataset = SubApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + while (is_array( $aRow )) { + $oProcess = new Process(); + $proFields = $oProcess->load( $aRow['PRO_UID'] ); + $oCase = new Application(); + $appFields = $oCase->load( $aRow['APP_UID'] ); + $oTask = new Task(); + $tasFields = $oTask->load( $aRow['TAS_UID'] ); + $derivation[] = array ('processId' => $aRow['PRO_UID'],'processTitle' => $proFields['PRO_TITLE'],'caseId' => $aRow['APP_UID'],'caseNumber' => $appFields['APP_NUMBER'],'taskId' => $aRow['TAS_UID'],'taskTitle' => $tasFields['TAS_TITLE'],'userId' => $aRow['USR_UID'],'userName' => $aRow['USR_USERNAME'],'userFullname' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'] + ); + + $oDataset->next(); + $aRow = $oDataset->getRow(); + } + } + + return $derivation; } - - return $derivation; - } - - function getGrpUser($aData) - { - G::LoadClass('groups'); - G::LoadClass('tasks'); - require_once 'classes/model/Content.php'; - $oTasks = new Tasks(); - $oGroups = new Groups(); - $oContent = new Content(); - $aGroup = array(); - $aUsers = array(); - $aGroup = $oTasks->getGroupsOfTask($aData['ROU_NEXT_TASK'],1); - $aGrpUid = $aGroup[0]['GRP_UID']; - $sGrpName = $oContent->load('GRP_TITLE', '',$aGrpUid, 'en'); - $aGrp['GRP_NAME'] = $sGrpName; - $aGrp['GRP_UID'] = $aGrpUid; - $aUsers = $oGroups->getUsersOfGroup($aGroup[0]['GRP_UID']); - foreach($aUsers as $aKey=>$userid) - { + function getGrpUser ($aData) + { + G::LoadClass( 'groups' ); + G::LoadClass( 'tasks' ); + require_once 'classes/model/Content.php'; + $oTasks = new Tasks(); + $oGroups = new Groups(); + $oContent = new Content(); + $aGroup = array (); + $aUsers = array (); + $aGroup = $oTasks->getGroupsOfTask( $aData['ROU_NEXT_TASK'], 1 ); + $aGrpUid = $aGroup[0]['GRP_UID']; + $sGrpName = $oContent->load( 'GRP_TITLE', '', $aGrpUid, 'en' ); + $aGrp['GRP_NAME'] = $sGrpName; + $aGrp['GRP_UID'] = $aGrpUid; + $aUsers = $oGroups->getUsersOfGroup( $aGroup[0]['GRP_UID'] ); + foreach ($aUsers as $aKey => $userid) { $aData[$aKey] = $userid; - } - return $aGrp; - } + } + return $aGrp; + } - function checkReplacedByUser($user) - { - if (is_string($user)) { - $userInstance = UsersPeer::retrieveByPK($user); - } else { - $userInstance = $user; - } - if (!is_object($userInstance)) { - throw new Exception("The user with the UID '$user' doesn't exist."); - } - if ($userInstance->getUsrStatus() == 'ACTIVE') { - return $userInstance->getUsrUid(); - } else { - $userReplace = trim($userInstance->getUsrReplacedBy()); - if ($userReplace != '') { - return $this->checkReplacedByUser(UsersPeer::retrieveByPK($userReplace)); - } else { - return ''; - } - } - } + function checkReplacedByUser ($user) + { + if (is_string( $user )) { + $userInstance = UsersPeer::retrieveByPK( $user ); + } else { + $userInstance = $user; + } + if (! is_object( $userInstance )) { + throw new Exception( "The user with the UID '$user' doesn't exist." ); + } + if ($userInstance->getUsrStatus() == 'ACTIVE') { + return $userInstance->getUsrUid(); + } else { + $userReplace = trim( $userInstance->getUsrReplacedBy() ); + if ($userReplace != '') { + return $this->checkReplacedByUser( UsersPeer::retrieveByPK( $userReplace ) ); + } else { + return ''; + } + } + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.dynaFormField.php b/workflow/engine/classes/class.dynaFormField.php index 85c1baade..c7328e72e 100755 --- a/workflow/engine/classes/class.dynaFormField.php +++ b/workflow/engine/classes/class.dynaFormField.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * + * */ -G::LoadClass('xmlDb'); +G::LoadClass( 'xmlDb' ); /** - * Dynaform Field - DynaformField class + * Dynaform Field - DynaformField class + * * @package workflow.engine.classes */ class DynaFormField extends DBTable -{ - /** - * Function SetTo - * @param string $objConnection - * @return void - */ - function SetTo( $objConnection ) - { - DBTable::SetTo( $objConnection, 'dynaForm', array('XMLNODE_NAME') ); - } - - /** - * Load a dynaForm - * @param string $sUID - * @return void - */ - function Load( $sUID ) - { - parent::Load( $sUID ); - if (is_array($this->Fields)) { - foreach( $this->Fields as $name => $value ){ - if (strcasecmp($name,'dependentfields')==0) { - $this->Fields[$name]=explode(',', $value ); +{ + + /** + * Function SetTo + * + * @param string $objConnection + * @return void + */ + function SetTo ($objConnection) + { + DBTable::SetTo( $objConnection, 'dynaForm', array ('XMLNODE_NAME' + ) ); + } + + /** + * Load a dynaForm + * + * @param string $sUID + * @return void + */ + function Load ($sUID) + { + parent::Load( $sUID ); + if (is_array( $this->Fields )) { + foreach ($this->Fields as $name => $value) { + if (strcasecmp( $name, 'dependentfields' ) == 0) { + $this->Fields[$name] = explode( ',', $value ); + } + } } - } } - } - - /** - * Delete Fields of a dynaForm - * @param string $uid - * @return void - */ - function Delete ( $uid ) - { - $this->Fields['XMLNODE_NAME'] = $uid; - parent::Delete(); - } - /** - * Save Fields of a dynaform - * @param array $Fields - * @param array $labels - * @param array $options - * @return void - */ - function Save ( $Fields , $labels=array() , $options=array() ) - { + /** + * Delete Fields of a dynaForm + * + * @param string $uid + * @return void + */ + function Delete ($uid) + { + $this->Fields['XMLNODE_NAME'] = $uid; + parent::Delete(); + } - if ($Fields['TYPE'] === 'javascript'){ - $Fields['XMLNODE_VALUE'] = $Fields['CODE']; - unset($Fields['CODE']); - $labels = array(); - } - if ($Fields['XMLNODE_NAME_OLD'] == '') { - if (($Fields['XMLNODE_NAME'][0] == '1') || ($Fields['XMLNODE_NAME'][0] == '2') || - ($Fields['XMLNODE_NAME'][0] == '3') || ($Fields['XMLNODE_NAME'][0] == '4') || - ($Fields['XMLNODE_NAME'][0] == '5') || ($Fields['XMLNODE_NAME'][0] == '6') || - ($Fields['XMLNODE_NAME'][0] == '7') || ($Fields['XMLNODE_NAME'][0] == '8') || - ($Fields['XMLNODE_NAME'][0] == '9') || ($Fields['XMLNODE_NAME'][0] == '10')) { - $Fields['XMLNODE_NAME'] = '_' . $Fields['XMLNODE_NAME']; - } - $res = $this->_dbses->Execute('SELECT * FROM dynaForm WHERE XMLNODE_NAME="'.$Fields['XMLNODE_NAME'].'"'); - } - else { - if (($Fields['XMLNODE_NAME_OLD'][0] == '1') || ($Fields['XMLNODE_NAME_OLD'][0] == '2') || - ($Fields['XMLNODE_NAME_OLD'][0] == '3') || ($Fields['XMLNODE_NAME_OLD'][0] == '4') || - ($Fields['XMLNODE_NAME_OLD'][0] == '5') || ($Fields['XMLNODE_NAME_OLD'][0] == '6') || - ($Fields['XMLNODE_NAME_OLD'][0] == '7') || ($Fields['XMLNODE_NAME_OLD'][0] == '8') || - ($Fields['XMLNODE_NAME_OLD'][0] == '9') || ($Fields['XMLNODE_NAME_OLD'][0] == '10')) { - $Fields['XMLNODE_NAME_OLD'] = '_' . $Fields['XMLNODE_NAME_OLD']; - } - $res = $this->_dbses->Execute('SELECT * FROM dynaForm WHERE XMLNODE_NAME="'.$Fields['XMLNODE_NAME_OLD'].'"'); - } - $this->is_new = ($res->count()==0); - $this->Fields = $Fields; - unset($this->Fields['XMLNODE_NAME_OLD']); - /* + /** + * Save Fields of a dynaform + * + * @param array $Fields + * @param array $labels + * @param array $options + * @return void + */ + function Save ($Fields, $labels = array(), $options = array()) + { + + if ($Fields['TYPE'] === 'javascript') { + $Fields['XMLNODE_VALUE'] = $Fields['CODE']; + unset( $Fields['CODE'] ); + $labels = array (); + } + if ($Fields['XMLNODE_NAME_OLD'] == '') { + if (($Fields['XMLNODE_NAME'][0] == '1') || ($Fields['XMLNODE_NAME'][0] == '2') || ($Fields['XMLNODE_NAME'][0] == '3') || ($Fields['XMLNODE_NAME'][0] == '4') || ($Fields['XMLNODE_NAME'][0] == '5') || ($Fields['XMLNODE_NAME'][0] == '6') || ($Fields['XMLNODE_NAME'][0] == '7') || ($Fields['XMLNODE_NAME'][0] == '8') || ($Fields['XMLNODE_NAME'][0] == '9') || ($Fields['XMLNODE_NAME'][0] == '10')) { + $Fields['XMLNODE_NAME'] = '_' . $Fields['XMLNODE_NAME']; + } + $res = $this->_dbses->Execute( 'SELECT * FROM dynaForm WHERE XMLNODE_NAME="' . $Fields['XMLNODE_NAME'] . '"' ); + } else { + if (($Fields['XMLNODE_NAME_OLD'][0] == '1') || ($Fields['XMLNODE_NAME_OLD'][0] == '2') || ($Fields['XMLNODE_NAME_OLD'][0] == '3') || ($Fields['XMLNODE_NAME_OLD'][0] == '4') || ($Fields['XMLNODE_NAME_OLD'][0] == '5') || ($Fields['XMLNODE_NAME_OLD'][0] == '6') || ($Fields['XMLNODE_NAME_OLD'][0] == '7') || ($Fields['XMLNODE_NAME_OLD'][0] == '8') || ($Fields['XMLNODE_NAME_OLD'][0] == '9') || ($Fields['XMLNODE_NAME_OLD'][0] == '10')) { + $Fields['XMLNODE_NAME_OLD'] = '_' . $Fields['XMLNODE_NAME_OLD']; + } + $res = $this->_dbses->Execute( 'SELECT * FROM dynaForm WHERE XMLNODE_NAME="' . $Fields['XMLNODE_NAME_OLD'] . '"' ); + } + $this->is_new = ($res->count() == 0); + $this->Fields = $Fields; + unset( $this->Fields['XMLNODE_NAME_OLD'] ); + /* * MPD-10 to create fields that do not appear many attributes, only the main ones? * The show those who are not white */ - if ($this->is_new){ - foreach($this->Fields as $key => $value){ - if ($value=="") - unset( $this->Fields[$key] ); - } - } - else { - $this->Fields['XMLNODE_NAME'] = $Fields['XMLNODE_NAME_OLD']; - } - /*$res = $this->_dbses->Execute('INSERT INTO dynaForm'. + if ($this->is_new) { + foreach ($this->Fields as $key => $value) { + if ($value == "") + unset( $this->Fields[$key] ); + } + } else { + $this->Fields['XMLNODE_NAME'] = $Fields['XMLNODE_NAME_OLD']; + } + /*$res = $this->_dbses->Execute('INSERT INTO dynaForm'. ' (XMLNODE_TYPE,XMLNODE_VALUE)'. ' VALUES ("cdata", "'."\n".'")');*/ - parent::Save(); - if ($this->is_new) { - /* + parent::Save(); + if ($this->is_new) { + /* * Create a new field. */ - foreach( $labels as $lang => $value ) { - /*$res = $this->_dbses->Execute('INSERT INTO dynaForm'. + foreach ($labels as $lang => $value) { + /*$res = $this->_dbses->Execute('INSERT INTO dynaForm'. ' (XMLNODE_TYPE,XMLNODE_VALUE)'. ' VALUES ("cdata", "'."\n".'")');*/ - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' - .'VALUES ("","'."\n ".'","cdata")'); - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].' (XMLNODE_NAME,XMLNODE_VALUE) ' - .'VALUES ("'.$lang.'","'.str_replace('"','""',$value)/*."\n "*/.'")'); - if (isset($options[$lang])) { - foreach($options[$lang] as $option => $text ) { - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].'.'.$lang.' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' - .'VALUES ("","'." ".'","cdata")'); - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].'.'.$lang.' (XMLNODE_NAME,XMLNODE_VALUE,name) ' - .'VALUES ("option","'.str_replace('"','""',$text).'","'.str_replace('"','""',$option).'")'); - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].'.'.$lang.' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' - .'VALUES ("","'."\n ".'","cdata")'); - } - } - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' - .'VALUES ("","'."\n".'","cdata")'); - } - $res = $this->_dbses->Execute('INSERT INTO dynaForm'. - ' (XMLNODE_TYPE,XMLNODE_VALUE)'. - ' VALUES ("cdata", "'."\n".'")'); - } else { - /* + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . ' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' . 'VALUES ("","' . "\n " . '","cdata")' ); + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . ' (XMLNODE_NAME,XMLNODE_VALUE) ' . 'VALUES ("' . $lang . '","' . str_replace( '"', '""', $value )/*."\n "*/.'")' ); + if (isset( $options[$lang] )) { + foreach ($options[$lang] as $option => $text) { + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . '.' . $lang . ' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' . 'VALUES ("","' . " " . '","cdata")' ); + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . '.' . $lang . ' (XMLNODE_NAME,XMLNODE_VALUE,name) ' . 'VALUES ("option","' . str_replace( '"', '""', $text ) . '","' . str_replace( '"', '""', $option ) . '")' ); + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . '.' . $lang . ' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' . 'VALUES ("","' . "\n " . '","cdata")' ); + } + } + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . ' (XMLNODE_NAME,XMLNODE_VALUE,XMLNODE_TYPE) ' . 'VALUES ("","' . "\n" . '","cdata")' ); + } + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm' . ' (XMLNODE_TYPE,XMLNODE_VALUE)' . ' VALUES ("cdata", "' . "\n" . '")' ); + } else { + /* * Update an existing field. */ - $this->_dbses->Execute('UPDATE dynaForm SET XMLNODE_NAME = "' . $Fields['XMLNODE_NAME'] . '" WHERE XMLNODE_NAME = "' . $Fields['XMLNODE_NAME_OLD'] . '"'); - foreach( $labels as $lang => $value ) { - $res = $this->_dbses->Execute('SELECT * FROM dynaForm.' - .$Fields['XMLNODE_NAME'].' WHERE XMLNODE_NAME ="'.$lang.'"'); - if ($res->count()>0) { - $res = $this->_dbses->Execute('UPDATE dynaForm.' - .$Fields['XMLNODE_NAME'].' SET XMLNODE_VALUE = ' - .'"'.str_replace('"','""',$value).'" WHERE XMLNODE_NAME ="'.$lang.'"'); - } else { - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].' (XMLNODE_NAME,XMLNODE_VALUE) ' - .'VALUES ("'.$lang.'","'.str_replace('"','""',$value).'")'); + $this->_dbses->Execute( 'UPDATE dynaForm SET XMLNODE_NAME = "' . $Fields['XMLNODE_NAME'] . '" WHERE XMLNODE_NAME = "' . $Fields['XMLNODE_NAME_OLD'] . '"' ); + foreach ($labels as $lang => $value) { + $res = $this->_dbses->Execute( 'SELECT * FROM dynaForm.' . $Fields['XMLNODE_NAME'] . ' WHERE XMLNODE_NAME ="' . $lang . '"' ); + if ($res->count() > 0) { + $res = $this->_dbses->Execute( 'UPDATE dynaForm.' . $Fields['XMLNODE_NAME'] . ' SET XMLNODE_VALUE = ' . '"' . str_replace( '"', '""', $value ) . '" WHERE XMLNODE_NAME ="' . $lang . '"' ); + } else { + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . ' (XMLNODE_NAME,XMLNODE_VALUE) ' . 'VALUES ("' . $lang . '","' . str_replace( '"', '""', $value ) . '")' ); + } + if (isset( $options[$lang] )) { + $res = $this->_dbses->Execute( 'DELETE FROM dynaForm.' . $Fields['XMLNODE_NAME'] . '.' . $lang . ' WHERE 1' ); + foreach ($options[$lang] as $option => $text) { + $res = $this->_dbses->Execute( 'INSERT INTO dynaForm.' . $Fields['XMLNODE_NAME'] . '.' . $lang . ' (XMLNODE_NAME,XMLNODE_VALUE,name) ' . 'VALUES ("option","' . str_replace( '"', '""', $text ) . '","' . str_replace( '"', '""', $option ) . '")' ); + } + } + } } - if (isset($options[$lang])) { - $res = $this->_dbses->Execute('DELETE FROM dynaForm.' - .$Fields['XMLNODE_NAME'].'.'.$lang.' WHERE 1'); - foreach($options[$lang] as $option => $text ) { - $res = $this->_dbses->Execute('INSERT INTO dynaForm.' - .$Fields['XMLNODE_NAME'].'.'.$lang.' (XMLNODE_NAME,XMLNODE_VALUE,name) ' - .'VALUES ("option","'.str_replace('"','""',$text).'","'.str_replace('"','""',$option).'")'); - } - } - } } - } - - /** - * Verify if is New the Field - * @return array - */ - function isNew() - { - $res = $this->_dbses->Execute('SELECT * FROM dynaForm WHERE XMLNODE_NAME="'.$this->Fields['XMLNODE_NAME'].'"'); - return ($res->count()==0); - } + + /** + * Verify if is New the Field + * + * @return array + */ + function isNew () + { + $res = $this->_dbses->Execute( 'SELECT * FROM dynaForm WHERE XMLNODE_NAME="' . $this->Fields['XMLNODE_NAME'] . '"' ); + return ($res->count() == 0); + } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.dynaformEditor.php b/workflow/engine/classes/class.dynaformEditor.php index 1559ae051..31e86fb66 100755 --- a/workflow/engine/classes/class.dynaformEditor.php +++ b/workflow/engine/classes/class.dynaformEditor.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -26,95 +27,78 @@ /** * Created on 21/12/2007 * Dynaform - Dynaform class + * * @copyright 2007 COLOSA * @author David Callizaya */ -G::LoadSystem("webResource"); -G::LoadClass('toolBar'); -G::LoadClass('dynaFormField'); -require_once('classes/model/Process.php'); -require_once('classes/model/Dynaform.php'); -G::LoadClass('xmlDb'); +G::LoadSystem( "webResource" ); +G::LoadClass( 'toolBar' ); +G::LoadClass( 'dynaFormField' ); +require_once ('classes/model/Process.php'); +require_once ('classes/model/Dynaform.php'); +G::LoadClass( 'xmlDb' ); /** + * * @package workflow.engine.classes */ class dynaformEditor extends WebResource { - private $isOldCopy = false; - var $file=''; - var $title='New Dynaform'; - var $dyn_uid=''; - var $dyn_type=''; - var $home=''; - /** - * Other Options for Editor: - * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))', - * top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', - * height: '3/4*(document.body.clientWidth-getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))*2)', - * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))' - * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))' - * - * Other Options for Toolbar: - * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))', - * top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', - */ - var $defaultConfig = array( - 'Editor' => array( - 'left' => '0', - 'top' => '0', - 'width' => 'document.body.clientWidth-4', - 'height'=> 'document.body.clientHeight-4' - ), - 'Toolbar' => array( - 'left' => 'document.body.clientWidth-2-toolbar.clientWidth-24-3+7', - 'top' => '52' - ), - 'FieldsList' => array( - 'left' =>'4+toolbar.clientWidth+24', - 'top' =>'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', - 'width' => 244, - 'height'=> 400, + private $isOldCopy = false; + var $file = ''; + var $title = 'New Dynaform'; + var $dyn_uid = ''; + var $dyn_type = ''; + var $home = ''; + /** + * Other Options for Editor: + * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))', + * top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', + * height: '3/4*(document.body.clientWidth-getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))*2)', + * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))' + * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))' + * + * Other Options for Toolbar: + * left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))', + * top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', + */ + var $defaultConfig = array ('Editor' => array ('left' => '0','top' => '0','width' => 'document.body.clientWidth-4','height' => 'document.body.clientHeight-4' + ),'Toolbar' => array ('left' => 'document.body.clientWidth-2-toolbar.clientWidth-24-3+7','top' => '52' + ),'FieldsList' => array ('left' => '4+toolbar.clientWidth+24','top' => 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))','width' => 244,'height' => 400 ) - ); - var $panelConf=array( - 'style' => array( - 'title'=> array('textAlign'=>'center') - ), - 'width' => 700, - 'height' => 600, - 'tabWidth' => 120, - 'modal' => true, - 'drag' => false, - 'resize' => false, - 'blinkToFront'=> false - ); + ); + var $panelConf = array ('style' => array ('title' => array ('textAlign' => 'center' + ) + ),'width' => 700,'height' => 600,'tabWidth' => 120,'modal' => true,'drag' => false,'resize' => false,'blinkToFront' => false + ); - /** - * Constructor of the class dynaformEditor - * @param string $get - * @return void - */ - function dynaformEditor($get) - { - $this->panelConf = array_merge( $this->panelConf , $this->defaultConfig['Editor'] ); - //'title' => G::LoadTranslation('ID_DYNAFORM_EDITOR').' - ['.$this->title.']', - } + /** + * Constructor of the class dynaformEditor + * + * @param string $get + * @return void + */ + function dynaformEditor ($get) + { + $this->panelConf = array_merge( $this->panelConf, $this->defaultConfig['Editor'] ); + //'title' => G::LoadTranslation('ID_DYNAFORM_EDITOR').' - ['.$this->title.']', + } - /** - * Create the xml form default - * @param string $filename - * @return void - */ - function _createDefaultXmlForm($fileName) - { - //Create the default Dynaform - $sampleForm=''."\n"; - $sampleForm.=''."\n"; - switch ($this->dyn_type) { - case "xmlform": + /** + * Create the xml form default + * + * @param string $filename + * @return void + */ + function _createDefaultXmlForm ($fileName) + { + //Create the default Dynaform + $sampleForm = '' . "\n"; + $sampleForm .= '' . "\n"; + switch ($this->dyn_type) { + case "xmlform": /*$sampleForm.='' . "\n" . ' <en>Sample form</en>' . "\n" . ''."\n"; @@ -122,7 +106,7 @@ class dynaformEditor extends WebResource ' Submit' . "\n" . ''."\n";*/ break; - case "grid": + case "grid": /*$sampleForm.='' . "\n" . 'A' . "\n" . ''."\n"; @@ -130,224 +114,210 @@ class dynaformEditor extends WebResource 'B' . "\n" . ''."\n";*/ break; + } + $sampleForm .= ''; + G::verifyPath( dirname( $fileName ), true ); + $fp = fopen( $fileName, 'w' ); + $sampleForm = str_replace( 'name=""', 'name="' . $this->_getFilename( $this->file ) . '"', $sampleForm ); + fwrite( $fp, $sampleForm ); + fclose( $fp ); } - $sampleForm.=''; - G::verifyPath(dirname($fileName), true); - $fp=fopen($fileName,'w'); - $sampleForm=str_replace('name=""','name="'.$this->_getFilename($this->file).'"', $sampleForm ); - fwrite($fp, $sampleForm); - fclose($fp); - } - /** - * Prints the DynaformEditor - * @return void - */ - function _render() - { - global $G_PUBLISH; - $script=''; - /* Start Block: Load (Create if doesn't exist) the xmlform */ - $Parameters = array( - 'SYS_LANG' => SYS_LANG, - 'URL' => G::encrypt( $this->file , URL_KEY ), - 'DYN_UID' => $this->dyn_uid, - 'PRO_UID' => $this->pro_uid, - 'DYNAFORM_NAME'=> $this->dyn_title, - 'FILE' => $this->file, - 'DYN_EDITOR' => $this->dyn_editor, - ); - $_SESSION['Current_Dynafom']['Parameters'] = $Parameters; - $XmlEditor = array( - 'URL'=> G::encrypt( $this->file , URL_KEY ), - 'XML'=> ''//$openDoc->getXml() - ); - $JSEditor = array( - 'URL'=> G::encrypt( $this->file , URL_KEY ), - ); + /** + * Prints the DynaformEditor + * + * @return void + */ + function _render () + { + global $G_PUBLISH; + $script = ''; + /* Start Block: Load (Create if doesn't exist) the xmlform */ + $Parameters = array ('SYS_LANG' => SYS_LANG,'URL' => G::encrypt( $this->file, URL_KEY ),'DYN_UID' => $this->dyn_uid,'PRO_UID' => $this->pro_uid,'DYNAFORM_NAME' => $this->dyn_title,'FILE' => $this->file,'DYN_EDITOR' => $this->dyn_editor + ); + $_SESSION['Current_Dynafom']['Parameters'] = $Parameters; + $XmlEditor = array ('URL' => G::encrypt( $this->file, URL_KEY ),'XML' => '' //$openDoc->getXml() + ); + $JSEditor = array ('URL' => G::encrypt( $this->file, URL_KEY ) + ); - $A = G::encrypt( $this->file , URL_KEY ); + $A = G::encrypt( $this->file, URL_KEY ); - try { - $openDoc = new Xml_Document(); - $fileName= $this->home . $this->file . '.xml'; - if (file_exists($fileName)) { - $openDoc->parseXmlFile($fileName); - } else { - $this->_createDefaultXmlForm($fileName); - $openDoc->parseXmlFile($fileName); - } - //$form = new Form( $this->file , $this->home, SYS_LANG, true ); - $Properties = dynaformEditorAjax::get_properties( $A , $this->dyn_uid ); + try { + $openDoc = new Xml_Document(); + $fileName = $this->home . $this->file . '.xml'; + if (file_exists( $fileName )) { + $openDoc->parseXmlFile( $fileName ); + } else { + $this->_createDefaultXmlForm( $fileName ); + $openDoc->parseXmlFile( $fileName ); + } + //$form = new Form( $this->file , $this->home, SYS_LANG, true ); + $Properties = dynaformEditorAjax::get_properties( $A, $this->dyn_uid ); /* Start Block: Prepare the XMLDB connection */ - define('DB_XMLDB_HOST', PATH_DYNAFORM . $this->file . '.xml' ); - define('DB_XMLDB_USER',''); - define('DB_XMLDB_PASS',''); - define('DB_XMLDB_NAME',''); - define('DB_XMLDB_TYPE','myxml'); - /* Start Block: Prepare the dynaformEditor */ - $G_PUBLISH = new Publisher; - $sName='dynaformEditor'; - $G_PUBLISH->publisherId=$sName; - $oHeadPublisher =& headPublisher::getSingleton(); - $labesTrans = G::getTranslations(Array('ID_FIELD_DYNAFORM_TEXT','ID_FIELD_DYNAFORM_CURRENCY','ID_FIELD_DYNAFORM_PERCENTAGE','ID_FIELD_DYNAFORM_PASSWORD','ID_FIELD_DYNAFORM_SUGGEST', - 'ID_FIELD_DYNAFORM_TEXTAREA','ID_FIELD_DYNAFORM_TITLE','ID_FIELD_DYNAFORM_SUBTITLE', 'ID_FIELD_DYNAFORM_BUTTON', 'ID_FIELD_DYNAFORM_SUBMIT', 'ID_FIELD_DYNAFORM_RESET', - 'ID_FIELD_DYNAFORM_DROPDOWN', 'ID_FIELD_DYNAFORM_YESNO', 'ID_FIELD_DYNAFORM_LISTBOX', 'ID_FIELD_DYNAFORM_CHECKBOX', 'ID_FIELD_DYNAFORM_CHECKGROUP', 'ID_FIELD_DYNAFORM_RADIOGROUP', - 'DATE_LABEL', 'ID_FIELD_DYNAFORM_HIDDEN', 'ID_FIELD_DYNAFORM_LINK', 'ID_FIELD_DYNAFORM_LINK', 'ID_FIELD_DYNAFORM_FILE', 'ID_FIELD_DYNAFORM_JAVASCRIPT', 'ID_FIELD_DYNAFORM_GRID', - 'ID_INDEX' )); - $oHeadPublisher->addScriptCode("var TRANSLATIONS = " . G::json_encode($labesTrans).";"); - $oHeadPublisher->setTitle(G::LoadTranslation('ID_DYNAFORM_EDITOR'). ' - ' . $Properties['DYN_TITLE']); - $G_PUBLISH->AddContent('blank'); - $this->panelConf['title']=$this->title; - $G_PUBLISH->AddContent('panel-init', 'mainPanel', $this->panelConf ); - if ($Properties['DYN_TYPE'] == 'xmlform') { - $G_PUBLISH->AddContent('xmlform', 'toolbar', 'dynaforms/fields_Toolbar', 'display:none', $Parameters , '', ''); - } - else { - $G_PUBLISH->AddContent('xmlform', 'toolbar', 'dynaforms/fields_ToolbarGrid', 'display:none', $Parameters , '', ''); - } - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_Editor', 'display:none', $Parameters , '', ''); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_XmlEditor', 'display:none', $XmlEditor , '', ''); - $G_PUBLISH->AddContent('blank'); - $i = 0; - $aFields = array(); - $aFields[] = array( - 'XMLNODE_NAME' => 'char', - 'TYPE' => 'char', - 'UP' => 'char', - 'DOWN' => 'char' - ); - $oSession = new DBSession(new DBConnection(PATH_DYNAFORM . $this->file . '.xml', '', '', '', 'myxml')); - $oDataset = $oSession->Execute('SELECT * FROM dynaForm WHERE NOT( XMLNODE_NAME = "" ) AND TYPE <> "pmconnection"'); - $iMaximun = $oDataset->count(); - while ($aRow = $oDataset->Read()) { - $aFields[] = array( - 'XMLNODE_NAME' => $aRow['XMLNODE_NAME'], - 'TYPE' => $aRow['TYPE'], - 'UP' => ($i > 0 ? G::LoadTranslation('ID_UP') : ''), - 'DOWN' => ($i < $iMaximun-1 ? G::LoadTranslation('ID_DOWN') : ''), - 'row__' => ($i + 1) - ); - $i++; - break; - } - global $_DBArray; - $_DBArray['fields'] = $aFields; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('fields'); - /***@Erik-> this is deprecated,. (unuseful) $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/fields_List', $oCriteria, $Parameters, '', SYS_URI.'dynaforms/dynaforms_PagedTableAjax');***/ - $G_PUBLISH->AddContent('blank'); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_JSEditor', 'display:none', $JSEditor , '', ''); - } - catch (Exception $e) { - } - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_Properties', 'display:none', $Properties , '', ''); - //for showHide tab option @Neyek - $G_PUBLISH->AddContent('blank'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_PREVIEW"),$sName.'[3]','dynaformEditor.changeToPreview','dynaformEditor.saveCurrentView'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_XML"),$sName.'[4]','dynaformEditor.changeToXmlCode','dynaformEditor.saveCurrentView'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_HTML"),$sName.'[5]','dynaformEditor.changeToHtmlCode','dynaformEditor.saveCurrentView'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_FIELDS_LIST"),$sName.'[6]','dynaformEditor.changeToFieldsList','dynaformEditor.saveCurrentView'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_JAVASCRIPTS"),$sName.'[7]','dynaformEditor.changeToJavascripts','dynaformEditor.saveCurrentView'); - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_PROPERTIES"),$sName.'[8]','dynaformEditor.changeToProperties','dynaformEditor.saveCurrentView'); - //for showHide tab option @Neyek - $G_PUBLISH->AddContent('panel-tab',G::LoadTranslation("ID_CONDITIONS_EDITOR"),$sName.'[9]','dynaformEditor.changeToShowHide','dynaformEditor.saveShowHide'); - $G_PUBLISH->AddContent('panel-close'); - $oHeadPublisher->addScriptFile('/jscore/dynaformEditor/core/dynaformEditor.js'); - //$oHeadPublisher->addScriptFile('/js/dveditor/core/dveditor.js'); - //$oHeadPublisher->addScriptFile('/codepress/codepress.js',1); - $oHeadPublisher->addScriptFile('/js/codemirror/js/codemirror.js',1); + define( 'DB_XMLDB_HOST', PATH_DYNAFORM . $this->file . '.xml' ); + define( 'DB_XMLDB_USER', '' ); + define( 'DB_XMLDB_PASS', '' ); + define( 'DB_XMLDB_NAME', '' ); + define( 'DB_XMLDB_TYPE', 'myxml' ); + /* Start Block: Prepare the dynaformEditor */ + $G_PUBLISH = new Publisher(); + $sName = 'dynaformEditor'; + $G_PUBLISH->publisherId = $sName; + $oHeadPublisher = & headPublisher::getSingleton(); + $labesTrans = G::getTranslations( Array ('ID_FIELD_DYNAFORM_TEXT','ID_FIELD_DYNAFORM_CURRENCY','ID_FIELD_DYNAFORM_PERCENTAGE','ID_FIELD_DYNAFORM_PASSWORD','ID_FIELD_DYNAFORM_SUGGEST','ID_FIELD_DYNAFORM_TEXTAREA','ID_FIELD_DYNAFORM_TITLE','ID_FIELD_DYNAFORM_SUBTITLE','ID_FIELD_DYNAFORM_BUTTON','ID_FIELD_DYNAFORM_SUBMIT','ID_FIELD_DYNAFORM_RESET','ID_FIELD_DYNAFORM_DROPDOWN','ID_FIELD_DYNAFORM_YESNO','ID_FIELD_DYNAFORM_LISTBOX','ID_FIELD_DYNAFORM_CHECKBOX','ID_FIELD_DYNAFORM_CHECKGROUP','ID_FIELD_DYNAFORM_RADIOGROUP','DATE_LABEL','ID_FIELD_DYNAFORM_HIDDEN','ID_FIELD_DYNAFORM_LINK','ID_FIELD_DYNAFORM_LINK','ID_FIELD_DYNAFORM_FILE','ID_FIELD_DYNAFORM_JAVASCRIPT','ID_FIELD_DYNAFORM_GRID','ID_INDEX' + ) ); + $oHeadPublisher->addScriptCode( "var TRANSLATIONS = " . G::json_encode( $labesTrans ) . ";" ); + $oHeadPublisher->setTitle( G::LoadTranslation( 'ID_DYNAFORM_EDITOR' ) . ' - ' . $Properties['DYN_TITLE'] ); + $G_PUBLISH->AddContent( 'blank' ); + $this->panelConf['title'] = $this->title; + $G_PUBLISH->AddContent( 'panel-init', 'mainPanel', $this->panelConf ); + if ($Properties['DYN_TYPE'] == 'xmlform') { + $G_PUBLISH->AddContent( 'xmlform', 'toolbar', 'dynaforms/fields_Toolbar', 'display:none', $Parameters, '', '' ); + } else { + $G_PUBLISH->AddContent( 'xmlform', 'toolbar', 'dynaforms/fields_ToolbarGrid', 'display:none', $Parameters, '', '' ); + } + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_Editor', 'display:none', $Parameters, '', '' ); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_XmlEditor', 'display:none', $XmlEditor, '', '' ); + $G_PUBLISH->AddContent( 'blank' ); + $i = 0; + $aFields = array (); + $aFields[] = array ('XMLNODE_NAME' => 'char','TYPE' => 'char','UP' => 'char','DOWN' => 'char' + ); + $oSession = new DBSession( new DBConnection( PATH_DYNAFORM . $this->file . '.xml', '', '', '', 'myxml' ) ); + $oDataset = $oSession->Execute( 'SELECT * FROM dynaForm WHERE NOT( XMLNODE_NAME = "" ) AND TYPE <> "pmconnection"' ); + $iMaximun = $oDataset->count(); + while ($aRow = $oDataset->Read()) { + $aFields[] = array ('XMLNODE_NAME' => $aRow['XMLNODE_NAME'],'TYPE' => $aRow['TYPE'],'UP' => ($i > 0 ? G::LoadTranslation( 'ID_UP' ) : ''),'DOWN' => ($i < $iMaximun - 1 ? G::LoadTranslation( 'ID_DOWN' ) : ''),'row__' => ($i + 1) + ); + $i ++; + break; + } + global $_DBArray; + $_DBArray['fields'] = $aFields; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'fields' ); + /** + * *@Erik-> this is deprecated,. + * (unuseful) $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/fields_List', $oCriteria, $Parameters, '', SYS_URI.'dynaforms/dynaforms_PagedTableAjax');** + */ + $G_PUBLISH->AddContent( 'blank' ); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_JSEditor', 'display:none', $JSEditor, '', '' ); + } catch (Exception $e) { + } + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_Properties', 'display:none', $Properties, '', '' ); + //for showHide tab option @Neyek + $G_PUBLISH->AddContent( 'blank' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_PREVIEW" ), $sName . '[3]', 'dynaformEditor.changeToPreview', 'dynaformEditor.saveCurrentView' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_XML" ), $sName . '[4]', 'dynaformEditor.changeToXmlCode', 'dynaformEditor.saveCurrentView' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_HTML" ), $sName . '[5]', 'dynaformEditor.changeToHtmlCode', 'dynaformEditor.saveCurrentView' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_FIELDS_LIST" ), $sName . '[6]', 'dynaformEditor.changeToFieldsList', 'dynaformEditor.saveCurrentView' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_JAVASCRIPTS" ), $sName . '[7]', 'dynaformEditor.changeToJavascripts', 'dynaformEditor.saveCurrentView' ); + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_PROPERTIES" ), $sName . '[8]', 'dynaformEditor.changeToProperties', 'dynaformEditor.saveCurrentView' ); + //for showHide tab option @Neyek + $G_PUBLISH->AddContent( 'panel-tab', G::LoadTranslation( "ID_CONDITIONS_EDITOR" ), $sName . '[9]', 'dynaformEditor.changeToShowHide', 'dynaformEditor.saveShowHide' ); + $G_PUBLISH->AddContent( 'panel-close' ); + $oHeadPublisher->addScriptFile( '/jscore/dynaformEditor/core/dynaformEditor.js' ); + //$oHeadPublisher->addScriptFile('/js/dveditor/core/dveditor.js'); + //$oHeadPublisher->addScriptFile('/codepress/codepress.js',1); + $oHeadPublisher->addScriptFile( '/js/codemirror/js/codemirror.js', 1 ); - $oHeadPublisher->addScriptFile('/js/grid/core/grid.js'); - $oHeadPublisher->addScriptCode(' - var DYNAFORM_URL="'.$Parameters['URL'].'"; + $oHeadPublisher->addScriptFile( '/js/grid/core/grid.js' ); + $oHeadPublisher->addScriptCode( ' + var DYNAFORM_URL="' . $Parameters['URL'] . '"; leimnud.event.add(window,"load",function(){ loadEditor(); }); - '); - $oHeadPublisher->addScriptCode(' var jsMeta;'); - G::RenderPage( "publish", 'blank' ); - } - - /** - * Get the filename - * @param string $file - * @return string - */ - function _getFilename($file) - { - return (strcasecmp(substr($file,-5),'_tmp0')==0)? substr($file,0,strlen($file)-5) : $file; - } - - /** - * Set the temporal copy - * @param string $onOff - * @return void - */ - function _setUseTemporalCopy($onOff) - { - $file = self::_getFilename( $this->file ); - if ($onOff) { - $this->file=$file.'_tmp0'; - self::_setTmpData(array('useTmpCopy'=>true)); - if (!file_exists(PATH_DYNAFORM . $file . '.xml')) - $this->_createDefaultXmlForm(PATH_DYNAFORM . $file . '.xml'); - //Creates a copy if it doesn't exist, else, use the old copy - if (!file_exists(PATH_DYNAFORM . $this->file . '.xml')) - self::_copyFile(PATH_DYNAFORM . $file . '.xml',PATH_DYNAFORM . $this->file . '.xml'); - if (!file_exists(PATH_DYNAFORM . $this->file . '.html') - && file_exists(PATH_DYNAFORM . $file . '.html')) - self::_copyFile(PATH_DYNAFORM . $file . '.html',PATH_DYNAFORM . $this->file . '.html'); - } - else { - $this->file=$file; - self::_setTmpData(array()); + ' ); + $oHeadPublisher->addScriptCode( ' var jsMeta;' ); + G::RenderPage( "publish", 'blank' ); } - } - /** - * Set temporal data - * @param $data - * @return void - */ - function _setTmpData($data) - { - G::verifyPath(PATH_C . 'dynEditor/',true); - $fp=fopen(PATH_C . 'dynEditor/'.session_id().'.php','w'); - fwrite($fp,'$tmpData=unserialize(\''.addcslashes(serialize($data),'\\\'').'\');'); - fclose($fp); - } + /** + * Get the filename + * + * @param string $file + * @return string + */ + function _getFilename ($file) + { + return (strcasecmp( substr( $file, - 5 ), '_tmp0' ) == 0) ? substr( $file, 0, strlen( $file ) - 5 ) : $file; + } - /** - * Get temporal data - * @param string $filename - * @return array - */ - function _getTmpData() - { - $tmpData = array(); - $file = PATH_C . 'dynEditor/'.session_id().'.php'; - if (file_exists($file)) eval(implode('',file($file))); - return $tmpData; - } - /** - * Copy files - * @param file $from - * @param file $to - * @return void - */ - function _copyFile($from,$to) - { - $copy = implode('',file($from)); - $fcopy = fopen($to,"w"); - fwrite($fcopy, $copy); - fclose($fcopy); - } + /** + * Set the temporal copy + * + * @param string $onOff + * @return void + */ + function _setUseTemporalCopy ($onOff) + { + $file = self::_getFilename( $this->file ); + if ($onOff) { + $this->file = $file . '_tmp0'; + self::_setTmpData( array ('useTmpCopy' => true + ) ); + if (! file_exists( PATH_DYNAFORM . $file . '.xml' )) + $this->_createDefaultXmlForm( PATH_DYNAFORM . $file . '.xml' ); + //Creates a copy if it doesn't exist, else, use the old copy + if (! file_exists( PATH_DYNAFORM . $this->file . '.xml' )) + self::_copyFile( PATH_DYNAFORM . $file . '.xml', PATH_DYNAFORM . $this->file . '.xml' ); + if (! file_exists( PATH_DYNAFORM . $this->file . '.html' ) && file_exists( PATH_DYNAFORM . $file . '.html' )) + self::_copyFile( PATH_DYNAFORM . $file . '.html', PATH_DYNAFORM . $this->file . '.html' ); + } else { + $this->file = $file; + self::_setTmpData( array () ); + } + } + + /** + * Set temporal data + * + * @param $data + * @return void + */ + function _setTmpData ($data) + { + G::verifyPath( PATH_C . 'dynEditor/', true ); + $fp = fopen( PATH_C . 'dynEditor/' . session_id() . '.php', 'w' ); + fwrite( $fp, '$tmpData=unserialize(\'' . addcslashes( serialize( $data ), '\\\'' ) . '\');' ); + fclose( $fp ); + } + + /** + * Get temporal data + * + * @param string $filename + * @return array + */ + function _getTmpData () + { + $tmpData = array (); + $file = PATH_C . 'dynEditor/' . session_id() . '.php'; + if (file_exists( $file )) + eval( implode( '', file( $file ) ) ); + return $tmpData; + } + + /** + * Copy files + * + * @param file $from + * @param file $to + * @return void + */ + function _copyFile ($from, $to) + { + $copy = implode( '', file( $from ) ); + $fcopy = fopen( $to, "w" ); + fwrite( $fcopy, $copy ); + fclose( $fcopy ); + } } interface iDynaformEditorAjax { - //public function render_preview($A); + //public function render_preview($A); } /** @@ -359,613 +329,576 @@ interface iDynaformEditorAjax class dynaformEditorAjax extends dynaformEditor implements iDynaformEditorAjax { - /** - * Constructor of the class dynaformEditorAjax - * @param var $post - * @return void - */ - function dynaformEditorAjax($post) - { - $this->_run($post); - } + /** + * Constructor of the class dynaformEditorAjax + * + * @param var $post + * @return void + */ + function dynaformEditorAjax ($post) + { + $this->_run( $post ); + } - /** - * Function Run - * @param var $post - * @return void - */ - function _run($post) - { - WebResource::WebResource($_SERVER['REQUEST_URI'],$post); - } + /** + * Function Run + * + * @param var $post + * @return void + */ + function _run ($post) + { + WebResource::WebResource( $_SERVER['REQUEST_URI'], $post ); + } - /** - * Prints the DynaformEditorAjax - * @param object $A - * @return ob_get_clean - */ - function render_preview($A) - { ob_start(); - $file = G::decrypt( $A , URL_KEY ); - global $G_PUBLISH; - $G_PUBLISH = new Publisher; - $G_PUBLISH->publisherId='preview'; - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true, $G_PUBLISH->publisherId); - switch(basename($form->template,'.html')) { - case 'grid': - $template = 'grid'; - $aAux = array_keys($form->fields); - if (count($aAux) > 0) { - $aFields = (array_combine($aAux,$aAux)); - } - else { - $aFields = $aAux; - } - if (is_array($aFields)) { - foreach($aFields as $key => $val) - $aFields[$key]=array(1=>"",2=>"",3=>"",4=>"",5=>""); - } - break; - default: - $template = 'xmlform_' . $G_PUBLISH->publisherId; - $aFields = array( '__DYNAFORM_OPTIONS'=> array( - 'PREVIOUS_STEP' => '#', - 'NEXT_STEP' => '#', - 'NEXT_STEP_LABEL' => G::loadTranslation('ID_NEXT_STEP'), - 'PREVIOUS_ACTION' => 'return false;', - 'NEXT_ACTION' => 'return false;' - ) + /** + * Prints the DynaformEditorAjax + * + * @param object $A + * @return ob_get_clean + */ + function render_preview ($A) + { + ob_start(); + $file = G::decrypt( $A, URL_KEY ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->publisherId = 'preview'; + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true, $G_PUBLISH->publisherId ); + switch (basename( $form->template, '.html' )) { + case 'grid': + $template = 'grid'; + $aAux = array_keys( $form->fields ); + if (count( $aAux ) > 0) { + $aFields = (array_combine( $aAux, $aAux )); + } else { + $aFields = $aAux; + } + if (is_array( $aFields )) { + foreach ($aFields as $key => $val) + $aFields[$key] = array (1 => "",2 => "",3 => "",4 => "",5 => "" ); + } + break; + default: + $template = 'xmlform_' . $G_PUBLISH->publisherId; + $aFields = array ('__DYNAFORM_OPTIONS' => array ('PREVIOUS_STEP' => '#','NEXT_STEP' => '#','NEXT_STEP_LABEL' => G::loadTranslation( 'ID_NEXT_STEP' ),'PREVIOUS_ACTION' => 'return false;','NEXT_ACTION' => 'return false;' + ) + ); + } + $G_PUBLISH->AddContent( 'dynaform', $template, $file, '', $aFields, '' ); + G::RenderPage( 'publish', 'raw' ); + return ob_get_clean(); } - $G_PUBLISH->AddContent('dynaform', $template , $file, '',$aFields, ''); - G::RenderPage('publish','raw'); - return ob_get_clean(); - } - /** - * Prints the Dynaform in format HTML - * @param object $A - * @return array - */ - function render_htmledit($A) - { - $script = ''; - $file = G::decrypt( $A , URL_KEY ); - ob_start(); - global $G_PUBLISH; - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $G_PUBLISH = new Publisher; - $G_PUBLISH->publisherId = ''; - $html = $this->get_htmlcode($A); - if (!is_string($html)) { - $error = $html; - $html = ''; + /** + * Prints the Dynaform in format HTML + * + * @param object $A + * @return array + */ + function render_htmledit ($A) + { + $script = ''; + $file = G::decrypt( $A, URL_KEY ); + ob_start(); + global $G_PUBLISH; + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->publisherId = ''; + $html = $this->get_htmlcode( $A ); + if (! is_string( $html )) { + $error = $html; + $html = ''; + } else { + $error = 0; + } + $HtmlEditor = array ('URL' => $A,'HTML' => $html + ); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_HtmlEditor', '', $HtmlEditor, '', '' ); + G::RenderPage( "publish", 'raw' ); + return array ('error' => $error,'html' => ob_get_clean() + ); } - else { - $error = 0; - } - $HtmlEditor = array( - 'URL' => $A, - 'HTML'=> $html - ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_HtmlEditor', '', $HtmlEditor , '', ''); - G::RenderPage( "publish", 'raw' ); - return array('error'=>$error,'html'=>ob_get_clean()); - } - /** - * Get the html code - * Loads the stored HTML or the default Template if - * it doesn't exist. - * @param object $A - * @return code html - */ - function get_htmlcode($A) - { - try { - $script = null; - $fileTmp = G::decrypt($A , URL_KEY); - $form = new Form($fileTmp, PATH_DYNAFORM, SYS_LANG, true); - //Navigation Bar - $form->fields = G::array_merges( - array("__DYNAFORM_OPTIONS" => new XmlForm_Field_XmlMenu( - new Xml_Node( - "__DYNAFORM_OPTIONS", - "complete", - "", - array("type" => "xmlmenu", "xmlfile" => "gulliver/dynaforms_Options") - ), - SYS_LANG, - PATH_XMLFORM, - $form - ) - ), - $form->fields - ); + /** + * Get the html code + * Loads the stored HTML or the default Template if + * it doesn't exist. + * + * @param object $A + * @return code html + */ + function get_htmlcode ($A) + { + try { + $script = null; + $fileTmp = G::decrypt( $A, URL_KEY ); + $form = new Form( $fileTmp, PATH_DYNAFORM, SYS_LANG, true ); - //Loads the stored HTML or the default Template if - //it doesn't exist. - $filename = substr($form->fileName, 0, -3) . ($form->type === "xmlform" ? "" : "." . $form->type) . "html"; + //Navigation Bar + $form->fields = G::array_merges( array ("__DYNAFORM_OPTIONS" => new XmlForm_Field_XmlMenu( new Xml_Node( "__DYNAFORM_OPTIONS", "complete", "", array ("type" => "xmlmenu","xmlfile" => "gulliver/dynaforms_Options" + ) ), SYS_LANG, PATH_XMLFORM, $form ) + ), $form->fields ); - if (!file_exists($filename)) { - $html = $form->printTemplate($form->template, $script); - } - else { - $html = implode("", file($filename)); - } + //Loads the stored HTML or the default Template if + //it doesn't exist. + $filename = substr( $form->fileName, 0, - 3 ) . ($form->type === "xmlform" ? "" : "." . $form->type) . "html"; - /* + if (! file_exists( $filename )) { + $html = $form->printTemplate( $form->template, $script ); + } else { + $html = implode( "", file( $filename ) ); + } + + /* * It adds the new fields automatically at the bottom of the form. * TODO: �TOP OR BOTTOM? * Improving detection algorithm of new fields. * Current: Do not check the fields that have already been reviewed (saving) * Already checked the temporary file dynaforms editor. */ - $tmp = self::_getTmpData(); - if (!isset($tmp['OLD_FIELDS'])) $tmp['OLD_FIELDS']=array();//var_dump($html);die; - $aAux = explode('', $html); - foreach($form->fields as $field) { - if ((strpos( $html , '{$form.'.$field->name.'}' )===FALSE) && - (strpos( $html , '{$'.$field->name.'}' )===FALSE) ) { - //Aparantly is new (but could be a deleted or non visible like private type fields) - switch (strtolower($field->type)) { - case 'private': - case 'phpvariable': - break; - default: - if (array_search( $field->name , $tmp['OLD_FIELDS'] )===false) { - //TOP - $aAux[0] .= '
{$'.$field->name.'}'.'{$form.'.$field->name.'}'; + $tmp = self::_getTmpData(); + if (! isset( $tmp['OLD_FIELDS'] )) + $tmp['OLD_FIELDS'] = array (); //var_dump($html);die; + $aAux = explode( '', $html ); + foreach ($form->fields as $field) { + if ((strpos( $html, '{$form.' . $field->name . '}' ) === FALSE) && (strpos( $html, '{$' . $field->name . '}' ) === FALSE)) { + //Aparantly is new (but could be a deleted or non visible like private type fields) + switch (strtolower( $field->type )) { + case 'private': + case 'phpvariable': + break; + default: + if (array_search( $field->name, $tmp['OLD_FIELDS'] ) === false) { + //TOP + $aAux[0] .= '
{$' . $field->name . '}' . '{$form.' . $field->name . '}'; //$html.='
{$'.$field->name.'}'.'{$form.'.$field->name.'}'; //BOTTOM //$html='{$'.$field->name.'}'.'{$form.'.$field->name.'}'.$html; //$tmp['OLD_FIELDS'][]=$field->name; + } + } } - } - } + } + self::_setTmpData( $tmp ); + //$html=str_replace('{$form_className}','formDefault', $html ); + $html = str_replace( '{$form_className}', 'formDefault', $aAux[0] . '' ); + + return $html; + } catch (Exception $e) { + return (array) $e; } - self::_setTmpData($tmp); - //$html=str_replace('{$form_className}','formDefault', $html ); - $html=str_replace('{$form_className}','formDefault', $aAux[0] . '' ); + } + + /** + * Restore the html code + * + * @param object $A + * @return code html + */ + function restore_html ($A) + { + $script = null; + $fileTmp = G::decrypt( $A, URL_KEY ); + $form = new Form( $fileTmp, PATH_DYNAFORM, SYS_LANG, true ); + + //Navigation Bar + $form->fields = G::array_merges( array ("__DYNAFORM_OPTIONS" => new XmlForm_Field_XmlMenu( new Xml_Node( "__DYNAFORM_OPTIONS", "complete", "", array ("type" => "xmlmenu","xmlfile" => "gulliver/dynaforms_Options" + ) ), SYS_LANG, PATH_XMLFORM, $form ) + ), $form->fields ); + + $form->enableTemplate = false; + $html = $form->printTemplate( $form->template, $script ); + $html = str_replace( '{$form_className}', 'formDefault', $html ); + if (file_exists( PATH_DYNAFORM . $fileTmp . '.html' )) { + unlink( PATH_DYNAFORM . $fileTmp . '.html' ); + } + $fp = fopen( PATH_DYNAFORM . $fileTmp . '.html', 'w' ); + fwrite( $fp, $html ); + fclose( $fp ); return $html; } - catch (Exception $e) { - return (array) $e; - } - } - /** - * Restore the html code - * @param object $A - * @return code html - */ - function restore_html($A) - { - $script = null; - $fileTmp = G::decrypt($A, URL_KEY); - $form = new Form($fileTmp, PATH_DYNAFORM, SYS_LANG, true); - //Navigation Bar - $form->fields = G::array_merges( - array("__DYNAFORM_OPTIONS" => new XmlForm_Field_XmlMenu( - new Xml_Node( - "__DYNAFORM_OPTIONS", - "complete", - "", - array("type" => "xmlmenu", "xmlfile" => "gulliver/dynaforms_Options") - ), - SYS_LANG, - PATH_XMLFORM, - $form - ) - ), - $form->fields - ); - - $form->enableTemplate = false; - $html = $form->printTemplate( $form->template , $script ); - $html = str_replace('{$form_className}','formDefault', $html ); - if (file_exists(PATH_DYNAFORM . $fileTmp . '.html')) { - unlink(PATH_DYNAFORM . $fileTmp . '.html'); - } - $fp=fopen(PATH_DYNAFORM . $fileTmp . '.html','w'); - fwrite($fp, $html); - fclose($fp); - - return $html; - } - - /** - * Set the html code - * @param object $A - * @return array - */ - function set_htmlcode($A,$htmlcode) - { - try { - $file = G::decrypt( $A , URL_KEY ); - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $filename = substr($form->fileName , 0, -3) . - ( $form->type==='xmlform' ? '' : '.' . $form->type ) . 'html'; - $fp=fopen($filename, 'w'); - fwrite($fp, $htmlcode ); - fclose($fp); - return 0; - } - catch(Exception $e) { - return (array)$e; - } - } - - /** - * Get the xml code - * @param object $A - * @return array - */ - function get_xmlcode($A) - { - try { - $file = G::decrypt( $A , URL_KEY ); - $xmlcode = implode('',file(PATH_DYNAFORM . $file . '.xml')); - return array("xmlcode"=>$xmlcode,"error"=>0); - } - catch(Exception $e) { - return array("xmlcode"=>"","error"=>(array)$e); - } - } - - /** - * Set the xml code - * @param object $A - * @param array $xmlcode - * @return string - */ - function set_xmlcode($A,$xmlcode) - { - $xmlcode = urldecode($xmlcode) ; - $file = G::decrypt( $A , URL_KEY ); - $xmlcode = str_replace(' ', ' ', trim($xmlcode)); - $fp = fopen(PATH_DYNAFORM . $file . '.xml', 'w'); - fwrite($fp, $xmlcode ); - fclose($fp); - return ""; - } - - /** - * Get the javascript code - * @param object $A - * @param string $fieldName - * @return array - */ - function get_javascripts($A,$fieldName) - { - try { - $file = G::decrypt( $A , URL_KEY ); - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $aOptions = array(); - $sCode = ''; - foreach($form->fields as $name => $value ) { - if (strcasecmp($value->type,"javascript")==0) { - $aOptions[] = array('key'=>$name,'value'=>$name); - if ( $name == $fieldName ) - $sCode = $value->code; - } + /** + * Set the html code + * + * @param object $A + * @return array + */ + function set_htmlcode ($A, $htmlcode) + { + try { + $file = G::decrypt( $A, URL_KEY ); + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $filename = substr( $form->fileName, 0, - 3 ) . ($form->type === 'xmlform' ? '' : '.' . $form->type) . 'html'; + $fp = fopen( $filename, 'w' ); + fwrite( $fp, $htmlcode ); + fclose( $fp ); + return 0; + } catch (Exception $e) { + return (array) $e; } - return array('aOptions'=>$aOptions, 'sCode'=>$sCode ); - } - catch(Exception $e) { - return (array) $e; - } - } - - /** - * Set the javascript code - * @param object $A - * @param string $fieldName - * @param string $sCode - * @return array - */ - function set_javascript($A,$fieldName,$sCode,$meta='') - { - if ($fieldName == '___pm_boot_strap___') { - return 0; } - $sCode = urldecode($sCode) ; - try { - $sCode = rtrim($sCode); - $file = G::decrypt( $A , URL_KEY ); - /*$dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml' ,'','','','myxml' ); + /** + * Get the xml code + * + * @param object $A + * @return array + */ + function get_xmlcode ($A) + { + try { + $file = G::decrypt( $A, URL_KEY ); + $xmlcode = implode( '', file( PATH_DYNAFORM . $file . '.xml' ) ); + return array ("xmlcode" => $xmlcode,"error" => 0 + ); + } catch (Exception $e) { + return array ("xmlcode" => "","error" => (array) $e + ); + } + } + + /** + * Set the xml code + * + * @param object $A + * @param array $xmlcode + * @return string + */ + function set_xmlcode ($A, $xmlcode) + { + $xmlcode = urldecode( $xmlcode ); + $file = G::decrypt( $A, URL_KEY ); + $xmlcode = str_replace( ' ', ' ', trim( $xmlcode ) ); + $fp = fopen( PATH_DYNAFORM . $file . '.xml', 'w' ); + fwrite( $fp, $xmlcode ); + fclose( $fp ); + return ""; + } + + /** + * Get the javascript code + * + * @param object $A + * @param string $fieldName + * @return array + */ + function get_javascripts ($A, $fieldName) + { + try { + $file = G::decrypt( $A, URL_KEY ); + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $aOptions = array (); + $sCode = ''; + foreach ($form->fields as $name => $value) { + if (strcasecmp( $value->type, "javascript" ) == 0) { + $aOptions[] = array ('key' => $name,'value' => $name + ); + if ($name == $fieldName) + $sCode = $value->code; + } + } + return array ('aOptions' => $aOptions,'sCode' => $sCode + ); + } catch (Exception $e) { + return (array) $e; + } + } + + /** + * Set the javascript code + * + * @param object $A + * @param string $fieldName + * @param string $sCode + * @return array + */ + function set_javascript ($A, $fieldName, $sCode, $meta = '') + { + if ($fieldName == '___pm_boot_strap___') { + return 0; + } + + $sCode = urldecode( $sCode ); + try { + $sCode = rtrim( $sCode ); + $file = G::decrypt( $A, URL_KEY ); + /*$dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml' ,'','','','myxml' ); $ses2 = new DBSession($dbc2); $ses2->execute(G::replaceDataField("UPDATE dynaForm SET XMLNODE_VALUE = @@CODE WHERE XMLNODE_NAME = @@FIELDNAME ", array('FIELDNAME'=>$fieldName,'CODE'=>$sCode), "myxml" )); */ - G::LoadSystem('dynaformhandler'); + G::LoadSystem( 'dynaformhandler' ); - $dynaform = new dynaFormHandler(PATH_DYNAFORM."{$file}.xml"); - $dynaform->replace($fieldName, $fieldName, Array('type'=>'javascript', 'meta'=>$meta, '#cdata'=>$sCode)); + $dynaform = new dynaFormHandler( PATH_DYNAFORM . "{$file}.xml" ); + $dynaform->replace( $fieldName, $fieldName, Array ('type' => 'javascript','meta' => $meta,'#cdata' => $sCode + ) ); - return 0; - } catch(Exception $e) { - return (array) $e; + return 0; + } catch (Exception $e) { + return (array) $e; + } } - } - /** - * Get properties of the dynaForm - * @param file $A - * @param string $DYN_UID - * @return array - */ - function get_properties( $A, $DYN_UID ) - { - $file = G::decrypt( $A , URL_KEY ); - $tmp = self::_getTmpData(); - if (!(isset($tmp['Properties']) && isset($tmp['useTmpCopy']))) { - $dynaform = new dynaform; - $dynaform->load( $DYN_UID ); - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $Properties = array( - 'A' => $A, - 'DYN_UID' => $dynaform->getDynUid(), - 'PRO_UID' => $dynaform->getProUid(), - 'DYN_TITLE' => $dynaform->getDynTitle(), - 'DYN_TYPE' => $dynaform->getDynType(), - 'DYN_DESCRIPTION'=> $dynaform->getDynDescription(), - 'WIDTH' => $form->width, - //'ENABLETEMPLATE'=> $form->enableTemplate, - 'MODE' => $form->mode, - 'PRINTDYNAFORM' => $form->printdynaform, - 'ADJUSTGRIDSWIDTH' => $form->adjustgridswidth, - 'NEXTSTEPSAVE' => $form->nextstepsave - ); - $tmp['Properties']=$Properties; - self::_setTmpData($tmp); + /** + * Get properties of the dynaForm + * + * @param file $A + * @param string $DYN_UID + * @return array + */ + function get_properties ($A, $DYN_UID) + { + $file = G::decrypt( $A, URL_KEY ); + $tmp = self::_getTmpData(); + if (! (isset( $tmp['Properties'] ) && isset( $tmp['useTmpCopy'] ))) { + $dynaform = new dynaform(); + $dynaform->load( $DYN_UID ); + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $Properties = array ('A' => $A,'DYN_UID' => $dynaform->getDynUid(),'PRO_UID' => $dynaform->getProUid(),'DYN_TITLE' => $dynaform->getDynTitle(),'DYN_TYPE' => $dynaform->getDynType(),'DYN_DESCRIPTION' => $dynaform->getDynDescription(),'WIDTH' => $form->width, + //'ENABLETEMPLATE'=> $form->enableTemplate, + 'MODE' => $form->mode,'PRINTDYNAFORM' => $form->printdynaform,'ADJUSTGRIDSWIDTH' => $form->adjustgridswidth,'NEXTSTEPSAVE' => $form->nextstepsave + ); + $tmp['Properties'] = $Properties; + self::_setTmpData( $tmp ); + } else { + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $Properties = $tmp['Properties']; + if (! isset( $Properties['ENABLETEMPLATE'] )) + $Properties['ENABLETEMPLATE'] = "0"; + $Properties['WIDTH'] = $form->width; + $Properties['MODE'] = $form->mode; + } + return $Properties; } - else { - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $Properties = $tmp['Properties']; - if (!isset($Properties['ENABLETEMPLATE'])) $Properties['ENABLETEMPLATE'] ="0"; - $Properties['WIDTH']=$form->width; - $Properties['MODE']=$form->mode; - } - return $Properties; - } - /** - * Set properties of the dynaForm - * @param file $A - * @param string $DYN_UID - * @param array $getFields - * @return array - */ - function set_properties($A, $DYN_UID, $getFields) - { - try { - $post = array(); - parse_str( $getFields, $post ); - $Fields = $post['form']; - //if (!isset($Fields['ENABLETEMPLATE'])) $Fields['ENABLETEMPLATE'] ="0"; - $file = G::decrypt( $A , URL_KEY ); - $tmp=self::_getTmpData(); - if (!isset($tmp['useTmpCopy'])) { - $dynaform = new dynaform; - $dynaform->update( $Fields ); - } - else { - $tmp['Properties']=$Fields; - self::_setTmpData($tmp); - } - $dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml' ,'','','','myxml' ); - $ses2 = new DBSession($dbc2); - //if (!isset($Fields['ENABLETEMPLATE'])) $Fields['ENABLETEMPLATE'] ="0"; - if (isset($Fields['WIDTH'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET WIDTH = @@WIDTH WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - /*if (isset($Fields['ENABLETEMPLATE'])) { + /** + * Set properties of the dynaForm + * + * @param file $A + * @param string $DYN_UID + * @param array $getFields + * @return array + */ + function set_properties ($A, $DYN_UID, $getFields) + { + try { + $post = array (); + parse_str( $getFields, $post ); + $Fields = $post['form']; + //if (!isset($Fields['ENABLETEMPLATE'])) $Fields['ENABLETEMPLATE'] ="0"; + $file = G::decrypt( $A, URL_KEY ); + $tmp = self::_getTmpData(); + if (! isset( $tmp['useTmpCopy'] )) { + $dynaform = new dynaform(); + $dynaform->update( $Fields ); + } else { + $tmp['Properties'] = $Fields; + self::_setTmpData( $tmp ); + } + $dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml', '', '', '', 'myxml' ); + $ses2 = new DBSession( $dbc2 ); + //if (!isset($Fields['ENABLETEMPLATE'])) $Fields['ENABLETEMPLATE'] ="0"; + if (isset( $Fields['WIDTH'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET WIDTH = @@WIDTH WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + /*if (isset($Fields['ENABLETEMPLATE'])) { $ses2->execute(G::replaceDataField("UPDATE . SET ENABLETEMPLATE = @@ENABLETEMPLATE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); }*/ - if (isset($Fields['DYN_TYPE'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET TYPE = @@DYN_TYPE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - if (isset($Fields['MODE'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET MODE = @@MODE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - if (isset($Fields['NEXTSTEPSAVE'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET NEXTSTEPSAVE = @@NEXTSTEPSAVE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - if (isset($Fields['PRINTDYNAFORM'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET PRINTDYNAFORM = @@PRINTDYNAFORM WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - if (isset($Fields['ADJUSTGRIDSWIDTH'])) { - $ses2->execute(G::replaceDataField("UPDATE . SET ADJUSTGRIDSWIDTH = @@ADJUSTGRIDSWIDTH WHERE XMLNODE_NAME = 'dynaForm' ", $Fields)); - } - return 0; + if (isset( $Fields['DYN_TYPE'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET TYPE = @@DYN_TYPE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + if (isset( $Fields['MODE'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET MODE = @@MODE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + if (isset( $Fields['NEXTSTEPSAVE'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET NEXTSTEPSAVE = @@NEXTSTEPSAVE WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + if (isset( $Fields['PRINTDYNAFORM'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET PRINTDYNAFORM = @@PRINTDYNAFORM WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + if (isset( $Fields['ADJUSTGRIDSWIDTH'] )) { + $ses2->execute( G::replaceDataField( "UPDATE . SET ADJUSTGRIDSWIDTH = @@ADJUSTGRIDSWIDTH WHERE XMLNODE_NAME = 'dynaForm' ", $Fields ) ); + } + return 0; + } catch (Exception $e) { + return (array) $e; + } } - catch(Exception $e) { - return (array) $e; + + /** + * Get enable template + * + * @param object $A + * @return string + */ + function get_enabletemplate ($A) + { + $file = G::decrypt( $A, URL_KEY ); + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + return $form->enableTemplate; } - } - /** - * Get enable template - * @param object $A - * @return string - */ - function get_enabletemplate( $A ) - { - $file = G::decrypt( $A , URL_KEY ); - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - return $form->enableTemplate; - } + /** + * Set enable template + * + * @param object $A + * @param string $value + * @return string + */ + function set_enabletemplate ($A, $value) + { + $file = G::decrypt( $A, URL_KEY ); + $value = $value == "1" ? "1" : "0"; + $dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml', '', '', '', 'myxml' ); + $ses2 = new DBSession( $dbc2 ); + $ses2->execute( "UPDATE . SET ENABLETEMPLATE = '$value'" ); + return $value; + } - /** - * Set enable template - * @param object $A - * @param string $value - * @return string - */ - function set_enabletemplate( $A, $value ) - { - $file = G::decrypt( $A , URL_KEY ); - $value = $value=="1"?"1":"0"; - $dbc2 = new DBConnection( PATH_DYNAFORM . $file . '.xml' ,'','','','myxml' ); - $ses2 = new DBSession($dbc2); - $ses2->execute("UPDATE . SET ENABLETEMPLATE = '$value'"); - return $value; - } - - /** - * Save a dynaForm - * @param object $A - * @param string $DYN_UID - * @return array - */ - function save($A,$DYN_UID) - { - try { - $answer = 0; - $file = G::decrypt( $A , URL_KEY ); - $tmp = self::_getTmpData(); - if (isset($tmp['useTmpCopy'])) { /*Save Register*/ - $dynaform = new dynaform; - $dynaform->update( $tmp['Properties'] ); - /*Save file*/ - $copy = implode('',file(PATH_DYNAFORM . $file . '.xml')); - /* + /** + * Save a dynaForm + * + * @param object $A + * @param string $DYN_UID + * @return array + */ + function save ($A, $DYN_UID) + { + try { + $answer = 0; + $file = G::decrypt( $A, URL_KEY ); + $tmp = self::_getTmpData(); + if (isset( $tmp['useTmpCopy'] )) { /*Save Register*/ + $dynaform = new dynaform(); + $dynaform->update( $tmp['Properties'] ); + /*Save file*/ + $copy = implode( '', file( PATH_DYNAFORM . $file . '.xml' ) ); + /* * added by krlos carlos/a/colosa.com * in here we are validation if a xmlform has a submit action */ -// if (!preg_match("/type=\"submit\"/",$copy) && !preg_match("/type=\"grid\"/",$copy) && !isset($_SESSION['submitAction']) ){ - if (!preg_match("/type=\"submit\"/",$copy) && !preg_match("/type=\"grid\"/",$copy) ){ -// $_SESSION['submitAction'] = 1; - $answer = 'noSub'; + // if (!preg_match("/type=\"submit\"/",$copy) && !preg_match("/type=\"grid\"/",$copy) && !isset($_SESSION['submitAction']) ){ + if (! preg_match( "/type=\"submit\"/", $copy ) && ! preg_match( "/type=\"grid\"/", $copy )) { + // $_SESSION['submitAction'] = 1; + $answer = 'noSub'; + } + $copyHtml = false; + if (file_exists( PATH_DYNAFORM . $file . '.html' )) { + $copyHtml = implode( '', file( PATH_DYNAFORM . $file . '.html' ) ); + } + $file = dynaformEditor::_getFilename( $file ); + $fcopy = fopen( PATH_DYNAFORM . $file . '.xml', "w" ); + fwrite( $fcopy, $copy ); + fclose( $fcopy ); + if ($copyHtml) { + $fcopy = fopen( PATH_DYNAFORM . $file . '.html', "w" ); + fwrite( $fcopy, $copyHtml ); + fclose( $fcopy ); + } + } else { + //throw new Exception("It should not come here unless you have disabled the temporary copy."); + } + return $answer; + } catch (Exception $e) { + return (array) $e; } - $copyHtml = false; - if (file_exists(PATH_DYNAFORM . $file . '.html')) { - $copyHtml = implode('',file(PATH_DYNAFORM . $file . '.html')); - } - $file = dynaformEditor::_getFilename($file); - $fcopy = fopen(PATH_DYNAFORM . $file . '.xml',"w"); - fwrite($fcopy, $copy); - fclose($fcopy); - if ($copyHtml) { - $fcopy = fopen(PATH_DYNAFORM . $file . '.html',"w"); - fwrite($fcopy, $copyHtml); - fclose($fcopy); - } - } - else { - //throw new Exception("It should not come here unless you have disabled the temporary copy."); - } - return $answer; } - catch(Exception $e) { - return (array) $e; - } - } - /** - * Close a dynaform - * @param object $A - * @return array - */ - function close($A) - { - try { - /* + /** + * Close a dynaform + * + * @param object $A + * @return array + */ + function close ($A) + { + try { + /* * we are unseting this variable. It's our control about to save the xmlfrom */ -// unset($_SESSION['submitAction']); - $file = G::decrypt( $A , URL_KEY ); - //return(array('response'=>PATH_DYNAFORM . $file . '.xml')); - /* Delete the temporal copy */ - $tmp=self::_getTmpData(); - $xmlFile = PATH_DYNAFORM . $file . '.xml'; - $htmlFile = PATH_DYNAFORM . $file . '.html'; - //return(array('response'=>$tmp['useTmpCopy'])); - if (isset($tmp['useTmpCopy'])) { - //return(array('response'=>PATH_DYNAFORM . $file . '.xml')); - if ($file!==dynaformEditor::_getFilename($file)) { - // return(array('response'=>PATH_DYNAFORM . $file . '.xml')); - if(file_exists($xmlFile)) { - unlink($xmlFile); - } - if(file_exists($htmlFile)) - unlink($htmlFile); + // unset($_SESSION['submitAction']); + $file = G::decrypt( $A, URL_KEY ); + //return(array('response'=>PATH_DYNAFORM . $file . '.xml')); + /* Delete the temporal copy */ + $tmp = self::_getTmpData(); + $xmlFile = PATH_DYNAFORM . $file . '.xml'; + $htmlFile = PATH_DYNAFORM . $file . '.html'; + //return(array('response'=>$tmp['useTmpCopy'])); + if (isset( $tmp['useTmpCopy'] )) { + //return(array('response'=>PATH_DYNAFORM . $file . '.xml')); + if ($file !== dynaformEditor::_getFilename( $file )) { + // return(array('response'=>PATH_DYNAFORM . $file . '.xml')); + if (file_exists( $xmlFile )) { + unlink( $xmlFile ); + } + if (file_exists( $htmlFile )) + unlink( $htmlFile ); + } + } + return 0; + } catch (Exception $e) { + return (array) $e; } - } - return 0; - }catch(Exception $e) { - return (array) $e; } - } - /** - * Checks if a dynaform was changed - * @param file $A - * @param string $DYN_UID - * @return array - */ - function is_modified($A,$DYN_UID) - { - $file = G::decrypt( $A , URL_KEY ); - try { - /* Compare Properties */ - $dynaform = new dynaform; - $dynaform->load( $DYN_UID ); - $form = new Form( $file , PATH_DYNAFORM, SYS_LANG, true ); - $sp = array( - 'A' => $A, - 'DYN_UID' => $dynaform->getDynUid(), - 'PRO_UID' => $dynaform->getProUid(), - 'DYN_TITLE' => $dynaform->getDynTitle(), - 'DYN_TYPE' => $dynaform->getDynType(), - 'DYN_DESCRIPTION'=> $dynaform->getDynDescription(), - 'WIDTH' => $form->width, - 'ENABLETEMPLATE' => $form->enableTemplate, - 'MODE' => $form->mode - ); - $P = self::get_properties($A,$DYN_UID); - if (!isset($P['DYN_TITLE'])) { - $P['DYN_TITLE'] = $sp['DYN_TITLE']; - } - if (!isset($P['DYN_TYPE'])) { - $P['DYN_TYPE'] = $sp['DYN_TYPE']; - } - if (!isset($P['DYN_DESCRIPTION'])) { - $P['DYN_DESCRIPTION'] = $sp['DYN_DESCRIPTION']; - } - if (!isset($P['WIDTH'])) { - $P['WIDTH'] = $sp['WIDTH']; - } - if (!isset($P['ENABLETEMPLATE'])) { - $P['ENABLETEMPLATE'] = $sp['ENABLETEMPLATE']; - } - if (!isset($P['MODE'])) { - $P['MODE'] = $sp['MODE']; - } - $modPro = ($sp['DYN_TITLE']!=$P['DYN_TITLE']) || - ($sp['DYN_TYPE']!=$P['DYN_TYPE']) || - ($sp['DYN_DESCRIPTION']!=$P['DYN_DESCRIPTION']) /*|| + /** + * Checks if a dynaform was changed + * + * @param file $A + * @param string $DYN_UID + * @return array + */ + function is_modified ($A, $DYN_UID) + { + $file = G::decrypt( $A, URL_KEY ); + try { + /* Compare Properties */ + $dynaform = new dynaform(); + $dynaform->load( $DYN_UID ); + $form = new Form( $file, PATH_DYNAFORM, SYS_LANG, true ); + $sp = array ('A' => $A,'DYN_UID' => $dynaform->getDynUid(),'PRO_UID' => $dynaform->getProUid(),'DYN_TITLE' => $dynaform->getDynTitle(),'DYN_TYPE' => $dynaform->getDynType(),'DYN_DESCRIPTION' => $dynaform->getDynDescription(),'WIDTH' => $form->width,'ENABLETEMPLATE' => $form->enableTemplate,'MODE' => $form->mode + ); + $P = self::get_properties( $A, $DYN_UID ); + if (! isset( $P['DYN_TITLE'] )) { + $P['DYN_TITLE'] = $sp['DYN_TITLE']; + } + if (! isset( $P['DYN_TYPE'] )) { + $P['DYN_TYPE'] = $sp['DYN_TYPE']; + } + if (! isset( $P['DYN_DESCRIPTION'] )) { + $P['DYN_DESCRIPTION'] = $sp['DYN_DESCRIPTION']; + } + if (! isset( $P['WIDTH'] )) { + $P['WIDTH'] = $sp['WIDTH']; + } + if (! isset( $P['ENABLETEMPLATE'] )) { + $P['ENABLETEMPLATE'] = $sp['ENABLETEMPLATE']; + } + if (! isset( $P['MODE'] )) { + $P['MODE'] = $sp['MODE']; + } + $modPro = ($sp['DYN_TITLE'] != $P['DYN_TITLE']) || ($sp['DYN_TYPE'] != $P['DYN_TYPE']) || ($sp['DYN_DESCRIPTION'] != $P['DYN_DESCRIPTION']) /*|| ($sp['WIDTH']!=$P['WIDTH']) || ($sp['ENABLETEMPLATE']!=$P['ENABLETEMPLATE']) || ($sp['MODE']!=$P['MODE'])*/; /* Compare copies */ - $fileOrigen = dynaformEditor::_getFilename($file); - $copy = implode('',file(PATH_DYNAFORM . $file . '.xml')); - $origen = implode('',file(PATH_DYNAFORM . $fileOrigen . '.xml')); - $copyHTML = file_exists(PATH_DYNAFORM . $file . '.html')?implode('',file(PATH_DYNAFORM . $file . '.html')):false; - $origenHTML = file_exists(PATH_DYNAFORM . $fileOrigen . '.html')? implode('',file(PATH_DYNAFORM . $fileOrigen . '.html')):false; - $modFile = ($copy!==$origen) || ($origenHTML && ($copyHTML!==$origenHTML)); - //Return + $fileOrigen = dynaformEditor::_getFilename( $file ); + $copy = implode( '', file( PATH_DYNAFORM . $file . '.xml' ) ); + $origen = implode( '', file( PATH_DYNAFORM . $fileOrigen . '.xml' ) ); + $copyHTML = file_exists( PATH_DYNAFORM . $file . '.html' ) ? implode( '', file( PATH_DYNAFORM . $file . '.html' ) ) : false; + $origenHTML = file_exists( PATH_DYNAFORM . $fileOrigen . '.html' ) ? implode( '', file( PATH_DYNAFORM . $fileOrigen . '.html' ) ) : false; + $modFile = ($copy !== $origen) || ($origenHTML && ($copyHTML !== $origenHTML)); + //Return //return array("*message"=>sprintf("%s, (%s= %s %s):", $modPro?"1":"0" , $modFile?"1":"0", ($copy!==$origen)?"1":"0" , ($origenHTML && ($copyHTML!==$origenHTML))?"1":"0" )); //die("c'est fini"); - return $modPro || $modFile; + return $modPro || $modFile; + } catch (Exception $e) { + return (array) $e; + } } - catch(Exception $e) { - return (array) $e; - } - } } ?> diff --git a/workflow/engine/classes/class.fileCache.php b/workflow/engine/classes/class.fileCache.php index a9d4efbc4..316669927 100644 --- a/workflow/engine/classes/class.fileCache.php +++ b/workflow/engine/classes/class.fileCache.php @@ -1,110 +1,116 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * + +/** + * class.memcached.php + * + * @package workflow.engine.ProcessMaker + * + * ProcessMaker Open Source Edition + * Copyright (C) 2004 - 2011 Colosa Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * */ -class FileCache { - - function __construct($dir) { - $this->dir = $dir; - } - - private function _name($key) { - return sprintf ( "%s/%s", $this->dir, sha1 ( $key ) ); - } - - public function get($key, $expiration = 3600) { - - if (! is_dir ( $this->dir ) or ! is_writable ( $this->dir )) { - return FALSE; +class FileCache +{ + + function __construct ($dir) + { + $this->dir = $dir; } - - $cache_path = $this->_name ( $key ); - - if (! @file_exists ( $cache_path )) { - return FALSE; + + private function _name ($key) + { + return sprintf( "%s/%s", $this->dir, sha1( $key ) ); } - - if (filemtime ( $cache_path ) < (time () - $expiration)) { - // $this->clear($key); - // different users can have different timeout requests - return FALSE; + + public function get ($key, $expiration = 3600) + { + + if (! is_dir( $this->dir ) or ! is_writable( $this->dir )) { + return FALSE; + } + + $cache_path = $this->_name( $key ); + + if (! @file_exists( $cache_path )) { + return FALSE; + } + + if (filemtime( $cache_path ) < (time() - $expiration)) { + // $this->clear($key); + // different users can have different timeout requests + return FALSE; + } + + if (! $fp = @fopen( $cache_path, 'rb' )) { + return FALSE; + } + + flock( $fp, LOCK_SH ); + + $cache = ''; + + if (filesize( $cache_path ) > 0) { + $cache = unserialize( fread( $fp, filesize( $cache_path ) ) ); + } else { + $cache = NULL; + } + + flock( $fp, LOCK_UN ); + fclose( $fp ); + + return $cache; } - - if (! $fp = @fopen ( $cache_path, 'rb' )) { - return FALSE; + + public function set ($key, $data) + { + + if (! is_dir( $this->dir ) or ! is_writable( $this->dir )) { + return FALSE; + } + + $cache_path = $this->_name( $key ); + + if (! $fp = fopen( $cache_path, 'wb' )) { + return FALSE; + } + + if (flock( $fp, LOCK_EX )) { + fwrite( $fp, serialize( $data ) ); + flock( $fp, LOCK_UN ); + } else { + return FALSE; + } + fclose( $fp ); + @chmod( $cache_path, 0777 ); + return TRUE; } - - flock ( $fp, LOCK_SH ); - - $cache = ''; - - if (filesize ( $cache_path ) > 0) { - $cache = unserialize ( fread ( $fp, filesize ( $cache_path ) ) ); + + public function clear ($key) + { + $cache_path = $this->_name( $key ); + + if (file_exists( $cache_path )) { + unlink( $cache_path ); + return TRUE; + } + + return FALSE; } - else { - $cache = NULL; - } - - flock ( $fp, LOCK_UN ); - fclose ( $fp ); - - return $cache; - } - - public function set($key, $data) { - - if (! is_dir ( $this->dir ) or ! is_writable ( $this->dir )) { - return FALSE; - } - - $cache_path = $this->_name ( $key ); - - if (! $fp = fopen ( $cache_path, 'wb' )) { - return FALSE; - } - - if (flock ( $fp, LOCK_EX )) { - fwrite ( $fp, serialize ( $data ) ); - flock ( $fp, LOCK_UN ); - } - else { - return FALSE; - } - fclose ( $fp ); - @chmod ( $cache_path, 0777 ); - return TRUE; - } - - public function clear($key) { - $cache_path = $this->_name ( $key ); - - if (file_exists ( $cache_path )) { - unlink ( $cache_path ); - return TRUE; - } - - return FALSE; - } -} \ No newline at end of file +} \ No newline at end of file diff --git a/workflow/engine/classes/class.groupUser.php b/workflow/engine/classes/class.groupUser.php index 355a27451..adb279847 100755 --- a/workflow/engine/classes/class.groupUser.php +++ b/workflow/engine/classes/class.groupUser.php @@ -1,11 +1,12 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * along with this program. If not, see . + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * * It works with the table GROUP_USER @@ -32,54 +33,60 @@ /** * GroupUser - GroupUser class + * * @package workflow.engine.ProcessMaker * @author Julio Cesar Laura Avendaño * @copyright 2007 COLOSA */ -G::LoadClass('pmObject'); +G::LoadClass( 'pmObject' ); class GroupUser extends DBTable { - /** - * Constructor - * @param object $oConnection - * @return variant - */ - function GroupUser($oConnection = null) - { - if ($oConnection){ - return parent::setTo($oConnection, 'GROUP_USER', array('GRP_UID', 'USR_UID')); - } else { - return; - } - } - /* + /** + * Constructor + * + * @param object $oConnection + * @return variant + */ + function GroupUser ($oConnection = null) + { + if ($oConnection) { + return parent::setTo( $oConnection, 'GROUP_USER', array ('GRP_UID','USR_UID' + ) ); + } else { + return; + } + } + + /* * Set the Data Base connection * @param object $oConnection * @return variant/ the connection or void */ - function setTo($oConnection = null) - { - if ($oConnection) { - return parent::setTo($oConnection, 'GROUP_USER', array('GRP_UID', 'USR_UID')); - } else { - return; + function setTo ($oConnection = null) + { + if ($oConnection) { + return parent::setTo( $oConnection, 'GROUP_USER', array ('GRP_UID','USR_UID' + ) ); + } else { + return; + } } - } - /** - * Of to assign a user from a group - * @param string $sGroup - * @param string $sUser - * @return void - */ - function ofToAssignUser($sGroup = '', $sUser = '') - { - $this->Fields['GRP_UID'] = $sGroup; - $this->Fields['USR_UID'] = $sUser; - parent::delete(); - } + /** + * Of to assign a user from a group + * + * @param string $sGroup + * @param string $sUser + * @return void + */ + function ofToAssignUser ($sGroup = '', $sUser = '') + { + $this->Fields['GRP_UID'] = $sGroup; + $this->Fields['USR_UID'] = $sUser; + parent::delete(); + } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.groups.php b/workflow/engine/classes/class.groups.php index e6f5fdb8e..c5eee412f 100755 --- a/workflow/engine/classes/class.groups.php +++ b/workflow/engine/classes/class.groups.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -29,6 +30,7 @@ require_once 'classes/model/Users.php'; /** * Groups - Groups class + * * @package workflow.engine.ProcessMaker * @copyright 2007 COLOSA */ @@ -36,421 +38,426 @@ require_once 'classes/model/Users.php'; class Groups { - /** - * Get the assigned users of a group - * @param string $sGroupUID - * @return array - */ - function getUsersOfGroup($sGroupUID) - { - try { - $aUsers = array(); - $oCriteria = new Criteria(); - $oCriteria->addJoin(UsersPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + /** + * Get the assigned users of a group + * + * @param string $sGroupUID + * @return array + */ + function getUsersOfGroup ($sGroupUID) + { + try { + $aUsers = array (); + $oCriteria = new Criteria(); + $oCriteria->addJoin( UsersPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupUserPeer::GRP_UID, $sGroupUID ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers[] = $aRow; - $oDataset->next(); - } - return $aUsers; + while ($aRow = $oDataset->getRow()) { + $aUsers[] = $aRow; + $oDataset->next(); + } + return $aUsers; + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Get the active groups for an user - * @param string $sUserUID - * @return array - */ - function getActiveGroupsForAnUser($sUserUID) - { - try { - $oCriteria = new Criteria(); - $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_STATUS); - $oCriteria->add(GroupUserPeer::USR_UID, $sUserUID); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oCriteria->addJoin(GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN); - $oDataset = GroupUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + /** + * Get the active groups for an user + * + * @param string $sUserUID + * @return array + */ + function getActiveGroupsForAnUser ($sUserUID) + { + try { + $oCriteria = new Criteria(); + $oCriteria->addSelectColumn( GroupUserPeer::GRP_UID ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_STATUS ); + $oCriteria->add( GroupUserPeer::USR_UID, $sUserUID ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->addJoin( GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN ); + $oDataset = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); - $aGroups = array(); - $aRow = $oDataset->getRow(); - while (is_array($aRow)) { - $aGroups[] = $aRow['GRP_UID']; - $oDataset->next(); - $aRow = $oDataset->getRow(); - } - return $aGroups; + $aGroups = array (); + $aRow = $oDataset->getRow(); + while (is_array( $aRow )) { + $aGroups[] = $aRow['GRP_UID']; + $oDataset->next(); + $aRow = $oDataset->getRow(); + } + return $aGroups; + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Set a user to group - * @param string $GrpUid, $UsrUid - * @return array - */ - function addUserToGroup($GrpUid, $UsrUid) - { - try { - $oGrp = GroupUserPeer::retrieveByPk($GrpUid, $UsrUid); - if (is_object($oGrp) && get_class($oGrp) == 'GroupUser') { - return true; - } else { - $oGrp = new GroupUser(); - $oGrp->setGrpUid($GrpUid); - $oGrp->setUsrUid($UsrUid); - $oGrp->Save(); - } + /** + * Set a user to group + * + * @param string $GrpUid, $UsrUid + * @return array + */ + function addUserToGroup ($GrpUid, $UsrUid) + { + try { + $oGrp = GroupUserPeer::retrieveByPk( $GrpUid, $UsrUid ); + if (is_object( $oGrp ) && get_class( $oGrp ) == 'GroupUser') { + return true; + } else { + $oGrp = new GroupUser(); + $oGrp->setGrpUid( $GrpUid ); + $oGrp->setUsrUid( $UsrUid ); + $oGrp->Save(); + } + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - throw ($oError); - } - } - /* + /* * Remove a user from group * @param string $GrpUid, $UsrUid * @return array */ - function removeUserOfGroup($GrpUid, $UsrUid) - { - $gu = new GroupUser(); - $gu->remove($GrpUid, $UsrUid); - } + function removeUserOfGroup ($GrpUid, $UsrUid) + { + $gu = new GroupUser(); + $gu->remove( $GrpUid, $UsrUid ); + } - /** - * get all groups - * @param none - * @return $objects - */ - function getAllGroups() - { - try { - $criteria = new Criteria(); - $criteria->add(GroupwfPeer::GRP_UID, "", Criteria::NOT_EQUAL); - $con = Propel::getConnection(GroupwfPeer::DATABASE_NAME); - $objects = GroupwfPeer::doSelect($criteria, $con); - return $objects; - } - catch (exception $e) { - throw $e; - } - } - /** - * get all the groups from a single user - * @param $sUserUid user uid - * @return an array of group objects - */ - function getUserGroups($sUserUID) - { - try { - $criteria = new Criteria(); - $criteria->add(GroupwfPeer::GRP_UID, "", Criteria::NOT_EQUAL); - $criteria->add(GroupUserPeer::USR_UID, $sUserUID); - $criteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $criteria->addJoin(GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN); - $con = Propel::getConnection(GroupwfPeer::DATABASE_NAME); - $objects = GroupwfPeer::doSelect($criteria, $con); - return $objects; - } - catch (exception $e) { - throw $e; - } - } - - /** - * Get Available Groups for a single user - * @author Qennix - * @param string $sUserUid - * @return object - */ - - function getAvailableGroupsCriteria($sUserUid, $filter=''){ - try{ - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); - $oCriteria->add(GroupUserPeer::USR_UID,$sUserUid); - $oCriteria->add(GroupUserPeer::GRP_UID,'',Criteria::NOT_EQUAL); - $oDataset = GroupUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $gUIDs = array(); - while ($aRow = $oDataset->getRow()) { - $gUIDs[] = $aRow['GRP_UID']; - $oDataset->next(); + /** + * get all groups + * + * @param none + * @return $objects + */ + function getAllGroups () + { + try { + $criteria = new Criteria(); + $criteria->add( GroupwfPeer::GRP_UID, "", Criteria::NOT_EQUAL ); + $con = Propel::getConnection( GroupwfPeer::DATABASE_NAME ); + $objects = GroupwfPeer::doSelect( $criteria, $con ); + return $objects; + } catch (exception $e) { + throw $e; } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_STATUS); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->addJoin(GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupwfPeer::GRP_UID, $gUIDs, Criteria::NOT_IN); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oCriteria->add(ContentPeer::CON_CATEGORY,'GRP_TITLE'); - $oCriteria->add(ContentPeer::CON_LANG,SYS_LANG); + } - if ($filter !=''){ - $oCriteria->add(ContentPeer::CON_VALUE,'%'.$filter.'%',Criteria::LIKE); + /** + * get all the groups from a single user + * + * @param $sUserUid user uid + * @return an array of group objects + */ + function getUserGroups ($sUserUID) + { + try { + $criteria = new Criteria(); + $criteria->add( GroupwfPeer::GRP_UID, "", Criteria::NOT_EQUAL ); + $criteria->add( GroupUserPeer::USR_UID, $sUserUID ); + $criteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $criteria->addJoin( GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN ); + $con = Propel::getConnection( GroupwfPeer::DATABASE_NAME ); + $objects = GroupwfPeer::doSelect( $criteria, $con ); + return $objects; + } catch (exception $e) { + throw $e; } + } - return $oCriteria; - } - catch(exception $e){ - throw $e; - } - } + /** + * Get Available Groups for a single user + * + * @author Qennix + * @param string $sUserUid + * @return object + */ -/** - * Get Assigned Groups for a single user - * @author Qennix - * @param string $sUserUid - * @return object - */ + function getAvailableGroupsCriteria ($sUserUid, $filter = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupUserPeer::GRP_UID ); + $oCriteria->add( GroupUserPeer::USR_UID, $sUserUid ); + $oCriteria->add( GroupUserPeer::GRP_UID, '', Criteria::NOT_EQUAL ); + $oDataset = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $gUIDs = array (); + while ($aRow = $oDataset->getRow()) { + $gUIDs[] = $aRow['GRP_UID']; + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_STATUS ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->addJoin( GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupwfPeer::GRP_UID, $gUIDs, Criteria::NOT_IN ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, SYS_LANG ); - function getAssignedGroupsCriteria($sUserUid, $filter=''){ - try{ - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_STATUS); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_LDAP_DN); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->addJoin(GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN); - $oCriteria->addJoin(GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::USR_UID, $sUserUid, Criteria::EQUAL); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oCriteria->add(ContentPeer::CON_CATEGORY,'GRP_TITLE'); - $oCriteria->add(ContentPeer::CON_LANG,SYS_LANG); + if ($filter != '') { + $oCriteria->add( ContentPeer::CON_VALUE, '%' . $filter . '%', Criteria::LIKE ); + } - if ($filter !=''){ - $oCriteria->add(ContentPeer::CON_VALUE,'%'.$filter.'%',Criteria::LIKE); + return $oCriteria; + } catch (exception $e) { + throw $e; } + } - return $oCriteria; - } - catch(exception $e){ - throw $e; - } - } + /** + * Get Assigned Groups for a single user + * + * @author Qennix + * @param string $sUserUid + * @return object + */ - function getGroupsForUser($usrUid) { - $criteria = $this->getAssignedGroupsCriteria($usrUid); - $criteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); - $dataset = GroupwfPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $groups = array(); - while ($row = $dataset->getRow()) { - if (!isset($groups[$row['GRP_UID']])) { - $groups[$row['GRP_UID']] = $row; - } - $dataset->next(); - } - return $groups; - } + function getAssignedGroupsCriteria ($sUserUid, $filter = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_STATUS ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_LDAP_DN ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->addJoin( GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN ); + $oCriteria->addJoin( GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupUserPeer::USR_UID, $sUserUid, Criteria::EQUAL ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, SYS_LANG ); - /** - * Remove a user from all groups - * @param string $sUsrUid - * @return void - */ - public function removeUserOfAllGroups($sUserUID = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GroupUserPeer::USR_UID, $sUserUID); - GroupUserPeer::doDelete($oCriteria); - } - catch (exception $oError) { - throw ($oError); - } - } + if ($filter != '') { + $oCriteria->add( ContentPeer::CON_VALUE, '%' . $filter . '%', Criteria::LIKE ); + } - /** - * Get a criteria object of all users from group - * @param string $sGroupUID - * @return array - */ - function getUsersGroupCriteria($sGroupUID = '') - { - require_once 'classes/model/GroupUser.php'; - require_once 'classes/model/Users.php'; - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - return $oCriteria; + return $oCriteria; + } catch (exception $e) { + throw $e; + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Get a criteria object of all groups from user - * @param string $sGroupUID - * @return array - */ - function getUserGroupsCriteria($sUserUID = '') - { - require_once 'classes/model/GroupUser.php'; - require_once 'classes/model/Users.php'; - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sUserUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - return $oCriteria; + function getGroupsForUser ($usrUid) + { + $criteria = $this->getAssignedGroupsCriteria( $usrUid ); + $criteria->addAscendingOrderByColumn( ContentPeer::CON_VALUE ); + $dataset = GroupwfPeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + $groups = array (); + while ($row = $dataset->getRow()) { + if (! isset( $groups[$row['GRP_UID']] )) { + $groups[$row['GRP_UID']] = $row; + } + $dataset->next(); + } + return $groups; } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Get the number of groups - * @param string $sGroupUid - * @return integer $cnt - */ - function getNumberGroups($sUserUID) - { - try { - $allGroups = $this->getUserGroups($sUserUID); - $cnt = 0; - foreach ($allGroups as $group) { - $cnt++; - } - return $cnt; + /** + * Remove a user from all groups + * + * @param string $sUsrUid + * @return void + */ + public function removeUserOfAllGroups ($sUserUID = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupUserPeer::USR_UID, $sUserUID ); + GroupUserPeer::doDelete( $oCriteria ); + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - print_r($oError); - } - } - /** - * Return the available users list criteria object - * @param string $sGroupUID - * @return object - */ - function getAvailableUsersCriteria($sGroupUID = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDs = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDs[] = $aRow['USR_UID']; - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_UID, $aUIDs, Criteria::NOT_IN); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - return $oCriteria; + /** + * Get a criteria object of all users from group + * + * @param string $sGroupUID + * @return array + */ + function getUsersGroupCriteria ($sGroupUID = '') + { + require_once 'classes/model/GroupUser.php'; + require_once 'classes/model/Users.php'; + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupUserPeer::GRP_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_EMAIL ); + $oCriteria->addJoin( GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupUserPeer::GRP_UID, $sGroupUID ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + return $oCriteria; + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Verify if a user is assigned to a group - * @param $GrpUid group Uid - * @param $UsrUid user Uid - * @return 1/0 if it's or not assigned - */ - function verifyUsertoGroup($GrpUid, $UsrUid) - { - try { - $oGrp = GroupUserPeer::retrieveByPk($GrpUid, $UsrUid); - if (is_object($oGrp) && get_class($oGrp) == 'GroupUser') { - return 1; - } else { - return 0; - } + /** + * Get a criteria object of all groups from user + * + * @param string $sGroupUID + * @return array + */ + function getUserGroupsCriteria ($sUserUID = '') + { + require_once 'classes/model/GroupUser.php'; + require_once 'classes/model/Users.php'; + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( GroupUserPeer::GRP_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addJoin( GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupUserPeer::GRP_UID, $sUserUID ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + return $oCriteria; + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Verify the existence of a Group - * @param $sGroupUid group Uid - * @return 1/0 if exist or not - */ - function verifyGroup($sGroupUID) - { - try { - $aUsers = array(); - $oCriteria = new Criteria(); - //$oCriteria->addJoin(UsersPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupwfPeer::GRP_UID, $sGroupUID); - //$oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if(is_array($aRow)) - return 1; - else - return 0; + /** + * Get the number of groups + * + * @param string $sGroupUid + * @return integer $cnt + */ + function getNumberGroups ($sUserUID) + { + try { + $allGroups = $this->getUserGroups( $sUserUID ); + $cnt = 0; + foreach ($allGroups as $group) { + $cnt ++; + } + return $cnt; + } catch (exception $oError) { + print_r( $oError ); + } } - catch (exception $oError) { - throw ($oError); - } - } - /** - * Load all the data of a group with a search based on it uid - * @param $GrpUid group uid - * @return an array of objects/false/exception object - * - */ - public function load($GrpUid){ - try { - $criteria = new Criteria(); - $criteria->add(GroupwfPeer::GRP_UID, $GrpUid, Criteria::EQUAL); - $con = Propel::getConnection(GroupwfPeer::DATABASE_NAME); - $objects = GroupwfPeer::doSelect($criteria, $con); - if(is_array($objects) && count($objects)>0){ - return $objects[0]; - } else { - return false; - } + /** + * Return the available users list criteria object + * + * @param string $sGroupUID + * @return object + */ + function getAvailableUsersCriteria ($sGroupUID = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addJoin( GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupUserPeer::GRP_UID, $sGroupUID ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDs = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDs[] = $aRow['USR_UID']; + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDs, Criteria::NOT_IN ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + return $oCriteria; + } catch (exception $oError) { + throw ($oError); + } } - catch (exception $e) { - throw $e; + + /** + * Verify if a user is assigned to a group + * + * @param $GrpUid group Uid + * @param $UsrUid user Uid + * @return 1/0 if it's or not assigned + */ + function verifyUsertoGroup ($GrpUid, $UsrUid) + { + try { + $oGrp = GroupUserPeer::retrieveByPk( $GrpUid, $UsrUid ); + if (is_object( $oGrp ) && get_class( $oGrp ) == 'GroupUser') { + return 1; + } else { + return 0; + } + } catch (exception $oError) { + throw ($oError); + } + } + + /** + * Verify the existence of a Group + * + * @param $sGroupUid group Uid + * @return 1/0 if exist or not + */ + function verifyGroup ($sGroupUID) + { + try { + $aUsers = array (); + $oCriteria = new Criteria(); + //$oCriteria->addJoin(UsersPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN); + $oCriteria->add( GroupwfPeer::GRP_UID, $sGroupUID ); + //$oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if (is_array( $aRow )) + return 1; + else + return 0; + } catch (exception $oError) { + throw ($oError); + } + } + + /** + * Load all the data of a group with a search based on it uid + * + * @param $GrpUid group uid + * @return an array of objects/false/exception object + * + */ + public function load ($GrpUid) + { + try { + $criteria = new Criteria(); + $criteria->add( GroupwfPeer::GRP_UID, $GrpUid, Criteria::EQUAL ); + $con = Propel::getConnection( GroupwfPeer::DATABASE_NAME ); + $objects = GroupwfPeer::doSelect( $criteria, $con ); + if (is_array( $objects ) && count( $objects ) > 0) { + return $objects[0]; + } else { + return false; + } + } catch (exception $e) { + throw $e; + } } - } } diff --git a/workflow/engine/classes/class.javaBridgePM.php b/workflow/engine/classes/class.javaBridgePM.php index c0164f102..3840809e3 100755 --- a/workflow/engine/classes/class.javaBridgePM.php +++ b/workflow/engine/classes/class.javaBridgePM.php @@ -1,6 +1,7 @@ -. + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ - - - if ( ! defined ( 'JAVA_BRIDGE_PATH') ) define ( 'JAVA_BRIDGE_PATH', 'JavaBridgePM' ); - if ( ! defined ( 'JAVA_BRIDGE_PORT') ) define ( 'JAVA_BRIDGE_PORT', '8080' ); - if ( ! defined ( 'JAVA_BRIDGE_HOST') ) define ( 'JAVA_BRIDGE_HOST', '127.0.0.1' ); - /** - * @package workflow.engine.classes - */ - class JavaBridgePM - { - var $JavaBridgeDir = JAVA_BRIDGE_PATH; +if (! defined( 'JAVA_BRIDGE_PATH' )) + define( 'JAVA_BRIDGE_PATH', 'JavaBridgePM' ); +if (! defined( 'JAVA_BRIDGE_PORT' )) + define( 'JAVA_BRIDGE_PORT', '8080' ); +if (! defined( 'JAVA_BRIDGE_HOST' )) + define( 'JAVA_BRIDGE_HOST', '127.0.0.1' ); + +/** + * + * @package workflow.engine.classes + */ +class JavaBridgePM +{ + var $JavaBridgeDir = JAVA_BRIDGE_PATH; var $JavaBridgePort = JAVA_BRIDGE_PORT; var $JavaBridgeHost = JAVA_BRIDGE_HOST; /** * checkJavaExtension - * check if the java extension was loaded. + * check if the java extension was loaded. * - * @return true or false - */ - function checkJavaExtension() + * + * @return true or false + */ + function checkJavaExtension () { - try { - if (!extension_loaded('java')) { - if (!(@include_once("java/Java.inc"))) { - $urlJavaInc = "http://$this->JavaBridgeHost:$this->JavaBridgePort/$this->JavaBridgeDir/java/Java.inc"; - @include_once( $urlJavaInc); - $includedFiles = get_included_files(); - $found = false; - foreach ($includedFiles as $filename) { - if ( $urlJavaInc == $filename ) $found = true; + try { + if (! extension_loaded( 'java' )) { + if (! (@include_once ("java/Java.inc"))) { + $urlJavaInc = "http://$this->JavaBridgeHost:$this->JavaBridgePort/$this->JavaBridgeDir/java/Java.inc"; + @include_once ($urlJavaInc); + $includedFiles = get_included_files(); + $found = false; + foreach ($includedFiles as $filename) { + if ($urlJavaInc == $filename) + $found = true; + } + if (! $found) { + throw new Exception( 'The PHP/Java Bridge is not defined' ); + } + + } + return true; } - if ( !$found ) { - throw new Exception ('The PHP/Java Bridge is not defined' ) ; + + if (! function_exists( "java_get_server_name" )) { + throw new Exception( 'The loaded java extension is not the PHP/Java Bridge' ); } - - } - return true; + + return true; + } catch (Exception $e) { + throw new Exception( 'Error in checkJavaExtension: ' . $e->getMessage() ); } - - if ( !function_exists("java_get_server_name")) { - throw new Exception ('The loaded java extension is not the PHP/Java Bridge' ); - } - - return true; - } - catch ( Exception $e ) { - throw new Exception ( 'Error in checkJavaExtension: ' . $e->getMessage() ); - } } - - /** - * convert a php value to a java one... - * @param string $value - * @param string $className - * @returns boolean success - */ - function convertValue($value, $className) - { - // if we are a string, just use the normal conversion - // methods from the java extension... - try { - if ($className == 'java.lang.String') { - $temp = new Java('java.lang.String', $value); - return $temp; - } - else if ($className == 'java.lang.Boolean' || - $className == 'java.lang.Integer' || - $className == 'java.lang.Long' || - $className == 'java.lang.Short' || - $className == 'java.lang.Double' || - $className == 'java.math.BigDecimal') { - $temp = new Java($className, $value); - return $temp; - } - else if ($className == 'java.sql.Timestamp' || - $className == 'java.sql.Time') { - $temp = new Java($className); - $javaObject = $temp->valueOf($value); - return $javaObject; - } - } - catch (Exception $err) { - echo ( 'unable to convert value, ' . $value . - ' could not be converted to ' . $className); - return false; - } - - echo ( 'unable to convert value, class name '.$className. - ' not recognised'); - return false; - } - + /** - * generateJrxmlFromDynaform - * @param string $outDocUid - * @param string $dynaformUid - * @param object $template - * @return void - */ - function generateJrxmlFromDynaform ( $outDocUid, $dynaformUid, $template ) { - require_once 'classes/model/Dynaform.php'; - $dyn = new Dynaform(); - $aFields = $dyn->load( $dynaformUid); - $xmlFields = $dyn->getDynaformFields( $dynaformUid); - - $reportTpl = PATH_TPL . 'javaBridgePM/classic.xml'; - $reportFilename = PATH_DYNAFORM . $aFields['PRO_UID'] . PATH_SEP . $outDocUid .'.jrxml'; - foreach ( $xmlFields as $key => $val ) { - if ( $val->type == 'submit' || $val->type == 'button' || $val->type == 'title' || $val->type == 'subtitle' ) - unset ( $xmlFields[$key] ); - } - - //$sqlSentence = 'SELECT * from ' . $tableName; - $sqlSentence = 'dynaform/'; - - $template = new TemplatePower( $reportTpl ); - $template->prepare(); - $template->assign ( 'sqlSentence', $sqlSentence ); - $template->assign ( 'tableName', $aFields['DYN_TITLE'] ); - $template->assign ( 'heightDetail', count ($xmlFields)*15 + 20 ); - $template->assign ( 'PAGE_NUMBER' , '{PAGE_NUMBER}' ); + * convert a php value to a java one... + * + * @param string $value + * @param string $className + * @return s boolean success + */ + function convertValue ($value, $className) + { + // if we are a string, just use the normal conversion + // methods from the java extension... + try { + if ($className == 'java.lang.String') { + $temp = new Java( 'java.lang.String', $value ); + return $temp; + } else if ($className == 'java.lang.Boolean' || $className == 'java.lang.Integer' || $className == 'java.lang.Long' || $className == 'java.lang.Short' || $className == 'java.lang.Double' || $className == 'java.math.BigDecimal') { + $temp = new Java( $className, $value ); + return $temp; + } else if ($className == 'java.sql.Timestamp' || $className == 'java.sql.Time') { + $temp = new Java( $className ); + $javaObject = $temp->valueOf( $value ); + return $javaObject; + } + } catch (Exception $err) { + echo ('unable to convert value, ' . $value . ' could not be converted to ' . $className); + return false; + } - $logoReporte = 'http://' .$_SERVER['SERVER_NAME'] . ':' .$_SERVER['SERVER_PORT'] . - '/images/processmaker.logo.jpg'; - $template->assign ( 'logoReporte', $logoReporte ); - - foreach ( $xmlFields as $key => $val ) { - $template->newBlock( 'fields'); - $template->assign ( 'fieldName' , $key ); - } - - - $posX = 140; - $posLabelX = 5; - $posY = 10; - foreach ( $xmlFields as $key => $val ) { - $template->newBlock( 'detailFields'); - $template->assign ( 'fieldName' , '{' . $key . '}' ); - $template->assign ( 'fieldLabel' , $key ); - $template->assign ( 'labelPosX' , $posLabelX ); - $template->assign ( 'fieldPosX' , $posX ); - $template->assign ( 'fieldPosY' , $posY ); - $posY += 15; - } - - $content = $template->getOutputContent(); - $iSize = file_put_contents ( $reportFilename, $content ); - printf("saved %s bytes in file %s \n", $iSize, $reportFilename ); + echo ('unable to convert value, class name ' . $className . ' not recognised'); + return false; } - - } + + /** + * generateJrxmlFromDynaform + * + * @param string $outDocUid + * @param string $dynaformUid + * @param object $template + * @return void + */ + function generateJrxmlFromDynaform ($outDocUid, $dynaformUid, $template) + { + require_once 'classes/model/Dynaform.php'; + $dyn = new Dynaform(); + $aFields = $dyn->load( $dynaformUid ); + $xmlFields = $dyn->getDynaformFields( $dynaformUid ); + + $reportTpl = PATH_TPL . 'javaBridgePM/classic.xml'; + $reportFilename = PATH_DYNAFORM . $aFields['PRO_UID'] . PATH_SEP . $outDocUid . '.jrxml'; + foreach ($xmlFields as $key => $val) { + if ($val->type == 'submit' || $val->type == 'button' || $val->type == 'title' || $val->type == 'subtitle') + unset( $xmlFields[$key] ); + } + + //$sqlSentence = 'SELECT * from ' . $tableName; + $sqlSentence = 'dynaform/'; + + $template = new TemplatePower( $reportTpl ); + $template->prepare(); + $template->assign( 'sqlSentence', $sqlSentence ); + $template->assign( 'tableName', $aFields['DYN_TITLE'] ); + $template->assign( 'heightDetail', count( $xmlFields ) * 15 + 20 ); + $template->assign( 'PAGE_NUMBER', '{PAGE_NUMBER}' ); + + $logoReporte = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/images/processmaker.logo.jpg'; + $template->assign( 'logoReporte', $logoReporte ); + + foreach ($xmlFields as $key => $val) { + $template->newBlock( 'fields' ); + $template->assign( 'fieldName', $key ); + } + + $posX = 140; + $posLabelX = 5; + $posY = 10; + foreach ($xmlFields as $key => $val) { + $template->newBlock( 'detailFields' ); + $template->assign( 'fieldName', '{' . $key . '}' ); + $template->assign( 'fieldLabel', $key ); + $template->assign( 'labelPosX', $posLabelX ); + $template->assign( 'fieldPosX', $posX ); + $template->assign( 'fieldPosY', $posY ); + $posY += 15; + } + + $content = $template->getOutputContent(); + $iSize = file_put_contents( $reportFilename, $content ); + printf( "saved %s bytes in file %s \n", $iSize, $reportFilename ); + } + +} diff --git a/workflow/engine/classes/class.jrml.php b/workflow/engine/classes/class.jrml.php index 4915a3def..813ec7e08 100755 --- a/workflow/engine/classes/class.jrml.php +++ b/workflow/engine/classes/class.jrml.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - /** * Jrml - Jrml class + * * @package workflow.engine.ProcessMaker * @author Maborak * @copyright 2008 COLOSA */ -class Jrml +class Jrml { - public $rows; - public $sql; - private $data; - - /** - * This function is the constructor of the class Jrml - * @param array $data - * @return void - */ - function __construct($data=array()) - { - $this->data = $data; - $this->sql = $data['sql']; - $this->rows = $this->get_rows($data['type']); - $this->md = $this->get_md(); - } - - /** - * This function is for get rows - * @param array $a - * @return array - */ - private function get_rows($a) - { - $b=array(); - foreach ($a as $key=>$value){ - $b[]=$key; - } - return $b; - } - - public function get_md() - { - } - - /** - * This function is for get the header - * @return string - */ - public function get_header() - { - $xml="sql}]]>"; - foreach ($this->data['type'] as $key=>$value) + public $rows; + public $sql; + private $data; + + /** + * This function is the constructor of the class Jrml + * + * @param array $data + * @return void + */ + function __construct ($data = array()) { - $xml.=""; + $this->data = $data; + $this->sql = $data['sql']; + $this->rows = $this->get_rows( $data['type'] ); + $this->md = $this->get_md(); } - $xml.=""; - $xml.=' + + /** + * This function is for get rows + * + * @param array $a + * @return array + */ + private function get_rows ($a) + { + $b = array (); + foreach ($a as $key => $value) { + $b[] = $key; + } + return $b; + } + + public function get_md () + { + } + + /** + * This function is for get the header + * + * @return string + */ + public function get_header () + { + $xml = "sql}]]>"; + foreach ($this->data['type'] as $key => $value) { + $xml .= ""; + } + $xml .= ""; + $xml .= ' <band height="58"> <line> @@ -95,64 +99,65 @@ class Jrml <textElement textAlignment="Center"> <font size="26" isBold="true"/> </textElement> - <text><![CDATA['.$this->data['title'].']]></text> + <text><![CDATA[' . $this->data['title'] . ']]></text> </staticText> </band> - '; - return $xml; - } - - /** - * This function is for get a column of the header - * @return string - */ - public function get_column_header() - { - $xml=""; - $w = (int)($this->data['columnWidth']/sizeof($this->rows)); - $i=0; - foreach ($this->data['type'] as $key=>$value) + '; + return $xml; + } + + /** + * This function is for get a column of the header + * + * @return string + */ + public function get_column_header () { - $xml.=" + $xml = ""; + $w = (int) ($this->data['columnWidth'] / sizeof( $this->rows )); + $i = 0; + foreach ($this->data['type'] as $key => $value) { + $xml .= " "; - $i=$i+$w; + $i = $i + $w; + } + $xml .= " "; + return $xml; } - $xml.=" "; - return $xml; - } - - /** - * This function is for get the detail - * @return string - */ - public function get_detail() - { - $xml=''; - $w = (int)($this->data['columnWidth']/sizeof($this->rows)); - $i=0; - foreach ($this->data['type'] as $key=>$value) + + /** + * This function is for get the detail + * + * @return string + */ + public function get_detail () { - $xml.=""; - $i=$i+$w; + $xml = ''; + $w = (int) ($this->data['columnWidth'] / sizeof( $this->rows )); + $i = 0; + foreach ($this->data['type'] as $key => $value) { + $xml .= ""; + $i = $i + $w; + } + $xml .= ''; + return $xml; } - $xml.=''; - return $xml; - } - - /** - * This function is for get the footer - * @return string - */ - public function get_footer() - { - $xml=' + + /** + * This function is for get the footer + * + * @return string + */ + public function get_footer () + { + $xml = ' @@ -201,22 +206,23 @@ class Jrml '; - return $xml; - } - - /** - * This function is for export - * @return string - */ - public function export() - { - $xml=' - '; - $xml.=$this->get_header(); - $xml.=$this->get_column_header(); - $xml.=$this->get_detail(); - $xml.=$this->get_footer(); - $xml.=''; - return $xml; - } + return $xml; + } + + /** + * This function is for export + * + * @return string + */ + public function export () + { + $xml = ' + '; + $xml .= $this->get_header(); + $xml .= $this->get_column_header(); + $xml .= $this->get_detail(); + $xml .= $this->get_footer(); + $xml .= ''; + return $xml; + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.memcached.php b/workflow/engine/classes/class.memcached.php index 03ee0b605..4cdba77d1 100644 --- a/workflow/engine/classes/class.memcached.php +++ b/workflow/engine/classes/class.memcached.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -30,158 +32,169 @@ * @package workflow.engine.ProcessMaker */ -class PMmemcached { - const ONE_MINUTE = 60; - const ONE_HOUR = 3600; - const TWO_HOURS = 7200; - const EIGHT_HOURS = 28800; +class PMmemcached +{ + const ONE_MINUTE = 60; + const ONE_HOUR = 3600; + const TWO_HOURS = 7200; + const EIGHT_HOURS = 28800; - var $version; - var $mem; - var $connected = false; - var $enabled = false; - var $supported = false; + var $version; + var $mem; + var $connected = false; + var $enabled = false; + var $supported = false; - private static $instance = NULL; + private static $instance = NULL; - public function __construct($workspace) { - $this->enabled = MEMCACHED_ENABLED; - $this->connected = false; - $this->workspace = $workspace; - if (class_exists ( 'Memcached' )) { - $this->mem = new Memcached (); - $this->class = 'Memcached'; - $this->connected = true; - } - else { - if (class_exists ( 'Memcache' )) { - $this->mem = new Memcache (); - $this->class = 'Memcache'; - $this->supported = true; - $this->connected = @$this->mem->connect ( MEMCACHED_SERVER, 11211 ); - if ($this->connected) { - $this->version = $this->mem->getVersion (); + public function __construct ($workspace) + { + $this->enabled = MEMCACHED_ENABLED; + $this->connected = false; + $this->workspace = $workspace; + if (class_exists( 'Memcached' )) { + $this->mem = new Memcached(); + $this->class = 'Memcached'; + $this->connected = true; + } else { + if (class_exists( 'Memcache' )) { + $this->mem = new Memcache(); + $this->class = 'Memcache'; + $this->supported = true; + $this->connected = @$this->mem->connect( MEMCACHED_SERVER, 11211 ); + if ($this->connected) { + $this->version = $this->mem->getVersion(); + } + } else { + G::Loadclass( 'fileCache' ); + // create cache folder + $cacheFolder = PATH_DATA . "sites/" . $workspace . "/cachefiles/"; + if (! file_exists( $cacheFolder )) { + if (! mkdir( $cacheFolder )) { + return false; + } + } + $this->class = 'fileCache'; + $this->connected = true; + $this->mem = new FileCache( $cacheFolder ); + } } - } - else { - G::Loadclass ( 'fileCache' ); - // create cache folder - $cacheFolder = PATH_DATA . "sites/" . $workspace . "/cachefiles/"; - if (! file_exists ( $cacheFolder )) { - if (! mkdir ( $cacheFolder )) { + + if (! MEMCACHED_ENABLED) { + $this->connected = false; return false; - } } - $this->class = 'fileCache'; - $this->connected = true; - $this->mem = new FileCache ( $cacheFolder ); - } + } - if (! MEMCACHED_ENABLED) { - $this->connected = false; - return false; + /** + * to get singleton instance + * + * @access public + * @return object + */ + public static function getSingleton ($workspace) + { + if (! self::$instance instanceof self) { + self::$instance = new PMmemcached( $workspace ); + } + return self::$instance; } - } - - /** - * to get singleton instance - * - * @access public - * @return object - */ - public static function getSingleton($workspace) { - if (! self::$instance instanceof self) { - self::$instance = new PMmemcached ( $workspace ); + public function __clone () + { + throw new Exception( "Clone is not allowed." ); } - return self::$instance; - } - public function __clone() { - throw new Exception ( "Clone is not allowed." ); - } + public function __wakeup () + { + throw new Exception( "Deserializing is not allowed." ); + } - public function __wakeup() { - throw new Exception ( "Deserializing is not allowed." ); - } + function set ($key, $object, $timeout = 0) + { + if (! $this->connected) + return false; + if ($this->class != 'filecache') + $this->mem->set( $this->workspace . '_' . $key, $object, false, $timeout ); + else + $this->mem->set( $this->workspace . '_' . $key, $object ); + } - function set($key, $object, $timeout = 0) { - if (! $this->connected) - return false; - if ($this->class != 'filecache') - $this->mem->set ( $this->workspace . '_' . $key, $object, false, $timeout ); - else - $this->mem->set ( $this->workspace . '_' . $key, $object ); - } + function get ($key) + { + if (! $this->connected) + return false; + return $this->mem->get( $this->workspace . '_' . $key ); + } - function get($key) { - if (! $this->connected) - return false; - return $this->mem->get ( $this->workspace . '_' . $key ); - } + function add ($key, $value) + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + return $this->mem->add( $this->workspace . '_' . $key, $value ); + } - function add($key, $value) { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - return $this->mem->add ( $this->workspace . '_' . $key, $value ); - } + function increment ($key, $value) + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + return $this->mem->increment( $this->workspace . '_' . $key, $value ); + } - function increment($key, $value) { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - return $this->mem->increment ( $this->workspace . '_' . $key, $value ); - } + function delete ($key) + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + return $this->mem->delete( $this->workspace . '_' . $key ); + } - function delete($key) { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - return $this->mem->delete ( $this->workspace . '_' . $key ); - } + function flush () + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + return $this->mem->flush(); + } - function flush() { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - return $this->mem->flush (); - } + function getStats () + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + return $status = $this->mem->getStats(); + } - function getStats() { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - return $status = $this->mem->getStats (); - } + function printDetails () + { + if ((! $this->connected) || ($this->class == 'filecache')) + return false; + $status = $this->mem->getStats(); + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; - function printDetails() { - if ((! $this->connected) || ($this->class == 'filecache')) - return false; - $status = $this->mem->getStats (); - echo "
Memcache Server version: " . $status["version"] . "
Number of hours this server has been running " . ($status["uptime"] / 3660) . "
Total number of items stored by this server ever since it started " . $status["total_items"] . "
Number of open connections " . $status["curr_connections"] . "
Total number of connections opened since the server started running " . $status["total_connections"] . "
Number of connection structures allocated by the server " . $status["connection_structures"] . "
Cumulative number of retrieval requests " . $status["cmd_get"] . "
Cumulative number of storage requests " . $status["cmd_set"] . "
"; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + $percCacheHit = ((real) $status["get_hits"] / (real) $status["cmd_get"] * 100); + $percCacheHit = round( $percCacheHit, 3 ); + $percCacheMiss = 100 - $percCacheHit; - $percCacheHit = (( real ) $status ["get_hits"] / ( real ) $status ["cmd_get"] * 100); - $percCacheHit = round ( $percCacheHit, 3 ); - $percCacheMiss = 100 - $percCacheHit; + echo ""; + echo ""; - echo ""; - echo ""; + $MBRead = (real) $status["bytes_read"] / (1024 * 1024); - $MBRead = ( real ) $status ["bytes_read"] / (1024 * 1024); - - echo ""; - $MBWrite = ( real ) $status ["bytes_written"] / (1024 * 1024); - echo ""; - $MBSize = ( real ) $status ["limit_maxbytes"] / (1024 * 1024); - echo ""; - echo ""; - echo "
Memcache Server version: " . $status ["version"] . "
Number of hours this server has been running " . ($status ["uptime"] / 3660) . "
Total number of items stored by this server ever since it started " . $status ["total_items"] . "
Number of open connections " . $status ["curr_connections"] . "
Total number of connections opened since the server started running " . $status ["total_connections"] . "
Number of connection structures allocated by the server " . $status ["connection_structures"] . "
Cumulative number of retrieval requests " . $status ["cmd_get"] . "
Cumulative number of storage requests " . $status ["cmd_set"] . "
Number of keys that have been requested and found present " . $status["get_hits"] . " ($percCacheHit%)
Number of items that have been requested and not found " . $status["get_misses"] . "($percCacheMiss%)
Number of keys that have been requested and found present " . $status ["get_hits"] . " ($percCacheHit%)
Number of items that have been requested and not found " . $status ["get_misses"] . "($percCacheMiss%)
Total number of bytes read by this server from network " . $MBRead . " Mega Bytes
Total number of bytes sent by this server to network " . $MBWrite . " Mega Bytes
Number of bytes this server is allowed to use for storage." . $MBSize . " Mega Bytes
Number of valid items removed from cache to free memory for new items." . $status ["evictions"] . "
"; - } + echo "Total number of bytes read by this server from network " . $MBRead . " Mega Bytes"; + $MBWrite = (real) $status["bytes_written"] / (1024 * 1024); + echo "Total number of bytes sent by this server to network " . $MBWrite . " Mega Bytes"; + $MBSize = (real) $status["limit_maxbytes"] / (1024 * 1024); + echo "Number of bytes this server is allowed to use for storage." . $MBSize . " Mega Bytes"; + echo "Number of valid items removed from cache to free memory for new items." . $status["evictions"] . ""; + echo ""; + } } diff --git a/workflow/engine/classes/class.net.php b/workflow/engine/classes/class.net.php index 1d75570d8..c9efe19ac 100755 --- a/workflow/engine/classes/class.net.php +++ b/workflow/engine/classes/class.net.php @@ -1,484 +1,482 @@ errno = 0; - $this->errstr = ""; - $this->db_instance = ""; - - unset($this->db_user); - unset($this->db_passwd); - unset($this->db_sourcename); - - #verifing valid param - if ($pHost == "") { - $this->errno = 1000; - $this->errstr = "NET::You must specify a host"; - //$this->showMsg(); - } - $this->resolv($pHost); - } + /*errors handle*/ + public $error; + public $errno; + public $errstr; - /** - * This function puts a host - * @param string $pHost - * @return void - */ - function resolv($pHost) - { - $aHost = explode("\\", $pHost); - if(count($aHost)>1){ - $ipHost = $aHost[0]; - $this->db_instance = $aHost[1]; - } else { - $ipHost = $pHost; - } - if ($this->is_ipaddress($ipHost)) { - $this->ip = $ipHost; - if (!$this->hostname = @gethostbyaddr($ipHost)) { - $this->errno = 2000; - $this->errstr = "NET::Host down"; - $this->error = "Destination Host Unreachable"; - } - } - else { - $ip = @gethostbyname($ipHost); - $long = ip2long($ip); - if ( $long == -1 || $long === FALSE) { - $this->errno = 2000; - $this->errstr = "NET::Host down"; - $this->error = "Destination Host Unreachable"; - } - else { - $this->ip = @gethostbyname($ipHost); - $this->hostname = $pHost; - } - } - } - - /** - * This function resolves IP from Hostname returns hostname on failure - * @param string $pPort - * @return true - */ - function scannPort($pPort) - { - define('TIMEOUT', 5); - $hostip = @gethostbyname($host); // resloves IP from Hostname returns hostname on failure - // attempt to connect - if (@fsockopen($this->ip, $pPort, $this->errno, $this->errstr, TIMEOUT)) { - return true; - @fclose($x); //close connection (i dont know if this is needed or not). - } - else { - $this->errno = 9999; - $this->errstr = "NET::Port Host Unreachable"; - $this->error = "Destination Port Unreachable"; - return false; - } - } - - /** - * This function checks if it is a ip address - * @param string $pHost - * @return true - */ - function is_ipaddress($pHost) - { - $key = true; - #verifing if is a ip address - $tmp = explode(".", $pHost); - #if have a ip address format - if (count($tmp) == 4) { - #if a correct ip address - for ($i = 0; $i < count($tmp); $i++) { - if (!is_int($tmp[$i])) { - $key = false; - break; + /** + * This function is the constructor of the class net + * + * @param string $pHost + * @return void + */ + function __construct ($pHost) + { + $this->errno = 0; + $this->errstr = ""; + $this->db_instance = ""; + + unset( $this->db_user ); + unset( $this->db_passwd ); + unset( $this->db_sourcename ); + + #verifing valid param + if ($pHost == "") { + $this->errno = 1000; + $this->errstr = "NET::You must specify a host"; + //$this->showMsg(); } - } - } - else { - $key = false; + $this->resolv( $pHost ); } - return $key; - } - - /** - * This function executes pin -w time IP - * @param string $pHost - * @return true - */ - function ping($pTTL = 3000) - { - $cmd = "ping -w $pTTL $this->ip"; - $output = exec($cmd, $a, $a1); - $this->errstr = ""; - for ($i = 0; $i < count($a); $i++) - $this->errstr += $a[$i]; - $this->errno = $a1; - } - - /** - * This function logins in db - * @param string $pUser - * @param string $pPasswd - * @return void - */ - function loginDbServer($pUser, $pPasswd) - { - $this->db_user = $pUser; - $this->db_passwd = $pPasswd; - } - - /** - * This function sets db - * @param string $pDb - * @param string $pPort - * @return void - */ - function setDataBase($pDb, $pPort='') - { - $this->db_sourcename = $pDb; - $this->db_port = $pPort; - } - - /** - * This function tries to connect to server - * @param string $pDbDriver - * @return void - */ - function tryConnectServer($pDbDriver) - { - if($this->errno != 0) { - return 0; - } - $stat = new Stat(); - - if(isset($this->db_user) && (isset($this->db_passwd) || ('' == $this->db_passwd)) && isset($this->db_sourcename)) - { - switch($pDbDriver) - { - case 'mysql': - if ($this->db_passwd == '') { - $link = @mysql_connect($this->ip.(($this->db_port != '') && ($this->db_port != 0) ? ':'.$this->db_port : ''), $this->db_user); - } - else { - $link = @mysql_connect($this->ip.(($this->db_port != '') && ($this->db_port != 0) ? ':'.$this->db_port : ''), $this->db_user, $this->db_passwd); - } - if ($link) { - if (@mysql_ping($link)) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } - else { - $this->error = "Lost MySql Connection"; - $this->errstr = "NET::MYSQL->Lost Connection"; - $this->errno = 10010; - } - } - else { - $this->error = "MySql connection refused!"; - $this->errstr = "NET::MYSQL->The connection was refused"; - $this->errno = 10001; - } - break; - - case 'pgsql': - $this->db_port = ($this->db_port == "") ? "5432" : $this->db_port; - $link = @pg_connect("host='$this->ip' port='$this->db_port' user='$this->db_user' password='$this->db_passwd' dbname='$this->db_sourcename'"); - if ($link) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } else { - $this->error = "PostgreSql connection refused!"; - $this->errstr = "NET::POSTGRES->The connection was refused"; - $this->errno = 20001; - } - break; - - case 'mssql': - if($this->db_instance != ""){ - $str_port = ""; - $link = @mssql_connect($this->ip . "\\". $this->db_instance, $this->db_user, $this->db_passwd); - } else { - $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":".$this->db_port; - $link = @mssql_connect($this->ip . $str_port, $this->db_user, $this->db_passwd); - } - if ($link) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } - else { - $this->error = "MS-SQL Server connection refused"; - $this->errstr = "NET::MSSQL->The connection was refused"; - $this->errno = 30001; - } - break; - - case 'oracle': - $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "1521" : $this->db_port; - try{ - $link = $conn = @oci_connect($this->db_user,$this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))"); - if ($link) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } - else { - $this->error = "Oracle connection refused"; - $this->errstr = "NET::ORACLE->The connection was refused"; - $this->errno = 30001; - } - } - catch (Exception $e){ - throw new Exception("[erik] Couldn't connect to Oracle Server! - ".$e->getMessage()); - } - break; - - case 'informix': - break; - case 'sqlite': - break; - } - } - else { - throw new Exception("CLASS::NET::ERROR: No connections param."); - } - - return $stat; - } - - /** - * This function tries to open to the DB - * @param string $pDbDriver - * @return void - */ - function tryOpenDataBase($pDbDriver) - { - if($this->errno != 0) { - return 0; - } - - set_time_limit(0); - $stat = new Stat(); - - if(isset($this->db_user) && (isset($this->db_passwd) || ('' == $this->db_passwd)) && isset($this->db_sourcename)) + /** + * This function puts a host + * + * @param string $pHost + * @return void + */ + function resolv ($pHost) { - switch($pDbDriver) - { - case 'mysql': - $link = @mysql_connect($this->ip.(($this->db_port != '') && ($this->db_port != 0) ? ':'.$this->db_port : ''), $this->db_user, $this->db_passwd); - $db = @mysql_select_db($this->db_sourcename); - if ($link) { - if ($db) { - $result = @mysql_query("show tables;"); - if ($result) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - @mysql_free_result($result); - } - else { - $this->error = "the user $this->db_user doesn't have privileges to run queries!"; - $this->errstr = "NET::MYSQL->Test query failed"; - $this->errno = 10100; - } - } - else { - $this->error = "The $this->db_sourcename data base does'n exist!"; - $this->errstr = "NET::MYSQL->Select data base failed"; - $this->errno = 10011; - } - } - else { - $this->error = "MySql connection refused!"; - $this->errstr = "NET::MYSQL->The connection was refused"; - $this->errno = 10001; - } - break; - - case 'pgsql': - $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "5432" : $this->db_port; - $link = @pg_connect("host='$this->ip' port='$this->db_port' user='$this->db_user' password='$this->db_passwd' dbname='$this->db_sourcename'"); - if ($link) { - if (@pg_ping($link)) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } - else { - $this->error = "PostgreSql Connection to $this->ip is unreachable!"; - $this->errstr = "NET::POSTGRES->Lost Connection"; - $this->errno = 20010; - } - } - else { - $this->error = "PostgrSql connection refused"; - $this->errstr = "NET::POSTGRES->The connection was refused"; - $this->errno = 20001; - } - break; - - case 'mssql': -// $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":".$this->db_port; -// $link = @mssql_connect($this->ip . $str_port, $this->db_user, $this->db_passwd); - if($this->db_instance != ""){ - $str_port = ""; - $link = @mssql_connect($this->ip . "\\". $this->db_instance, $this->db_user, $this->db_passwd); - } else { - $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":".$this->db_port; - $link = @mssql_connect($this->ip . $str_port, $this->db_user, $this->db_passwd); - } - if ($link) { - $db = @mssql_select_db($this->db_sourcename, $link); - if ($db) { - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - } - else { - $this->error = "The $this->db_sourcename data base does'n exist!"; - $this->errstr = "NET::MSSQL->Select data base failed"; - $this->errno = 30010; - } - } - else { - $this->error = "MS-SQL Server connection refused!"; - $this->errstr = "NET::MSSQL->The connection was refused"; - $this->errno = 30001; - } - break; - - case 'oracle': - $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "1521" : $this->db_port; - $link = @oci_connect($this->db_user,$this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))"); - if ($link) { - $stid = @oci_parse($link, 'select AUTHENTICATION_TYPE from v$session_connect_info'); - $result = @oci_execute($stid, OCI_DEFAULT); - if($result){ - $stat->status = 'SUCCESS'; - $this->errstr = ""; - $this->errno = 0; - @oci_close($link); - } - else { - $this->error = "the user $this->db_user doesn't have privileges to run queries!"; - $this->errstr = "NET::ORACLE->Couldn't execute any query on this server!"; - $this->errno = 40010; - } - } - else { - $this->error = "Oracle connection refused!"; - $this->errstr = "NET::ORACLE->The connection was refused"; - $this->errno = 40001; - } - break; - - case 'informix': - break; - - case 'sqlite': - break; - } - } - else { - throw new Exception("CLASS::NET::ERROR: No connections param."); - } - return $stat; - } - - /** - * This function gets DB-s version - * @param string $driver - * @return void - */ - function getDbServerVersion($driver) - { - if(!isset($this->ip)) - $this->ip = getenv('HTTP_CLIENT_IP'); - - if(isset($this->ip) && isset($this->db_user) && isset($this->db_passwd)) { - try{ - if(!isset($this->db_sourcename)) - $this->db_sourcename = DB_NAME; - $value = 'none'; - $sDataBase = 'database_' . strtolower(DB_ADAPTER); - if(G::LoadSystemExist($sDataBase)){ - G::LoadSystem($sDataBase); - $oDataBase = new database(); - $value = $oDataBase->getServerVersion($driver, $this->ip, $this->db_port, $this->db_user, $this->db_passwd, $this->db_sourcename); + $aHost = explode( "\\", $pHost ); + if (count( $aHost ) > 1) { + $ipHost = $aHost[0]; + $this->db_instance = $aHost[1]; + } else { + $ipHost = $pHost; + } + if ($this->is_ipaddress( $ipHost )) { + $this->ip = $ipHost; + if (! $this->hostname = @gethostbyaddr( $ipHost )) { + $this->errno = 2000; + $this->errstr = "NET::Host down"; + $this->error = "Destination Host Unreachable"; + } + } else { + $ip = @gethostbyname( $ipHost ); + $long = ip2long( $ip ); + if ($long == - 1 || $long === FALSE) { + $this->errno = 2000; + $this->errstr = "NET::Host down"; + $this->error = "Destination Host Unreachable"; + } else { + $this->ip = @gethostbyname( $ipHost ); + $this->hostname = $pHost; + } } - return $value; - } - catch (Exception $e){ - throw new Exception($e->getMessage()); - } } - else{ - throw new Exception('NET::Error->No params for Data Base Server!'); - } - } - - /** - * This function reurns DB name - * @param string $pAdapter - * @return void - */ - function dbName($pAdapter) - { - switch($pAdapter) + + /** + * This function resolves IP from Hostname returns hostname on failure + * + * @param string $pPort + * @return true + */ + function scannPort ($pPort) { - case 'mysql': return 'MySql'; break; - case 'pgsql': return 'PostgreSQL'; break; - case 'mssql': return 'Microsoft SQL Server'; break; - case 'oracle': return 'Oracle'; break; - case 'informix': return 'Informix'; break; - case 'sqlite': return 'SQLite'; break; + define( 'TIMEOUT', 5 ); + $hostip = @gethostbyname( $host ); // resloves IP from Hostname returns hostname on failure + // attempt to connect + if (@fsockopen( $this->ip, $pPort, $this->errno, $this->errstr, TIMEOUT )) { + return true; + @fclose( $x ); //close connection (i dont know if this is needed or not). + } else { + $this->errno = 9999; + $this->errstr = "NET::Port Host Unreachable"; + $this->error = "Destination Port Unreachable"; + return false; + } } - } - - /** - * If there is an error then it shows - * @param string $pAdapter - * @return void - */ - function showMsg() - { - if ($this->errno != 0) { - $msg = " + + /** + * This function checks if it is a ip address + * + * @param string $pHost + * @return true + */ + function is_ipaddress ($pHost) + { + $key = true; + #verifing if is a ip address + $tmp = explode( ".", $pHost ); + #if have a ip address format + if (count( $tmp ) == 4) { + #if a correct ip address + for ($i = 0; $i < count( $tmp ); $i ++) { + if (! is_int( $tmp[$i] )) { + $key = false; + break; + } + } + } else { + $key = false; + } + return $key; + } + + /** + * This function executes pin -w time IP + * + * @param string $pHost + * @return true + */ + function ping ($pTTL = 3000) + { + $cmd = "ping -w $pTTL $this->ip"; + $output = exec( $cmd, $a, $a1 ); + $this->errstr = ""; + for ($i = 0; $i < count( $a ); $i ++) + $this->errstr += $a[$i]; + $this->errno = $a1; + } + + /** + * This function logins in db + * + * @param string $pUser + * @param string $pPasswd + * @return void + */ + function loginDbServer ($pUser, $pPasswd) + { + $this->db_user = $pUser; + $this->db_passwd = $pPasswd; + } + + /** + * This function sets db + * + * @param string $pDb + * @param string $pPort + * @return void + */ + function setDataBase ($pDb, $pPort = '') + { + $this->db_sourcename = $pDb; + $this->db_port = $pPort; + } + + /** + * This function tries to connect to server + * + * @param string $pDbDriver + * @return void + */ + function tryConnectServer ($pDbDriver) + { + if ($this->errno != 0) { + return 0; + } + $stat = new Stat(); + + if (isset( $this->db_user ) && (isset( $this->db_passwd ) || ('' == $this->db_passwd)) && isset( $this->db_sourcename )) { + switch ($pDbDriver) { + case 'mysql': + if ($this->db_passwd == '') { + $link = @mysql_connect( $this->ip . (($this->db_port != '') && ($this->db_port != 0) ? ':' . $this->db_port : ''), $this->db_user ); + } else { + $link = @mysql_connect( $this->ip . (($this->db_port != '') && ($this->db_port != 0) ? ':' . $this->db_port : ''), $this->db_user, $this->db_passwd ); + } + if ($link) { + if (@mysql_ping( $link )) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "Lost MySql Connection"; + $this->errstr = "NET::MYSQL->Lost Connection"; + $this->errno = 10010; + } + } else { + $this->error = "MySql connection refused!"; + $this->errstr = "NET::MYSQL->The connection was refused"; + $this->errno = 10001; + } + break; + + case 'pgsql': + $this->db_port = ($this->db_port == "") ? "5432" : $this->db_port; + $link = @pg_connect( "host='$this->ip' port='$this->db_port' user='$this->db_user' password='$this->db_passwd' dbname='$this->db_sourcename'" ); + if ($link) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "PostgreSql connection refused!"; + $this->errstr = "NET::POSTGRES->The connection was refused"; + $this->errno = 20001; + } + break; + + case 'mssql': + if ($this->db_instance != "") { + $str_port = ""; + $link = @mssql_connect( $this->ip . "\\" . $this->db_instance, $this->db_user, $this->db_passwd ); + } else { + $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":" . $this->db_port; + $link = @mssql_connect( $this->ip . $str_port, $this->db_user, $this->db_passwd ); + } + + if ($link) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "MS-SQL Server connection refused"; + $this->errstr = "NET::MSSQL->The connection was refused"; + $this->errno = 30001; + } + break; + + case 'oracle': + $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "1521" : $this->db_port; + try { + $link = $conn = @oci_connect( $this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))" ); + if ($link) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "Oracle connection refused"; + $this->errstr = "NET::ORACLE->The connection was refused"; + $this->errno = 30001; + } + } catch (Exception $e) { + throw new Exception( "[erik] Couldn't connect to Oracle Server! - " . $e->getMessage() ); + } + break; + + case 'informix': + break; + case 'sqlite': + break; + } + } else { + throw new Exception( "CLASS::NET::ERROR: No connections param." ); + } + + return $stat; + } + + /** + * This function tries to open to the DB + * + * @param string $pDbDriver + * @return void + */ + function tryOpenDataBase ($pDbDriver) + { + if ($this->errno != 0) { + return 0; + } + + set_time_limit( 0 ); + $stat = new Stat(); + + if (isset( $this->db_user ) && (isset( $this->db_passwd ) || ('' == $this->db_passwd)) && isset( $this->db_sourcename )) { + switch ($pDbDriver) { + case 'mysql': + $link = @mysql_connect( $this->ip . (($this->db_port != '') && ($this->db_port != 0) ? ':' . $this->db_port : ''), $this->db_user, $this->db_passwd ); + $db = @mysql_select_db( $this->db_sourcename ); + if ($link) { + if ($db) { + $result = @mysql_query( "show tables;" ); + if ($result) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + @mysql_free_result( $result ); + } else { + $this->error = "the user $this->db_user doesn't have privileges to run queries!"; + $this->errstr = "NET::MYSQL->Test query failed"; + $this->errno = 10100; + } + } else { + $this->error = "The $this->db_sourcename data base does'n exist!"; + $this->errstr = "NET::MYSQL->Select data base failed"; + $this->errno = 10011; + } + } else { + $this->error = "MySql connection refused!"; + $this->errstr = "NET::MYSQL->The connection was refused"; + $this->errno = 10001; + } + break; + + case 'pgsql': + $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "5432" : $this->db_port; + $link = @pg_connect( "host='$this->ip' port='$this->db_port' user='$this->db_user' password='$this->db_passwd' dbname='$this->db_sourcename'" ); + if ($link) { + if (@pg_ping( $link )) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "PostgreSql Connection to $this->ip is unreachable!"; + $this->errstr = "NET::POSTGRES->Lost Connection"; + $this->errno = 20010; + } + } else { + $this->error = "PostgrSql connection refused"; + $this->errstr = "NET::POSTGRES->The connection was refused"; + $this->errno = 20001; + } + break; + + case 'mssql': + // $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":".$this->db_port; + // $link = @mssql_connect($this->ip . $str_port, $this->db_user, $this->db_passwd); + if ($this->db_instance != "") { + $str_port = ""; + $link = @mssql_connect( $this->ip . "\\" . $this->db_instance, $this->db_user, $this->db_passwd ); + } else { + $str_port = (($this->db_port == "") || ($this->db_port == 0) || ($this->db_port == 1433)) ? "" : ":" . $this->db_port; + $link = @mssql_connect( $this->ip . $str_port, $this->db_user, $this->db_passwd ); + } + if ($link) { + $db = @mssql_select_db( $this->db_sourcename, $link ); + if ($db) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + } else { + $this->error = "The $this->db_sourcename data base does'n exist!"; + $this->errstr = "NET::MSSQL->Select data base failed"; + $this->errno = 30010; + } + } else { + $this->error = "MS-SQL Server connection refused!"; + $this->errstr = "NET::MSSQL->The connection was refused"; + $this->errno = 30001; + } + break; + + case 'oracle': + $this->db_port = (($this->db_port == "") || ($this->db_port == 0)) ? "1521" : $this->db_port; + $link = @oci_connect( $this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))" ); + if ($link) { + $stid = @oci_parse( $link, 'select AUTHENTICATION_TYPE from v$session_connect_info' ); + $result = @oci_execute( $stid, OCI_DEFAULT ); + if ($result) { + $stat->status = 'SUCCESS'; + $this->errstr = ""; + $this->errno = 0; + @oci_close( $link ); + } else { + $this->error = "the user $this->db_user doesn't have privileges to run queries!"; + $this->errstr = "NET::ORACLE->Couldn't execute any query on this server!"; + $this->errno = 40010; + } + } else { + $this->error = "Oracle connection refused!"; + $this->errstr = "NET::ORACLE->The connection was refused"; + $this->errno = 40001; + } + break; + + case 'informix': + break; + + case 'sqlite': + break; + } + } else { + throw new Exception( "CLASS::NET::ERROR: No connections param." ); + } + return $stat; + } + + /** + * This function gets DB-s version + * + * @param string $driver + * @return void + */ + function getDbServerVersion ($driver) + { + if (! isset( $this->ip )) + $this->ip = getenv( 'HTTP_CLIENT_IP' ); + + if (isset( $this->ip ) && isset( $this->db_user ) && isset( $this->db_passwd )) { + try { + if (! isset( $this->db_sourcename )) + $this->db_sourcename = DB_NAME; + $value = 'none'; + $sDataBase = 'database_' . strtolower( DB_ADAPTER ); + if (G::LoadSystemExist( $sDataBase )) { + G::LoadSystem( $sDataBase ); + $oDataBase = new database(); + $value = $oDataBase->getServerVersion( $driver, $this->ip, $this->db_port, $this->db_user, $this->db_passwd, $this->db_sourcename ); + } + return $value; + } catch (Exception $e) { + throw new Exception( $e->getMessage() ); + } + } else { + throw new Exception( 'NET::Error->No params for Data Base Server!' ); + } + } + + /** + * This function reurns DB name + * + * @param string $pAdapter + * @return void + */ + function dbName ($pAdapter) + { + switch ($pAdapter) { + case 'mysql': + return 'MySql'; + break; + case 'pgsql': + return 'PostgreSQL'; + break; + case 'mssql': + return 'Microsoft SQL Server'; + break; + case 'oracle': + return 'Oracle'; + break; + case 'informix': + return 'Informix'; + break; + case 'sqlite': + return 'SQLite'; + break; + } + } + + /** + * If there is an error then it shows + * + * @param string $pAdapter + * @return void + */ + function showMsg () + { + if ($this->errno != 0) { + $msg = "
Class NET
@@ -489,41 +487,44 @@ class NET
"; - print ($msg); + print ($msg) ; + } } - } - - /** - * This function gets an error - * param - * @return string - */ - function getErrno() - { - return $this->errno; - } - - /** - * This function gets an error message - * param - * @return string - */ - function getErrmsg() - { - return $this->errstr; - } - } + /** + * This function gets an error + * param + * + * @return string + */ + function getErrno () + { + return $this->errno; + } - /** + /** + * This function gets an error message + * param + * + * @return string + */ + function getErrmsg () + { + return $this->errstr; + } + +} + +/** + * * @package workflow.engine.classes */ - class Stat - { +class Stat +{ public $stutus; - - function __construct() + + function __construct () { - $this->status = false; + $this->status = false; } - } +} diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index cf5d39cf7..fc1f4d166 100755 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ - /** + * * @package workflow.engine.classes */ -class pluginDetail { - var $sNamespace; - var $sClassName; - var $sFriendlyName = null; - var $sDescription = null; - var $sSetupPage = null; - var $sFilename; - var $sPluginFolder = ''; - var $sCompanyLogo = ''; - var $iVersion = 0; - var $enabled = false; - var $aWorkspaces = null; - var $bPrivate = false; +class pluginDetail +{ + var $sNamespace; + var $sClassName; + var $sFriendlyName = null; + var $sDescription = null; + var $sSetupPage = null; + var $sFilename; + var $sPluginFolder = ''; + var $sCompanyLogo = ''; + var $iVersion = 0; + var $enabled = false; + var $aWorkspaces = null; + var $bPrivate = false; - /** - * This function is the constructor of the pluginDetail class - * @param string $sNamespace - * @param string $sClassName - * @param string $sFilename - * @param string $sFriendlyName - * @param string $sPluginFolder - * @param string $sDescription - * @param string $sSetupPage - * @param integer $iVersion - * @return void - */ - function __construct( $sNamespace, $sClassName, $sFilename, $sFriendlyName = '', $sPluginFolder ='', $sDescription ='', $sSetupPage ='', $iVersion = 0) { - $this->sNamespace = $sNamespace; - $this->sClassName = $sClassName; - $this->sFriendlyName = $sFriendlyName; - $this->sDescription = $sDescription; - $this->sSetupPage = $sSetupPage; - $this->iVersion = $iVersion; - $this->sFilename = $sFilename; - if ( $sPluginFolder == '') - $this->sPluginFolder = $sNamespace; - else - $this->sPluginFolder = $sPluginFolder ; - } + /** + * This function is the constructor of the pluginDetail class + * + * @param string $sNamespace + * @param string $sClassName + * @param string $sFilename + * @param string $sFriendlyName + * @param string $sPluginFolder + * @param string $sDescription + * @param string $sSetupPage + * @param integer $iVersion + * @return void + */ + function __construct ($sNamespace, $sClassName, $sFilename, $sFriendlyName = '', $sPluginFolder = '', $sDescription = '', $sSetupPage = '', $iVersion = 0) + { + $this->sNamespace = $sNamespace; + $this->sClassName = $sClassName; + $this->sFriendlyName = $sFriendlyName; + $this->sDescription = $sDescription; + $this->sSetupPage = $sSetupPage; + $this->iVersion = $iVersion; + $this->sFilename = $sFilename; + if ($sPluginFolder == '') + $this->sPluginFolder = $sNamespace; + else + $this->sPluginFolder = $sPluginFolder; + } } /** + * * @package workflow.engine.classes */ -class PMPluginRegistry { - private $_aPluginDetails = array(); - private $_aPlugins = array(); - private $_aMenus = array(); - private $_aFolders = array(); - private $_aTriggers = array(); - private $_aDashlets = array(); - private $_aReports = array(); - private $_aPmFunctions = array(); - private $_aRedirectLogin = array(); - private $_aSteps = array(); - private $_aCSSStyleSheets = array(); - private $_aToolbarFiles = array(); - private $_aCaseSchedulerPlugin = array(); - private $_aTaskExtendedProperties = array(); - private $_aDashboardPages = array(); +class PMPluginRegistry +{ + private $_aPluginDetails = array (); + private $_aPlugins = array (); + private $_aMenus = array (); + private $_aFolders = array (); + private $_aTriggers = array (); + private $_aDashlets = array (); + private $_aReports = array (); + private $_aPmFunctions = array (); + private $_aRedirectLogin = array (); + private $_aSteps = array (); + private $_aCSSStyleSheets = array (); + private $_aToolbarFiles = array (); + private $_aCaseSchedulerPlugin = array (); + private $_aTaskExtendedProperties = array (); + private $_aDashboardPages = array (); - /** - * Registry a plugin javascript to include with js core at same runtime - */ - private $_aJavascripts = array(); + /** + * Registry a plugin javascript to include with js core at same runtime + */ + private $_aJavascripts = array (); - /** - * Contains all rest services classes from plugins - */ - private $_restServices = array(); + /** + * Contains all rest services classes from plugins + */ + private $_restServices = array (); - static private $instance = NULL; + private static $instance = NULL; - /** - * This function is the constructor of the PMPluginRegistry class - * param - * @return void - */ - public function __construct() {} - - /** - * This function is instancing to this class - * param - * @return object - */ - function &getSingleton() { - if (self::$instance == NULL) { - self::$instance = new PMPluginRegistry (); - } - return self::$instance; - } - - /** - * This function generates a storable representation of a value - * param - * @return void - */ - function serializeInstance() { - return serialize ( self::$instance); - } - - /** - * This function takes a single serialized variable and converts it back a code - * @param string $serialized - * @return void - */ - function unSerializeInstance( $serialized ) { - if (self::$instance == NULL) { - self::$instance = new PMPluginRegistry (); + /** + * This function is the constructor of the PMPluginRegistry class + * param + * + * @return void + */ + public function __construct () + { } - $instance = unserialize ( $serialized ); - self::$instance = $instance; - } - - /** - * Save the current instance to the plugin singleton - * - */ - function save() { - file_put_contents ( PATH_DATA_SITE . 'plugin.singleton', $this->serializeInstance() ); - } - - /** - * Register the plugin in the singleton - * - * @param unknown_type $sClassName - * @param unknown_type $sNamespace - * @param unknown_type $sFilename - */ - function registerPlugin( $sNamespace, $sFilename = null) - { - $sClassName = $sNamespace . 'plugin'; - if ( isset( $this->_aPluginDetails[$sNamespace] ) ) - return; - //require_once ( $sFilename ); - $plugin = new $sClassName ($sNamespace, $sFilename); - $detail = new pluginDetail ( - $sNamespace, - $sClassName, - $sFilename, - $plugin->sFriendlyName, - $plugin->sPluginFolder, - $plugin->sDescription, - $plugin->sSetupPage, - $plugin->iVersion ); - if ( isset ($plugin->aWorkspaces) ) - $detail->aWorkspaces = $plugin->aWorkspaces; - if ( isset ($plugin->bPrivate) ) - $detail->bPrivate = $plugin->bPrivate; - //if ( isset( $this->_aPluginDetails[$sNamespace] ) ){ - // $detail->enabled=$this->_aPluginDetails[$sNamespace]->enabled; - //} - $this->_aPluginDetails[$sNamespace] = $detail; - } - - /** - * get the plugin details, by filename - * - * @param unknown_type $sFilename - */ - function getPluginDetails( $sFilename ) { - foreach ( $this->_aPluginDetails as $key => $row ) { - if ( $sFilename == baseName ( $row->sFilename ) ) - return $row; - } - return NULL; - } - - /** - * Enable the plugin in the singleton - * - * @param unknown_type $sNamespace - */ - function enablePlugin($sNamespace ) { - foreach ( $this->_aPluginDetails as $namespace=>$detail ) { - if ( $sNamespace == $namespace ) { - $this->registerFolder($sNamespace, $sNamespace, $detail->sPluginFolder ); //register the default directory, later we can have more - $this->_aPluginDetails[$sNamespace]->enabled = true; - $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); - $this->_aPlugins[$detail->sNamespace] = $oPlugin; - if (method_exists($oPlugin, 'enable')) { - $oPlugin->enable(); + /** + * This function is instancing to this class + * param + * + * @return object + */ + function &getSingleton () + { + if (self::$instance == NULL) { + self::$instance = new PMPluginRegistry(); } - return true; - } + return self::$instance; } - throw new Exception("Unable to enable plugin '$sNamespace' (plugin not found)"); - } - /** - * disable the plugin in the singleton - * - * @param unknown_type $sNamespace - */ - function disablePlugin($sNamespace, $eventPlugin = 1) - { - $sw = false; + /** + * This function generates a storable representation of a value + * param + * + * @return void + */ + function serializeInstance () + { + return serialize( self::$instance ); + } - foreach ($this->_aPluginDetails as $namespace => $detail) { - if ($namespace == $sNamespace) { - unset($this->_aPluginDetails[$sNamespace]); - - if ($eventPlugin == 1) { - $plugin = new $detail->sClassName($detail->sNamespace, $detail->sFilename); - $this->_aPlugins[$detail->sNamespace] = $plugin; - if (method_exists($plugin, "disable")) { - $plugin->disable(); - } + /** + * This function takes a single serialized variable and converts it back a code + * + * @param string $serialized + * @return void + */ + function unSerializeInstance ($serialized) + { + if (self::$instance == NULL) { + self::$instance = new PMPluginRegistry(); } - $sw = true; - } + $instance = unserialize( $serialized ); + self::$instance = $instance; } - if (!$sw) { - throw new Exception("Unable to disable plugin '$sNamespace' (plugin not found)"); + /** + * Save the current instance to the plugin singleton + */ + function save () + { + file_put_contents( PATH_DATA_SITE . 'plugin.singleton', $this->serializeInstance() ); } - foreach ( $this->_aMenus as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aMenus[ $key ] ); - } - foreach ( $this->_aFolders as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aFolders[ $key ] ); - } - foreach ( $this->_aTriggers as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aTriggers[ $key ] ); - } - foreach ($this->_aDashlets as $key => $detail) { - if ($detail == $sNamespace) { - unset($this->_aDashlets[$key]); - } - } - foreach ( $this->_aReports as $key=>$detail ) { - if ( $detail == $sNamespace ) - unset ( $this->_aReports[ $key ] ); - } - foreach ( $this->_aPmFunctions as $key=>$detail ) { - if ( $detail == $sNamespace ) - unset ( $this->_aPmFunctions[ $key ] ); - } - foreach ( $this->_aRedirectLogin as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aRedirectLogin[ $key ] ); - } - foreach ( $this->_aSteps as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aSteps[ $key ] ); - } - foreach ( $this->_aToolbarFiles as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aToolbarFiles[ $key ] ); - } - foreach ( $this->_aCSSStyleSheets as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aCSSStyleSheets[ $key ] ); - } - foreach ( $this->_aCaseSchedulerPlugin as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aCaseSchedulerPlugin[ $key ] ); - } - foreach ( $this->_aTaskExtendedProperties as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aTaskExtendedProperties[ $key ] ); - } - foreach ( $this->_aDashboardPages as $key=>$detail ) { - if ( $detail->sNamespace == $sNamespace ) - unset ( $this->_aDashboardPages[ $key ] ); + /** + * Register the plugin in the singleton + * + * @param unknown_type $sClassName + * @param unknown_type $sNamespace + * @param unknown_type $sFilename + */ + function registerPlugin ($sNamespace, $sFilename = null) + { + $sClassName = $sNamespace . 'plugin'; + if (isset( $this->_aPluginDetails[$sNamespace] )) + return; + //require_once ( $sFilename ); + $plugin = new $sClassName( $sNamespace, $sFilename ); + $detail = new pluginDetail( $sNamespace, $sClassName, $sFilename, $plugin->sFriendlyName, $plugin->sPluginFolder, $plugin->sDescription, $plugin->sSetupPage, $plugin->iVersion ); + if (isset( $plugin->aWorkspaces )) + $detail->aWorkspaces = $plugin->aWorkspaces; + if (isset( $plugin->bPrivate )) + $detail->bPrivate = $plugin->bPrivate; + //if ( isset( $this->_aPluginDetails[$sNamespace] ) ){ + // $detail->enabled=$this->_aPluginDetails[$sNamespace]->enabled; + //} + $this->_aPluginDetails[$sNamespace] = $detail; } - //unregistering javascripts from this plugin - $this->unregisterJavascripts($sNamespace); - //unregistering rest services from this plugin - $this->unregisterRestService($sNamespace); - } - - /** - * get status plugin in the singleton - * - * @param unknown_type $sNamespace - */ - function getStatusPlugin($sNamespace ) { - foreach ( $this->_aPluginDetails as $namespace=>$detail ) { - if ( $sNamespace == $namespace ) - if ( $this->_aPluginDetails[$sNamespace]->enabled ) - return 'enabled'; - else - return 'disabled'; - } - return 0; - } - - /** - * Install a plugin archive. If pluginName is specified, the archive will - * only be installed if it contains this plugin. - * - * @return bool true if enabled, false otherwise - */ - function installPluginArchive($filename, $pluginName) { - G::LoadThirdParty("pear/Archive", "Tar"); - $tar = new Archive_Tar($filename); - - $files = $tar->listContent(); - - $plugins = array(); - $namePlugin = array(); - foreach ($files as $f) { - //if (preg_match("/^([\w\.]*).ini$/", $f["filename"], $matches)) { - if (preg_match("/^(.*pluginConfig)\.ini$/", $f["filename"], $matches)) { - $plugins[] = $matches[1]; - } - if (preg_match("/^.*($pluginName)\.php$/", $f["filename"], $matches)) { - $namePlugin[] = $matches[1]; - } + /** + * get the plugin details, by filename + * + * @param unknown_type $sFilename + */ + function getPluginDetails ($sFilename) + { + foreach ($this->_aPluginDetails as $key => $row) { + if ($sFilename == baseName( $row->sFilename )) + return $row; + } + return NULL; } - if (count($plugins) > 1) { - throw new Exception("Multiple plugins in one archive are not supported currently"); + /** + * Enable the plugin in the singleton + * + * @param unknown_type $sNamespace + */ + function enablePlugin ($sNamespace) + { + foreach ($this->_aPluginDetails as $namespace => $detail) { + if ($sNamespace == $namespace) { + $this->registerFolder( $sNamespace, $sNamespace, $detail->sPluginFolder ); //register the default directory, later we can have more + $this->_aPluginDetails[$sNamespace]->enabled = true; + $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $this->_aPlugins[$detail->sNamespace] = $oPlugin; + if (method_exists( $oPlugin, 'enable' )) { + $oPlugin->enable(); + } + return true; + } + } + throw new Exception( "Unable to enable plugin '$sNamespace' (plugin not found)" ); } - //if (isset($pluginName) && !in_array($pluginName, $plugins)) { - if (isset($pluginName) && !in_array($pluginName, $namePlugin)) { - throw new Exception("Plugin '$pluginName' not found in archive"); + /** + * disable the plugin in the singleton + * + * @param unknown_type $sNamespace + */ + function disablePlugin ($sNamespace, $eventPlugin = 1) + { + $sw = false; + + foreach ($this->_aPluginDetails as $namespace => $detail) { + if ($namespace == $sNamespace) { + unset( $this->_aPluginDetails[$sNamespace] ); + + if ($eventPlugin == 1) { + $plugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $this->_aPlugins[$detail->sNamespace] = $plugin; + if (method_exists( $plugin, "disable" )) { + $plugin->disable(); + } + } + + $sw = true; + } + } + + if (! $sw) { + throw new Exception( "Unable to disable plugin '$sNamespace' (plugin not found)" ); + } + + foreach ($this->_aMenus as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aMenus[$key] ); + } + foreach ($this->_aFolders as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aFolders[$key] ); + } + foreach ($this->_aTriggers as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aTriggers[$key] ); + } + foreach ($this->_aDashlets as $key => $detail) { + if ($detail == $sNamespace) { + unset( $this->_aDashlets[$key] ); + } + } + foreach ($this->_aReports as $key => $detail) { + if ($detail == $sNamespace) + unset( $this->_aReports[$key] ); + } + foreach ($this->_aPmFunctions as $key => $detail) { + if ($detail == $sNamespace) + unset( $this->_aPmFunctions[$key] ); + } + foreach ($this->_aRedirectLogin as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aRedirectLogin[$key] ); + } + foreach ($this->_aSteps as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aSteps[$key] ); + } + foreach ($this->_aToolbarFiles as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aToolbarFiles[$key] ); + } + foreach ($this->_aCSSStyleSheets as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aCSSStyleSheets[$key] ); + } + foreach ($this->_aCaseSchedulerPlugin as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aCaseSchedulerPlugin[$key] ); + } + foreach ($this->_aTaskExtendedProperties as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aTaskExtendedProperties[$key] ); + } + foreach ($this->_aDashboardPages as $key => $detail) { + if ($detail->sNamespace == $sNamespace) + unset( $this->_aDashboardPages[$key] ); + } + + //unregistering javascripts from this plugin + $this->unregisterJavascripts( $sNamespace ); + //unregistering rest services from this plugin + $this->unregisterRestService( $sNamespace ); } - //$pluginName = $plugins[0]; - $pluginFile = "$pluginName.php"; + /** + * get status plugin in the singleton + * + * @param unknown_type $sNamespace + */ + function getStatusPlugin ($sNamespace) + { + foreach ($this->_aPluginDetails as $namespace => $detail) { + if ($sNamespace == $namespace) + if ($this->_aPluginDetails[$sNamespace]->enabled) + return 'enabled'; + else + return 'disabled'; + } + return 0; + } - /* + /** + * Install a plugin archive. + * If pluginName is specified, the archive will + * only be installed if it contains this plugin. + * + * @return bool true if enabled, false otherwise + */ + function installPluginArchive ($filename, $pluginName) + { + G::LoadThirdParty( "pear/Archive", "Tar" ); + $tar = new Archive_Tar( $filename ); + + $files = $tar->listContent(); + + $plugins = array (); + $namePlugin = array (); + foreach ($files as $f) { + //if (preg_match("/^([\w\.]*).ini$/", $f["filename"], $matches)) { + if (preg_match( "/^(.*pluginConfig)\.ini$/", $f["filename"], $matches )) { + $plugins[] = $matches[1]; + } + if (preg_match( "/^.*($pluginName)\.php$/", $f["filename"], $matches )) { + $namePlugin[] = $matches[1]; + } + } + + if (count( $plugins ) > 1) { + throw new Exception( "Multiple plugins in one archive are not supported currently" ); + } + + //if (isset($pluginName) && !in_array($pluginName, $plugins)) { + if (isset( $pluginName ) && ! in_array( $pluginName, $namePlugin )) { + throw new Exception( "Plugin '$pluginName' not found in archive" ); + } + + //$pluginName = $plugins[0]; + $pluginFile = "$pluginName.php"; + + /* $oldPluginStatus = $this->getStatusPlugin($pluginFile); if ($pluginStatus != 0) { @@ -372,10 +385,11 @@ class PMPluginRegistry { } */ - //$pluginIni = $tar->extractInString("$pluginName.ini"); - //$pluginConfig = parse_ini_string($pluginIni); + //$pluginIni = $tar->extractInString("$pluginName.ini"); + //$pluginConfig = parse_ini_string($pluginIni); - /* + + /* if (!empty($oClass->aDependences)) { foreach ($oClass->aDependences as $aDependence) { if (file_exists(PATH_PLUGINS . $aDependence['sClassName'] . '.php')) { @@ -395,578 +409,606 @@ class PMPluginRegistry { } */ - $res = $tar->extract(PATH_PLUGINS); + $res = $tar->extract( PATH_PLUGINS ); - if (!file_exists(PATH_PLUGINS . $pluginFile)) { - throw (new Exception("File \"$pluginFile\" doesn't exist")); - } - - require_once (PATH_PLUGINS . $pluginFile); - $details = $this->getPluginDetails($pluginFile); - - $this->installPlugin($details->sNamespace); - $this->setupPlugins(); - - $this->enablePlugin($details->sNamespace); - $this->save(); - } - - function uninstallPlugin($sNamespace) - { - $pluginFile = $sNamespace . ".php"; - - if (!file_exists(PATH_PLUGINS . $pluginFile)) { - throw (new Exception("File \"$pluginFile\" doesn't exist")); - } - - /////// - require_once (PATH_PLUGINS . $pluginFile); - - foreach ($this->_aPluginDetails as $namespace => $detail) { - if ($namespace == $sNamespace) { - $this->enablePlugin($detail->sNamespace); - $this->disablePlugin($detail->sNamespace); - - /////// - $plugin = new $detail->sClassName($detail->sNamespace, $detail->sFilename); - $this->_aPlugins[$detail->sNamespace] = $plugin; - - if (method_exists($plugin, "uninstall")) { - $plugin->uninstall(); + if (! file_exists( PATH_PLUGINS . $pluginFile )) { + throw (new Exception( "File \"$pluginFile\" doesn't exist" )); } - /////// + require_once (PATH_PLUGINS . $pluginFile); + $details = $this->getPluginDetails( $pluginFile ); + + $this->installPlugin( $details->sNamespace ); + $this->setupPlugins(); + + $this->enablePlugin( $details->sNamespace ); $this->save(); + } - /////// - $pluginDir = PATH_PLUGINS . $detail->sPluginFolder; + function uninstallPlugin ($sNamespace) + { + $pluginFile = $sNamespace . ".php"; - if (isset($detail->sFilename) && !empty($detail->sFilename) && file_exists($detail->sFilename)) { - unlink($detail->sFilename); - } - - if (isset($detail->sPluginFolder) && !empty($detail->sPluginFolder) && file_exists($pluginDir)) { - G::rm_dir($pluginDir); + if (! file_exists( PATH_PLUGINS . $pluginFile )) { + throw (new Exception( "File \"$pluginFile\" doesn't exist" )); } /////// - $this->uninstallPluginWorkspaces(array($sNamespace)); + require_once (PATH_PLUGINS . $pluginFile); - /////// - break; - } + foreach ($this->_aPluginDetails as $namespace => $detail) { + if ($namespace == $sNamespace) { + $this->enablePlugin( $detail->sNamespace ); + $this->disablePlugin( $detail->sNamespace ); + + /////// + $plugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $this->_aPlugins[$detail->sNamespace] = $plugin; + + if (method_exists( $plugin, "uninstall" )) { + $plugin->uninstall(); + } + + /////// + $this->save(); + + /////// + $pluginDir = PATH_PLUGINS . $detail->sPluginFolder; + + if (isset( $detail->sFilename ) && ! empty( $detail->sFilename ) && file_exists( $detail->sFilename )) { + unlink( $detail->sFilename ); + } + + if (isset( $detail->sPluginFolder ) && ! empty( $detail->sPluginFolder ) && file_exists( $pluginDir )) { + G::rm_dir( $pluginDir ); + } + + /////// + $this->uninstallPluginWorkspaces( array ($sNamespace + ) ); + + /////// + break; + } + } } - } - function uninstallPluginWorkspaces($arrayPlugin) - { - G::LoadClass("system"); - G::LoadClass("wsTools"); + function uninstallPluginWorkspaces ($arrayPlugin) + { + G::LoadClass( "system" ); + G::LoadClass( "wsTools" ); - $workspace = System::listWorkspaces(); + $workspace = System::listWorkspaces(); - foreach ($workspace as $indexWS => $ws) { - $wsPathDataSite = PATH_DATA . "sites" . PATH_SEP . $ws->name . PATH_SEP; + foreach ($workspace as $indexWS => $ws) { + $wsPathDataSite = PATH_DATA . "sites" . PATH_SEP . $ws->name . PATH_SEP; - if (file_exists($wsPathDataSite . "plugin.singleton")) { - //G::LoadClass("plugin"); - //Here we are loading all plug-ins registered - //The singleton has a list of enabled plug-ins + if (file_exists( $wsPathDataSite . "plugin.singleton" )) { + //G::LoadClass("plugin"); + //Here we are loading all plug-ins registered + //The singleton has a list of enabled plug-ins - $pluginRegistry = &PMPluginRegistry::getSingleton(); - $pluginRegistry->unSerializeInstance(file_get_contents($wsPathDataSite . "plugin.singleton")); - /////// - $attributes = $pluginRegistry->getAttributes(); + $pluginRegistry = &PMPluginRegistry::getSingleton(); + $pluginRegistry->unSerializeInstance( file_get_contents( $wsPathDataSite . "plugin.singleton" ) ); - foreach ($arrayPlugin as $index => $value) { - if (isset($attributes["_aPluginDetails"][$value])) { - $pluginRegistry->disablePlugin($value, 0); - } + /////// + $attributes = $pluginRegistry->getAttributes(); + + foreach ($arrayPlugin as $index => $value) { + if (isset( $attributes["_aPluginDetails"][$value] )) { + $pluginRegistry->disablePlugin( $value, 0 ); + } + } + + /////// + file_put_contents( $wsPathDataSite . "plugin.singleton", $pluginRegistry->serializeInstance() ); + } + } + } + + /** + * install the plugin + * + * @param unknown_type $sNamespace + */ + function installPlugin ($sNamespace) + { + try { + foreach ($this->_aPluginDetails as $namespace => $detail) { + if ($sNamespace == $namespace) { + $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $this->_aPlugins[$detail->sNamespace] = $oPlugin; + $oPlugin->install(); + } + } + } catch (Exception $e) { + global $G_PUBLISH; + $aMessage['MESSAGE'] = $e->getMessage(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); + G::RenderPage( 'publish' ); + die(); } - /////// - file_put_contents($wsPathDataSite . "plugin.singleton", $pluginRegistry->serializeInstance()); - } - } - } - - /** - * install the plugin - * - * @param unknown_type $sNamespace - */ - function installPlugin($sNamespace ) { - try { - foreach ( $this->_aPluginDetails as $namespace=>$detail ) { - if ( $sNamespace == $namespace ) { - $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); - $this->_aPlugins[$detail->sNamespace] = $oPlugin; - $oPlugin->install(); - } - } - } - catch ( Exception $e ) { - global $G_PUBLISH; - $aMessage['MESSAGE'] = $e->getMessage(); - $G_PUBLISH = new Publisher; - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); - G::RenderPage( 'publish' ); - die; } - } - - /** - * Register a menu in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sMenuId - * @param unknown_type $sFilename - */ - function registerMenu($sNamespace, $sMenuId, $sFilename ) { - $found = false; - foreach ( $this->_aMenus as $row=>$detail ) { - if ( $sMenuId == $detail->sMenuId && $sNamespace == $detail->sNamespace ) - $found = true; - } - if ( !$found ) { - $menuDetail = new menuDetail ($sNamespace, $sMenuId, $sFilename); - $this->_aMenus[] = $menuDetail; - } - } - - /** - * Register a dashlet class in the singleton - * - * @param unknown_type $className - */ - function registerDashlets($namespace) { - $found = false; - foreach ($this->_aDashlets as $row => $detail) { - if ($namespace == $detail) { - $found = true; - } - } - if (!$found) { - $this->_aDashlets[] = $namespace; - } - } - - /** - * Register a stylesheet in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sPage - */ - function registerCss($sNamespace, $sCssFile ) { - $found = false; - foreach ( $this->_aCSSStyleSheets as $row=>$detail ) { - if ( $sCssFile == $detail->sCssFile && $sNamespace == $detail->sNamespace ){ - $detail->sCssFile=$sCssFile; - $found = true; - } - } - if ( !$found ) { - $cssFile = new cssFile ($sNamespace, $sCssFile); - $this->_aCSSStyleSheets[] = $cssFile; - } - } - - /** - * return all css - * - * @return array - */ - function getRegisteredCss() { - return $this->_aCSSStyleSheets; - } - - /** - * Register a plugin javascript to run with core js script at same runtime - * - * @param string $sNamespace - * @param string $coreJsFile - * @param array/string $pluginJsFile - */ - function registerJavascript($sNamespace, $sCoreJsFile, $pluginJsFile) { - - foreach ($this->_aJavascripts as $i=>$js) { - if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { - if (is_string($pluginJsFile)) { - if (!in_array($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile)) { - $this->_aJavascripts[$i]->pluginJsFile[] = $pluginJsFile; - } - } else if (is_array($pluginJsFile)) { - $this->_aJavascripts[$i]->pluginJsFile = array_unique(array_merge($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile)); - } else { - throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.'); - } - return $this->_aJavascripts[$i]; - } - } - - $js = new StdClass(); - $js->sNamespace = $sNamespace; - $js->sCoreJsFile = $sCoreJsFile; - $js->pluginJsFile = Array(); - - if (is_string($pluginJsFile)) { - $js->pluginJsFile[] = $pluginJsFile; - } else if (is_array($pluginJsFile)){ - $js->pluginJsFile = array_merge($js->pluginJsFile, $pluginJsFile); - } else { - throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.'); - } - - $this->_aJavascripts[] = $js; - } - - /** - * return all plugin javascripts - * - * @return array - */ - function getRegisteredJavascript() { - return $this->_aJavascripts; - } - - - /** - * return all plugin javascripts given a core js file, from all namespaces or a single namespace - * @param string $sCoreJsFile - * @param string $sNamespace - * @return array - */ - function getRegisteredJavascriptBy($sCoreJsFile, $sNamespace='') { - $scripts = array(); - - if ($sNamespace == '') { - foreach ($this->_aJavascripts as $i=>$js) { - if ($sCoreJsFile == $js->sCoreJsFile) { - $scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile); - } - } - } else { - foreach ($this->_aJavascripts as $i=>$js) { - if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { - $scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile); - } - } - } - return $scripts; - } - - - /** - * unregister all javascripts from a namespace or a js core file given - * @param string $sNamespace - * @param string $sCoreJsFile - * @return array - */ - function unregisterJavascripts($sNamespace, $sCoreJsFile='') { - if ($sCoreJsFile == '') { // if $sCoreJsFile=='' unregister all js from this namespace - foreach ($this->_aJavascripts as $i=>$js) { - if ($sNamespace == $js->sNamespace) { - unset($this->_aJavascripts[$i]); - } - } - // Re-index when all js were unregistered - $this->_aJavascripts = array_values($this->_aJavascripts); - } else { - foreach ($this->_aJavascripts as $i=>$js) { - if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { - unset($this->_aJavascripts[$i]); - // Re-index for each js that was unregistered - $this->_aJavascripts = array_values($this->_aJavascripts); - } - } - } - } - - - /** - * Register a reports class in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sMenuId - * @param unknown_type $sFilename - */ - function registerReport($sNamespace ) { - $found = false; - foreach ( $this->_aReports as $row=>$detail ) { - if ( $sNamespace == $detail ) - $found = true; - } - if ( !$found ) { - $this->_aReports[] = $sNamespace; - } - } - - /** - * Register a PmFunction class in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sMenuId - * @param unknown_type $sFilename - */ - function registerPmFunction($sNamespace ) { - $found = false; - foreach ( $this->_aPmFunctions as $row=>$detail ) { - if ( $sNamespace == $detail ) - $found = true; - } - if ( !$found ) { - $this->_aPmFunctions[] = $sNamespace; - } - } - - /** - * Register a redirectLogin class in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sRole - * @param unknown_type $sPath - */ - function registerRedirectLogin($sNamespace, $sRole, $sPathMethod ) { - $found = false; - foreach ( $this->_aRedirectLogin as $row=>$detail ) { - if (( $sNamespace == $detail->sNamespace )&&( $sRole == $detail->sRoleCode )) //Filters based on Workspace and Role Code - $found = true; - } - if ( !$found ) { - $this->_aRedirectLogin[] = new redirectDetail ( $sNamespace, $sRole, $sPathMethod); - } - } - - /** - * Register a folder for methods - * - * @param unknown_type $sFolderName - */ - function registerFolder($sNamespace, $sFolderId, $sFolderName ) { - $found = false; - foreach ( $this->_aFolders as $row=>$detail ) - if ( $sFolderId == $detail->sFolderId && $sNamespace == $detail->sNamespace ) - $found = true; - - if ( !$found ) { - $this->_aFolders[] = new folderDetail ( $sNamespace, $sFolderId, $sFolderName); - } - } - - /** - * Register a step for process - * - * @param unknown_type $sFolderName - */ - function registerStep($sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage = '') { - $found = false; - foreach ( $this->_aSteps as $row=>$detail ) - if ( $sStepId == $detail->sStepId && $sNamespace == $detail->sNamespace ) - $found = true; - - if ( !$found ) { - $this->_aSteps[] = new stepDetail ( $sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage); - } - } - - /** - * return true if the $sFolderName is registered in the singleton - * - * @param unknown_type $sFolderName - */ - function isRegisteredFolder( $sFolderName ) { - foreach ( $this->_aFolders as $row => $folder ) { - if ( $sFolderName == $folder->sFolderName && is_dir ( PATH_PLUGINS . $folder->sFolderName )){ - return true; - }elseif( $sFolderName == $folder->sFolderName && is_dir ( PATH_PLUGINS .$folder->sNamespace.PATH_SEP. $folder->sFolderName )){ - return $folder->sNamespace; - } - } - return false; - } - - /** - * return all menus related to a menuId - * - * @param unknown_type $menuId - */ - function getMenus( $menuId ) { - foreach ( $this->_aMenus as $row=>$detail ) { - if ( $menuId == $detail->sMenuId && file_exists ( $detail->sFilename ) ) { - include ( $detail->sFilename ); - } - } - } - - /** - * return all dashlets classes registered - * @return array - */ - function getDashlets() { - return $this->_aDashlets; - } - - /** - * this function returns all reports registered - * @return array - */ - function getReports( ) { - return $this->_aReports; - $report = array (); - foreach ( $this->_aReports as $row=>$detail ) { - $sClassName = str_replace ( 'plugin', 'class', $this->_aPluginDetails[ $detail ]->sClassName); - $report[] = $sClassName; - } - return $report; - } - - /** - * This function returns all pmFunctions registered - * @ array - */ - function getPmFunctions( ) { - return $this->_aPmFunctions; - $pmf = array (); - foreach ( $this->_aPmFunctions as $row=>$detail ) { - $sClassName = str_replace ( 'plugin', 'class', $this->_aPluginDetails[ $detail ]->sClassName); - $pmf[] = $sClassName; - } - return $pmf; - } - - /** - * This function returns all steps registered - * - * @return string - */ - function getSteps( ) { - return $this->_aSteps; - } - - /** - * This function returns all redirect registered - * @return string - */ - function getRedirectLogins( ) { - return $this->_aRedirectLogin; - } - - /** - * execute all triggers related to a triggerId - * - * @param unknown_type $menuId - * @return object - */ - function executeTriggers( $triggerId, $oData ) - { - foreach ( $this->_aTriggers as $row=>$detail ) { - if ( $triggerId == $detail->sTriggerId ) { - - //review all folders registered for this namespace + /** + * Register a menu in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sMenuId + * @param unknown_type $sFilename + */ + function registerMenu ($sNamespace, $sMenuId, $sFilename) + { $found = false; - $classFile = ''; - - foreach ( $this->_aFolders as $row=>$folder ) { - $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; - if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { - $found = true; - $classFile = $fname; - } + foreach ($this->_aMenus as $row => $detail) { + if ($sMenuId == $detail->sMenuId && $sNamespace == $detail->sNamespace) + $found = true; } - if ( $found ) { - require_once ( $classFile ); - $sClassName = substr($this->_aPluginDetails[ $detail->sNamespace ]->sClassName,0,1) . str_replace ( 'plugin', 'class', substr($this->_aPluginDetails[ $detail->sNamespace ]->sClassName,1)); - $obj = new $sClassName( ); - $methodName = $detail->sTriggerName; - $response = $obj->{$methodName}( $oData ); - if (PEAR::isError($response) ) { - print $response->getMessage(); return; - } - return $response; + if (! $found) { + $menuDetail = new menuDetail( $sNamespace, $sMenuId, $sFilename ); + $this->_aMenus[] = $menuDetail; } - else - print "error in call method " . $detail->sTriggerName; - } } - } - /** - * verify if exists triggers related to a triggerId - * - * @param unknown_type $triggerId - */ - function existsTrigger( $triggerId) { - $found = false; - foreach ( $this->_aTriggers as $row=>$detail ) { - if ( $triggerId == $detail->sTriggerId ) { - - //review all folders registered for this namespace - foreach ( $this->_aFolders as $row=>$folder ) { - $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; - if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { - $found = true; - } + /** + * Register a dashlet class in the singleton + * + * @param unknown_type $className + */ + function registerDashlets ($namespace) + { + $found = false; + foreach ($this->_aDashlets as $row => $detail) { + if ($namespace == $detail) { + $found = true; + } } - } - } - return $found; - } - - /** - * Return info related to a triggerId - * - * @param unknown_type $triggerId - * @return object - */ - function getTriggerInfo( $triggerId) { - $found = null; - foreach ( $this->_aTriggers as $row=>$detail ) { - if ( $triggerId == $detail->sTriggerId ) { - - //review all folders registered for this namespace - foreach ( $this->_aFolders as $row=>$folder ) { - $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName .'.php'; - if ( $detail->sNamespace == $folder->sNamespace && file_exists ( $fname ) ) { - $found = $detail; - } + if (! $found) { + $this->_aDashlets[] = $namespace; } - } } - return $found; - } - /** - * Register a trigger in the Singleton - * - * @param unknown_type $sTriggerId - * @param unknown_type $sMethodFunction - * @return void - */ - function registerTrigger($sNamespace, $sTriggerId, $sTriggerName ) { - $found = false; - foreach ( $this->_aTriggers as $row=>$detail ) { - if ( $sTriggerId == $detail->sTriggerId && $sNamespace == $detail->sNamespace ) - $found = true; + /** + * Register a stylesheet in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sPage + */ + function registerCss ($sNamespace, $sCssFile) + { + $found = false; + foreach ($this->_aCSSStyleSheets as $row => $detail) { + if ($sCssFile == $detail->sCssFile && $sNamespace == $detail->sNamespace) { + $detail->sCssFile = $sCssFile; + $found = true; + } + } + if (! $found) { + $cssFile = new cssFile( $sNamespace, $sCssFile ); + $this->_aCSSStyleSheets[] = $cssFile; + } } - if ( !$found ) { - $triggerDetail = new triggerDetail ($sNamespace, $sTriggerId, $sTriggerName); - $this->_aTriggers[] = $triggerDetail; - } - } - /** - * get plugin - * - * @param unknown_type $sNamespace - * @return void - */ - function &getPlugin($sNamespace) { - if (array_key_exists($sNamespace, $this->_aPlugins)) { - return $this->_aPlugins[$sNamespace]; + /** + * return all css + * + * @return array + */ + function getRegisteredCss () + { + return $this->_aCSSStyleSheets; } - /* + + /** + * Register a plugin javascript to run with core js script at same runtime + * + * @param string $sNamespace + * @param string $coreJsFile + * @param array/string $pluginJsFile + */ + function registerJavascript ($sNamespace, $sCoreJsFile, $pluginJsFile) + { + + foreach ($this->_aJavascripts as $i => $js) { + if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { + if (is_string( $pluginJsFile )) { + if (! in_array( $pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile )) { + $this->_aJavascripts[$i]->pluginJsFile[] = $pluginJsFile; + } + } else if (is_array( $pluginJsFile )) { + $this->_aJavascripts[$i]->pluginJsFile = array_unique( array_merge( $pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile ) ); + } else { + throw new Exception( 'Invalid third param, $pluginJsFile should be a string or array - ' . gettype( $pluginJsFile ) . ' given.' ); + } + return $this->_aJavascripts[$i]; + } + } + + $js = new StdClass(); + $js->sNamespace = $sNamespace; + $js->sCoreJsFile = $sCoreJsFile; + $js->pluginJsFile = Array (); + + if (is_string( $pluginJsFile )) { + $js->pluginJsFile[] = $pluginJsFile; + } else if (is_array( $pluginJsFile )) { + $js->pluginJsFile = array_merge( $js->pluginJsFile, $pluginJsFile ); + } else { + throw new Exception( 'Invalid third param, $pluginJsFile should be a string or array - ' . gettype( $pluginJsFile ) . ' given.' ); + } + + $this->_aJavascripts[] = $js; + } + + /** + * return all plugin javascripts + * + * @return array + */ + function getRegisteredJavascript () + { + return $this->_aJavascripts; + } + + /** + * return all plugin javascripts given a core js file, from all namespaces or a single namespace + * + * @param string $sCoreJsFile + * @param string $sNamespace + * @return array + */ + function getRegisteredJavascriptBy ($sCoreJsFile, $sNamespace = '') + { + $scripts = array (); + + if ($sNamespace == '') { + foreach ($this->_aJavascripts as $i => $js) { + if ($sCoreJsFile == $js->sCoreJsFile) { + $scripts = array_merge( $scripts, $this->_aJavascripts[$i]->pluginJsFile ); + } + } + } else { + foreach ($this->_aJavascripts as $i => $js) { + if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { + $scripts = array_merge( $scripts, $this->_aJavascripts[$i]->pluginJsFile ); + } + } + } + return $scripts; + } + + /** + * unregister all javascripts from a namespace or a js core file given + * + * @param string $sNamespace + * @param string $sCoreJsFile + * @return array + */ + function unregisterJavascripts ($sNamespace, $sCoreJsFile = '') + { + if ($sCoreJsFile == '') { // if $sCoreJsFile=='' unregister all js from this namespace + foreach ($this->_aJavascripts as $i => $js) { + if ($sNamespace == $js->sNamespace) { + unset( $this->_aJavascripts[$i] ); + } + } + // Re-index when all js were unregistered + $this->_aJavascripts = array_values( $this->_aJavascripts ); + } else { + foreach ($this->_aJavascripts as $i => $js) { + if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) { + unset( $this->_aJavascripts[$i] ); + // Re-index for each js that was unregistered + $this->_aJavascripts = array_values( $this->_aJavascripts ); + } + } + } + } + + /** + * Register a reports class in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sMenuId + * @param unknown_type $sFilename + */ + function registerReport ($sNamespace) + { + $found = false; + foreach ($this->_aReports as $row => $detail) { + if ($sNamespace == $detail) + $found = true; + } + if (! $found) { + $this->_aReports[] = $sNamespace; + } + } + + /** + * Register a PmFunction class in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sMenuId + * @param unknown_type $sFilename + */ + function registerPmFunction ($sNamespace) + { + $found = false; + foreach ($this->_aPmFunctions as $row => $detail) { + if ($sNamespace == $detail) + $found = true; + } + if (! $found) { + $this->_aPmFunctions[] = $sNamespace; + } + } + + /** + * Register a redirectLogin class in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sRole + * @param unknown_type $sPath + */ + function registerRedirectLogin ($sNamespace, $sRole, $sPathMethod) + { + $found = false; + foreach ($this->_aRedirectLogin as $row => $detail) { + if (($sNamespace == $detail->sNamespace) && ($sRole == $detail->sRoleCode)) //Filters based on Workspace and Role Code + $found = true; + } + if (! $found) { + $this->_aRedirectLogin[] = new redirectDetail( $sNamespace, $sRole, $sPathMethod ); + } + } + + /** + * Register a folder for methods + * + * @param unknown_type $sFolderName + */ + function registerFolder ($sNamespace, $sFolderId, $sFolderName) + { + $found = false; + foreach ($this->_aFolders as $row => $detail) + if ($sFolderId == $detail->sFolderId && $sNamespace == $detail->sNamespace) + $found = true; + + if (! $found) { + $this->_aFolders[] = new folderDetail( $sNamespace, $sFolderId, $sFolderName ); + } + } + + /** + * Register a step for process + * + * @param unknown_type $sFolderName + */ + function registerStep ($sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage = '') + { + $found = false; + foreach ($this->_aSteps as $row => $detail) + if ($sStepId == $detail->sStepId && $sNamespace == $detail->sNamespace) + $found = true; + + if (! $found) { + $this->_aSteps[] = new stepDetail( $sNamespace, $sStepId, $sStepName, $sStepTitle, $setupStepPage ); + } + } + + /** + * return true if the $sFolderName is registered in the singleton + * + * @param unknown_type $sFolderName + */ + function isRegisteredFolder ($sFolderName) + { + foreach ($this->_aFolders as $row => $folder) { + if ($sFolderName == $folder->sFolderName && is_dir( PATH_PLUGINS . $folder->sFolderName )) { + return true; + } elseif ($sFolderName == $folder->sFolderName && is_dir( PATH_PLUGINS . $folder->sNamespace . PATH_SEP . $folder->sFolderName )) { + return $folder->sNamespace; + } + } + return false; + } + + /** + * return all menus related to a menuId + * + * @param unknown_type $menuId + */ + function getMenus ($menuId) + { + foreach ($this->_aMenus as $row => $detail) { + if ($menuId == $detail->sMenuId && file_exists( $detail->sFilename )) { + include ($detail->sFilename); + } + } + } + + /** + * return all dashlets classes registered + * + * @return array + */ + function getDashlets () + { + return $this->_aDashlets; + } + + /** + * this function returns all reports registered + * + * @return array + */ + function getReports () + { + return $this->_aReports; + $report = array (); + foreach ($this->_aReports as $row => $detail) { + $sClassName = str_replace( 'plugin', 'class', $this->_aPluginDetails[$detail]->sClassName ); + $report[] = $sClassName; + } + return $report; + } + + /** + * This function returns all pmFunctions registered + * @ array + */ + function getPmFunctions () + { + return $this->_aPmFunctions; + $pmf = array (); + foreach ($this->_aPmFunctions as $row => $detail) { + $sClassName = str_replace( 'plugin', 'class', $this->_aPluginDetails[$detail]->sClassName ); + $pmf[] = $sClassName; + } + return $pmf; + } + + /** + * This function returns all steps registered + * + * @return string + */ + function getSteps () + { + return $this->_aSteps; + } + + /** + * This function returns all redirect registered + * + * @return string + */ + function getRedirectLogins () + { + return $this->_aRedirectLogin; + } + + /** + * execute all triggers related to a triggerId + * + * @param unknown_type $menuId + * @return object + */ + function executeTriggers ($triggerId, $oData) + { + foreach ($this->_aTriggers as $row => $detail) { + if ($triggerId == $detail->sTriggerId) { + + //review all folders registered for this namespace + $found = false; + $classFile = ''; + + foreach ($this->_aFolders as $row => $folder) { + $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName . '.php'; + if ($detail->sNamespace == $folder->sNamespace && file_exists( $fname )) { + $found = true; + $classFile = $fname; + } + } + if ($found) { + require_once ($classFile); + $sClassName = substr( $this->_aPluginDetails[$detail->sNamespace]->sClassName, 0, 1 ) . str_replace( 'plugin', 'class', substr( $this->_aPluginDetails[$detail->sNamespace]->sClassName, 1 ) ); + $obj = new $sClassName(); + $methodName = $detail->sTriggerName; + $response = $obj->{$methodName}( $oData ); + if (PEAR::isError( $response )) { + print $response->getMessage(); + return; + } + return $response; + } else + print "error in call method " . $detail->sTriggerName; + } + } + } + + /** + * verify if exists triggers related to a triggerId + * + * @param unknown_type $triggerId + */ + function existsTrigger ($triggerId) + { + $found = false; + foreach ($this->_aTriggers as $row => $detail) { + if ($triggerId == $detail->sTriggerId) { + + //review all folders registered for this namespace + foreach ($this->_aFolders as $row => $folder) { + $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName . '.php'; + if ($detail->sNamespace == $folder->sNamespace && file_exists( $fname )) { + $found = true; + } + } + } + } + return $found; + } + + /** + * Return info related to a triggerId + * + * @param unknown_type $triggerId + * @return object + */ + function getTriggerInfo ($triggerId) + { + $found = null; + foreach ($this->_aTriggers as $row => $detail) { + if ($triggerId == $detail->sTriggerId) { + + //review all folders registered for this namespace + foreach ($this->_aFolders as $row => $folder) { + $fname = PATH_PLUGINS . $folder->sFolderName . PATH_SEP . 'class.' . $folder->sFolderName . '.php'; + if ($detail->sNamespace == $folder->sNamespace && file_exists( $fname )) { + $found = $detail; + } + } + } + } + return $found; + } + + /** + * Register a trigger in the Singleton + * + * @param unknown_type $sTriggerId + * @param unknown_type $sMethodFunction + * @return void + */ + function registerTrigger ($sNamespace, $sTriggerId, $sTriggerName) + { + $found = false; + foreach ($this->_aTriggers as $row => $detail) { + if ($sTriggerId == $detail->sTriggerId && $sNamespace == $detail->sNamespace) + $found = true; + } + if (! $found) { + $triggerDetail = new triggerDetail( $sNamespace, $sTriggerId, $sTriggerName ); + $this->_aTriggers[] = $triggerDetail; + } + } + + /** + * get plugin + * + * @param unknown_type $sNamespace + * @return void + */ + function &getPlugin ($sNamespace) + { + if (array_key_exists( $sNamespace, $this->_aPlugins )) { + return $this->_aPlugins[$sNamespace]; + } + /* $aDetails = KTUtil::arrayGet($this->_aPluginDetails, $sNamespace); if (empty($aDetails)) { return null; @@ -980,346 +1022,366 @@ class PMPluginRegistry { $this->_aPlugins[$sNamespace] =& $oPlugin; return $oPlugin; */ - } - - /** - * set company logo - * - * @param unknown_type $sNamespace - * @param unknown_type $filename - * @return void - */ - function setCompanyLogo( $sNamespace, $filename ) { - $found = false; - foreach ( $this->_aPluginDetails as $row=>$detail ) { - if ( $sNamespace == $detail->sNamespace ) - $this->_aPluginDetails[ $sNamespace ]->sCompanyLogo = $filename; } - } - /** - * get company logo - * - * @param unknown_type $default - * @return void - */ - function getCompanyLogo( $default ) { - $sCompanyLogo = $default; - foreach ( $this->_aPluginDetails as $row=>$detail ) { - if ( trim($detail->sCompanyLogo) != '' ) - $sCompanyLogo = $detail->sCompanyLogo; + /** + * set company logo + * + * @param unknown_type $sNamespace + * @param unknown_type $filename + * @return void + */ + function setCompanyLogo ($sNamespace, $filename) + { + $found = false; + foreach ($this->_aPluginDetails as $row => $detail) { + if ($sNamespace == $detail->sNamespace) + $this->_aPluginDetails[$sNamespace]->sCompanyLogo = $filename; + } } - return $sCompanyLogo; - } - /** - * get setup Plugins - * - * @param unknown_type $default - * @return void - */ - function setupPlugins() { - try { - $iPlugins = 0; - G::LoadClass ( 'serverConfiguration' ); - $oServerConf = & serverConf::getSingleton (); - $oServerConf->addPlugin ( SYS_SYS,$this->_aPluginDetails ); - foreach ( $this->_aPluginDetails as $namespace=>$detail ) { - if ( isset($detail->enabled ) && $detail->enabled ) { - if ( !empty( $detail->sFilename) && file_exists ($detail->sFilename) ) { - if (strpos($detail->sFilename, PATH_SEP) !== false) { - $aux = explode ( PATH_SEP, $detail->sFilename ); + /** + * get company logo + * + * @param unknown_type $default + * @return void + */ + function getCompanyLogo ($default) + { + $sCompanyLogo = $default; + foreach ($this->_aPluginDetails as $row => $detail) { + if (trim( $detail->sCompanyLogo ) != '') + $sCompanyLogo = $detail->sCompanyLogo; + } + return $sCompanyLogo; + } + + /** + * get setup Plugins + * + * @param unknown_type $default + * @return void + */ + function setupPlugins () + { + try { + $iPlugins = 0; + G::LoadClass( 'serverConfiguration' ); + $oServerConf = & serverConf::getSingleton(); + $oServerConf->addPlugin( SYS_SYS, $this->_aPluginDetails ); + foreach ($this->_aPluginDetails as $namespace => $detail) { + if (isset( $detail->enabled ) && $detail->enabled) { + if (! empty( $detail->sFilename ) && file_exists( $detail->sFilename )) { + if (strpos( $detail->sFilename, PATH_SEP ) !== false) { + $aux = explode( PATH_SEP, $detail->sFilename ); + } else { + $aux = explode( chr( 92 ), $detail->sFilename ); + } + $sFilename = PATH_PLUGINS . $aux[count( $aux ) - 1]; + if (! file_exists( $sFilename )) + continue; + require_once $sFilename; + if (class_exists( $detail->sClassName )) { + $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $this->_aPlugins[$detail->sNamespace] = $oPlugin; + $iPlugins ++; + $oPlugin->setup(); + } + } + } } - else { - $aux = explode ( chr(92), $detail->sFilename ); + $this->eevalidate(); + return $iPlugins; + } catch (Exception $e) { + global $G_PUBLISH; + $aMessage['MESSAGE'] = $e->getMessage(); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); + G::RenderPage( 'publish' ); + die(); + } + + } + + /** + * this function execute a Method + * + * @param string $sNamespace + * @param string $methodName + * @param object $oData + * @return object + */ + function executeMethod ($sNamespace, $methodName, $oData) + { + $response = null; + try { + $details = $this->_aPluginDetails[$sNamespace]; + $pluginFolder = $details->sPluginFolder; + $className = $details->sClassName; + $classFile = PATH_PLUGINS . $pluginFolder . PATH_SEP . 'class.' . $pluginFolder . '.php'; + if (file_exists( $classFile )) { + $sClassName = substr_replace( $className, "class", - 6, 6 ); + //$sClassName = str_replace ( 'plugin', 'class', $className ); + if (! class_exists( $sClassName )) { + require_once $classFile; + } + $obj = new $sClassName(); + if (! in_array( $methodName, get_class_methods( $obj ) )) { + throw (new Exception( "The method '$methodName' doesn't exist in class '$sClassName' " )); + } + $obj->sNamespace = $details->sNamespace; + $obj->sClassName = $details->sClassName; + $obj->sFilename = $details->sFilename; + $obj->iVersion = $details->iVersion; + $obj->sFriendlyName = $details->sFriendlyName; + $obj->sPluginFolder = $details->sPluginFolder; + $response = $obj->{$methodName}( $oData ); } - $sFilename = PATH_PLUGINS . $aux[ count($aux) -1]; - if (! file_exists($sFilename) ) continue; - require_once $sFilename; - if (class_exists($detail->sClassName)) { - $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); - $this->_aPlugins[$detail->sNamespace] = $oPlugin; - $iPlugins++; - $oPlugin->setup(); + return $response; + } catch (Exception $e) { + throw ($e); + } + } + + /** + * this function gets Fields For Page on Setup + * + * @param string $sNamespace + * @return object + */ + function getFieldsForPageSetup ($sNamespace) + { + $oData = NULL; + return $this->executeMethod( $sNamespace, 'getFieldsForPageSetup', $oData ); + } + + /** + * this function updates Fields For Page on Setup + * + * @param string $sNamespace + * @return void + */ + function updateFieldsForPageSetup ($sNamespace, $oData) + { + if (! isset( $this->_aPluginDetails[$sNamespace] )) { + throw (new Exception( "The namespace '$sNamespace' doesn't exist in plugins folder." )); + } + ; + return $this->executeMethod( $sNamespace, 'updateFieldsForPageSetup', $oData ); + } + + function eevalidate () + { + $fileL = PATH_DATA_SITE . 'license.dat'; + $fileS = PATH_DATA . 'license.dat'; + if ((file_exists( $fileL )) || (file_exists( $fileS ))) { //Found a License + if (class_exists( 'pmLicenseManager' )) { + $sSerializedFile = PATH_DATA_SITE . 'lmn.singleton'; + $pmLicenseManagerO = & pmLicenseManager::getSingleton(); + if (file_exists( $sSerializedFile )) { + $pmLicenseManagerO->unSerializeInstance( file_get_contents( $sSerializedFile ) ); + } } - } } - } - $this->eevalidate(); - return $iPlugins; - } - catch ( Exception $e ) { - global $G_PUBLISH; - $aMessage['MESSAGE'] = $e->getMessage(); - $G_PUBLISH = new Publisher; - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); - G::RenderPage( 'publish' ); - die; } - } - - /** - * this function execute a Method - * - * @param string $sNamespace - * @param string $methodName - * @param object $oData - * @return object - */ - function executeMethod( $sNamespace, $methodName, $oData ) { - $response = null; - try { - $details = $this->_aPluginDetails[$sNamespace]; - $pluginFolder = $details->sPluginFolder; - $className = $details->sClassName; - $classFile = PATH_PLUGINS . $pluginFolder . PATH_SEP . 'class.' . $pluginFolder .'.php'; - if ( file_exists ( $classFile ) ) { - $sClassName=substr_replace($className,"class",-6,6); - //$sClassName = str_replace ( 'plugin', 'class', $className ); - if (!class_exists($sClassName)) { - require_once $classFile; + /** + * Register a toolbar for dynaform editor in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sToolbarId + * @param unknown_type $sFilename + */ + function registerToolbarFile ($sNamespace, $sToolbarId, $sFilename) + { + $found = false; + foreach ($this->_aToolbarFiles as $row => $detail) { + if ($sToolbarId == $detail->sToolbarId && $sNamespace == $detail->sNamespace) + $found = true; } - $obj = new $sClassName( ); - if ( !in_array ( $methodName, get_class_methods ($obj) ) ) { - throw ( new Exception ( "The method '$methodName' doesn't exist in class '$sClassName' ") ); + if (! $found) { + $toolbarDetail = new toolbarDetail( $sNamespace, $sToolbarId, $sFilename ); + $this->_aToolbarFiles[] = $toolbarDetail; } - $obj->sNamespace = $details->sNamespace; - $obj->sClassName = $details->sClassName; - $obj->sFilename = $details->sFilename; - $obj->iVersion = $details->iVersion; - $obj->sFriendlyName = $details->sFriendlyName; - $obj->sPluginFolder = $details->sPluginFolder; - $response = $obj->{$methodName}( $oData ); - } - return $response; } - catch ( Exception $e ) { - throw ($e); - } - } - /** - * this function gets Fields For Page on Setup - * - * @param string $sNamespace - * @return object - */ - function getFieldsForPageSetup( $sNamespace ) { - $oData = NULL; - return $this->executeMethod ( $sNamespace, 'getFieldsForPageSetup', $oData); - } - - /** - * this function updates Fields For Page on Setup - * - * @param string $sNamespace - * @return void - */ - function updateFieldsForPageSetup( $sNamespace, $oData ) { - if ( !isset ($this->_aPluginDetails[$sNamespace] ) ) { - throw ( new Exception ( "The namespace '$sNamespace' doesn't exist in plugins folder." ) ); - }; - return $this->executeMethod ( $sNamespace, 'updateFieldsForPageSetup', $oData); - } - function eevalidate(){ - $fileL = PATH_DATA_SITE.'license.dat'; - $fileS = PATH_DATA.'license.dat'; - if((file_exists($fileL))||(file_exists($fileS))){//Found a License - if(class_exists('pmLicenseManager')){ - $sSerializedFile = PATH_DATA_SITE . 'lmn.singleton'; - $pmLicenseManagerO =& pmLicenseManager::getSingleton(); - if ( file_exists ($sSerializedFile) ){ - $pmLicenseManagerO->unSerializeInstance( file_get_contents ( $sSerializedFile ) ); + /** + * return all toolbar files related to a sToolbarId + * + * @param unknown_type $sToolbarId (NORMAL, GRID) + */ + function getToolbarOptions ($sToolbarId) + { + foreach ($this->_aToolbarFiles as $row => $detail) { + if ($sToolbarId == $detail->sToolbarId && file_exists( $detail->sFilename )) { + include ($detail->sFilename); + } } - } } - } - /** - * Register a toolbar for dynaform editor in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sToolbarId - * @param unknown_type $sFilename - */ - function registerToolbarFile($sNamespace, $sToolbarId, $sFilename ) { - $found = false; - foreach ( $this->_aToolbarFiles as $row=>$detail ) { - if ( $sToolbarId == $detail->sToolbarId && $sNamespace == $detail->sNamespace ) - $found = true; + + /** + * Register a Case Scheduler Plugin + */ + function registerCaseSchedulerPlugin ($sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields) + { + $found = false; + foreach ($this->_aCaseSchedulerPlugin as $row => $detail) + if ($sActionId == $detail->sActionId && $sNamespace == $detail->sNamespace) + $found = true; + + if (! $found) { + $this->_aCaseSchedulerPlugin[] = new caseSchedulerPlugin( $sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields ); + } } - if ( !$found ) { - $toolbarDetail = new toolbarDetail ($sNamespace, $sToolbarId, $sFilename); - $this->_aToolbarFiles[] = $toolbarDetail; + + /** + * This function returns all Case Scheduler Plugins registered + * + * @return string + */ + function getCaseSchedulerPlugins () + { + return $this->_aCaseSchedulerPlugin; } - } - /** - * return all toolbar files related to a sToolbarId - * - * @param unknown_type $sToolbarId (NORMAL, GRID) - */ - function getToolbarOptions( $sToolbarId ) { - foreach ( $this->_aToolbarFiles as $row=>$detail ) { - if ( $sToolbarId == $detail->sToolbarId && file_exists ( $detail->sFilename ) ) { - include ( $detail->sFilename ); - } + + /** + * Register a Task Extended property page in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sPage + */ + + function registerTaskExtendedProperty ($sNamespace, $sPage, $sName, $sIcon) + { + $found = false; + foreach ($this->_aTaskExtendedProperties as $row => $detail) { + if ($sPage == $detail->sPage && $sNamespace == $detail->sNamespace) { + $detail->sName = $sName; + $detail->sIcon = $sIcon; + $found = true; + } + } + if (! $found) { + $taskExtendedProperty = new taskExtendedProperty( $sNamespace, $sPage, $sName, $sIcon ); + $this->_aTaskExtendedProperties[] = $taskExtendedProperty; + } } - } - /** - * Register a Case Scheduler Plugin - * - */ - function registerCaseSchedulerPlugin($sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields) { - $found = false; - foreach ( $this->_aCaseSchedulerPlugin as $row=>$detail ) - if ( $sActionId == $detail->sActionId && $sNamespace == $detail->sNamespace ) - $found = true; - if ( !$found ) { - $this->_aCaseSchedulerPlugin[] = new caseSchedulerPlugin ( $sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields); + /** + * Register a dashboard page for cases in the singleton + * + * @param unknown_type $sNamespace + * @param unknown_type $sPage + * @param unknown_type $sName + * @param unknown_type $sIcon + */ + function registerDashboardPage ($sNamespace, $sPage, $sName, $sIcon) + { + foreach ($this->_aDashboardPages as $row => $detail) { + if ($sPage == $detail->sPage && $sNamespace == $detail->sNamespace) { + $detail->sName = $sName; + $detail->sIcon = $sIcon; + $found = true; + } + } + if (! $found) { + $dashboardPage = new dashboardPage( $sNamespace, $sPage, $sName, $sIcon ); + $this->_aDashboardPages[] = $dashboardPage; + } } - } - /** - * This function returns all Case Scheduler Plugins registered - * - * @return string - */ - function getCaseSchedulerPlugins( ) { - return $this->_aCaseSchedulerPlugin; - } - /** - * Register a Task Extended property page in the singleton - * - * @param unknown_type $sNamespace - * @param unknown_type $sPage - */ + /** + * Register a rest service class from a plugin to be served by processmaker + * + * @param string $sNamespace The namespace for the plugin + * @param string $classname The service (api) class name + * @param string $path (optional) the class file path, if it is not set the system will try resolve the + * file path from its classname. + */ + public function registerRestService ($sNamespace, $classname, $path = '') + { + $restService = new StdClass(); + $restService->sNamespace = $sNamespace; + $restService->classname = $classname; - function registerTaskExtendedProperty($sNamespace, $sPage, $sName, $sIcon ) { - $found = false; - foreach ( $this->_aTaskExtendedProperties as $row=>$detail ) { - if ( $sPage == $detail->sPage && $sNamespace == $detail->sNamespace ){ - $detail->sName=$sName; - $detail->sIcon=$sIcon; - $found = true; - } + if (empty( $path )) { + $path = PATH_PLUGINS . $restService->sNamespace . "/services/rest/$classname.php"; + + if (! file_exists( $path )) { + $path = PATH_PLUGINS . $restService->sNamespace . "/services/rest/crud/$classname.php"; + } + } + + if (! file_exists( $path )) { + return false; + } + + $restService->path = $path; + $this->_restServices[] = $restService; + + return true; } - if ( !$found ) { - $taskExtendedProperty = new taskExtendedProperty ($sNamespace, $sPage, $sName, $sIcon); - $this->_aTaskExtendedProperties[] = $taskExtendedProperty; + + /** + * Unregister a rest service class of a plugin + * + * @param string $sNamespace The namespace for the plugin + */ + public function unregisterRestService ($sNamespace) + { + foreach ($this->_restServices as $i => $service) { + if ($sNamespace == $service->sNamespace) { + unset( $this->_restServices[$i] ); + } + } + + // Re-index when all js were unregistered + $this->_restServices = array_values( $this->_restServices ); } - } - /** - * Register a dashboard page for cases in the singleton - * @param unknown_type $sNamespace - * @param unknown_type $sPage - * @param unknown_type $sName - * @param unknown_type $sIcon - */ - function registerDashboardPage($sNamespace, $sPage, $sName, $sIcon ) { - foreach ( $this->_aDashboardPages as $row=>$detail ) { - if ( $sPage == $detail->sPage && $sNamespace == $detail->sNamespace ){ - $detail->sName=$sName; - $detail->sIcon=$sIcon; - $found = true; - } - } - if ( !$found ) { - $dashboardPage = new dashboardPage ($sNamespace, $sPage, $sName, $sIcon); - $this->_aDashboardPages[] = $dashboardPage; + public function getRegisteredRestServices () + { + return $this->_restServices; } - } - /** - * Register a rest service class from a plugin to be served by processmaker - * - * @param string $sNamespace The namespace for the plugin - * @param string $classname The service (api) class name - * @param string $path (optional) the class file path, if it is not set the system will try resolve the - * file path from its classname. - */ - public function registerRestService($sNamespace, $classname, $path = '') - { - $restService = new StdClass(); - $restService->sNamespace = $sNamespace; - $restService->classname = $classname; + public function getRegisteredRestClassFiles () + { + $restClassFiles = array (); - if (empty($path)) { - $path = PATH_PLUGINS . $restService->sNamespace . "/services/rest/$classname.php"; + foreach ($this->_restServices as $restService) { + $restClassFiles[] = $restService->path; + } - if (! file_exists($path)) { - $path = PATH_PLUGINS . $restService->sNamespace . "/services/rest/crud/$classname.php"; - } - } + return $restClassFiles; + } - if (! file_exists($path)) { - return false; - } + /** + * return all dashboard pages + * + * @return array + */ + function getDashboardPages () + { + return $this->_aDashboardPages; + } - $restService->path = $path; - $this->_restServices[] = $restService; + /** + * return all tasl extended properties + * + * @return array + */ + function getTaskExtendedProperties () + { + return $this->_aTaskExtendedProperties; + } - return true; - } + function registerDashboard () + { + // Dummy function for backwards compatibility + } - /** - * Unregister a rest service class of a plugin - * - * @param string $sNamespace The namespace for the plugin - */ - public function unregisterRestService($sNamespace) - { - foreach ($this->_restServices as $i => $service) { - if ($sNamespace == $service->sNamespace) { - unset($this->_restServices[$i]); - } - } - - // Re-index when all js were unregistered - $this->_restServices = array_values($this->_restServices); - } - - public function getRegisteredRestServices() - { - return $this->_restServices; - } - - public function getRegisteredRestClassFiles() - { - $restClassFiles = array(); - - foreach ($this->_restServices as $restService) { - $restClassFiles[] = $restService->path; - } - - return $restClassFiles; - } - - /** - * return all dashboard pages - * - * @return array - */ - function getDashboardPages() { - return $this->_aDashboardPages; - } - - /** - * return all tasl extended properties - * - * @return array - */ - function getTaskExtendedProperties() { - return $this->_aTaskExtendedProperties; - } - - function registerDashboard() { - // Dummy function for backwards compatibility - } - - function getAttributes() - { - return get_object_vars($this); - } + function getAttributes () + { + return get_object_vars( $this ); + } } diff --git a/workflow/engine/classes/class.pmDashlet.php b/workflow/engine/classes/class.pmDashlet.php index 5a1462dce..2d93a2076 100644 --- a/workflow/engine/classes/class.pmDashlet.php +++ b/workflow/engine/classes/class.pmDashlet.php @@ -4,346 +4,348 @@ require_once 'classes/interfaces/dashletInterface.php'; require_once 'classes/model/Dashlet.php'; require_once 'classes/model/DashletInstance.php'; -class PMDashlet extends DashletInstance implements DashletInterface { +class PMDashlet extends DashletInstance implements DashletInterface +{ - // Own properties - private $dashletInstance; - private $dashletObject; + // Own properties + private $dashletInstance; + private $dashletObject; - // Interface functions - - public static function getAdditionalFields($className) { - try { - if (!class_exists($className)) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; - } - G::LoadClass($className); - eval("\$additionalFields = $className::getAdditionalFields(\$className);"); - return $additionalFields; - } - catch (Exception $error) { - throw $error; - } - } + // Interface functions - - public function setup($dasInsUid) { - try { - $this->dashletInstance = $this->loadDashletInstance($dasInsUid); - if (!isset($this->dashletInstance['DAS_CLASS'])) { - throw new Exception(G::LoadTranslation('ID_ERROR_OBJECT_NOT_EXISTS') . ' - Probably the plugin related is disabled'); - } - $className = $this->dashletInstance['DAS_CLASS']; - G::LoadClass($className); - if (!class_exists($className)) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; - } - $this->dashletObject = new $className(); - $this->dashletObject->setup($this->dashletInstance); - } - catch (Exception $error) { - throw $error; - } - } - - public function render($width = 300) { - try { - if (is_null($this->dashletObject)) { - throw new Exception('Please call to the function "setup" before call the function "render".'); - } - $this->dashletObject->render($width); - } - catch (Exception $error) { - throw $error; - } - } - - // Getter and Setters - - public function getDashletInstance() { - return $this->dashletInstance; - } - - public function getDashletObject() { - return $this->dashletObject; - } - - // Own functions - - public function getDashletsInstances($start = null, $limit = null) { - try { - $dashletsInstances = array(); - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn('*'); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - if (!is_null($start)) { - $criteria->setOffset($start); - } - if (!is_null($limit)) { - $criteria->setLimit($limit); - } - $dataset = DashletInstancePeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - while ($row = $dataset->getRow()) { - $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); - - $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation('ID_ACTIVE') : G::LoadTranslation('ID_INACTIVE')); - $row['DAS_INS_TITLE'] = (isset($arrayField['DAS_INS_TITLE']) && !empty($arrayField['DAS_INS_TITLE']))? $arrayField['DAS_INS_TITLE'] : ''; - if (!class_exists($row['DAS_CLASS'])) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $row['DAS_CLASS'] . '.php'; + public static function getAdditionalFields ($className) + { + try { + if (! class_exists( $className )) { + self::setIncludePath(); + require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; + } + G::LoadClass( $className ); + eval( "\$additionalFields = $className::getAdditionalFields(\$className);" ); + return $additionalFields; + } catch (Exception $error) { + throw $error; } - eval("\$row['DAS_VERSION'] = defined('" . $row['DAS_CLASS'] . "::version') ? " . $row['DAS_CLASS'] . "::version : \$row['DAS_VERSION'];"); + } - switch ($row['DAS_INS_OWNER_TYPE']) { - case 'EVERYBODY': - $row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation('ID_ALL_USERS'); - break; - case 'USER': - require_once 'classes/model/Users.php'; - $userInstance = new Users(); - try { - $user = $userInstance->load($row['DAS_INS_OWNER_UID']); - $row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME']; + public function setup ($dasInsUid) + { + try { + $this->dashletInstance = $this->loadDashletInstance( $dasInsUid ); + if (! isset( $this->dashletInstance['DAS_CLASS'] )) { + throw new Exception( G::LoadTranslation( 'ID_ERROR_OBJECT_NOT_EXISTS' ) . ' - Probably the plugin related is disabled' ); } - catch (Exception $error) { - $this->remove($row['DAS_INS_UID']); - $row['DAS_INS_UID'] = ''; + $className = $this->dashletInstance['DAS_CLASS']; + G::LoadClass( $className ); + if (! class_exists( $className )) { + self::setIncludePath(); + require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; } - break; - case 'DEPARTMENT': + $this->dashletObject = new $className(); + $this->dashletObject->setup( $this->dashletInstance ); + } catch (Exception $error) { + throw $error; + } + } + + public function render ($width = 300) + { + try { + if (is_null( $this->dashletObject )) { + throw new Exception( 'Please call to the function "setup" before call the function "render".' ); + } + $this->dashletObject->render( $width ); + } catch (Exception $error) { + throw $error; + } + } + + // Getter and Setters + + + public function getDashletInstance () + { + return $this->dashletInstance; + } + + public function getDashletObject () + { + return $this->dashletObject; + } + + // Own functions + + + public function getDashletsInstances ($start = null, $limit = null) + { + try { + $dashletsInstances = array (); + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( '*' ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + if (! is_null( $start )) { + $criteria->setOffset( $start ); + } + if (! is_null( $limit )) { + $criteria->setLimit( $limit ); + } + $dataset = DashletInstancePeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + while ($row = $dataset->getRow()) { + $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + + $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' )); + $row['DAS_INS_TITLE'] = (isset( $arrayField['DAS_INS_TITLE'] ) && ! empty( $arrayField['DAS_INS_TITLE'] )) ? $arrayField['DAS_INS_TITLE'] : ''; + if (! class_exists( $row['DAS_CLASS'] )) { + self::setIncludePath(); + require_once 'classes' . PATH_SEP . 'class.' . $row['DAS_CLASS'] . '.php'; + } + eval( "\$row['DAS_VERSION'] = defined('" . $row['DAS_CLASS'] . "::version') ? " . $row['DAS_CLASS'] . "::version : \$row['DAS_VERSION'];" ); + + switch ($row['DAS_INS_OWNER_TYPE']) { + case 'EVERYBODY': + $row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation( 'ID_ALL_USERS' ); + break; + case 'USER': + require_once 'classes/model/Users.php'; + $userInstance = new Users(); + try { + $user = $userInstance->load( $row['DAS_INS_OWNER_UID'] ); + $row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME']; + } catch (Exception $error) { + $this->remove( $row['DAS_INS_UID'] ); + $row['DAS_INS_UID'] = ''; + } + break; + case 'DEPARTMENT': + require_once 'classes/model/Department.php'; + $departmentInstance = new Department(); + try { + $department = $departmentInstance->load( $row['DAS_INS_OWNER_UID'] ); + $row['DAS_INS_OWNER_TITLE'] = $department['DEPO_TITLE']; + } catch (Exception $error) { + $this->remove( $row['DAS_INS_UID'] ); + $row['DAS_INS_UID'] = ''; + } + break; + case 'GROUP': + require_once 'classes/model/Groupwf.php'; + $groupInstance = new Groupwf(); + try { + $group = $groupInstance->load( $row['DAS_INS_OWNER_UID'] ); + $row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE']; + } catch (Exception $error) { + $this->remove( $row['DAS_INS_UID'] ); + $row['DAS_INS_UID'] = ''; + } + break; + default: + $row['DAS_INS_OWNER_TITLE'] = $row['DAS_INS_OWNER_TYPE']; + break; + } + if ($row['DAS_INS_UID'] != '') { + $dashletsInstances[] = $row; + } + $dataset->next(); + } + return $dashletsInstances; + } catch (Exception $error) { + throw $error; + } + } + + public function getDashletsInstancesQuantity () + { + try { + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( '*' ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + return DashletInstancePeer::doCount( $criteria ); + } catch (Exception $error) { + throw $error; + } + } + + public function loadDashletInstance ($dasInsUid) + { + try { + $dashletInstance = $this->load( $dasInsUid ); + //Load data from the serialized field + $dashlet = new Dashlet(); + $dashletFields = $dashlet->load( $dashletInstance['DAS_UID'] ); + if (is_null( $dashletFields )) { + $dashletFields = array (); + } + return array_merge( $dashletFields, $dashletInstance ); + } catch (Exception $error) { + throw $error; + } + } + + public function saveDashletInstance ($data) + { + try { + $this->createOrUpdate( $data ); + } catch (Exception $error) { + throw $error; + } + } + + public function deleteDashletInstance ($dasInsUid) + { + try { + $this->remove( $dasInsUid ); + } catch (Exception $error) { + throw $error; + } + } + + public function getDashletsInstancesForUser ($userUid) + { + try { + $dashletsInstances = array (); + // Include required classes require_once 'classes/model/Department.php'; + require_once 'classes/model/Users.php'; + // Check for "public" dashlets + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); + $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); + $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY' ); + $dataset = DashletInstancePeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + while ($row = $dataset->getRow()) { + if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { + $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + + $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); + $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } + // Check for the direct assignments + $usersInstance = new Users(); + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); + $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); + $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER' ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $userUid ); + $dataset = DashletInstancePeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + while ($row = $dataset->getRow()) { + if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { + $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + + $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); + $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } + // Check for department assigments $departmentInstance = new Department(); - try { - $department = $departmentInstance->load($row['DAS_INS_OWNER_UID']); - $row['DAS_INS_OWNER_TITLE'] = $department['DEPO_TITLE']; + $departments = $departmentInstance->getDepartmentsForUser( $userUid ); + foreach ($departments as $depUid => $department) { + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); + $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); + $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT' ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $depUid ); + $dataset = DashletInstancePeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + while ($row = $dataset->getRow()) { + if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { + $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + + $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); + $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } } - catch (Exception $error) { - $this->remove($row['DAS_INS_UID']); - $row['DAS_INS_UID'] = ''; + // Check for group assignments + G::LoadClass( 'groups' ); + $groupsInstance = new Groups(); + $groups = $groupsInstance->getGroupsForUser( $userUid ); + foreach ($groups as $grpUid => $group) { + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID ); + $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES ); + $criteria->addSelectColumn( DashletPeer::DAS_CLASS ); + $criteria->addSelectColumn( DashletPeer::DAS_TITLE ); + $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP' ); + $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid ); + $dataset = DashletInstancePeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + while ($row = $dataset->getRow()) { + if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) { + $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] ); + + $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] ); + $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; + $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null); + + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } } - break; - case 'GROUP': - require_once 'classes/model/Groupwf.php'; - $groupInstance = new Groupwf(); - try { - $group = $groupInstance->load($row['DAS_INS_OWNER_UID']); - $row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE']; + // Check for role assigments + // ToDo: Next release + // Check for permission assigments + // ToDo: Next release + return array_values( $dashletsInstances ); + } catch (Exception $error) { + throw $error; + } + } + + public static function getXTemplate ($className) + { + try { + if (! class_exists( $className )) { + self::setIncludePath(); + require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; } - catch (Exception $error) { - $this->remove($row['DAS_INS_UID']); - $row['DAS_INS_UID'] = ''; - } - break; - default: - $row['DAS_INS_OWNER_TITLE'] = $row['DAS_INS_OWNER_TYPE']; - break; + G::LoadClass( $className ); + eval( "\$additionalFields = $className::getXTemplate(\$className);" ); + return $additionalFields; + } catch (Exception $error) { + throw $error; } - if ($row['DAS_INS_UID'] != '') { - $dashletsInstances[] = $row; + } + + private static function setIncludePath () + { + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $pluginsDashlets = $oPluginRegistry->getDashlets(); + foreach ($pluginsDashlets as $pluginDashlet) { + set_include_path( get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP ); } - $dataset->next(); - } - return $dashletsInstances; } - catch (Exception $error) { - throw $error; - } - } - - public function getDashletsInstancesQuantity() { - try { - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn('*'); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - return DashletInstancePeer::doCount($criteria); - } - catch (Exception $error) { - throw $error; - } - } - - public function loadDashletInstance($dasInsUid) { - try { - $dashletInstance = $this->load($dasInsUid); - //Load data from the serialized field - $dashlet = new Dashlet(); - $dashletFields = $dashlet->load($dashletInstance['DAS_UID']); - if (is_null($dashletFields)) { - $dashletFields = array(); - } - return array_merge($dashletFields, $dashletInstance); - } - catch (Exception $error) { - throw $error; - } - } - - public function saveDashletInstance($data) { - try { - $this->createOrUpdate($data); - } - catch (Exception $error) { - throw $error; - } - } - - public function deleteDashletInstance($dasInsUid) { - try { - $this->remove($dasInsUid); - } - catch (Exception $error) { - throw $error; - } - } - - public function getDashletsInstancesForUser($userUid) { - try { - $dashletsInstances = array(); - // Include required classes - require_once 'classes/model/Department.php'; - require_once 'classes/model/Users.php'; - // Check for "public" dashlets - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); - $criteria->addSelectColumn(DashletPeer::DAS_CLASS); - $criteria->addSelectColumn(DashletPeer::DAS_TITLE); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY'); - $dataset = DashletInstancePeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - while ($row = $dataset->getRow()) { - if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { - $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); - - $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); - $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"]))? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); - - $dashletsInstances[$row['DAS_INS_UID']] = $row; - } - $dataset->next(); - } - // Check for the direct assignments - $usersInstance = new Users(); - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); - $criteria->addSelectColumn(DashletPeer::DAS_CLASS); - $criteria->addSelectColumn(DashletPeer::DAS_TITLE); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER'); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $userUid); - $dataset = DashletInstancePeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - while ($row = $dataset->getRow()) { - if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { - $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); - - $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); - $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"]))? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); - - $dashletsInstances[$row['DAS_INS_UID']] = $row; - } - $dataset->next(); - } - // Check for department assigments - $departmentInstance = new Department(); - $departments = $departmentInstance->getDepartmentsForUser($userUid); - foreach ($departments as $depUid => $department) { - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); - $criteria->addSelectColumn(DashletPeer::DAS_CLASS); - $criteria->addSelectColumn(DashletPeer::DAS_TITLE); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT'); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $depUid); - $dataset = DashletInstancePeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - while ($row = $dataset->getRow()) { - if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { - $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); - - $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); - $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"]))? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); - - $dashletsInstances[$row['DAS_INS_UID']] = $row; - } - $dataset->next(); - } - } - // Check for group assignments - G::LoadClass('groups'); - $groupsInstance = new Groups(); - $groups = $groupsInstance->getGroupsForUser($userUid); - foreach ($groups as $grpUid => $group) { - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); - $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES); - $criteria->addSelectColumn(DashletPeer::DAS_CLASS); - $criteria->addSelectColumn(DashletPeer::DAS_TITLE); - $criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP'); - $criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid); - $dataset = DashletInstancePeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - while ($row = $dataset->getRow()) { - if (!isset($dashletsInstances[$row['DAS_INS_UID']])) { - $arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]); - - $row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']); - $row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"]; - $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset($arrayField["DAS_INS_SUBTITLE"]) && !empty($arrayField["DAS_INS_SUBTITLE"]))? str_replace("@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"]) : null); - - $dashletsInstances[$row['DAS_INS_UID']] = $row; - } - $dataset->next(); - } - } - // Check for role assigments - // ToDo: Next release - // Check for permission assigments - // ToDo: Next release - return array_values($dashletsInstances); - } - catch (Exception $error) { - throw $error; - } - } - - public static function getXTemplate($className) { - try { - if (!class_exists($className)) { - self::setIncludePath(); - require_once 'classes' . PATH_SEP . 'class.' . $className . '.php'; - } - G::LoadClass($className); - eval("\$additionalFields = $className::getXTemplate(\$className);"); - return $additionalFields; - } - catch (Exception $error) { - throw $error; - } - } - - private static function setIncludePath() { - $oPluginRegistry = &PMPluginRegistry::getSingleton(); - $pluginsDashlets = $oPluginRegistry->getDashlets(); - foreach ($pluginsDashlets as $pluginDashlet) { - set_include_path(get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP); - } - } } \ No newline at end of file diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index dd2b7e8d8..61ac34afc 100755 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -12,18 +12,14 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * - * - * - * */ //////////////////////////////////////////////////// // PM Functions @@ -33,8 +29,9 @@ // License: LGPL, see LICENSE //////////////////////////////////////////////////// -if (!class_exists('PMScript')) { - G::LoadClass('pmScript'); + +if (! class_exists( 'PMScript' )) { + G::LoadClass( 'pmScript' ); } /** @@ -42,16 +39,15 @@ if (!class_exists('PMScript')) { * Most of these functions are wrappers for internal functions used in Gulliver, which is the development framework * used by ProcessMaker. * @class pmFunctions + * * @name ProcessMaker Functions * @icon /images/pm.gif * @className class.pmFunctions.php */ - /** - * @method * - * Returns the current date formated in the format "yyyy-mm-dd", with leading zeros in the + * @method Returns the current date formated in the format "yyyy-mm-dd", with leading zeros in the * month and day if less than 10. This function is equivalent to PHP's date("Y-m-d"). * * @name getCurrentDate @@ -61,14 +57,14 @@ if (!class_exists('PMScript')) { * @return date | $date | Current Date (Y-m-d) | It returns the current date as a string value. * */ -function getCurrentDate() +function getCurrentDate () { - return G::CurDate('Y-m-d'); + return G::CurDate( 'Y-m-d' ); } + /** - * @method * - * Returns the current time in the format "hh:mm:ss" with leading zeros when the hours, + * @method Returns the current time in the format "hh:mm:ss" with leading zeros when the hours, * minutes or seconds are less than 10. * * @name getCurrentTime @@ -78,14 +74,14 @@ function getCurrentDate() * @return time | $time | Current Time (H:i:s)| The function returns the current time as a string. * */ -function getCurrentTime() +function getCurrentTime () { - return G::CurDate('H:i:s'); + return G::CurDate( 'H:i:s' ); } + /** - * @method * - * Retrieves information about a user with a given ID. + * @method Retrieves information about a user with a given ID. * * @name userInfo * @label User Info @@ -95,20 +91,20 @@ function getCurrentTime() * @return array | $userInfo | User Info | An associative array with Information * */ -function userInfo($user_uid) +function userInfo ($user_uid) { try { require_once 'classes/model/Users.php'; $oUser = new Users(); - return $oUser->getAllInformation($user_uid); + return $oUser->getAllInformation( $user_uid ); } catch (Exception $oException) { throw $oException; } } + /** - * @method * - * Returns a string converted into all UPPERCASE letters. + * @method Returns a string converted into all UPPERCASE letters. * * @name upperCase * @label Upper Case @@ -118,14 +114,14 @@ function userInfo($user_uid) * @return string | $TextC | Text Converted | Returns a string with the text converted into upper case letters. * */ -function upperCase($sText) +function upperCase ($sText) { - return G::toUpper($sText); + return G::toUpper( $sText ); } + /** - * @method * - * Returns a string with all the letters converted into lower case letters. + * @method Returns a string with all the letters converted into lower case letters. * * @name lowerCase * @label Lower Case @@ -135,14 +131,14 @@ function upperCase($sText) * @return string | $TextC | Text Converted | Returns a string with the text converted into lower case letters. * */ -function lowerCase($sText) +function lowerCase ($sText) { - return G::toLower($sText); + return G::toLower( $sText ); } + /** - * @method * - * Converts the first letter in each word into an uppercase letter. + * @method Converts the first letter in each word into an uppercase letter. * Subsequent letters in each word are changed into lowercase letters. * * @name capitalize @@ -153,14 +149,14 @@ function lowerCase($sText) * @return string | $TextC | Text Converted | It returns the introduced text with the first letter capitalized in each word and the subsequent letters into lowercase letters * */ -function capitalize($sText) +function capitalize ($sText) { - return G::capitalizeWords($sText); + return G::capitalizeWords( $sText ); } + /** - * @method * - * Returns a string formatted according to the given date format and given language + * @method Returns a string formatted according to the given date format and given language * * @name formatDate * @label Format Date @@ -172,21 +168,21 @@ function capitalize($sText) * @return string | $formatDate | Date whit format | It returns the passed date according to the given date format. * */ -function formatDate($date, $format='', $lang='en') +function formatDate ($date, $format = '', $lang = 'en') { - if ( !isset($date) or $date == '') { - throw new Exception('function:formatDate::Bad param'); + if (! isset( $date ) or $date == '') { + throw new Exception( 'function:formatDate::Bad param' ); } try { - return G::getformatedDate($date, $format, $lang); + return G::getformatedDate( $date, $format, $lang ); } catch (Exception $oException) { throw $oException; } } + /** - * @method * - * Returns a specified date written out in a given language, with full month names. + * @method Returns a specified date written out in a given language, with full month names. * * @name literalDate * @label Literal Date @@ -197,18 +193,18 @@ function formatDate($date, $format='', $lang='en') * @return string | $literaDate | Literal date | It returns the literal date as a string value. * */ -function literalDate($date, $lang='en') +function literalDate ($date, $lang = 'en') { - if ( !isset($date) or $date == '' ) { - throw new Exception('function:formatDate::Bad param'); + if (! isset( $date ) or $date == '') { + throw new Exception( 'function:formatDate::Bad param' ); } try { switch ($lang) { case 'en': - $ret = G::getformatedDate($date, 'M d,yyyy', $lang); + $ret = G::getformatedDate( $date, 'M d,yyyy', $lang ); break; case 'es': - $ret = G::getformatedDate($date, 'd de M de yyyy', $lang); + $ret = G::getformatedDate( $date, 'd de M de yyyy', $lang ); break; } return $ret; @@ -216,10 +212,10 @@ function literalDate($date, $lang='en') throw $oException; } } + /** - * @method * - * Executes a SQL statement in a database connection or in one of ProcessMaker's + * @method Executes a SQL statement in a database connection or in one of ProcessMaker's * internal databases. * * @name executeQuery @@ -231,46 +227,46 @@ function literalDate($date, $lang='en') * @return array or string | $Resultquery | Result | Result of the query | If executing a SELECT statement, it returns an array of associative arrays * */ -function executeQuery($SqlStatement, $DBConnectionUID='workflow', $aParameter=array()) +function executeQuery ($SqlStatement, $DBConnectionUID = 'workflow', $aParameter = array()) { - $con = Propel::getConnection($DBConnectionUID); + $con = Propel::getConnection( $DBConnectionUID ); $con->begin(); try { - $statement = trim($SqlStatement); - $statement = str_replace('(', '', $statement); + $statement = trim( $SqlStatement ); + $statement = str_replace( '(', '', $statement ); $result = false; - if (getEngineDataBaseName($con) != 'oracle' ) { - switch(true) { - case preg_match("/^(SELECT|EXECUTE|EXEC|SHOW|DESCRIBE|EXPLAIN|BEGIN)\s/i", $statement): - $rs = $con->executeQuery($SqlStatement); + if (getEngineDataBaseName( $con ) != 'oracle') { + switch (true) { + case preg_match( "/^(SELECT|EXECUTE|EXEC|SHOW|DESCRIBE|EXPLAIN|BEGIN)\s/i", $statement ): + $rs = $con->executeQuery( $SqlStatement ); $con->commit(); - $result = Array(); - $i = 1; + $result = Array (); + $i = 1; while ($rs->next()) { - $result[$i++] = $rs->getRow(); + $result[$i ++] = $rs->getRow(); } break; - case preg_match("/^INSERT\s/i", $statement): - $rs = $con->executeUpdate($SqlStatement); + case preg_match( "/^INSERT\s/i", $statement ): + $rs = $con->executeUpdate( $SqlStatement ); $con->commit(); //$result = $lastId->getId(); $result = 1; break; - case preg_match("/^UPDATE\s/i", $statement): - $rs = $con->executeUpdate($SqlStatement); + case preg_match( "/^UPDATE\s/i", $statement ): + $rs = $con->executeUpdate( $SqlStatement ); $con->commit(); - $result = $con->getUpdateCount(); + $result = $con->getUpdateCount(); break; - case preg_match("/^DELETE\s/i", $statement): - $rs = $con->executeUpdate($SqlStatement); + case preg_match( "/^DELETE\s/i", $statement ): + $rs = $con->executeUpdate( $SqlStatement ); $con->commit(); - $result = $con->getUpdateCount(); + $result = $con->getUpdateCount(); break; } } else { - $result = executeQueryOci($SqlStatement, $con, $aParameter); + $result = executeQueryOci( $SqlStatement, $con, $aParameter ); } return $result; @@ -279,37 +275,37 @@ function executeQuery($SqlStatement, $DBConnectionUID='workflow', $aParameter=ar throw $sqle; } } + /** - * @method * - * Sorts a grid according to a specified field in ascending or descending order. + * @method Sorts a grid according to a specified field in ascending or descending order. * * @name orderGrid * @label order Grid * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#orderGrid.28.29 * - * @param array | $dataM | User ID | A grid, which is a numbered array containing associative arrays with field names and their values, it has to be set like this "@=". + * @param array | $dataM | User ID | A grid, which is a numbered array containing associative arrays with field names and their values, it has to be set like this "@=". * @param string(32) | $field | Name of field | The name of the field by which the grid will be sorted. * @param string(32) | $ord = "ASC"| Optional parameter | Optional parameter. The order which can either be 'ASC' (ascending) or 'DESC' (descending). If not included, 'ASC' will be used by default. * @return array | $dataM | Grid Sorted | Grid sorted * */ -function orderGrid($dataM, $field, $ord='ASC') +function orderGrid ($dataM, $field, $ord = 'ASC') { - if (!is_array($dataM) or !isset($field) or $field=='') { - throw new Exception('function:orderGrid Error!, bad parameters found!'); + if (! is_array( $dataM ) or ! isset( $field ) or $field == '') { + throw new Exception( 'function:orderGrid Error!, bad parameters found!' ); } - for ($i=1; $i <= count($dataM)-1; $i++) { - for ($j=$i+1; $j <= count($dataM); $j++) { - if (strtoupper($ord) == 'ASC') { - if (strtolower($dataM[$j][$field]) < strtolower($dataM[$i][$field])) { - $swap = $dataM[$i]; + for ($i = 1; $i <= count( $dataM ) - 1; $i ++) { + for ($j = $i + 1; $j <= count( $dataM ); $j ++) { + if (strtoupper( $ord ) == 'ASC') { + if (strtolower( $dataM[$j][$field] ) < strtolower( $dataM[$i][$field] )) { + $swap = $dataM[$i]; $dataM[$i] = $dataM[$j]; $dataM[$j] = $swap; } } else { if ($dataM[$j][$field] > $dataM[$i][$field]) { - $swap = $dataM[$i]; + $swap = $dataM[$i]; $dataM[$i] = $dataM[$j]; $dataM[$j] = $swap; } @@ -318,10 +314,10 @@ function orderGrid($dataM, $field, $ord='ASC') } return $dataM; } + /** - * @method * - * Executes operations among the grid fields, such as addition, substraction, etc + * @method Executes operations among the grid fields, such as addition, substraction, etc * * @name evaluateFunction * @label evaluate Function @@ -332,18 +328,18 @@ function orderGrid($dataM, $field, $ord='ASC') * @return array | $aGrid | Grid | Grid with executed operation * */ -function evaluateFunction($aGrid, $sExpresion) +function evaluateFunction ($aGrid, $sExpresion) { - $sExpresion = str_replace('Array','$this->aFields', $sExpresion); + $sExpresion = str_replace( 'Array', '$this->aFields', $sExpresion ); $sExpresion .= ';'; - G::LoadClass('pmScript'); + G::LoadClass( 'pmScript' ); $pmScript = new PMScript(); - $pmScript->setScript($sExpresion); + $pmScript->setScript( $sExpresion ); - for ($i=1; $i<=count($aGrid); $i++) { + for ($i = 1; $i <= count( $aGrid ); $i ++) { $aFields = $aGrid[$i]; - $pmScript->setFields($aFields); + $pmScript->setFields( $aFields ); $pmScript->execute(); @@ -352,11 +348,12 @@ function evaluateFunction($aGrid, $sExpresion) return $aGrid; } -/** Web Services Functions **/ /** - * @method + * Web Services Functions * + */ +/** * - * Logs in a user to initiate a web services session in a ProcessMaker server. + * @method Logs in a user to initiate a web services session in a ProcessMaker server. * * @name WSLogin * @label WS Login @@ -368,17 +365,19 @@ function evaluateFunction($aGrid, $sExpresion) * @return string | $unique ID | Unique Id |The unique ID for the initiated session. * */ -function WSLogin($user, $pass, $endpoint="") +function WSLogin ($user, $pass, $endpoint = "") { - $client = WSOpen(true); + $client = WSOpen( true ); - $params = array("userid" => $user, "password" => $pass); + $params = array ("userid" => $user,"password" => $pass + ); - $result = $client->__soapCall("login", array($params)); + $result = $client->__soapCall( "login", array ($params + ) ); if ($result->status_code == 0) { if ($endpoint != "") { - if (isset($_SESSION["WS_SESSION_ID"])) { + if (isset( $_SESSION["WS_SESSION_ID"] )) { $_SESSION["WS_END_POINT"] = $endpoint; } } @@ -393,19 +392,19 @@ function WSLogin($user, $pass, $endpoint="") return $result->message; } else { - if (isset($_SESSION["WS_SESSION_ID"])) { - unset($_SESSION["WS_SESSION_ID"]); + if (isset( $_SESSION["WS_SESSION_ID"] )) { + unset( $_SESSION["WS_SESSION_ID"] ); } - $wp = (trim($pass) != "")? "YES" : "NO"; + $wp = (trim( $pass ) != "") ? "YES" : "NO"; - throw new Exception("WSAccess denied! for user $user with password $wp"); + throw new Exception( "WSAccess denied! for user $user with password $wp" ); } } + /** - * @method * - * Opens a connection for web services and returns a SOAP client object which is + * @method Opens a connection for web services and returns a SOAP client object which is * used by all subsequent other WS function calls * * @name WSOpen @@ -416,27 +415,26 @@ function WSLogin($user, $pass, $endpoint="") * @return Object Client | $client | SoapClient object | A SoapClient object. If unable to establish a connection, returns NULL. * */ -function WSOpen($force=false) +function WSOpen ($force = false) { - if (isset($_SESSION["WS_SESSION_ID"]) || $force) { - if (!isset($_SESSION["WS_END_POINT"])) { - $defaultEndpoint = "http://" . $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] - . "/sys" . SYS_SYS . "/en/classic/services/wsdl2"; + if (isset( $_SESSION["WS_SESSION_ID"] ) || $force) { + if (! isset( $_SESSION["WS_END_POINT"] )) { + $defaultEndpoint = "http://" . $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . "/sys" . SYS_SYS . "/en/classic/services/wsdl2"; } - $endpoint = isset($_SESSION["WS_END_POINT"])? $_SESSION["WS_END_POINT"] : $defaultEndpoint; + $endpoint = isset( $_SESSION["WS_END_POINT"] ) ? $_SESSION["WS_END_POINT"] : $defaultEndpoint; - $client = new SoapClient($endpoint); + $client = new SoapClient( $endpoint ); return $client; } else { - throw new Exception("WS session is not open"); + throw new Exception( "WS session is not open" ); } } + /** - * @method * - * Returns all the tasks which has open delegations for the indicated case. + * @method Returns all the tasks which has open delegations for the indicated case. * * @name WSTaskCase * @label WS Task Case @@ -446,29 +444,33 @@ function WSOpen($force=false) * @return array | $rows | Array of tasks open | An array of tasks in the indicated case which have open delegations. * */ -function WSTaskCase($caseId) +function WSTaskCase ($caseId) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId, "caseId" => $caseId); + $params = array ("sessionId" => $sessionId,"caseId" => $caseId + ); - $result = $client->__soapCall("taskCase", array($params)); + $result = $client->__soapCall( "taskCase", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->taskCases)) { + if (isset( $result->taskCases )) { //Processing when it is an array - if (is_array($result->taskCases)) { + if (is_array( $result->taskCases )) { foreach ($result->taskCases as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->taskCases)) { - $rows[$i] = array("guid" => $result->taskCases->guid, "name" => $result->taskCases->name); + if (is_object( $result->taskCases )) { + $rows[$i] = array ("guid" => $result->taskCases->guid,"name" => $result->taskCases->name + ); $i = $i + 1; } } @@ -476,10 +478,10 @@ function WSTaskCase($caseId) return $rows; } + /** - * @method * - * Returns a list of tasks in which the logged-in user can initiate cases or is + * @method Returns a list of tasks in which the logged-in user can initiate cases or is * assigned to these cases. * * @name WSTaskList @@ -489,29 +491,33 @@ function WSTaskCase($caseId) * @return array | $rows |List of tasks | This function returns a list of tasks * */ -function WSTaskList() +function WSTaskList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("TaskList", array($params)); + $result = $client->__soapCall( "TaskList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->tasks)) { + if (isset( $result->tasks )) { //Processing when it is an array - if (is_array($result->tasks)) { + if (is_array( $result->tasks )) { foreach ($result->tasks as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->tasks)) { - $rows[$i] = array("guid" => $result->tasks->guid, "name" => $result->tasks->name); + if (is_object( $result->tasks )) { + $rows[$i] = array ("guid" => $result->tasks->guid,"name" => $result->tasks->name + ); $i = $i + 1; } } @@ -519,10 +525,10 @@ function WSTaskList() return $rows; } + /** - * @method * - * Returns a list of users whose status is "ACTIVE" in the current workspace. + * @method Returns a list of users whose status is "ACTIVE" in the current workspace. * * @name WSUserList * @label WS User List @@ -531,29 +537,33 @@ function WSTaskList() * @return array | $rows | List | List of Active users in the workspace * */ -function WSUserList() +function WSUserList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("UserList", array($params)); + $result = $client->__soapCall( "UserList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->users)) { + if (isset( $result->users )) { //Processing when it is an array - if (is_array($result->users)) { + if (is_array( $result->users )) { foreach ($result->users as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->users)) { - $rows[$i] = array("guid" => $result->users->guid, "name" => $result->users->name); + if (is_object( $result->users )) { + $rows[$i] = array ("guid" => $result->users->guid,"name" => $result->users->name + ); $i = $i + 1; } } @@ -561,10 +571,10 @@ function WSUserList() return $rows; } + /** - * @method * - * Returns a list of active groups in a workspace. + * @method Returns a list of active groups in a workspace. * * @name WSGroupList * @label WS Group List @@ -573,29 +583,33 @@ function WSUserList() * @return array | $rows | List | List of active groups in the workspace * */ -function WSGroupList() +function WSGroupList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("GroupList", array($params)); + $result = $client->__soapCall( "GroupList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->groups)) { + if (isset( $result->groups )) { //Processing when it is an array - if (is_array($result->groups)) { + if (is_array( $result->groups )) { foreach ($result->groups as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->groups)) { - $rows[$i] = array("guid" => $result->groups->guid, "name" => $result->groups->name); + if (is_object( $result->groups )) { + $rows[$i] = array ("guid" => $result->groups->guid,"name" => $result->groups->name + ); $i = $i + 1; } } @@ -605,9 +619,8 @@ function WSGroupList() } /** - * @method * - * Returns a list of roles in the current workspace. + * @method Returns a list of roles in the current workspace. * * @name WSRoleList * @label WS Role List @@ -616,29 +629,33 @@ function WSGroupList() * @return array | $rows | List | List of roles in the workspace * */ -function WSRoleList() +function WSRoleList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("RoleList", array($params)); + $result = $client->__soapCall( "RoleList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->roles)) { + if (isset( $result->roles )) { //Processing when it is an array - if (is_array($result->roles)) { + if (is_array( $result->roles )) { foreach ($result->roles as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->roles)) { - $rows[$i] = array("guid" => $result->roles->guid, "name" => $result->roles->name); + if (is_object( $result->roles )) { + $rows[$i] = array ("guid" => $result->roles->guid,"name" => $result->roles->name + ); $i = $i + 1; } } @@ -646,42 +663,46 @@ function WSRoleList() return $rows; } + /** - * @method * - * Returns a list of the cases which the current logged-in user has privileges to + * @method Returns a list of the cases which the current logged-in user has privileges to * open. * * @name WSCaseList * @label WS Case List - * @Link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSCaseList.28.29 + * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSCaseList.28.29 * * @return array | $rows | List of the cases |It returns a list of cases * */ -function WSCaseList() +function WSCaseList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("CaseList", array($params)); + $result = $client->__soapCall( "CaseList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->cases)) { + if (isset( $result->cases )) { //Processing when it is an array - if (is_array($result->cases)) { + if (is_array( $result->cases )) { foreach ($result->cases as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->cases)) { - $rows[$i] = array("guid" => $result->cases->guid, "name" => $result->cases->name); + if (is_object( $result->cases )) { + $rows[$i] = array ("guid" => $result->cases->guid,"name" => $result->cases->name + ); $i = $i + 1; } } @@ -689,41 +710,45 @@ function WSCaseList() return $rows; } + /** - * @method * - * Returns a list of processes in the current workspace. + * @method Returns a list of processes in the current workspace. * * @name WSProcessList * @label WS Process List - * @Link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSProcessList.28.29 + * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSProcessList.28.29 * * @return array | $rows | List of processes | A list of processes * */ -function WSProcessList() +function WSProcessList () { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId); + $params = array ("sessionId" => $sessionId + ); - $result = $client->__soapCall("ProcessList", array($params)); + $result = $client->__soapCall( "ProcessList", array ($params + ) ); - $rows = array(); + $rows = array (); $i = 0; - if (isset($result->processes)) { + if (isset( $result->processes )) { //Processing when it is an array - if (is_array($result->processes)) { + if (is_array( $result->processes )) { foreach ($result->processes as $key => $obj) { - $rows[$i] = array("guid" => $obj->guid, "name" => $obj->name); + $rows[$i] = array ("guid" => $obj->guid,"name" => $obj->name + ); $i = $i + 1; } } else { //Processing when it is an object //1 row - if (is_object($result->processes)) { - $rows[$i] = array("guid" => $result->processes->guid, "name" => $result->processes->name); + if (is_object( $result->processes )) { + $rows[$i] = array ("guid" => $result->processes->guid,"name" => $result->processes->name + ); $i = $i + 1; } } @@ -731,10 +756,10 @@ function WSProcessList() return $rows; } + /** - * @method * - * Returns Email configuration. + * @method Returns Email configuration. * * @name getEmailConfiguration * @label Get Email Configuration @@ -743,16 +768,15 @@ function WSProcessList() * */ //private function to get current email configuration -function getEmailConfiguration() +function getEmailConfiguration () { - G::loadClass('system'); + G::loadClass( 'system' ); return System::getEmailConfiguration(); } /** - * @method * - * Sends an email using a template file. + * @method Sends an email using a template file. * * @name PMFSendMessage * @label PMF Send Message @@ -766,37 +790,37 @@ function getEmailConfiguration() * @param string(32) | $sSubject | Subject of the email | The subject (title) of the email. * @param string(32) | $sTemplate | Name of the template | The name of the template file in plain text or HTML format which will produce the body of the email. * @param array | $aFields | An optional associative array | Optional parameter. An associative array where the keys are the variable names and the values are the variables' values. - * @param array | $aAttachment | Attachment | An Optional arrray. An array of files (full paths) to be attached to the email. + * @param array | $aAttachment | Attachment | An Optional arrray. An array of files (full paths) to be attached to the email. * @return int | $result | result | Result of sending email * */ //@param array | $aFields=array() | An associative array optional | Optional parameter. An associative array where the keys are the variable name and the values are the variable's value. -function PMFSendMessage($caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplate, $aFields=array(), $aAttachment=array()) +function PMFSendMessage ($caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplate, $aFields = array(), $aAttachment = array()) { global $oPMScript; - if (isset($oPMScript->aFields) && is_array($oPMScript->aFields)) { - if (is_array($aFields)) { - $aFields = array_merge($oPMScript->aFields, $aFields); + if (isset( $oPMScript->aFields ) && is_array( $oPMScript->aFields )) { + if (is_array( $aFields )) { + $aFields = array_merge( $oPMScript->aFields, $aFields ); } else { $aFields = $oPMScript->aFields; } } - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->sendMessage($caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplate, $aFields, $aAttachment); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->sendMessage( $caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplate, $aFields, $aAttachment ); - if ( $result->status_code == 0) { + if ($result->status_code == 0) { return 1; } else { return 0; } } + /** - * @method * - * Sends two variables to the specified case. + * @method Sends two variables to the specified case. * It will create new case variables if they don't already exist * * @name WSSendVariables @@ -811,7 +835,7 @@ function PMFSendMessage($caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplat * @return array | $fields | WS Response Associative Array: | The function returns a WS Response associative array. * */ -function WSSendVariables($caseId, $name1, $value1, $name2, $value2) +function WSSendVariables ($caseId, $name1, $value1, $name2, $value2) { $client = WSOpen(); @@ -825,22 +849,25 @@ function WSSendVariables($caseId, $name1, $value1, $name2, $value2) $v2->name = $name2; $v2->value = $value2; - $variables = array($v1, $v2); + $variables = array ($v1,$v2 + ); - $params = array("sessionId" => $sessionId, "caseId" => $caseId, "variables" => $variables); + $params = array ("sessionId" => $sessionId,"caseId" => $caseId,"variables" => $variables + ); - $result = $client->__soapCall("SendVariables", array($params)); + $result = $client->__soapCall( "SendVariables", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; return $fields; } + /** - * @method * - * Routes (derivates) a case, moving the case to the next task in the process + * @method Routes (derivates) a case, moving the case to the next task in the process * according its routing rules. * * @name WSDerivateCase @@ -852,41 +879,43 @@ function WSSendVariables($caseId, $name1, $value1, $name2, $value2) * @return array | $fields | WS Response Associative Array | A WS Response associative array. * */ -function WSDerivateCase($caseId, $delIndex) +function WSDerivateCase ($caseId, $delIndex) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId, "caseId" => $caseId, "delIndex" => $delIndex); + $params = array ("sessionId" => $sessionId,"caseId" => $caseId,"delIndex" => $delIndex + ); - $result = $client->__soapCall("DerivateCase", array($params)); + $result = $client->__soapCall( "DerivateCase", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; return $fields; } + /** - * @method * - * Creates a case with any user with two initial case variables. + * @method Creates a case with any user with two initial case variables. * * @name WSNewCaseImpersonate * @label WS New Case Impersonate - * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSNewCaseImpersonate.28.29 + * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#WSNewCaseImpersonate.28.29 * * @param string(32) | $processId | Process ID | The unique ID for the process. * @param string(32) | $userId | User ID | The unique ID for the user. - * @param string(32) | $name1 | Name of the first variable | The name of the first variable to be sent to the created case. + * @param string(32) | $name1 | Name of the first variable | The name of the first variable to be sent to the created case. * @param string(32) | $value1 | Value of the first variable | The value of the first variable to be sent to the created case. * @param string(32) | $name2 | Name of the second variable | The name of the second variable to be sent to the created case. * @param string(32) | $value2 | Value of the second variable | The value of the second variable to be sent to the created case. * @return array | $fields | WS Response Associative Array | A WS Response associative array. * */ -function WSNewCaseImpersonate($processId, $userId, $name1, $value1, $name2, $value2) +function WSNewCaseImpersonate ($processId, $userId, $name1, $value1, $name2, $value2) { $client = WSOpen(); @@ -900,27 +929,27 @@ function WSNewCaseImpersonate($processId, $userId, $name1, $value1, $name2, $val $v2->name = $name2; $v2->value = $value2; - $variables = array($v1, $v2); + $variables = array ($v1,$v2 + ); - $params = array("sessionId" => $sessionId, - "processId" => $processId, - "userId" => $userId, - "variables" => $variables); + $params = array ("sessionId" => $sessionId,"processId" => $processId,"userId" => $userId,"variables" => $variables + ); - $result = $client->__soapCall("NewCaseImpersonate", array($params)); + $result = $client->__soapCall( "NewCaseImpersonate", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; - $fields["case_id"] = $result->caseId; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; + $fields["case_id"] = $result->caseId; $fields["case_number"] = $result->caseNumber; return $fields; } + /** - * @method * - * Creates a new case starting with a specified task and using two initial case + * @method Creates a new case starting with a specified task and using two initial case * variables. * * @name WSNewCase @@ -929,14 +958,14 @@ function WSNewCaseImpersonate($processId, $userId, $name1, $value1, $name2, $val * * @param string(32) | $processId | Process ID | The unique ID for the process. To use the current process, use the system variable @@PROCESS. * @param string(32) | $userId | User ID | The unique ID for the user. To use the currently logged-in user, use the system variable @@USER_LOGGED. - * @param string(32) | $name1 | Name of the first variable | The name of the first variable to be sent to the created case. + * @param string(32) | $name1 | Name of the first variable | The name of the first variable to be sent to the created case. * @param string(32) | $value1 | Value of the first variable | The value of the first variable to be sent to the created case. * @param string(32) | $name2 | Name of the second variable | The name of the second variable to be sent to the created case. * @param string(32) | $value2 | Value of the second variable | The value of the second variable to be sent to the created case. * @return array | $fields | WS array | A WS Response associative array. * */ -function WSNewCase($processId, $taskId, $name1, $value1, $name2, $value2) +function WSNewCase ($processId, $taskId, $name1, $value1, $name2, $value2) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; @@ -949,27 +978,27 @@ function WSNewCase($processId, $taskId, $name1, $value1, $name2, $value2) $v2->name = $name2; $v2->value = $value2; - $variables = array($v1, $v2); + $variables = array ($v1,$v2 + ); - $params = array("sessionId" => $sessionId, - "processId" => $processId, - "taskId" => $taskId, - "variables" => $variables); + $params = array ("sessionId" => $sessionId,"processId" => $processId,"taskId" => $taskId,"variables" => $variables + ); - $result = $client->__soapCall("NewCase", array($params)); + $result = $client->__soapCall( "NewCase", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; - $fields["case_id"] = $result->caseId; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; + $fields["case_id"] = $result->caseId; $fields["case_number"] = $result->caseNumber; return $fields; } + /** - * @method * - * Assigns a user to a group (as long as the logged in user has the PM_USERS + * @method Assigns a user to a group (as long as the logged in user has the PM_USERS * permission in their role). * * @name WSAssignUserToGroup @@ -981,27 +1010,28 @@ function WSNewCase($processId, $taskId, $name1, $value1, $name2, $value2) * @return array | $fields | WS array |A WS Response associative array. * */ -function WSAssignUserToGroup($userId, $groupId) +function WSAssignUserToGroup ($userId, $groupId) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array("sessionId" => $sessionId, "userId" => $userId, "groupId" => $groupId); + $params = array ("sessionId" => $sessionId,"userId" => $userId,"groupId" => $groupId + ); - $result = $client->__soapCall("AssignUserToGroup", array($params)); + $result = $client->__soapCall( "AssignUserToGroup", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; return $fields; } /** - * @method * - * Creates a new user in ProcessMaker. + * @method Creates a new user in ProcessMaker. * * @name WSCreateUser * @label WS Create User @@ -1018,37 +1048,28 @@ function WSAssignUserToGroup($userId, $groupId) * @return array | $fields | WS array | A WS Response associative array. * */ -function WSCreateUser($userId, $password, $firstname, $lastname, $email, $role, $dueDate=null, $status=null) +function WSCreateUser ($userId, $password, $firstname, $lastname, $email, $role, $dueDate = null, $status = null) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "userId" => $userId, - "firstname" => $firstname, - "lastname" => $lastname, - "email" => $email, - "role" => $role, - "password" => $password, - "dueDate" => $dueDate, - "status" => $status + $params = array ("sessionId" => $sessionId,"userId" => $userId,"firstname" => $firstname,"lastname" => $lastname,"email" => $email,"role" => $role,"password" => $password,"dueDate" => $dueDate,"status" => $status ); - $result = $client->__soapCall("CreateUser", array($params)); + $result = $client->__soapCall( "CreateUser", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; return $fields; } /** - * @method * - * Update an user in ProcessMaker. + * @method Update an user in ProcessMaker. * * @name WSUpdateUser * @label WS Update User @@ -1066,47 +1087,28 @@ function WSCreateUser($userId, $password, $firstname, $lastname, $email, $role, * @return array | $fields | WS array | A WS Response associative array. * */ -function WSUpdateUser( - $userUid, - $userName, - $firstName=null, - $lastName=null, - $email=null, - $dueDate=null, - $status=null, - $role=null, - $password=null -) { +function WSUpdateUser ($userUid, $userName, $firstName = null, $lastName = null, $email = null, $dueDate = null, $status = null, $role = null, $password = null) +{ $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "userUid" => $userUid, - "userName" => $userName, - "firstName" => $firstName, - "lastName" => $lastName, - "email" => $email, - "dueDate" => $dueDate, - "status" => $status, - "role" => $role, - "password" => $password + $params = array ("sessionId" => $sessionId,"userUid" => $userUid,"userName" => $userName,"firstName" => $firstName,"lastName" => $lastName,"email" => $email,"dueDate" => $dueDate,"status" => $status,"role" => $role,"password" => $password ); - $result = $client->__soapCall("updateUser", array($params)); + $result = $client->__soapCall( "updateUser", array ($params + ) ); $fields["status_code"] = $result->status_code; - $fields["message"] = $result->message; - $fields["time_stamp"] = $result->timestamp; + $fields["message"] = $result->message; + $fields["time_stamp"] = $result->timestamp; return $fields; } /** - * @method * - * Returns the unique ID for the current active session. + * @method Returns the unique ID for the current active session. * * @name WSGetSession * @label WS Get Session @@ -1115,19 +1117,18 @@ function WSUpdateUser( * @return string | $userId | Sesion ID | The unique ID for the current active session. * */ -function WSGetSession() +function WSGetSession () { - if (isset($_SESSION["WS_SESSION_ID"])) { + if (isset( $_SESSION["WS_SESSION_ID"] )) { return $_SESSION["WS_SESSION_ID"]; } else { - throw new Exception("SW session is not open!"); + throw new Exception( "SW session is not open!" ); } } /** - * @method * - * Delete a specified case. + * @method Delete a specified case. * * @name WSDeleteCase * @label WS Delete Case @@ -1137,31 +1138,29 @@ function WSGetSession() * @return array | $response | WS array | A WS Response associative array. * */ -function WSDeleteCase($caseUid) +function WSDeleteCase ($caseUid) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "caseUid" => $caseUid + $params = array ("sessionId" => $sessionId,"caseUid" => $caseUid ); - $result = $client->__soapCall("deleteCase", array($params)); + $result = $client->__soapCall( "deleteCase", array ($params + ) ); - $response = array(); + $response = array (); $response["status_code"] = $result->status_code; - $response["message"] = $result->message; - $response["time_stamp"] = $result->timestamp; + $response["message"] = $result->message; + $response["time_stamp"] = $result->timestamp; return $response; } /** - * @method * - * Cancel a specified case. + * @method Cancel a specified case. * * @name WSCancelCase * @label WS Cancel Case @@ -1173,33 +1172,29 @@ function WSDeleteCase($caseUid) * @return array | $response | WS array | A WS Response associative array. * */ -function WSCancelCase($caseUid, $delIndex, $userUid) +function WSCancelCase ($caseUid, $delIndex, $userUid) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "caseUid" => $caseUid, - "delIndex" => $delIndex, - "userUid" => $userUid + $params = array ("sessionId" => $sessionId,"caseUid" => $caseUid,"delIndex" => $delIndex,"userUid" => $userUid ); - $result = $client->__soapCall("cancelCase", array($params)); + $result = $client->__soapCall( "cancelCase", array ($params + ) ); - $response = array(); + $response = array (); $response["status_code"] = $result->status_code; - $response["message"] = $result->message; - $response["time_stamp"] = $result->timestamp; + $response["message"] = $result->message; + $response["time_stamp"] = $result->timestamp; return $response; } /** - * @method * - * Pauses a specified case. + * @method Pauses a specified case. * * @name WSPauseCase * @label WS Pause Case @@ -1212,34 +1207,29 @@ function WSCancelCase($caseUid, $delIndex, $userUid) * @return array | $response | WS array | A WS Response associative array. * */ -function WSPauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) +function WSPauseCase ($caseUid, $delIndex, $userUid, $unpauseDate = null) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "caseUid" => $caseUid, - "delIndex" => $delIndex, - "userUid" => $userUid, - "unpauseDate" => $unpauseDate + $params = array ("sessionId" => $sessionId,"caseUid" => $caseUid,"delIndex" => $delIndex,"userUid" => $userUid,"unpauseDate" => $unpauseDate ); - $result = $client->__soapCall("pauseCase", array($params)); + $result = $client->__soapCall( "pauseCase", array ($params + ) ); - $response = array(); + $response = array (); $response["status_code"] = $result->status_code; - $response["message"] = $result->message; - $response["time_stamp"] = $result->timestamp; + $response["message"] = $result->message; + $response["time_stamp"] = $result->timestamp; return $response; } /** - * @method * - * Unpause a specified case. + * @method Unpause a specified case. * * @name WSUnpauseCase * @label WS Unpause Case @@ -1251,37 +1241,36 @@ function WSPauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) * @return array | $response | WS array | A WS Response associative array. * */ -function WSUnpauseCase($caseUid, $delIndex, $userUid) +function WSUnpauseCase ($caseUid, $delIndex, $userUid) { $client = WSOpen(); $sessionId = $_SESSION["WS_SESSION_ID"]; - $params = array( - "sessionId" => $sessionId, - "caseUid" => $caseUid, - "delIndex" => $delIndex, - "userUid" => $userUid + $params = array ("sessionId" => $sessionId,"caseUid" => $caseUid,"delIndex" => $delIndex,"userUid" => $userUid ); - $result = $client->__soapCall("unpauseCase", array($params)); + $result = $client->__soapCall( "unpauseCase", array ($params + ) ); - $response = array(); + $response = array (); $response["status_code"] = $result->status_code; - $response["message"] = $result->message; - $response["time_stamp"] = $result->timestamp; + $response["message"] = $result->message; + $response["time_stamp"] = $result->timestamp; return $response; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/** Local Services Functions **/ /** - * @method + * Local Services Functions * + */ + +/** * - * Returns all the tasks for the specified case which have open delegations. + * @method Returns all the tasks for the specified case which have open delegations. * * @name PMFTaskCase * @label PMF Task Case @@ -1291,24 +1280,24 @@ function WSUnpauseCase($caseUid, $delIndex, $userUid) * @return array | $rows | List of tasks | A list of tasks * */ -function PMFTaskCase($caseId) //its test was successfull +function PMFTaskCase ($caseId) //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->taskCase($caseId); - $rows = Array(); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->taskCase( $caseId ); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } + /** - * @method * - * Returns a list of tasks which the specified user has initiated. + * @method Returns a list of tasks which the specified user has initiated. * * @name PMFTaskList * @label PMF Task List @@ -1318,24 +1307,24 @@ function PMFTaskCase($caseId) //its test was successfull * @return array | $rows | List of tasks | An array of tasks * */ -function PMFTaskList($userId) //its test was successfull +function PMFTaskList ($userId) //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->taskList($userId); - $rows = Array(); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->taskList( $userId ); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } + /** - * @method * - * Returns a list of users whose status is set to "ACTIVE" for the current workspace. + * @method Returns a list of users whose status is set to "ACTIVE" for the current workspace. * * @name PMFUserList * @label PMF User List @@ -1344,24 +1333,24 @@ function PMFTaskList($userId) //its test was successfull * @return array | $rows | List of users | An array of users * */ -function PMFUserList() //its test was successfull +function PMFUserList () //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); $result = $ws->userList(); - $rows = Array(); - $i = 1; - if (isset ($result)) { + $rows = Array (); + $i = 1; + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } + /** - * @method * - * Generates an Output Document + * @method Generates an Output Document * * @name PMFGenerateOutputDocument * @label PMF Generate Output Document @@ -1370,241 +1359,180 @@ function PMFUserList() //its test was successfull * @return none | $none | None | None * */ -function PMFGenerateOutputDocument($outputID, $sApplication=null, $index=null, $sUserLogged=null) +function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = null, $sUserLogged = null) { - if (!$sApplication) { + if (! $sApplication) { $sApplication = $_SESSION['APPLICATION']; } - if (!$index) { + if (! $index) { $index = $_SESSION['INDEX']; } - if (!$sUserLogged) { + if (! $sUserLogged) { $sUserLogged = $_SESSION['USER_LOGGED']; } - G::LoadClass('case'); + G::LoadClass( 'case' ); $oCase = new Cases(); - $oCase->thisIsTheCurrentUser($sApplication, $index, $sUserLogged, '', 'cases_List'); + $oCase->thisIsTheCurrentUser( $sApplication, $index, $sUserLogged, '', 'cases_List' ); //require_once 'classes/model/OutputDocument.php'; $oOutputDocument = new OutputDocument(); - $aOD = $oOutputDocument->load($outputID); + $aOD = $oOutputDocument->load( $outputID ); $Fields = $oCase->loadCase( $sApplication ); //The $_GET['UID'] variable is used when a process executes. //$_GET['UID']=($aOD['OUT_DOC_VERSIONING'])?$_GET['UID']:$aOD['OUT_DOC_UID']; //$sUID = ($aOD['OUT_DOC_VERSIONING'])?$_GET['UID']:$aOD['OUT_DOC_UID']; - $sFilename = preg_replace('[^A-Za-z0-9_]', '_', G::replaceDataField($aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'])); + $sFilename = preg_replace( '[^A-Za-z0-9_]', '_', G::replaceDataField( $aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'] ) ); require_once 'classes/model/AppFolder.php'; require_once 'classes/model/AppDocument.php'; //Get the Custom Folder ID (create if necessary) - $oFolder=new AppFolder(); + $oFolder = new AppFolder(); //$aOD['OUT_DOC_DESTINATION_PATH'] = ($aOD['OUT_DOC_DESTINATION_PATH']=='')?PATH_DOCUMENT // . $_SESSION['APPLICATION'] . PATH_SEP . 'outdocs'. PATH_SEP:$aOD['OUT_DOC_DESTINATION_PATH']; - $folderId=$oFolder->createFromPath($aOD['OUT_DOC_DESTINATION_PATH'], $sApplication); + $folderId = $oFolder->createFromPath( $aOD['OUT_DOC_DESTINATION_PATH'], $sApplication ); //Tags - $fileTags=$oFolder->parseTags($aOD['OUT_DOC_TAGS'], $sApplication); + $fileTags = $oFolder->parseTags( $aOD['OUT_DOC_TAGS'], $sApplication ); //Get last Document Version and apply versioning if is enabled - $oAppDocument= new AppDocument(); - $lastDocVersion=$oAppDocument->getLastDocVersion($outputID, $sApplication); + $oAppDocument = new AppDocument(); + $lastDocVersion = $oAppDocument->getLastDocVersion( $outputID, $sApplication ); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(AppDocumentPeer::APP_UID, $sApplication); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( AppDocumentPeer::APP_UID, $sApplication ); //$oCriteria->add(AppDocumentPeer::DEL_INDEX, $index); - $oCriteria->add(AppDocumentPeer::DOC_UID, $outputID); - $oCriteria->add(AppDocumentPeer::DOC_VERSION, $lastDocVersion); - $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); - $oDataset = AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->add( AppDocumentPeer::DOC_UID, $outputID ); + $oCriteria->add( AppDocumentPeer::DOC_VERSION, $lastDocVersion ); + $oCriteria->add( AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT' ); + $oDataset = AppDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - if (($aOD['OUT_DOC_VERSIONING'])&&($lastDocVersion!=0)) { + if (($aOD['OUT_DOC_VERSIONING']) && ($lastDocVersion != 0)) { //Create new Version of current output - $lastDocVersion++; + $lastDocVersion ++; if ($aRow = $oDataset->getRow()) { - $aFields = array('APP_DOC_UID' => $aRow['APP_DOC_UID'], - 'APP_UID' => $sApplication, - 'DEL_INDEX' => $index, - 'DOC_UID' => $outputID, - 'DOC_VERSION' => $lastDocVersion+1, - 'USR_UID' => $sUserLogged, - 'APP_DOC_TYPE' => 'OUTPUT', - 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), - 'APP_DOC_FILENAME' => $sFilename, - 'FOLDER_UID' => $folderId, - 'APP_DOC_TAGS' => $fileTags); + $aFields = array ('APP_DOC_UID' => $aRow['APP_DOC_UID'],'APP_UID' => $sApplication,'DEL_INDEX' => $index,'DOC_UID' => $outputID,'DOC_VERSION' => $lastDocVersion + 1,'USR_UID' => $sUserLogged,'APP_DOC_TYPE' => 'OUTPUT','APP_DOC_CREATE_DATE' => date( 'Y-m-d H:i:s' ),'APP_DOC_FILENAME' => $sFilename,'FOLDER_UID' => $folderId,'APP_DOC_TAGS' => $fileTags + ); $oAppDocument = new AppDocument(); - $oAppDocument->create($aFields); + $oAppDocument->create( $aFields ); $sDocUID = $aRow['APP_DOC_UID']; } } else { ////No versioning so Update a current Output or Create new if no exist if ($aRow = $oDataset->getRow()) { //Update - $aFields = array('APP_DOC_UID' => $aRow['APP_DOC_UID'], - 'APP_UID' => $sApplication, - 'DEL_INDEX' => $index, - 'DOC_UID' => $outputID, - 'DOC_VERSION' => $lastDocVersion, - 'USR_UID' => $sUserLogged, - 'APP_DOC_TYPE' => 'OUTPUT', - 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), - 'APP_DOC_FILENAME' => $sFilename, - 'FOLDER_UID' => $folderId, - 'APP_DOC_TAGS' => $fileTags); + $aFields = array ('APP_DOC_UID' => $aRow['APP_DOC_UID'],'APP_UID' => $sApplication,'DEL_INDEX' => $index,'DOC_UID' => $outputID,'DOC_VERSION' => $lastDocVersion,'USR_UID' => $sUserLogged,'APP_DOC_TYPE' => 'OUTPUT','APP_DOC_CREATE_DATE' => date( 'Y-m-d H:i:s' ),'APP_DOC_FILENAME' => $sFilename,'FOLDER_UID' => $folderId,'APP_DOC_TAGS' => $fileTags + ); $oAppDocument = new AppDocument(); - $oAppDocument->update($aFields); + $oAppDocument->update( $aFields ); $sDocUID = $aRow['APP_DOC_UID']; } else { //we are creating the appdocument row //create - if ($lastDocVersion==0) { - $lastDocVersion++; + if ($lastDocVersion == 0) { + $lastDocVersion ++; } - $aFields = array('APP_UID' => $sApplication, - 'DEL_INDEX' => $index, - 'DOC_UID' => $outputID, - 'DOC_VERSION' => $lastDocVersion, - 'USR_UID' => $sUserLogged, - 'APP_DOC_TYPE' => 'OUTPUT', - 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), - 'APP_DOC_FILENAME' => $sFilename, - 'FOLDER_UID' => $folderId, - 'APP_DOC_TAGS' => $fileTags); + $aFields = array ('APP_UID' => $sApplication,'DEL_INDEX' => $index,'DOC_UID' => $outputID,'DOC_VERSION' => $lastDocVersion,'USR_UID' => $sUserLogged,'APP_DOC_TYPE' => 'OUTPUT','APP_DOC_CREATE_DATE' => date( 'Y-m-d H:i:s' ),'APP_DOC_FILENAME' => $sFilename,'FOLDER_UID' => $folderId,'APP_DOC_TAGS' => $fileTags + ); $oAppDocument = new AppDocument(); - $aFields['APP_DOC_UID']=$sDocUID = $oAppDocument->create($aFields); + $aFields['APP_DOC_UID'] = $sDocUID = $oAppDocument->create( $aFields ); } } - $sFilename = $aFields['APP_DOC_UID']. "_".$lastDocVersion; + $sFilename = $aFields['APP_DOC_UID'] . "_" . $lastDocVersion; - $pathOutput = PATH_DOCUMENT . $sApplication . PATH_SEP . 'outdocs'. PATH_SEP ;//G::pr($sFilename);die; - G::mk_dir ( $pathOutput ); + $pathOutput = PATH_DOCUMENT . $sApplication . PATH_SEP . 'outdocs' . PATH_SEP; //G::pr($sFilename);die; + G::mk_dir( $pathOutput ); - $aProperties = array(); + $aProperties = array (); - if (!isset($aOD['OUT_DOC_MEDIA'])) { + if (! isset( $aOD['OUT_DOC_MEDIA'] )) { $aOD['OUT_DOC_MEDIA'] = 'Letter'; } - if (!isset($aOD['OUT_DOC_LEFT_MARGIN'])) { + if (! isset( $aOD['OUT_DOC_LEFT_MARGIN'] )) { $aOD['OUT_DOC_LEFT_MARGIN'] = '15'; } - if (!isset($aOD['OUT_DOC_RIGHT_MARGIN'])) { + if (! isset( $aOD['OUT_DOC_RIGHT_MARGIN'] )) { $aOD['OUT_DOC_RIGHT_MARGIN'] = '15'; } - if (!isset($aOD['OUT_DOC_TOP_MARGIN'])) { + if (! isset( $aOD['OUT_DOC_TOP_MARGIN'] )) { $aOD['OUT_DOC_TOP_MARGIN'] = '15'; } - if (!isset($aOD['OUT_DOC_BOTTOM_MARGIN'])) { + if (! isset( $aOD['OUT_DOC_BOTTOM_MARGIN'] )) { $aOD['OUT_DOC_BOTTOM_MARGIN'] = '15'; } - $aProperties['media'] = $aOD['OUT_DOC_MEDIA']; - $aProperties['margins'] = array('left' => $aOD['OUT_DOC_LEFT_MARGIN'], - 'right' => $aOD['OUT_DOC_RIGHT_MARGIN'], - 'top' => $aOD['OUT_DOC_TOP_MARGIN'], - 'bottom' => $aOD['OUT_DOC_BOTTOM_MARGIN']); - $oOutputDocument->generate( $outputID, $Fields['APP_DATA'], $pathOutput, $sFilename, $aOD['OUT_DOC_TEMPLATE'], - (boolean)$aOD['OUT_DOC_LANDSCAPE'], $aOD['OUT_DOC_GENERATE'] ); + $aProperties['margins'] = array ('left' => $aOD['OUT_DOC_LEFT_MARGIN'],'right' => $aOD['OUT_DOC_RIGHT_MARGIN'],'top' => $aOD['OUT_DOC_TOP_MARGIN'],'bottom' => $aOD['OUT_DOC_BOTTOM_MARGIN'] + ); + $oOutputDocument->generate( $outputID, $Fields['APP_DATA'], $pathOutput, $sFilename, $aOD['OUT_DOC_TEMPLATE'], (boolean) $aOD['OUT_DOC_LANDSCAPE'], $aOD['OUT_DOC_GENERATE'] ); //Plugin Hook PM_UPLOAD_DOCUMENT for upload document //G::LoadClass('plugin'); - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - if ( $oPluginRegistry->existsTrigger ( PM_UPLOAD_DOCUMENT ) && class_exists ('uploadDocumentData' ) ) { - $triggerDetail=$oPluginRegistry->getTriggerInfo( PM_UPLOAD_DOCUMENT ); - $aFields['APP_DOC_PLUGIN']=$triggerDetail->sNamespace; + $oPluginRegistry = & PMPluginRegistry::getSingleton(); + if ($oPluginRegistry->existsTrigger( PM_UPLOAD_DOCUMENT ) && class_exists( 'uploadDocumentData' )) { + $triggerDetail = $oPluginRegistry->getTriggerInfo( PM_UPLOAD_DOCUMENT ); + $aFields['APP_DOC_PLUGIN'] = $triggerDetail->sNamespace; $oAppDocument1 = new AppDocument(); - $oAppDocument1->update($aFields); + $oAppDocument1->update( $aFields ); $sPathName = PATH_DOCUMENT . $sApplication . PATH_SEP; - $oData['APP_UID'] = $sApplication; + $oData['APP_UID'] = $sApplication; $oData['ATTACHMENT_FOLDER'] = true; switch ($aOD['OUT_DOC_GENERATE']) { case "BOTH": - $documentData = new uploadDocumentData ( - $sApplication, - $sUserLogged, - $pathOutput . $sFilename . '.pdf', - $sFilename. '.pdf', - $sDocUID, - $oAppDocument->getDocVersion() - ); + $documentData = new uploadDocumentData( $sApplication, $sUserLogged, $pathOutput . $sFilename . '.pdf', $sFilename . '.pdf', $sDocUID, $oAppDocument->getDocVersion() ); $documentData->sFileType = "PDF"; $documentData->bUseOutputFolder = true; - $uploadReturn=$oPluginRegistry->executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData ); + $uploadReturn = $oPluginRegistry->executeTriggers( PM_UPLOAD_DOCUMENT, $documentData ); if ($uploadReturn) { //Only delete if the file was saved correctly - unlink ( $pathOutput . $sFilename. '.pdf' ); + unlink( $pathOutput . $sFilename . '.pdf' ); } - - - $documentData = new uploadDocumentData ( - $sApplication, - $sUserLogged, - $pathOutput . $sFilename . '.doc', - $sFilename. '.doc', - $sDocUID, - $oAppDocument->getDocVersion() - ); + $documentData = new uploadDocumentData( $sApplication, $sUserLogged, $pathOutput . $sFilename . '.doc', $sFilename . '.doc', $sDocUID, $oAppDocument->getDocVersion() ); $documentData->sFileType = "DOC"; $documentData->bUseOutputFolder = true; - $uploadReturn = $oPluginRegistry->executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData ); + $uploadReturn = $oPluginRegistry->executeTriggers( PM_UPLOAD_DOCUMENT, $documentData ); if ($uploadReturn) { //Only delete if the file was saved correctly - unlink ( $pathOutput . $sFilename. '.doc' ); + unlink( $pathOutput . $sFilename . '.doc' ); } break; case "PDF": - $documentData = new uploadDocumentData ( - $sApplication, - $sUserLogged, - $pathOutput . $sFilename . '.pdf', - $sFilename. '.pdf', - $sDocUID, - $oAppDocument->getDocVersion() - ); - + $documentData = new uploadDocumentData( $sApplication, $sUserLogged, $pathOutput . $sFilename . '.pdf', $sFilename . '.pdf', $sDocUID, $oAppDocument->getDocVersion() ); $documentData->sFileType = "PDF"; $documentData->bUseOutputFolder = true; - $uploadReturn=$oPluginRegistry->executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData ); + $uploadReturn = $oPluginRegistry->executeTriggers( PM_UPLOAD_DOCUMENT, $documentData ); if ($uploadReturn) { //Only delete if the file was saved correctly - unlink ( $pathOutput . $sFilename. '.pdf' ); + unlink( $pathOutput . $sFilename . '.pdf' ); } break; case "DOC": - $documentData = new uploadDocumentData ( - $sApplication, - $sUserLogged, - $pathOutput . $sFilename . '.doc', - $sFilename. '.doc', - $sDocUID, - $oAppDocument->getDocVersion() - ); + $documentData = new uploadDocumentData( $sApplication, $sUserLogged, $pathOutput . $sFilename . '.doc', $sFilename . '.doc', $sDocUID, $oAppDocument->getDocVersion() ); $documentData->sFileType = "DOC"; $documentData->bUseOutputFolder = true; - $uploadReturn=$oPluginRegistry->executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData ); + $uploadReturn = $oPluginRegistry->executeTriggers( PM_UPLOAD_DOCUMENT, $documentData ); if ($uploadReturn) { //Only delete if the file was saved correctly - unlink ( $pathOutput . $sFilename. '.doc' ); + unlink( $pathOutput . $sFilename . '.doc' ); } break; } } } + /** - * @method * - * Returns a list of groups from the current workspace + * @method Returns a list of groups from the current workspace * * @name PMFGroupList * @label PMF Group List @@ -1613,25 +1541,24 @@ function PMFGenerateOutputDocument($outputID, $sApplication=null, $index=null, $ * @return array | $rows | List of groups | An array of groups * */ -function PMFGroupList() //its test was successfull +function PMFGroupList () //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); $result = $ws->groupList(); - $rows = Array(); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } /** - * @method * - * Returns a list of roles whose status is "ACTIVE" for the current workspace. + * @method Returns a list of roles whose status is "ACTIVE" for the current workspace. * * @name PMFRoleList * @label PMF Role List @@ -1640,24 +1567,24 @@ function PMFGroupList() //its test was successfull * @return array | $rows | List of roles | This function returns an array of roles * */ -function PMFRoleList() //its test was successfull +function PMFRoleList () //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); $result = $ws->roleList(); - $rows = Array(); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } + /** - * @method * - * Returns a list of the pending cases for a specified user + * @method Returns a list of the pending cases for a specified user * * @name PMFCaseList * @label PMF Case List @@ -1667,24 +1594,24 @@ function PMFRoleList() //its test was successfull * @return array | $rows | List of cases | A list of cases * */ -function PMFCaseList($userId) //its test was successfull +function PMFCaseList ($userId) //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->caseList($userId); - $rows = Array(); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->caseList( $userId ); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } + /** - * @method * - * Returns a list of processes for the current workspace + * @method Returns a list of processes for the current workspace * * @name PMFProcessList * @label PMF Process List @@ -1693,25 +1620,24 @@ function PMFCaseList($userId) //its test was successfull * @return array | $rows | Lis ot Processes | An array of tasks in the indicated case which have open delegations * */ -function PMFProcessList() //its test was successfull +function PMFProcessList () //its test was successfull { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); $result = $ws->processList(); - $rows = Array(); + $rows = Array (); $i = 1; - if (isset ($result)) { + if (isset( $result )) { foreach ($result as $item) { - $rows[$i++] = $item; + $rows[$i ++] = $item; } } return $rows; } /** - * @method * - * Sends an array of case variables to a specified case. + * @method Sends an array of case variables to a specified case. * * @name PMFSendVariables * @label PMF Send Variables @@ -1722,43 +1648,43 @@ function PMFProcessList() //its test was successfull * @return int | $result | Result of send variables | Returns 1 if the variables were sent successfully to the case; otherwise, returns 0 if an error occurred. * */ -function PMFSendVariables($caseId, $variables) +function PMFSendVariables ($caseId, $variables) { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); - $result = $ws->sendVariables($caseId, $variables); + $result = $ws->sendVariables( $caseId, $variables ); if ($result->status_code == 0) { return 1; } else { return 0; } } + /** - * @method * - * Derivates (routes) a case to the next task in the process. + * @method Derivates (routes) a case to the next task in the process. * * @name PMFDerivateCase * @label PMF Derivate Case * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFDerivateCase.28.29 * * @param string(32) | $caseId | Case ID | The unique ID for the case to be derivated (routed) - * @param int | $delIndex | delegation index for the case | The delegation index for the case to derivated (routed). + * @param int | $delIndex | delegation index for the case | The delegation index for the case to derivated (routed). * @param boolean | $bExecuteTriggersBeforeAssignment = false | Trigger | Optional parameter. If set to true, any triggers which are assigned to pending steps in the current task will be executed before the case is assigned to the next user. * @param boolean | $sUserLogged = null | User ID | Optional parameter. The unique ID of the user who will route the case. This should be set to the user who is currently designated to work on the case. If omitted or set to NULL, then the currently logged-in user will route the case. * @return int | $result | Result of Derivate case | Returns 1 if new case was derivated (routed) successfully; otherwise, returns 0 if an error occurred. * */ -function PMFDerivateCase($caseId, $delIndex, $bExecuteTriggersBeforeAssignment=false, $sUserLogged=null) +function PMFDerivateCase ($caseId, $delIndex, $bExecuteTriggersBeforeAssignment = false, $sUserLogged = null) { - if (!$sUserLogged) { + if (! $sUserLogged) { $sUserLogged = $_SESSION['USER_LOGGED']; } - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->derivateCase($sUserLogged, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment); - if (isset($result->status_code)) { + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->derivateCase( $sUserLogged, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment ); + if (isset( $result->status_code )) { return $result->status_code; } else { return 0; @@ -1769,10 +1695,10 @@ function PMFDerivateCase($caseId, $delIndex, $bExecuteTriggersBeforeAssignment=f return 0; } } + /** - * @method * - * Creates a new case with a user who can impersonate a user with the proper + * @method Creates a new case with a user who can impersonate a user with the proper * privileges. * * @name PMFNewCaseImpersonate @@ -1785,12 +1711,12 @@ function PMFDerivateCase($caseId, $delIndex, $bExecuteTriggersBeforeAssignment=f * @return int | $result | Result | Returns 1 if new case was created successfully; otherwise, returns 0 if an error occurred. * */ -function PMFNewCaseImpersonate($processId, $userId, $variables) +function PMFNewCaseImpersonate ($processId, $userId, $variables) { - G::LoadClass("wsBase"); + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->newCaseImpersonate($processId, $userId, $variables); + $result = $ws->newCaseImpersonate( $processId, $userId, $variables ); if ($result->status_code == 0) { return $result->caseId; @@ -1798,10 +1724,10 @@ function PMFNewCaseImpersonate($processId, $userId, $variables) return 0; } } + /** - * @method * - * Creates a new case starting with the specified task + * @method Creates a new case starting with the specified task * * @name PMFNewCase * @label PMF New Case @@ -1814,12 +1740,12 @@ function PMFNewCaseImpersonate($processId, $userId, $variables) * @return string | $idNewCase | Case ID | If an error occured, it returns the integer zero. Otherwise, it returns a string with the case UID of the new case. * */ -function PMFNewCase($processId, $userId, $taskId, $variables) +function PMFNewCase ($processId, $userId, $taskId, $variables) { - G::LoadClass('wsBase'); - $ws = new wsBase (); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); - $result = $ws->newCase($processId, $userId,$taskId, $variables); + $result = $ws->newCase( $processId, $userId, $taskId, $variables ); if ($result->status_code == 0) { return $result->caseId; @@ -1827,10 +1753,10 @@ function PMFNewCase($processId, $userId, $taskId, $variables) return 0; } } + /** - * @method * - * Assigns a user to a group. + * @method Assigns a user to a group. * * @name PMFAssignUserToGroup * @label PMF Assign User To Group @@ -1841,11 +1767,11 @@ function PMFNewCase($processId, $userId, $taskId, $variables) * @return int | $result | Result of the assignment | Returns 1 if the user was successfully assigned to the group; otherwise, returns 0. * */ -function PMFAssignUserToGroup($userId, $groupId) +function PMFAssignUserToGroup ($userId, $groupId) { - G::LoadClass('wsBase'); - $ws = new wsBase (); - $result = $ws->assignUserToGroup($userId, $groupId); + G::LoadClass( 'wsBase' ); + $ws = new wsBase(); + $result = $ws->assignUserToGroup( $userId, $groupId ); if ($result->status_code == 0) { return 1; @@ -1855,9 +1781,8 @@ function PMFAssignUserToGroup($userId, $groupId) } /** - * @method * - * Creates a new user with the given data. + * @method Creates a new user with the given data. * * @name PMFCreateUser * @label PMF Create User @@ -1874,12 +1799,12 @@ function PMFAssignUserToGroup($userId, $groupId) * @return int | $result | Result of the creation | Returns 1 if the new user was created successfully; otherwise, returns 0 if an error occurred. * */ -function PMFCreateUser($userId, $password, $firstname, $lastname, $email, $role, $dueDate=null, $status=null) +function PMFCreateUser ($userId, $password, $firstname, $lastname, $email, $role, $dueDate = null, $status = null) { - G::LoadClass('wsBase'); + G::LoadClass( 'wsBase' ); $ws = new wsBase(); - $result = $ws->createUser($userId, $firstname, $lastname, $email, $role, $password, $dueDate, $status); + $result = $ws->createUser( $userId, $firstname, $lastname, $email, $role, $password, $dueDate, $status ); if ($result->status_code == 0) { return 1; @@ -1889,9 +1814,8 @@ function PMFCreateUser($userId, $password, $firstname, $lastname, $email, $role, } /** - * @method * - * Update a user with the given data. + * @method Update a user with the given data. * * @name PMFUpdateUser * @label PMF Update User @@ -1909,21 +1833,12 @@ function PMFCreateUser($userId, $password, $firstname, $lastname, $email, $role, * @return int | $result | Result of the update | Returns 1 if the user is updated successfully; otherwise, returns 0 if an error occurred. * */ -function PMFUpdateUser( - $userUid, - $userName, - $firstName=null, - $lastName=null, - $email=null, - $dueDate=null, - $status=null, - $role=null, - $password=null -) { - G::LoadClass("wsBase"); +function PMFUpdateUser ($userUid, $userName, $firstName = null, $lastName = null, $email = null, $dueDate = null, $status = null, $role = null, $password = null) +{ + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->updateUser($userUid, $userName, $firstName, $lastName, $email, $dueDate, $status, $role, $password); + $result = $ws->updateUser( $userUid, $userName, $firstName, $lastName, $email, $dueDate, $status, $role, $password ); if ($result->status_code == 0) { return 1; @@ -1933,9 +1848,8 @@ function PMFUpdateUser( } /** - * @method * - * Creates a random string of letters and/or numbers of a specified length,which + * @method Creates a random string of letters and/or numbers of a specified length,which * can be used as the PINs (public identification numbers) and codes for cases. * * @name generateCode @@ -1947,15 +1861,14 @@ function PMFUpdateUser( * @return string | $generateString | Generated string | The generated string of random characters. * */ -function generateCode($iDigits=4, $sType='NUMERIC') +function generateCode ($iDigits = 4, $sType = 'NUMERIC') { - return G::generateCode ($iDigits, $sType ); + return G::generateCode( $iDigits, $sType ); } /** - * @method * - * Sets the code and PIN for a case. + * @method Sets the code and PIN for a case. * * @name setCaseTrackerCode * @label set Case Tracker Code @@ -1967,27 +1880,27 @@ function generateCode($iDigits=4, $sType='NUMERIC') * @return int | $result | Result | If successful, returns zero, otherwise a non-zero error number. * */ -function setCaseTrackerCode($sApplicationUID, $sCode, $sPIN='') +function setCaseTrackerCode ($sApplicationUID, $sCode, $sPIN = '') { if ($sCode != '') { - G::LoadClass('case'); - $oCase = new Cases(); - $aFields = $oCase->loadCase($sApplicationUID); + G::LoadClass( 'case' ); + $oCase = new Cases(); + $aFields = $oCase->loadCase( $sApplicationUID ); $aFields['APP_PROC_CODE'] = $sCode; if ($sPIN != '') { $aFields['APP_DATA']['PIN'] = $sPIN; - $aFields['APP_PIN'] = md5($sPIN); + $aFields['APP_PIN'] = md5( $sPIN ); } - $oCase->updateCase($sApplicationUID, $aFields); + $oCase->updateCase( $sApplicationUID, $aFields ); return 1; } else { return 0; } } + /** - * @method * - * Routes (derivates) a case and then displays the case list. + * @method Routes (derivates) a case and then displays the case list. * * @name jumping * @label jumping @@ -2001,19 +1914,19 @@ function setCaseTrackerCode($sApplicationUID, $sCode, $sPIN='') function jumping ($caseId, $delIndex) { try { - $x = PMFDerivateCase($caseId, $delIndex); + $x = PMFDerivateCase( $caseId, $delIndex ); if ($x == 0) { - G::SendTemporalMessage('ID_NOT_DERIVATED', 'error', 'labels'); + G::SendTemporalMessage( 'ID_NOT_DERIVATED', 'error', 'labels' ); } } catch (Exception $oException) { - G::SendTemporalMessage('ID_NOT_DERIVATED', 'error', 'labels'); + G::SendTemporalMessage( 'ID_NOT_DERIVATED', 'error', 'labels' ); } - G::header('Location: cases_List'); + G::header( 'Location: cases_List' ); } + /** - * @method * - * Returns the label of a specified option from a dropdown box, listbox, + * @method Returns the label of a specified option from a dropdown box, listbox, * checkgroup or radiogroup. * * @name PMFgetLabelOption @@ -2027,19 +1940,19 @@ function jumping ($caseId, $delIndex) * @return string | $label | Label of the specified option | A string holding the label of the specified option or NULL if the specified option does not exist. * */ -function PMFgetLabelOption($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTED_ID) +function PMFgetLabelOption ($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTED_ID) { - $G_FORM = new Form ("{$PROCESS}/{$DYNAFORM_UID}", PATH_DYNAFORM, SYS_LANG, false); - if ( isset($G_FORM->fields[$FIELD_NAME]->option[$FIELD_SELECTED_ID]) ) { + $G_FORM = new Form( "{$PROCESS}/{$DYNAFORM_UID}", PATH_DYNAFORM, SYS_LANG, false ); + if (isset( $G_FORM->fields[$FIELD_NAME]->option[$FIELD_SELECTED_ID] )) { return $G_FORM->fields[$FIELD_NAME]->option[$FIELD_SELECTED_ID]; } else { return null; } } + /** - * @method * - * Redirects a case to any step in the current task. In order for the step to + * @method Redirects a case to any step in the current task. In order for the step to * be executed, the specified step much exist and if it contains a condition, * it must evaluate to true. * @@ -2054,32 +1967,32 @@ function PMFgetLabelOption($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTED * @return none | $none | None | None * */ -function PMFRedirectToStep($sApplicationUID, $iDelegation, $sStepType, $sStepUid) +function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUid) { - $iDelegation = intval($iDelegation); + $iDelegation = intval( $iDelegation ); require_once 'classes/model/AppDelegation.php'; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::DEL_INDEX, $iDelegation); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); + $oCriteria->add( AppDelegationPeer::DEL_INDEX, $iDelegation ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); global $oPMScript; $aRow = $oDataset->getRow(); if ($aRow) { require_once 'classes/model/Step.php'; $oStep = new Step(); - $oTheStep = $oStep->loadByType($aRow['TAS_UID'], $sStepType, $sStepUid); + $oTheStep = $oStep->loadByType( $aRow['TAS_UID'], $sStepType, $sStepUid ); $bContinue = true; - G::LoadClass('case'); + G::LoadClass( 'case' ); $oCase = new Cases(); - $aFields = $oCase->loadCase($sApplicationUID); + $aFields = $oCase->loadCase( $sApplicationUID ); if ($oTheStep->getStepCondition() != '') { - G::LoadClass('pmScript'); + G::LoadClass( 'pmScript' ); $pmScript = new PMScript(); - $pmScript->setFields($aFields['APP_DATA']); - $pmScript->setScript($oTheStep->getStepCondition()); + $pmScript->setFields( $aFields['APP_DATA'] ); + $pmScript->setScript( $oTheStep->getStepCondition() ); $bContinue = $pmScript->evaluate(); } if ($bContinue) { @@ -2101,21 +2014,19 @@ function PMFRedirectToStep($sApplicationUID, $iDelegation, $sStepType, $sStepUid break; } // save data - if (!is_null($oPMScript)) { + if (! is_null( $oPMScript )) { $aFields['APP_DATA'] = $oPMScript->aFields; - $oCase->updateCase($sApplicationUID,$aFields); + $oCase->updateCase( $sApplicationUID, $aFields ); } - G::header('Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid - . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction); - die; + G::header( 'Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction ); + die(); } } } /** - * @method * - * Returns a list of the next assigned users to a case. + * @method Returns a list of the next assigned users to a case. * * @name PMFGetNextAssignedUser * @label PMFGet Next Assigned User @@ -2136,32 +2047,24 @@ function PMFGetNextAssignedUser ($application, $task) require_once 'classes/model/GroupUser.php'; $oTask = new Task(); - $TaskFields = $oTask->load ($task); - $typeTask = $TaskFields ['TAS_ASSIGN_TYPE']; + $TaskFields = $oTask->load( $task ); + $typeTask = $TaskFields['TAS_ASSIGN_TYPE']; if ($typeTask == 'BALANCED') { - G::LoadClass('derivation'); + G::LoadClass( 'derivation' ); $oDerivation = new Derivation(); - $aDeriv = $oDerivation->prepareInformation( - array( 'USER_UID' => $_SESSION['USER_LOGGED'], - 'APP_UID' => $application, - 'DEL_INDEX' => $_SESSION['INDEX']) - ); + $aDeriv = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $application,'DEL_INDEX' => $_SESSION['INDEX'] + ) ); foreach ($aDeriv as $derivation) { - $aUser = array( - 'USR_UID' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_UID'], - 'USR_USERNAME' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_USERNAME'], - 'USR_FIRSTNAME'=> $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_FIRSTNAME'], - 'USR_LASTNAME' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_LASTNAME'], - 'USR_EMAIL' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_EMAIL'] + $aUser = array ('USR_UID' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_UID'],'USR_USERNAME' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_USERNAME'],'USR_FIRSTNAME' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_FIRSTNAME'],'USR_LASTNAME' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_LASTNAME'],'USR_EMAIL' => $derivation['NEXT_TASK']['USER_ASSIGNED']['USR_EMAIL'] ); $aUsers[] = $aUser; } - if (count($aUsers) == 1) { + if (count( $aUsers ) == 1) { return $aUser; } else { return $aUsers; @@ -2173,9 +2076,8 @@ function PMFGetNextAssignedUser ($application, $task) } /** - * @method * - * Returns a list or user. + * @method Returns a list or user. * * @name PMFGetUserEmailAddress * @label PMFGet User Email Address @@ -2183,26 +2085,26 @@ function PMFGetNextAssignedUser ($application, $task) * @param string(32) or Array | $id | Case ID | Id of the case * @param string(32) | $APP_UID or null | Application ID | Id of the Application * @param string(32) | $prefix or default value 'usr' | prefix | Id of the task - * @return array | $aRecipient | Array of the Recipient | Return an Array of the Recipient + * @return array | $aRecipient | Array of the Recipient | Return an Array of the Recipient * */ -function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') +function PMFGetUserEmailAddress ($id, $APP_UID = null, $prefix = 'usr') { require_once 'classes/model/UsersPeer.php'; require_once 'classes/model/AppDelegation.php'; - G::LoadClass('case'); + G::LoadClass( 'case' ); - if ( is_string($id) && trim($id) == "" ) { + if (is_string( $id ) && trim( $id ) == "") { return false; } - if ( is_array($id) && count($id) == 0 ) { + if (is_array( $id ) && count( $id ) == 0) { return false; } //recipient to store the email addresses - $aRecipient = Array(); - $aItems = Array(); + $aRecipient = Array (); + $aItems = Array (); /* * First at all the $id user input can be by example erik@colosa.com @@ -2213,27 +2115,27 @@ function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') /* * The second thing is that the return type will be configurated depend of the input type (using $retType) */ - if ( is_array($id) ) { + if (is_array( $id )) { $aItems = $id; $retType = 'array'; } else { $retType = 'string'; - if ( strpos($id, ",") !== false ) { - $aItems = explode(',', $id); + if (strpos( $id, "," ) !== false) { + $aItems = explode( ',', $id ); } else { - array_push($aItems, $id); + array_push( $aItems, $id ); } } foreach ($aItems as $sItem) { //cleaning for blank spaces into each array item - $sItem = trim($sItem); - if ( strpos($sItem, "|") !== false ) { + $sItem = trim( $sItem ); + if (strpos( $sItem, "|" ) !== false) { // explode the parameter because always will be compose with pipe separator to indicate // the type (user or group) and the target mai - list($sType, $sID) = explode('|', $sItem); - $sType = trim($sType); - $sID = trim($sID); + list ($sType, $sID) = explode( '|', $sItem ); + $sType = trim( $sType ); + $sID = trim( $sID ); } else { $sType = $prefix; $sID = $sItem; @@ -2241,60 +2143,60 @@ function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') switch ($sType) { case 'ext': - if ( G::emailAddress($sID) ) { - array_push($aRecipient, $sID); + if (G::emailAddress( $sID )) { + array_push( $aRecipient, $sID ); } break; case 'usr': if ($sID == '-1') { // -1: Curent user, load from user record - if ( isset($APP_UID) ) { - $oAppDelegation = new AppDelegation; - $aAppDel = $oAppDelegation->getLastDeleration($APP_UID); - if (isset($aAppDel)) { - $oUserRow = UsersPeer::retrieveByPK($aAppDel['USR_UID']); - if ( isset($oUserRow) ) { + if (isset( $APP_UID )) { + $oAppDelegation = new AppDelegation(); + $aAppDel = $oAppDelegation->getLastDeleration( $APP_UID ); + if (isset( $aAppDel )) { + $oUserRow = UsersPeer::retrieveByPK( $aAppDel['USR_UID'] ); + if (isset( $oUserRow )) { $sID = $oUserRow->getUsrEmail(); } else { - throw new Exception('User with ID '.$oAppDelegation->getUsrUid(). 'doesn\'t exist'); + throw new Exception( 'User with ID ' . $oAppDelegation->getUsrUid() . 'doesn\'t exist' ); } - if ( G::emailAddress($sID) ) { - array_push($aRecipient, $sID); + if (G::emailAddress( $sID )) { + array_push( $aRecipient, $sID ); } } } } else { - $oUserRow = UsersPeer::retrieveByPK($sID); + $oUserRow = UsersPeer::retrieveByPK( $sID ); $sID = $oUserRow->getUsrEmail(); - if ( G::emailAddress($sID) ) { - array_push($aRecipient, $sID); + if (G::emailAddress( $sID )) { + array_push( $aRecipient, $sID ); } } break; case 'grp': - G::LoadClass('groups'); + G::LoadClass( 'groups' ); $oGroups = new Groups(); - $oCriteria = $oGroups->getUsersGroupCriteria($sID); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = $oGroups->getUsersGroupCriteria( $sID ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); while ($oDataset->next()) { $aGroup = $oDataset->getRow(); //to validate email address - if ( G::emailAddress($aGroup['USR_EMAIL']) ) { - array_push($aRecipient, $aGroup['USR_EMAIL']); + if (G::emailAddress( $aGroup['USR_EMAIL'] )) { + array_push( $aRecipient, $aGroup['USR_EMAIL'] ); } } break; case 'dyn': $oCase = new Cases(); - $aFields = $oCase->loadCase($APP_UID); - $aFields['APP_DATA'] = array_merge($aFields['APP_DATA'], G::getSystemConstants()); + $aFields = $oCase->loadCase( $APP_UID ); + $aFields['APP_DATA'] = array_merge( $aFields['APP_DATA'], G::getSystemConstants() ); //to validate email address - if ( isset($aFields['APP_DATA'][$sID]) && G::emailAddress($aFields['APP_DATA'][$sID]) ) { - array_push($aRecipient, $aFields['APP_DATA'][$sID]); + if (isset( $aFields['APP_DATA'][$sID] ) && G::emailAddress( $aFields['APP_DATA'][$sID] )) { + array_push( $aRecipient, $aFields['APP_DATA'][$sID] ); } break; } @@ -2305,7 +2207,7 @@ function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') return $aRecipient; break; case 'string': - return implode(',', $aRecipient); + return implode( ',', $aRecipient ); break; default: return $aRecipient; @@ -2313,9 +2215,8 @@ function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') } /** - * @method * - * Get of the cases notes an application. + * @method Get of the cases notes an application. * * @name PMFGetCaseNotes * @label PMF Get of the cases notes an application. @@ -2323,20 +2224,19 @@ function PMFGetUserEmailAddress($id, $APP_UID=null, $prefix='usr') * @param string(32) | $applicationID | Application ID | ID of the Application * @param string(32) | $type or default value 'array' | type of the return value | type of the return value (array, object, string) * @param string(32) | $userUid default value empty string | User ID | Id of the User - * @return array, object or string | $response | Array of the response | Return an Array or Object or String + * @return array, object or string | $response | Array of the response | Return an Array or Object or String * */ -function PMFGetCaseNotes ($applicationID, $type='array', $userUid='') +function PMFGetCaseNotes ($applicationID, $type = 'array', $userUid = '') { - G::LoadClass('case'); - $response = Cases::getCaseNotes($applicationID, $type, $userUid); + G::LoadClass( 'case' ); + $response = Cases::getCaseNotes( $applicationID, $type, $userUid ); return $response; } /** - * @method * - * Delete a specified case. + * @method Delete a specified case. * * @name PMFDeleteCase * @label PMF Delete a specified case. @@ -2345,12 +2245,12 @@ function PMFGetCaseNotes ($applicationID, $type='array', $userUid='') * @return int | $result | Result of the elimination | Returns 1 if the case is delete successfully; otherwise, returns 0 if an error occurred. * */ -function PMFDeleteCase($caseUid) +function PMFDeleteCase ($caseUid) { - G::LoadClass("wsBase"); + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->deleteCase($caseUid); + $result = $ws->deleteCase( $caseUid ); if ($result->status_code == 0) { return 1; @@ -2360,9 +2260,8 @@ function PMFDeleteCase($caseUid) } /** - * @method * - * Cancel a specified case. + * @method Cancel a specified case. * * @name PMFCancelCase * @label PMF Cancel a specified case. @@ -2373,12 +2272,12 @@ function PMFDeleteCase($caseUid) * @return int | $result | Result of the cancelation | Returns 1 if the case is cancel successfully; otherwise, returns 0 if an error occurred. * */ -function PMFCancelCase($caseUid, $delIndex, $userUid) +function PMFCancelCase ($caseUid, $delIndex, $userUid) { - G::LoadClass("wsBase"); + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->cancelCase($caseUid, $delIndex, $userUid); + $result = $ws->cancelCase( $caseUid, $delIndex, $userUid ); if ($result->status_code == 0) { return 1; @@ -2388,9 +2287,8 @@ function PMFCancelCase($caseUid, $delIndex, $userUid) } /** - * @method * - * Pauses a specified case. + * @method Pauses a specified case. * * @name PMFPauseCase * @label PMF Pauses a specified case. @@ -2402,12 +2300,12 @@ function PMFCancelCase($caseUid, $delIndex, $userUid) * @return int | $result | Result of the pause | Returns 1 if the case is paused successfully; otherwise, returns 0 if an error occurred. * */ -function PMFPauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) +function PMFPauseCase ($caseUid, $delIndex, $userUid, $unpauseDate = null) { - G::LoadClass("wsBase"); + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->pauseCase($caseUid, $delIndex, $userUid, $unpauseDate); + $result = $ws->pauseCase( $caseUid, $delIndex, $userUid, $unpauseDate ); if ($result->status_code == 0) { return 1; @@ -2417,9 +2315,8 @@ function PMFPauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) } /** - * @method * - * Unpause a specified case. + * @method Unpause a specified case. * * @name PMFUnpauseCase * @label PMF Unpause a specified case. @@ -2430,12 +2327,12 @@ function PMFPauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) * @return int | $result | Result of the unpause | Returns 1 if the case is unpause successfully; otherwise, returns 0 if an error occurred. * */ -function PMFUnpauseCase($caseUid, $delIndex, $userUid) +function PMFUnpauseCase ($caseUid, $delIndex, $userUid) { - G::LoadClass("wsBase"); + G::LoadClass( "wsBase" ); $ws = new wsBase(); - $result = $ws->unpauseCase($caseUid, $delIndex, $userUid); + $result = $ws->unpauseCase( $caseUid, $delIndex, $userUid ); if ($result->status_code == 0) { return 1; diff --git a/workflow/engine/classes/class.pmGauge.php b/workflow/engine/classes/class.pmGauge.php index 30280f7fe..c690f05f3 100755 --- a/workflow/engine/classes/class.pmGauge.php +++ b/workflow/engine/classes/class.pmGauge.php @@ -1,238 +1,246 @@ -h = $this->w / 2; - $im = imagecreatetruecolor($this->w, $this->h); - $width = $this->w; - $height = $this->h; - $center_x = intval($width / 2); - $center_y = intval($height / 2); - - //gauge color - $bgcolor = ImageColorAllocate($im, 247, 247, 247); - $extRing = ImageColorAllocate($im, 214, 214, 214); - $blueRing = ImageColorAllocate($im, 70, 132, 238); - $blueRingLine = ImageColorAllocate($im, 106, 114, 127); - $arrowBody = ImageColorAllocate($im, 228, 114, 86); - $arrowLine = ImageColorAllocate($im, 207, 74, 42); - $redArc = ImageColorAllocate($im, 220, 57, 18); - $yellowArc = ImageColorAllocate($im, 255, 153, 0); - - $black = ImageColorAllocate($im, 0,0,0); - $white = ImageColorAllocate($im, 255, 255, 255); - $gray = ImageColorAllocate($im, 190, 190, 190); - - $fontArial = PATH_THIRDPARTY . 'html2ps_pdf/fonts/arial.ttf'; - - ImageFilledRectangle($im, 0, 0, $width-1, $height-1, $white); - ImageRectangle ($im, 0, 0, $width-1, $height-1, $gray); - +h = $this->w / 2; + $im = imagecreatetruecolor( $this->w, $this->h ); + $width = $this->w; + $height = $this->h; + $center_x = intval( $width / 2 ); + $center_y = intval( $height / 2 ); + + //gauge color + $bgcolor = ImageColorAllocate( $im, 247, 247, 247 ); + $extRing = ImageColorAllocate( $im, 214, 214, 214 ); + $blueRing = ImageColorAllocate( $im, 70, 132, 238 ); + $blueRingLine = ImageColorAllocate( $im, 106, 114, 127 ); + $arrowBody = ImageColorAllocate( $im, 228, 114, 86 ); + $arrowLine = ImageColorAllocate( $im, 207, 74, 42 ); + $redArc = ImageColorAllocate( $im, 220, 57, 18 ); + $yellowArc = ImageColorAllocate( $im, 255, 153, 0 ); + + $black = ImageColorAllocate( $im, 0, 0, 0 ); + $white = ImageColorAllocate( $im, 255, 255, 255 ); + $gray = ImageColorAllocate( $im, 190, 190, 190 ); + + $fontArial = PATH_THIRDPARTY . 'html2ps_pdf/fonts/arial.ttf'; + + ImageFilledRectangle( $im, 0, 0, $width - 1, $height - 1, $white ); + ImageRectangle( $im, 0, 0, $width - 1, $height - 1, $gray ); + + //center coords + $cX = intval( $this->w / 2 ); + //$cX = intval($this->w /4); + $cY = intval( $this->h / 2 ); + + //diameter for gauge + $diameter = intval( $this->h * 4 / 5 ); + + $this->renderGauge( $im, $cX, $cY, $diameter ); + + /* //center coords - $cX = intval($this->w /2); - //$cX = intval($this->w /4); - $cY = intval($this->h /2); - + $cX = intval($this->w * 3/4); + $cY = intval($this->h /2); + //diameter for gauge $diameter = intval( $this->h * 4/5 ); $this->renderGauge($im, $cX, $cY, $diameter); - -/* - //center coords - $cX = intval($this->w * 3/4); - $cY = intval($this->h /2); - - //diameter for gauge - $diameter = intval( $this->h * 4/5 ); - - $this->renderGauge($im, $cX, $cY, $diameter); -*/ - Header("Content-type: image/png"); - ImagePng($im); - - } - - function renderGauge($im, $cX, $cY, $diameter) { - //gauge color - $bgcolor = ImageColorAllocate($im, 247, 247, 247); - $extRing = ImageColorAllocate($im, 214, 214, 214); - $blueRing = ImageColorAllocate($im, 70, 132, 238); - $blueRingLine = ImageColorAllocate($im, 106, 114, 127); - $arrowBody = ImageColorAllocate($im, 228, 114, 86); - $arrowLine = ImageColorAllocate($im, 207, 74, 42); - $redArc = ImageColorAllocate($im, 220, 57, 18); - $yellowArc = ImageColorAllocate($im, 255, 153, 0); - $greenArc = ImageColorAllocate($im, 0, 136, 0); - - $black = ImageColorAllocate($im, 0,0,0); - $white = ImageColorAllocate($im, 255, 255, 255); - $gray = ImageColorAllocate($im, 190, 190, 190); - - $fontArial = PATH_THIRDPARTY . 'html2ps_pdf/fonts/arial.ttf'; - - $dX = intval($diameter *8/7 ); //for now ratio aspect is 8:7 - $dY = intval($diameter); - $dXRing = intval($dX * 0.90); - $dYRing = intval($dY * 0.90); - - $dXRingColor = intval($dX * 0.86); - $dYRingColor = intval($dY * 0.86); - - $dXRingCenter = intval($dX * 0.66); - $dYRingCenter = intval($dY * 0.66); - - imagefilledellipse($im, $cX, $cY, $dX, $dY, $extRing); - - imagefilledellipse($im, $cX, $cY, $dXRing, $dYRing, $bgcolor); - - //drawing the red arc - if ( $this->redFrom > $this->maxValue ) $this->redFrom = $this->maxValue; - if ( $this->redTo > $this->maxValue ) $this->redTo = $this->maxValue; - if ( $this->yellowFrom > $this->maxValue ) $this->yellowFrom = $this->maxValue; - if ( $this->yellowTo > $this->maxValue ) $this->yellowTo = $this->maxValue; - if ( $this->greenFrom > $this->maxValue ) $this->greenFrom = $this->maxValue; - if ( $this->greenTo > $this->maxValue ) $this->greenTo = $this->maxValue; - - $redFrom = $this->redFrom/$this->maxValue*300 - 240 ; - $redTo = $this->redTo/$this->maxValue*300 - 240; - $yellowFrom = $this->yellowFrom/$this->maxValue*300 - 240; - $yellowTo = $this->yellowTo/$this->maxValue*300 - 240; - $greenFrom = $this->greenFrom/$this->maxValue*300 - 240; - $greenTo = $this->greenTo/$this->maxValue*300 - 240; - - if ( $this->redFrom != $this->redTo || $this->redTo != $this->maxValue ) { - imagefilledarc ($im, $cX, $cY, $dXRingColor, $dYRingColor, $redFrom, $redTo, $redArc, IMG_ARC_PIE ); - } - if ( $this->yellowFrom != $this->yellowTo || $this->yellowTo != $this->maxValue ) { - imagefilledarc ($im, $cX, $cY, $dXRingColor, $dYRingColor, $yellowFrom, $yellowTo, $yellowArc, IMG_ARC_PIE ); - } - if ( $this->greenFrom != $this->greenTo || $this->greenTo != $this->maxValue ) { - imagefilledarc ($im, $cX, $cY, $dXRingColor, $dYRingColor, $greenFrom, $greenTo, $greenArc, IMG_ARC_PIE ); - } - imagefilledellipse($im, $cX, $cY, $dXRingCenter, $dYRingCenter, $bgcolor); - - //ticks - $radiusX = intval($dX * 0.42); - $radiusY = intval($dY * 0.42); - $min = 5; - while($min <= 55) { - if ($min % 5 == 0) - $len = $radiusX / 8; - else - $len = $radiusX / 25; - - $ang = (2 * M_PI * $min) / 60; - $x1 = sin($ang) * ($radiusX - $len) + $cX; - $y1 = cos($ang) * ($radiusY - $len) + $cY; - $x2 = sin($ang) * $radiusX + $cX; - $y2 = cos($ang) * $radiusY + $cY; - - ImageLine($im, $x1, $y1, $x2, $y2, $black); - - - if ($min % 5 == 0) { - $textToDisplay = sprintf("%d", (55-$min)*$this->maxValue/50 ); - $bbox = imagettfbbox(8, 0, $fontArial, $textToDisplay ); - $x1 = sin($ang) * ($radiusX - 2.5*$len) + $cX - $bbox[4] / 2; - $y1 = cos($ang) * ($radiusY - 2.5*$len) + $cY +2;// - abs($bbox[5]); - imagettftext ( $im, 8, 0, $x1, $y1, $gray, $fontArial, $textToDisplay ); - } - $min++; - } - - if (trim($this->centerLabel) != '' ) { - $textToDisplay = trim($this->centerLabel); - $bbox = imagettfbbox(8, 0, $fontArial, $textToDisplay ); - $x1 = $cX - $bbox[4] / 2; - $y1 = $cY *3/4 + abs($bbox[5]); - imagettftext ( $im, 8, 0, $x1, $y1, $black, $fontArial, $textToDisplay ); - } - - imagettftext ( $im, 9, 0, $cX*0.60, $cY*1.8, $gray, $fontArial, $this->open ); - imagettftext ( $im, 9, 0, $cX*1.40, $cY*1.8, $gray, $fontArial, $this->completed ); - - - //drawing the arrow, simple way - $radiusX = intval($dX * 0.35); - $radiusY = intval($dY * 0.35); - - $ang = - M_PI/6 + 2*M_PI - ( 2 * M_PI * $this->value )*50/60 /$this->maxValue ; - $x1 = sin($ang) * ($radiusX) + $cX; - $y1 = cos($ang) * ($radiusY) + $cY; - ImageLine($im, $cX, $cY, $x1, $y1, $arrowLine); - - /* +*/ + Header( "Content-type: image/png" ); + ImagePng( $im ); + + } + + function renderGauge ($im, $cX, $cY, $diameter) + { + //gauge color + $bgcolor = ImageColorAllocate( $im, 247, 247, 247 ); + $extRing = ImageColorAllocate( $im, 214, 214, 214 ); + $blueRing = ImageColorAllocate( $im, 70, 132, 238 ); + $blueRingLine = ImageColorAllocate( $im, 106, 114, 127 ); + $arrowBody = ImageColorAllocate( $im, 228, 114, 86 ); + $arrowLine = ImageColorAllocate( $im, 207, 74, 42 ); + $redArc = ImageColorAllocate( $im, 220, 57, 18 ); + $yellowArc = ImageColorAllocate( $im, 255, 153, 0 ); + $greenArc = ImageColorAllocate( $im, 0, 136, 0 ); + + $black = ImageColorAllocate( $im, 0, 0, 0 ); + $white = ImageColorAllocate( $im, 255, 255, 255 ); + $gray = ImageColorAllocate( $im, 190, 190, 190 ); + + $fontArial = PATH_THIRDPARTY . 'html2ps_pdf/fonts/arial.ttf'; + + $dX = intval( $diameter * 8 / 7 ); //for now ratio aspect is 8:7 + $dY = intval( $diameter ); + $dXRing = intval( $dX * 0.90 ); + $dYRing = intval( $dY * 0.90 ); + + $dXRingColor = intval( $dX * 0.86 ); + $dYRingColor = intval( $dY * 0.86 ); + + $dXRingCenter = intval( $dX * 0.66 ); + $dYRingCenter = intval( $dY * 0.66 ); + + imagefilledellipse( $im, $cX, $cY, $dX, $dY, $extRing ); + + imagefilledellipse( $im, $cX, $cY, $dXRing, $dYRing, $bgcolor ); + + //drawing the red arc + if ($this->redFrom > $this->maxValue) + $this->redFrom = $this->maxValue; + if ($this->redTo > $this->maxValue) + $this->redTo = $this->maxValue; + if ($this->yellowFrom > $this->maxValue) + $this->yellowFrom = $this->maxValue; + if ($this->yellowTo > $this->maxValue) + $this->yellowTo = $this->maxValue; + if ($this->greenFrom > $this->maxValue) + $this->greenFrom = $this->maxValue; + if ($this->greenTo > $this->maxValue) + $this->greenTo = $this->maxValue; + + $redFrom = $this->redFrom / $this->maxValue * 300 - 240; + $redTo = $this->redTo / $this->maxValue * 300 - 240; + $yellowFrom = $this->yellowFrom / $this->maxValue * 300 - 240; + $yellowTo = $this->yellowTo / $this->maxValue * 300 - 240; + $greenFrom = $this->greenFrom / $this->maxValue * 300 - 240; + $greenTo = $this->greenTo / $this->maxValue * 300 - 240; + + if ($this->redFrom != $this->redTo || $this->redTo != $this->maxValue) { + imagefilledarc( $im, $cX, $cY, $dXRingColor, $dYRingColor, $redFrom, $redTo, $redArc, IMG_ARC_PIE ); + } + if ($this->yellowFrom != $this->yellowTo || $this->yellowTo != $this->maxValue) { + imagefilledarc( $im, $cX, $cY, $dXRingColor, $dYRingColor, $yellowFrom, $yellowTo, $yellowArc, IMG_ARC_PIE ); + } + if ($this->greenFrom != $this->greenTo || $this->greenTo != $this->maxValue) { + imagefilledarc( $im, $cX, $cY, $dXRingColor, $dYRingColor, $greenFrom, $greenTo, $greenArc, IMG_ARC_PIE ); + } + imagefilledellipse( $im, $cX, $cY, $dXRingCenter, $dYRingCenter, $bgcolor ); + + //ticks + $radiusX = intval( $dX * 0.42 ); + $radiusY = intval( $dY * 0.42 ); + $min = 5; + while ($min <= 55) { + if ($min % 5 == 0) + $len = $radiusX / 8; + else + $len = $radiusX / 25; + + $ang = (2 * M_PI * $min) / 60; + $x1 = sin( $ang ) * ($radiusX - $len) + $cX; + $y1 = cos( $ang ) * ($radiusY - $len) + $cY; + $x2 = sin( $ang ) * $radiusX + $cX; + $y2 = cos( $ang ) * $radiusY + $cY; + + ImageLine( $im, $x1, $y1, $x2, $y2, $black ); + + if ($min % 5 == 0) { + $textToDisplay = sprintf( "%d", (55 - $min) * $this->maxValue / 50 ); + $bbox = imagettfbbox( 8, 0, $fontArial, $textToDisplay ); + $x1 = sin( $ang ) * ($radiusX - 2.5 * $len) + $cX - $bbox[4] / 2; + $y1 = cos( $ang ) * ($radiusY - 2.5 * $len) + $cY + 2; // - abs($bbox[5]); + imagettftext( $im, 8, 0, $x1, $y1, $gray, $fontArial, $textToDisplay ); + } + $min ++; + } + + if (trim( $this->centerLabel ) != '') { + $textToDisplay = trim( $this->centerLabel ); + $bbox = imagettfbbox( 8, 0, $fontArial, $textToDisplay ); + $x1 = $cX - $bbox[4] / 2; + $y1 = $cY * 3 / 4 + abs( $bbox[5] ); + imagettftext( $im, 8, 0, $x1, $y1, $black, $fontArial, $textToDisplay ); + } + + imagettftext( $im, 9, 0, $cX * 0.60, $cY * 1.8, $gray, $fontArial, $this->open ); + imagettftext( $im, 9, 0, $cX * 1.40, $cY * 1.8, $gray, $fontArial, $this->completed ); + + //drawing the arrow, simple way + $radiusX = intval( $dX * 0.35 ); + $radiusY = intval( $dY * 0.35 ); + + $ang = - M_PI / 6 + 2 * M_PI - (2 * M_PI * $this->value) * 50 / 60 / $this->maxValue; + $x1 = sin( $ang ) * ($radiusX) + $cX; + $y1 = cos( $ang ) * ($radiusY) + $cY; + ImageLine( $im, $cX, $cY, $x1, $y1, $arrowLine ); + + /* //arrowLine $arrowHeight = intval($dY * 0.02); $arrowWidth = intval($dX * 0.35); $arrowTail = intval($dX * 0.15); $values = array( - 0, -$arrowHeight, - -$arrowTail, 0, + 0, -$arrowHeight, + -$arrowTail, 0, 0, $arrowHeight, - $arrowWidth, 0, + $arrowWidth, 0, 0, -$arrowHeight ); - + //rotate n degrees $n = 20; $ang = (2 * M_PI * $n) / 60; - + foreach ( $values as $k => $val ) { if ( $k % 2 == 0 ) { //$values[$k] = sin($ang)*$val + 20; @@ -246,25 +254,24 @@ $values[$k] += $cY; } } - + imagefilledpolygon ($im, $values, 5, $arrowBody); imagepolygon ($im, $values, 5, $arrowLine); - */ - //blue ring - $dXBlueRing = $dX * 0.07; - $dYBlueRing = $dY * 0.07; - imagefilledellipse($im, $cX, $cY, $dXBlueRing, $dXBlueRing, $blueRing); - imageellipse ($im, $cX, $cY, $dXBlueRing, $dYBlueRing, $blueRingLine); - - imageellipse ($im, $cX, $cY, $dX, $dY, $black); - - $textToDisplay = sprintf ( "%5.2f%%", $this->value ); - $bbox = imagettfbbox(9, 0, $fontArial, $textToDisplay ); - $centerX = $cX - $bbox[4] / 2; - $centerY = $cY+$dYRing/2+3-abs($bbox[5]); - imagettftext ( $im, 9, 0, $centerX, $centerY, $black, $fontArial, $textToDisplay ); - - - } - + */ + //blue ring + $dXBlueRing = $dX * 0.07; + $dYBlueRing = $dY * 0.07; + imagefilledellipse( $im, $cX, $cY, $dXBlueRing, $dXBlueRing, $blueRing ); + imageellipse( $im, $cX, $cY, $dXBlueRing, $dYBlueRing, $blueRingLine ); + + imageellipse( $im, $cX, $cY, $dX, $dY, $black ); + + $textToDisplay = sprintf( "%5.2f%%", $this->value ); + $bbox = imagettfbbox( 9, 0, $fontArial, $textToDisplay ); + $centerX = $cX - $bbox[4] / 2; + $centerY = $cY + $dYRing / 2 + 3 - abs( $bbox[5] ); + imagettftext( $im, 9, 0, $centerX, $centerY, $black, $fontArial, $textToDisplay ); + + } + } \ No newline at end of file diff --git a/workflow/engine/classes/class.pmPhing.php b/workflow/engine/classes/class.pmPhing.php index 5d75ba22f..4f482e27a 100755 --- a/workflow/engine/classes/class.pmPhing.php +++ b/workflow/engine/classes/class.pmPhing.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -26,20 +27,23 @@ /** * Phing Class Wrapper + * * @author Erik Amaru Ortiz */ include_once 'phing/Phing.php'; -set_include_path(PATH_THIRDPARTY . 'propel-generator/classes/' . PATH_SEPARATOR . get_include_path()); +set_include_path( PATH_THIRDPARTY . 'propel-generator/classes/' . PATH_SEPARATOR . get_include_path() ); -if (!class_exists('Phing')) { - throw new Exception('Fatal Error: Phing is not loaded!'); +if (! class_exists( 'Phing' )) { + throw new Exception( 'Fatal Error: Phing is not loaded!' ); } class pmPhing extends Phing { - function getPhingVersion() - { - return 'pmPhing Ver 1.0'; - } -} \ No newline at end of file + + public function getPhingVersion () + { + return 'pmPhing Ver 1.0'; + } +} + diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index b38e338bb..cb376c524 100755 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -2,6 +2,7 @@ /** * class.pmScript.php + * * @package workflow.engine.ProcessMaker * * ProcessMaker Open Source Edition @@ -14,11 +15,11 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -32,58 +33,61 @@ // License: LGPL, see LICENSE //////////////////////////////////////////////////// + /** * PMScript - PMScript class + * * @author Julio Cesar Laura Avenda�o * last modify 2008.08.13 by Erik Amaru Ortiz * last modify comment was added and adapted the catch errors * @copyright 2007 COLOSA */ -function __autoload($sClassName) +function __autoload ($sClassName) { - if (defined('SYS_SYS')) { + if (defined( 'SYS_SYS' )) { $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; - if (file_exists($sPath . $sClassName . '.php')) { + if (file_exists( $sPath . $sClassName . '.php' )) { require_once $sPath . $sClassName . '.php'; } } } //Start - Custom functions -G::LoadClass('pmFunctions'); +G::LoadClass( 'pmFunctions' ); //End - Custom functions //call plugin -if (class_exists('folderData')) { +if (class_exists( 'folderData' )) { //$folderData = new folderData($sProUid, $proFields['PRO_TITLE'], $sAppUid, $Fields['APP_TITLE'], $sUsrUid); $oPluginRegistry = &PMPluginRegistry::getSingleton(); $aAvailablePmFunctions = $oPluginRegistry->getPmFunctions(); foreach ($aAvailablePmFunctions as $key => $class) { $filePlugin = PATH_PLUGINS . $class . PATH_SEP . 'classes' . PATH_SEP . 'class.pmFunctions.php'; - if (file_exists($filePlugin)) { - include_once( $filePlugin); + if (file_exists( $filePlugin )) { + include_once ($filePlugin); } } } //end plugin //Add External Triggers -$dir = G::ExpandPath("classes") . 'triggers'; -$filesArray = array(); -if (file_exists($dir)) { - if ($handle = opendir($dir)) { - while (false !== ($file = readdir($handle))) { +$dir = G::ExpandPath( "classes" ) . 'triggers'; +$filesArray = array (); +if (file_exists( $dir )) { + if ($handle = opendir( $dir )) { + while (false !== ($file = readdir( $handle ))) { if (($file != ".") && ($file != "..")) { - $extFile = explode(".", $file); - if ($extFile[sizeof($extFile) - 1] == 'php') { - include_once( $dir . PATH_SEP . $file); + $extFile = explode( ".", $file ); + if ($extFile[sizeof( $extFile ) - 1] == 'php') { + include_once ($dir . PATH_SEP . $file); } } } - closedir($handle); + closedir( $handle ); } } /** * PMScript - PMScript class + * * @copyright 2007 COLOSA * @package workflow.engine.ProcessMaker */ @@ -93,12 +97,12 @@ class PMScript /** * Original fields */ - public $aOriginalFields = array(); + public $aOriginalFields = array (); /** * Fields to use */ - public $aFields = array(); + public $aFields = array (); /** * Script @@ -117,224 +121,185 @@ class PMScript /** * Constructor of the class PMScript + * * @return void */ - public function PMScript() + public function PMScript () { $this->aFields['__ERROR__'] = 'none'; } /** * Set the fields to use + * * @param array $aFields * @return void */ - public function setFields($aFields=array()) + public function setFields ($aFields = array()) { - if (!is_array($aFields)) { - $aFields = array(); + if (! is_array( $aFields )) { + $aFields = array (); } $this->aOriginalFields = $this->aFields = $aFields; } /** * Set the current script + * * @param string $sScript * @return void */ - public function setScript($sScript='') + public function setScript ($sScript = '') { $this->sScript = $sScript; } /** * Verify the syntax + * * @param string $sScript * @return boolean */ - public function validSyntax($sScript) + public function validSyntax ($sScript) { return true; } - public function executeAndCatchErrors($sScript, $sCode) + public function executeAndCatchErrors ($sScript, $sCode) { - ob_start('handleFatalErrors'); - set_error_handler('handleErrors'); + ob_start( 'handleFatalErrors' ); + set_error_handler( 'handleErrors' ); $_SESSION['_CODE_'] = $sCode; - eval($sScript); - unset($_SESSION['_CODE_']); + eval( $sScript ); + unset( $_SESSION['_CODE_'] ); ob_end_flush(); } /** * Execute the current script + * * @return void */ - public function execute() + public function execute () { $sScript = ""; $iAux = 0; $bEqual = false; - $iOcurrences = preg_match_all( '/\@(?:([\@\%\#\?\$\=])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]' - . '*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', - $this->sScript, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); + $iOcurrences = preg_match_all( '/\@(?:([\@\%\#\?\$\=])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]' . '*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $this->sScript, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); if ($iOcurrences) { - for ($i = 0; $i < $iOcurrences; $i++) { - $sAux = substr($this->sScript, $iAux, $aMatch[0][$i][1] - $iAux); - if (!$bEqual) { - if (strpos($sAux, '==') !== false) { + for ($i = 0; $i < $iOcurrences; $i ++) { + $sAux = substr( $this->sScript, $iAux, $aMatch[0][$i][1] - $iAux ); + if (! $bEqual) { + if (strpos( $sAux, '==' ) !== false) { $bEqual = false; } else { - if (strpos($sAux, '=') !== false) { + if (strpos( $sAux, '=' ) !== false) { $bEqual = true; } } } if ($bEqual) { - if (strpos($sAux, ';') !== false) { + if (strpos( $sAux, ';' ) !== false) { $bEqual = false; } } if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { - eval("if (!isset(\$this->aFields['" . $aMatch[2][$i][0] . "'])) { \$this->aFields['" - . $aMatch[2][$i][0] . "'] = null; }"); + if (! isset( $aMatch[5][$i][0] )) { + eval( "if (!isset(\$this->aFields['" . $aMatch[2][$i][0] . "'])) { \$this->aFields['" . $aMatch[2][$i][0] . "'] = null; }" ); } else { - eval( "if (!isset(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")) { \$this->aFields" - . (isset($aMatch[2][$i][0]) ? "['" . $aMatch[2][$i][0] - . "']" : '') . $aMatch[5][$i][0] . " = null; }"); + eval( "if (!isset(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")) { \$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . " = null; }" ); } } $sScript .= $sAux; - $iAux = $aMatch[0][$i][1] + strlen($aMatch[0][$i][0]); + $iAux = $aMatch[0][$i][1] + strlen( $aMatch[0][$i][0] ); switch ($aMatch[1][$i][0]) { case '@': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToString(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToString(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToString(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '%': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToInteger(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToInteger(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToInteger(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '#': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToFloat(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToFloat(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToFloat(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '?': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToUrl(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToUrl(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToUrl(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '$': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmSqlEscape(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmSqlEscape(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmSqlEscape(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '=': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; @@ -342,17 +307,12 @@ class PMScript $this->affected_fields[] = $aMatch[2][$i][0]; } } - $sScript .= substr($this->sScript, $iAux); - $sScript = "try {\n" . $sScript . "\n} catch (Exception \$oException) {\n " - . " \$this->aFields['__ERROR__'] = utf8_encode(\$oException->getMessage());\n}"; + $sScript .= substr( $this->sScript, $iAux ); + $sScript = "try {\n" . $sScript . "\n} catch (Exception \$oException) {\n " . " \$this->aFields['__ERROR__'] = utf8_encode(\$oException->getMessage());\n}"; //echo '
-->'; print_r($this->aFields); echo '<---
'; - $this->executeAndCatchErrors($sScript, $this->sScript); - for ($i = 0; $i < count($this->affected_fields); $i++) { - $_SESSION['TRIGGER_DEBUG']['DATA'][] = Array( - 'key' => $this->affected_fields[$i], - 'value' => isset($this->aFields[$this->affected_fields[$i]]) - ? $this->aFields[$this->affected_fields[$i]] - : '' + $this->executeAndCatchErrors( $sScript, $this->sScript ); + for ($i = 0; $i < count( $this->affected_fields ); $i ++) { + $_SESSION['TRIGGER_DEBUG']['DATA'][] = Array ('key' => $this->affected_fields[$i],'value' => isset( $this->aFields[$this->affected_fields[$i]] ) ? $this->aFields[$this->affected_fields[$i]] : '' ); } //echo '
-->'; print_r($_SESSION['TRIGGER_DEBUG']['DATA']); echo '<---
'; @@ -360,178 +320,141 @@ class PMScript /** * Evaluate the current script + * * @return void */ - public function evaluate() + public function evaluate () { $bResult = null; $sScript = ''; $iAux = 0; $bEqual = false; $variableIsDefined = true; - $iOcurrences = preg_match_all('/\@(?:([\@\%\#\?\$\=])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]' - . '*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', - $this->sScript, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); + $iOcurrences = preg_match_all( '/\@(?:([\@\%\#\?\$\=])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]' . '*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $this->sScript, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); if ($iOcurrences) { - for ($i = 0; $i < $iOcurrences; $i++) { + for ($i = 0; $i < $iOcurrences; $i ++) { // if the variables for that condition has not been previously defined then $variableIsDefined // is set to false - if (!isset($this->aFields[$aMatch[2][$i][0]])) { + if (! isset( $this->aFields[$aMatch[2][$i][0]] )) { // $variableIsDefined = false; $this->aFields[$aMatch[2][$i][0]] = ''; } - $sAux = substr($this->sScript, $iAux, $aMatch[0][$i][1] - $iAux); - if (!$bEqual) { - if (strpos($sAux, '=') !== false) { + $sAux = substr( $this->sScript, $iAux, $aMatch[0][$i][1] - $iAux ); + if (! $bEqual) { + if (strpos( $sAux, '=' ) !== false) { $bEqual = true; } } if ($bEqual) { - if (strpos($sAux, ';') !== false) { + if (strpos( $sAux, ';' ) !== false) { $bEqual = false; } } $sScript .= $sAux; - $iAux = $aMatch[0][$i][1] + strlen($aMatch[0][$i][0]); + $iAux = $aMatch[0][$i][1] + strlen( $aMatch[0][$i][0] ); switch ($aMatch[1][$i][0]) { case '@': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToString(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToString(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToString(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '%': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToInteger(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToInteger(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToInteger(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '#': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToFloat(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToFloat(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToFloat(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '?': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmToUrl(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmToUrl(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmToUrl(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '$': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "pmSqlEscape(\$this->aFields['" . $aMatch[2][$i][0] . "'])"; } else { - $sScript .= "pmSqlEscape(\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0] . ")"; + $sScript .= "pmSqlEscape(\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0] . ")"; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; case '=': if ($bEqual) { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } else { - if (!isset($aMatch[5][$i][0])) { + if (! isset( $aMatch[5][$i][0] )) { $sScript .= "\$this->aFields['" . $aMatch[2][$i][0] . "']"; } else { - $sScript .= "\$this->aFields" - . (isset($aMatch[2][$i][0]) - ? "['" . $aMatch[2][$i][0] . "']" - : '') . $aMatch[5][$i][0]; + $sScript .= "\$this->aFields" . (isset( $aMatch[2][$i][0] ) ? "['" . $aMatch[2][$i][0] . "']" : '') . $aMatch[5][$i][0]; } } break; } } } - $sScript .= substr($this->sScript, $iAux); + $sScript .= substr( $this->sScript, $iAux ); $sScript = '$bResult = ' . $sScript . ';'; // checks if the syntax is valid or if the variables in that condition has been previously defined - if ($this->validSyntax($sScript) && $variableIsDefined) { + if ($this->validSyntax( $sScript ) && $variableIsDefined) { $this->bError = false; - eval($sScript); + eval( $sScript ); } else { // echo ""; - G::SendTemporalMessage('MSG_CONDITION_NOT_DEFINED', 'error', 'labels'); + G::SendTemporalMessage( 'MSG_CONDITION_NOT_DEFINED', 'error', 'labels' ); $this->bError = true; } return $bResult; @@ -540,60 +463,65 @@ class PMScript //Start - Private functions + /** * Convert to string + * * @param variant $vValue * @return string */ -function pmToString($vValue) +function pmToString ($vValue) { return (string) $vValue; } /** * Convert to integer + * * @param variant $vValue * @return integer */ -function pmToInteger($vValue) +function pmToInteger ($vValue) { return (int) $vValue; } /** * Convert to float + * * @param variant $vValue * @return float */ -function pmToFloat($vValue) +function pmToFloat ($vValue) { return (float) $vValue; } /** * Convert to Url + * * @param variant $vValue * @return url */ -function pmToUrl($vValue) +function pmToUrl ($vValue) { - return urlencode($vValue); + return urlencode( $vValue ); } /** * Convert to data base escaped string + * * @param variant $vValue * @return string */ -function pmSqlEscape($vValue) +function pmSqlEscape ($vValue) { - return G::sqlEscape($vValue); + return G::sqlEscape( $vValue ); } //End - Private functions - /* * ************************************************************************* * Error handler * author: Julio Cesar Laura Avenda�o @@ -607,13 +535,13 @@ function pmSqlEscape($vValue) * @param string $errline * @return void */ -function handleErrors($errno, $errstr, $errfile, $errline) +function handleErrors ($errno, $errstr, $errfile, $errline) { if ($errno != '' && ($errno != 8) && ($errno != 2048)) { - if (isset($_SESSION['_CODE_'])) { + if (isset( $_SESSION['_CODE_'] )) { $sCode = $_SESSION['_CODE_']; - unset($_SESSION['_CODE_']); - registerError(1, $errstr, $errline - 1, $sCode); + unset( $_SESSION['_CODE_'] ); + registerError( 1, $errstr, $errline - 1, $sCode ); } } } @@ -624,50 +552,44 @@ function handleErrors($errno, $errstr, $errfile, $errline) * @return buffer */ -function handleFatalErrors($buffer) +function handleFatalErrors ($buffer) { - if (preg_match('/(error<\/b>:)(.+)(/', '', $regs[2]); - $aAux = explode(' in ', $err); + if (preg_match( '/(error<\/b>:)(.+)(/', '', $regs[2] ); + $aAux = explode( ' in ', $err ); $sCode = $_SESSION['_CODE_']; - unset($_SESSION['_CODE_']); - registerError(2, $aAux[0], 0, $sCode); - if (strpos($_SERVER['REQUEST_URI'], '/cases/cases_Step') !== false) { - if (strpos($_SERVER['REQUEST_URI'], '&ACTION=GENERATE') !== false) { - G::LoadClass('case'); + unset( $_SESSION['_CODE_'] ); + registerError( 2, $aAux[0], 0, $sCode ); + if (strpos( $_SERVER['REQUEST_URI'], '/cases/cases_Step' ) !== false) { + if (strpos( $_SERVER['REQUEST_URI'], '&ACTION=GENERATE' ) !== false) { + G::LoadClass( 'case' ); $oCase = new Cases(); - $aNextStep = $oCase->getNextStep($_SESSION['PROCESS'], - $_SESSION['APPLICATION'], - $_SESSION['INDEX'], - $_SESSION['STEP_POSITION']); + $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); if ($_SESSION['TRIGGER_DEBUG']['ISSET']) { $_SESSION['TRIGGER_DEBUG']['TIME'] = 'AFTER'; $_SESSION['TRIGGER_DEBUG']['BREAKPAGE'] = $aNextStep['PAGE']; $aNextStep['PAGE'] = $aNextStep['PAGE'] . '&breakpoint=triggerdebug'; } - G::header('Location: ' . $aNextStep['PAGE']); - die; + G::header( 'Location: ' . $aNextStep['PAGE'] ); + die(); } $_SESSION['_NO_EXECUTE_TRIGGERS_'] = 1; - G::header('Location: ' . $_SERVER['REQUEST_URI']); - die; + G::header( 'Location: ' . $_SERVER['REQUEST_URI'] ); + die(); } else { - G::LoadClass('case'); + G::LoadClass( 'case' ); $oCase = new Cases(); - $aNextStep = $oCase->getNextStep($_SESSION['PROCESS'], - $_SESSION['APPLICATION'], - $_SESSION['INDEX'], - $_SESSION['STEP_POSITION']); + $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); if ($_SESSION['TRIGGER_DEBUG']['ISSET']) { $_SESSION['TRIGGER_DEBUG']['TIME'] = 'AFTER'; $_SESSION['TRIGGER_DEBUG']['BREAKPAGE'] = $aNextStep['PAGE']; $aNextStep['PAGE'] = $aNextStep['PAGE'] . '&breakpoint=triggerdebug'; } - if (strpos($aNextStep['PAGE'], 'TYPE=ASSIGN_TASK&UID=-1') !== false) { - G::SendMessageText('Fatal error in trigger', 'error'); + if (strpos( $aNextStep['PAGE'], 'TYPE=ASSIGN_TASK&UID=-1' ) !== false) { + G::SendMessageText( 'Fatal error in trigger', 'error' ); } - G::header('Location: ' . $aNextStep['PAGE']); - die; + G::header( 'Location: ' . $aNextStep['PAGE'] ); + die(); } } return $buffer; @@ -682,11 +604,10 @@ function handleFatalErrors($buffer) * @return void */ -function registerError($iType, $sError, $iLine, $sCode) +function registerError ($iType, $sError, $iLine, $sCode) { $sType = ($iType == 1 ? 'ERROR' : 'FATAL'); - $_SESSION['TRIGGER_DEBUG']['ERRORS'][][$sType] = $sError . ($iLine > 0 ? ' (line ' . $iLine . ')' : '') - . ':

' . $sCode; + $_SESSION['TRIGGER_DEBUG']['ERRORS'][][$sType] = $sError . ($iLine > 0 ? ' (line ' . $iLine . ')' : '') . ':

' . $sCode; } /** @@ -695,7 +616,7 @@ function registerError($iType, $sError, $iLine, $sCode) * @param type $connection * @return type */ -function getEngineDataBaseName($connection) +function getEngineDataBaseName ($connection) { $aDNS = $connection->getDSN(); return $aDNS["phptype"]; @@ -707,7 +628,7 @@ function getEngineDataBaseName($connection) * @param type $sql * @param type $connection */ -function executeQueryOci($sql, $connection, $aParameter=array()) +function executeQueryOci ($sql, $connection, $aParameter = array()) { $aDNS = $connection->getDSN(); @@ -719,53 +640,53 @@ function executeQueryOci($sql, $connection, $aParameter=array()) if ($sPort != "1521") { // if not default port - $conn = oci_connect($sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse); + $conn = oci_connect( $sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse ); } else { - $conn = oci_connect($sUsername, $sPassword, $sHostspec . "/" . $sDatabse); + $conn = oci_connect( $sUsername, $sPassword, $sHostspec . "/" . $sDatabse ); } - if (!$conn) { + if (! $conn) { $e = oci_error(); - trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); + trigger_error( htmlentities( $e['message'], ENT_QUOTES ), E_USER_ERROR ); return $e; } switch (true) { - case preg_match("/^(SELECT|SHOW|DESCRIBE|DESC|WITH)\s/i", $sql): - $stid = oci_parse($conn, $sql); - if (count($aParameter) > 0) { + case preg_match( "/^(SELECT|SHOW|DESCRIBE|DESC|WITH)\s/i", $sql ): + $stid = oci_parse( $conn, $sql ); + if (count( $aParameter ) > 0) { foreach ($aParameter as $key => $val) { - oci_bind_by_name($stid, $key, $val); + oci_bind_by_name( $stid, $key, $val ); } } - oci_execute($stid, OCI_DEFAULT); + oci_execute( $stid, OCI_DEFAULT ); - $result = Array(); + $result = Array (); $i = 1; - while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) { - $result[$i++] = $row; + while ($row = oci_fetch_array( $stid, OCI_ASSOC + OCI_RETURN_NULLS )) { + $result[$i ++] = $row; } - oci_free_statement($stid); - oci_close($conn); + oci_free_statement( $stid ); + oci_close( $conn ); return $result; break; - case preg_match("/^(INSERT|UPDATE|DELETE)\s/i", $sql): - $stid = oci_parse($conn, $sql); + case preg_match( "/^(INSERT|UPDATE|DELETE)\s/i", $sql ): + $stid = oci_parse( $conn, $sql ); $isValid = true; - if (count($aParameter) > 0) { + if (count( $aParameter ) > 0) { foreach ($aParameter as $key => $val) { - oci_bind_by_name($stid, $key, $val); + oci_bind_by_name( $stid, $key, $val ); } } - $objExecute = oci_execute($stid, OCI_DEFAULT); + $objExecute = oci_execute( $stid, OCI_DEFAULT ); if ($objExecute) { - oci_commit($conn); + oci_commit( $conn ); } else { - oci_rollback($conn); + oci_rollback( $conn ); $isValid = false; } - oci_free_statement($stid); - oci_close($conn); + oci_free_statement( $stid ); + oci_close( $conn ); if ($isValid) { return true; } else { @@ -774,20 +695,20 @@ function executeQueryOci($sql, $connection, $aParameter=array()) break; default: // Stored procedures - $stid = oci_parse($conn, $sql); - $aParameterRet = array(); - if (count($aParameter) > 0) { + $stid = oci_parse( $conn, $sql ); + $aParameterRet = array (); + if (count( $aParameter ) > 0) { foreach ($aParameter as $key => $val) { $aParameterRet[$key] = $val; // The third parameter ($aParameterRet[$key]) returned a value by reference. - oci_bind_by_name($stid, $key, $aParameterRet[$key]); + oci_bind_by_name( $stid, $key, $aParameterRet[$key] ); } } - $objExecute = oci_execute($stid, OCI_DEFAULT); - oci_free_statement($stid); - oci_close($conn); + $objExecute = oci_execute( $stid, OCI_DEFAULT ); + oci_free_statement( $stid ); + oci_close( $conn ); return $aParameterRet; break; } } - \ No newline at end of file + diff --git a/workflow/engine/classes/class.pmTable.php b/workflow/engine/classes/class.pmTable.php index 43a9c87c2..45c082a5d 100755 --- a/workflow/engine/classes/class.pmTable.php +++ b/workflow/engine/classes/class.pmTable.php @@ -2,7 +2,8 @@ /** * class.case.php - * @package workflow.engine.classes + * + * @package workflow.engine.classes * * ProcessMaker Open Source Edition * Copyright (C) 2004 - 2008 Colosa Inc.23 @@ -14,11 +15,11 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -29,6 +30,7 @@ require_once 'classes/model/AdditionalTables.php'; /** * PmTable Class * New class to handle pmTable in native form invoking to Phing & Propel + * * @author Erik Amaru Ortiz */ class PmTable @@ -50,11 +52,11 @@ class PmTable private $db; private $alterTable = true; - public function __construct($tableName=null) + public function __construct ($tableName = null) { - if (isset($tableName)) { + if (isset( $tableName )) { $this->tableName = $tableName; - $this->className = $this->toCamelCase($tableName); + $this->className = $this->toCamelCase( $tableName ); } $this->dbConfig = new StdClass(); @@ -62,21 +64,23 @@ class PmTable /** * Set columns to pmTable + * * @param array $columns contains a array of abjects - * array(StdClass->field_name, field_type, field_size, field_null, field_key, field_autoincrement,...) + * array(StdClass->field_name, field_type, field_size, field_null, field_key, field_autoincrement,...) */ - public function setColumns($columns) + public function setColumns ($columns) { $this->columns = $columns; } /** * Set a data source + * * @param string $dbsUid DBS_UID to relate the pmTable to phisical table */ - public function setDataSource($dbsUid) + public function setDataSource ($dbsUid) { - $this->dataSource = self::resolveDbSource($dbsUid); + $this->dataSource = self::resolveDbSource( $dbsUid ); switch ($this->dataSource) { case 'workflow': @@ -98,10 +102,10 @@ class PmTable default: require_once 'classes/model/DbSource.php'; $oDBSource = new DbSource(); - $proUid = $oDBSource->getValProUid($this->dataSource); - $dbSource = $oDBSource->load($this->dataSource, $proUid); + $proUid = $oDBSource->getValProUid( $this->dataSource ); + $dbSource = $oDBSource->load( $this->dataSource, $proUid ); - if (is_object($dbSource)) { + if (is_object( $dbSource )) { $this->dbConfig->adapter = $dbSource->getDbsType(); $this->dbConfig->host = $dbSource->getDbsServer(); $this->dbConfig->name = $dbSource->getDbsDatabaseName(); @@ -109,7 +113,7 @@ class PmTable $this->dbConfig->passwd = $dbSource->getDbsPassword(); $this->dbConfig->port = $dbSource->getDbsPort(); } - if (is_array($dbSource)) { + if (is_array( $dbSource )) { $this->dbConfig->adapter = $dbSource['DBS_TYPE']; $this->dbConfig->host = $dbSource['DBS_SERVER']; $this->dbConfig->name = $dbSource['DBS_DATABASE_NAME']; @@ -117,7 +121,7 @@ class PmTable $this->dbConfig->passwd = $dbSource['DBS_PASSWORD']; $this->dbConfig->port = $dbSource['DBS_PORT']; } else { - throw new Exception("Db source with id $dbsUid does not exist!"); + throw new Exception( "Db source with id $dbsUid does not exist!" ); } } } @@ -125,10 +129,11 @@ class PmTable /** * Backward compatibility function * Resolve a propel data source + * * @param string $dbsUid corresponding to DBS_UID key * @return string contains resolved DBS_UID */ - public function resolveDbSource($dbsUid) + public function resolveDbSource ($dbsUid) { switch ($dbsUid) { case 'workflow': @@ -147,21 +152,22 @@ class PmTable return $dbsUid; } - public function getDataSource() + public function getDataSource () { return $this->dataSource; } /** * get Data base config object + * * @return object containing dbConfig var */ - public function getDbConfig() + public function getDbConfig () { return $this->dbConfig; } - public function setAlterTable($value) + public function setAlterTable ($value) { $this->alterTable = $value; } @@ -169,7 +175,7 @@ class PmTable /** * Build the pmTable with all dependencies */ - public function build() + public function build () { $this->prepare(); $this->preparePropelIniFile(); @@ -182,11 +188,11 @@ class PmTable } } - public function buildModelFor($dbsUid, $tablesList) + public function buildModelFor ($dbsUid, $tablesList) { - $this->setDataSource($dbsUid); + $this->setDataSource( $dbsUid ); $loadSchema = false; - $this->prepare($loadSchema); + $this->prepare( $loadSchema ); $this->phingbuildModel(); $this->phingbuildSql(); //$this->upgradeDatabaseFor($this->dataSource, $tablesList); @@ -195,10 +201,10 @@ class PmTable /** * Prepare the pmTable env */ - public function prepare($loadSchema=true) + public function prepare ($loadSchema = true) { //prevent execute prepare() twice or more - if (is_object($this->dom)) { + if (is_object( $this->dom )) { return true; } @@ -210,94 +216,93 @@ class PmTable $this->classesDir = $this->baseDir . 'classes' . PATH_SEP; // G::mk_dir create the requested dir and the parents directories if not exists - G::mk_dir($this->configDir); - G::mk_dir($this->dataDir); + G::mk_dir( $this->configDir ); + G::mk_dir( $this->dataDir ); if ($loadSchema) { $this->loadSchema(); } } - public function loadSchema() + public function loadSchema () { - $this->dom = new DOMDocument('1.0', 'utf-8'); + $this->dom = new DOMDocument( '1.0', 'utf-8' ); $this->dom->preserveWhiteSpace = false; $this->dom->formatOutput = true; - if (file_exists($this->configDir . $this->schemaFilename)) { - if (@$this->dom->load($this->configDir . $this->schemaFilename) !== true) { - throw new Exception('Error: ' . $this->schemaFilename . ' is a invalid xml file!'); + if (file_exists( $this->configDir . $this->schemaFilename )) { + if (@$this->dom->load( $this->configDir . $this->schemaFilename ) !== true) { + throw new Exception( 'Error: ' . $this->schemaFilename . ' is a invalid xml file!' ); } $this->rootNode = $this->dom->firstChild; } else { - $this->rootNode = $this->dom->createElement('database'); - $this->rootNode->setAttribute('name', $this->dataSource); - $this->dom->appendChild($this->rootNode); + $this->rootNode = $this->dom->createElement( 'database' ); + $this->rootNode->setAttribute( 'name', $this->dataSource ); + $this->dom->appendChild( $this->rootNode ); } } /** * Build the xml schema for propel */ - public function buildSchema() + public function buildSchema () { - $tableNode = $this->dom->createElement('table'); - $tableNode->setAttribute('name', $this->tableName); + $tableNode = $this->dom->createElement( 'table' ); + $tableNode->setAttribute( 'name', $this->tableName ); if ($this->hasAutoIncrementPKey()) { - $tableNode->setAttribute('idMethod', 'native'); + $tableNode->setAttribute( 'idMethod', 'native' ); } // specifying collation switch ($this->dbConfig->adapter) { case 'mysql': - $vendorNode = $this->dom->createElement('vendor'); - $vendorNode->setAttribute('type', $this->dbConfig->adapter); - $parameterNode = $this->dom->createElement('parameter'); - $parameterNode->setAttribute('name', 'Collation'); - $parameterNode->setAttribute('value', 'utf8_general_ci'); - $vendorNode->appendChild($parameterNode); - $tableNode->appendChild($vendorNode); + $vendorNode = $this->dom->createElement( 'vendor' ); + $vendorNode->setAttribute( 'type', $this->dbConfig->adapter ); + $parameterNode = $this->dom->createElement( 'parameter' ); + $parameterNode->setAttribute( 'name', 'Collation' ); + $parameterNode->setAttribute( 'value', 'utf8_general_ci' ); + $vendorNode->appendChild( $parameterNode ); + $tableNode->appendChild( $vendorNode ); break; } - foreach ($this->columns as $column) { // create the column node - $columnNode = $this->dom->createElement('column'); + $columnNode = $this->dom->createElement( 'column' ); // setting column node attributes - $columnNode->setAttribute('name', $column->field_name); - $columnNode->setAttribute('type', $column->field_type); + $columnNode->setAttribute( 'name', $column->field_name ); + $columnNode->setAttribute( 'type', $column->field_type ); if ($column->field_size != '' && $column->field_size != 0) { - $columnNode->setAttribute('size', $column->field_size); + $columnNode->setAttribute( 'size', $column->field_size ); } - $columnNode->setAttribute('required', ($column->field_null ? 'false' : 'true')); + $columnNode->setAttribute( 'required', ($column->field_null ? 'false' : 'true') ); // only define the primaryKey attribute if it is defined if ($column->field_key) { - $columnNode->setAttribute('primaryKey', "true"); + $columnNode->setAttribute( 'primaryKey', "true" ); } // only define the autoIncrement attribute if it is defined if ($column->field_autoincrement) { - $columnNode->setAttribute('autoIncrement', "true"); + $columnNode->setAttribute( 'autoIncrement', "true" ); } - $tableNode->appendChild($columnNode); + $tableNode->appendChild( $columnNode ); } - $xpath = new DOMXPath($this->dom); - $xtable = $xpath->query('/database/table[@name="' . $this->tableName . '"]'); + $xpath = new DOMXPath( $this->dom ); + $xtable = $xpath->query( '/database/table[@name="' . $this->tableName . '"]' ); if ($xtable->length == 0) { //the table definition does not exist, then just append the new node - $this->rootNode->appendChild($tableNode); + $this->rootNode->appendChild( $tableNode ); } else { // the table definition already exist, then replace the node - $replacedNode = $xtable->item(0); - $this->rootNode->replaceChild($tableNode, $replacedNode); + $replacedNode = $xtable->item( 0 ); + $this->rootNode->replaceChild( $tableNode, $replacedNode ); } // saving the xml result file @@ -307,7 +312,7 @@ class PmTable /** * Remove the pmTable and all related objects, files and others */ - public function remove() + public function remove () { $this->prepare(); $this->removeFromSchema(); @@ -318,16 +323,16 @@ class PmTable /** * Remove the target pmTable from schema of propel */ - public function removeFromSchema() + public function removeFromSchema () { - $xpath = new DOMXPath($this->dom); + $xpath = new DOMXPath( $this->dom ); // locate the node - $xtable = $xpath->query('/database/table[@name="' . $this->tableName . '"]'); + $xtable = $xpath->query( '/database/table[@name="' . $this->tableName . '"]' ); if ($xtable->length == 0) { return false; } - $this->rootNode->removeChild($xtable->item(0)); + $this->rootNode->removeChild( $xtable->item( 0 ) ); // saving the xml result file $this->saveSchema(); } @@ -335,29 +340,29 @@ class PmTable /** * Remove the model related classes files */ - public function removeModelFiles() + public function removeModelFiles () { - @unlink($this->classesDir . $this->className . '.php'); - @unlink($this->classesDir . $this->className . 'Peer.php'); - @unlink($this->classesDir . 'map' . PATH_SEP . $this->className . 'MapBuilder.php'); - @unlink($this->classesDir . 'om' . PATH_SEP . 'Base' . $this->className . '.php'); - @unlink($this->classesDir . 'om' . PATH_SEP . 'Base' . $this->className . 'Peer.php'); + @unlink( $this->classesDir . $this->className . '.php' ); + @unlink( $this->classesDir . $this->className . 'Peer.php' ); + @unlink( $this->classesDir . 'map' . PATH_SEP . $this->className . 'MapBuilder.php' ); + @unlink( $this->classesDir . 'om' . PATH_SEP . 'Base' . $this->className . '.php' ); + @unlink( $this->classesDir . 'om' . PATH_SEP . 'Base' . $this->className . 'Peer.php' ); } /** * Drop the phisical table of target pmTable or any specified as parameter */ - public function dropTable($tableName=null) + public function dropTable ($tableName = null) { - $tableName = isset($tableName) ? $tableName : $this->tableName; - $con = Propel::getConnection($this->dataSource); + $tableName = isset( $tableName ) ? $tableName : $this->tableName; + $con = Propel::getConnection( $this->dataSource ); $stmt = $con->createStatement(); - if (is_object($con)) { + if (is_object( $con )) { try { - $stmt->executeQuery("DROP TABLE {$tableName}"); + $stmt->executeQuery( "DROP TABLE {$tableName}" ); } catch (Exception $e) { - throw new Exception("Physical table '$tableName' does not exist!"); + throw new Exception( "Physical table '$tableName' does not exist!" ); } } } @@ -365,28 +370,27 @@ class PmTable /** * Save the xml schema for propel */ - public function saveSchema() + public function saveSchema () { - $this->dom->save($this->configDir . $this->schemaFilename); + $this->dom->save( $this->configDir . $this->schemaFilename ); } /** * Prepare and create if not exists the propel ini file */ - public function preparePropelIniFile() + public function preparePropelIniFile () { $adapter = $this->dbConfig->adapter; - if (file_exists($this->configDir . "propel.$adapter.ini")) { + if (file_exists( $this->configDir . "propel.$adapter.ini" )) { return true; } - if (!file_exists(PATH_CORE . PATH_SEP . 'config' . PATH_SEP . "propel.$adapter.ini")) { - throw new Exception("Invalid or not supported engine '$adapter'!"); + if (! file_exists( PATH_CORE . PATH_SEP . 'config' . PATH_SEP . "propel.$adapter.ini" )) { + throw new Exception( "Invalid or not supported engine '$adapter'!" ); } - @copy(PATH_CORE . PATH_SEP . 'config' . PATH_SEP . "propel.$adapter.ini", - $this->configDir . "propel.$adapter.ini"); + @copy( PATH_CORE . PATH_SEP . 'config' . PATH_SEP . "propel.$adapter.ini", $this->configDir . "propel.$adapter.ini" ); } /** @@ -395,34 +399,35 @@ class PmTable * for the related table * - this function is not executing other sentenses like 'SET FOREIGN_KEY_CHECKS = 0;' for mysql, and others */ - public function upgradeDatabase() + public function upgradeDatabase () { - $con = Propel::getConnection($this->dataSource); + $con = Propel::getConnection( $this->dataSource ); $stmt = $con->createStatement(); - $lines = file($this->dataDir . $this->dbConfig->adapter . PATH_SEP . 'schema.sql'); + $lines = file( $this->dataDir . $this->dbConfig->adapter . PATH_SEP . 'schema.sql' ); $previous = null; - $queryStack = array(); + $queryStack = array (); $aDNS = $con->getDSN(); $dbEngine = $aDNS["phptype"]; foreach ($lines as $j => $line) { switch ($dbEngine) { case 'mysql': - $line = trim($line); // Remove comments from the script + $line = trim( $line ); // Remove comments from the script - if (strpos($line, "--") === 0) { - $line = substr($line, 0, strpos($line, "--")); + + if (strpos( $line, "--" ) === 0) { + $line = substr( $line, 0, strpos( $line, "--" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } - if (strpos($line, "#") === 0) { - $line = substr($line, 0, strpos($line, "#")); + if (strpos( $line, "#" ) === 0) { + $line = substr( $line, 0, strpos( $line, "#" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } @@ -434,21 +439,19 @@ class PmTable // If the current line doesnt end with ; then put this line together // with the next one, thus supporting multi-line statements. - if (strrpos($line, ";") != strlen($line) - 1) { + if (strrpos( $line, ";" ) != strlen( $line ) - 1) { $previous = $line; continue; } - $line = substr($line, 0, strrpos($line, ";")); + $line = substr( $line, 0, strrpos( $line, ";" ) ); // just execute the drop and create table for target table nad not for others - if (stripos($line, 'CREATE TABLE') !== false || stripos($line, 'DROP TABLE') !== false) { - $isCreateForCurrentTable = preg_match('/CREATE\sTABLE\s[\[\'\"\`]{1}' . $this->tableName - . '[\]\'\"\`]{1}/i', $line, $match); + if (stripos( $line, 'CREATE TABLE' ) !== false || stripos( $line, 'DROP TABLE' ) !== false) { + $isCreateForCurrentTable = preg_match( '/CREATE\sTABLE\s[\[\'\"\`]{1}' . $this->tableName . '[\]\'\"\`]{1}/i', $line, $match ); if ($isCreateForCurrentTable) { $queryStack['create'] = $line; } else { - $isDropForCurrentTable = preg_match('/DROP TABLE.*[\[\'\"\`]{1}' . $this->tableName - . '[\]\'\"\`]{1}/i', $line, $match); + $isDropForCurrentTable = preg_match( '/DROP TABLE.*[\[\'\"\`]{1}' . $this->tableName . '[\]\'\"\`]{1}/i', $line, $match ); if ($isDropForCurrentTable) { $queryStack['drop'] = $line; } @@ -456,21 +459,22 @@ class PmTable } break; case 'mssql': - $line = trim($line); // Remove comments from the script + $line = trim( $line ); // Remove comments from the script - if (strpos($line, "--") === 0) { - $line = substr($line, 0, strpos($line, "--")); + + if (strpos( $line, "--" ) === 0) { + $line = substr( $line, 0, strpos( $line, "--" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } - if (strpos($line, "#") === 0) { - $line = substr($line, 0, strpos($line, "#")); + if (strpos( $line, "#" ) === 0) { + $line = substr( $line, 0, strpos( $line, "#" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } @@ -482,47 +486,47 @@ class PmTable // If the current line doesnt end with ; then put this line together // with the next one, thus supporting multi-line statements. - if (strrpos($line, ";") != strlen($line) - 1) { + if (strrpos( $line, ";" ) != strlen( $line ) - 1) { $previous = $line; continue; } - $line = substr($line, 0, strrpos($line, ";")); + $line = substr( $line, 0, strrpos( $line, ";" ) ); - if (strpos($line, $this->tableName) == false) { + if (strpos( $line, $this->tableName ) == false) { continue; } - $auxCreate = explode('CREATE', $line); - $auxDrop = explode('IF EXISTS', $auxCreate['0']); + $auxCreate = explode( 'CREATE', $line ); + $auxDrop = explode( 'IF EXISTS', $auxCreate['0'] ); - $queryStack['drop'] = 'IF EXISTS' . $auxDrop['1']; + $queryStack['drop'] = 'IF EXISTS' . $auxDrop['1']; $queryStack['create'] = 'CREATE' . $auxCreate['1']; break; case 'oracle': - $line = trim($line); // Remove comments from the script - if (empty($line)) { + $line = trim( $line ); // Remove comments from the script + if (empty( $line )) { continue; } switch (true) { - case preg_match("/^CREATE TABLE\s/i", $line): - if (strpos($line, $this->tableName) == true) { + case preg_match( "/^CREATE TABLE\s/i", $line ): + if (strpos( $line, $this->tableName ) == true) { $inCreate = true; $lineCreate .= $line . ' '; } break; - case preg_match("/ALTER TABLE\s/i", $line): - if (strpos($line, $this->tableName) == true) { + case preg_match( "/ALTER TABLE\s/i", $line ): + if (strpos( $line, $this->tableName ) == true) { $inAlter = true; $lineAlter .= $line . ' '; } break; - case preg_match("/^DROP TABLE\s/i", $line): - if (strpos($line, $this->tableName) == true) { + case preg_match( "/^DROP TABLE\s/i", $line ): + if (strpos( $line, $this->tableName ) == true) { $inDrop = true; $lineDrop .= $line . ' '; - if (strrpos($line, ";") > 0) { + if (strrpos( $line, ";" ) > 0) { $queryStack['drop'] = $lineDrop; $inDrop = false; } @@ -531,21 +535,21 @@ class PmTable default: if ($inCreate) { $lineCreate .= $line . ' '; - if (strrpos($line, ";") > 0) { + if (strrpos( $line, ";" ) > 0) { $queryStack['create'] = $lineCreate; $inCreate = false; } } if ($inAlter) { $lineAlter .= $line . ' '; - if (strrpos($line, ";") > 0) { + if (strrpos( $line, ";" ) > 0) { $queryStack['alter'] = $lineAlter; $inAlter = false; } } if ($inDrop) { $lineDrop .= $line . ' '; - if (strrpos($line, ";") > 0) { + if (strrpos( $line, ";" ) > 0) { $queryStack['drop'] = $lineDrop; $inDrop = false; } @@ -556,64 +560,65 @@ class PmTable } if ($dbEngine == 'oracle') { - $queryStack['drop'] = substr($queryStack['drop'], 0, strrpos($queryStack['drop'], ";")); - $queryStack['create'] = substr($queryStack['create'], 0, strrpos($queryStack['create'], ";")); - $queryStack['alter'] = substr($queryStack['alter'], 0, strrpos($queryStack['alter'], ";")); + $queryStack['drop'] = substr( $queryStack['drop'], 0, strrpos( $queryStack['drop'], ";" ) ); + $queryStack['create'] = substr( $queryStack['create'], 0, strrpos( $queryStack['create'], ";" ) ); + $queryStack['alter'] = substr( $queryStack['alter'], 0, strrpos( $queryStack['alter'], ";" ) ); $queryIfExistTable = "SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = '" . $this->tableName . "'"; - $rs = $stmt->executeQuery($queryIfExistTable); + $rs = $stmt->executeQuery( $queryIfExistTable ); if ($rs->next()) { - $stmt->executeQuery($queryStack['drop']); + $stmt->executeQuery( $queryStack['drop'] ); } - $stmt->executeQuery($queryStack['create']); - $stmt->executeQuery($queryStack['alter']); + $stmt->executeQuery( $queryStack['create'] ); + $stmt->executeQuery( $queryStack['alter'] ); } else { - if (isset($queryStack['create'])) { + if (isset( $queryStack['create'] )) { // first at all we need to verify if we have a valid schema defined, // so we verify that creating a dummy table - $swapQuery = str_replace($this->tableName, $this->tableName . '_TMP', $queryStack['create']); + $swapQuery = str_replace( $this->tableName, $this->tableName . '_TMP', $queryStack['create'] ); // if there is a problem with user defined table schema executeQuery() will throw a sql exception - $stmt->executeQuery($swapQuery); + $stmt->executeQuery( $swapQuery ); // if there was not problem above proceced deleting the dummy table and drop and create the target table - $stmt->executeQuery("DROP TABLE {$this->tableName}_TMP"); - if (!isset($queryStack['drop'])) { + $stmt->executeQuery( "DROP TABLE {$this->tableName}_TMP" ); + if (! isset( $queryStack['drop'] )) { $queryStack['drop'] = "DROP TABLE {$this->tableName}"; } - if (!isset($queryStack['create'])) { - throw new Exception('A problem occurred resolving the schema to update for this table'); + if (! isset( $queryStack['create'] )) { + throw new Exception( 'A problem occurred resolving the schema to update for this table' ); } - $stmt->executeQuery($queryStack['drop']); - $stmt->executeQuery($queryStack['create']); + $stmt->executeQuery( $queryStack['drop'] ); + $stmt->executeQuery( $queryStack['create'] ); } } } - public function upgradeDatabaseFor($dataSource, $tablesList=array()) + public function upgradeDatabaseFor ($dataSource, $tablesList = array()) { - $con = Propel::getConnection($dataSource); + $con = Propel::getConnection( $dataSource ); $stmt = $con->createStatement(); - $lines = file($this->dataDir . $this->dbConfig->adapter . PATH_SEP . 'schema.sql'); + $lines = file( $this->dataDir . $this->dbConfig->adapter . PATH_SEP . 'schema.sql' ); $previous = null; $errors = ''; foreach ($lines as $j => $line) { - $line = trim($line); // Remove comments from the script + $line = trim( $line ); // Remove comments from the script - if (strpos($line, "--") === 0) { - $line = substr($line, 0, strpos($line, "--")); + + if (strpos( $line, "--" ) === 0) { + $line = substr( $line, 0, strpos( $line, "--" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } - if (strpos($line, "#") === 0) { - $line = substr($line, 0, strpos($line, "#")); + if (strpos( $line, "#" ) === 0) { + $line = substr( $line, 0, strpos( $line, "#" ) ); } - if (empty($line)) { + if (empty( $line )) { continue; } @@ -625,23 +630,23 @@ class PmTable // If the current line doesnt end with ; then put this line together // with the next one, thus supporting multi-line statements. - if (strrpos($line, ";") != strlen($line) - 1) { + if (strrpos( $line, ";" ) != strlen( $line ) - 1) { $previous = $line; continue; } - $line = substr($line, 0, strrpos($line, ";")); + $line = substr( $line, 0, strrpos( $line, ";" ) ); // execute - $isCreate = stripos($line, 'CREATE TABLE') !== false; - $isDrop = stripos($line, 'DROP TABLE') !== false; + $isCreate = stripos( $line, 'CREATE TABLE' ) !== false; + $isDrop = stripos( $line, 'DROP TABLE' ) !== false; if ($isCreate || $isDrop) { - if (preg_match('/TABLE\s[\'\"\`]+(\w+)[\'\"\`]+/i', $line, $match)) { - if (in_array($match[1], $tablesList)) { + if (preg_match( '/TABLE\s[\'\"\`]+(\w+)[\'\"\`]+/i', $line, $match )) { + if (in_array( $match[1], $tablesList )) { //error_log($line); try { - $stmt->executeQuery($line); + $stmt->executeQuery( $line ); } catch (Exception $e) { $errors .= $e->getMessage() . "\n"; continue; @@ -656,9 +661,10 @@ class PmTable /** * verify if on the columns list was set a column as primary key + * * @return boolean to affirm if was defined a column as pk. */ - public function hasAutoIncrementPKey() + public function hasAutoIncrementPKey () { foreach ($this->columns as $column) { if ($column->field_autoincrement) { @@ -673,14 +679,14 @@ class PmTable * * @return array contains all supported columns types provided by propel */ - public function getPropelSupportedColumnTypes() + public function getPropelSupportedColumnTypes () { /** * http://www.propelorm.org/wiki/Documentation/1.2/Schema * [type = "BOOLEAN|TINYINT|SMALLINT|INTEGER|BIGINT|DOUBLE|FLOAT|REAL|DECIMAL|CHAR|{VARCHAR} - * |LONGVARCHAR|DATE|TIME|TIMESTAMP|BLOB|CLOB"] + * |LONGVARCHAR|DATE|TIME|TIMESTAMP|BLOB|CLOB"] */ - $types = array(); + $types = array (); $types['BOOLEAN'] = 'BOOLEAN'; $types['TINYINT'] = 'TINYINT'; @@ -700,96 +706,96 @@ class PmTable //$types['BLOB'] = 'BLOB'; <- disabled //$types['CLOB'] = 'CLOB'; <- disabled + return $types; } /** + * * @param string $name any string witha name separated by underscore * @return string contains a camelcase expresion for $name */ - public function toCamelCase($name) + public function toCamelCase ($name) { - $tmp = explode('_', trim($name)); + $tmp = explode( '_', trim( $name ) ); foreach ($tmp as $i => $part) { - $tmp[$i] = ucFirst(strtolower($part)); + $tmp[$i] = ucFirst( strtolower( $part ) ); } - return implode('', $tmp); + return implode( '', $tmp ); } /** * Run om task for phing to build all mdoel classes */ - public function phingbuildModel() + public function phingbuildModel () { - $this->_callPhing('om'); + $this->_callPhing( 'om' ); } /** * Run sql task for phing to generate the sql schema */ - public function phingbuildSql() + public function phingbuildSql () { - $this->_callPhing('sql'); + $this->_callPhing( 'sql' ); } /** * call phing to execute a determinated task + * * @param string $taskName [om|sql] */ - private function _callPhing($taskName) + private function _callPhing ($taskName) { - $options = array( - 'project.dir' => $this->configDir, - 'build.properties' => "propel.{$this->dbConfig->adapter}.ini", - 'propel.targetPackage' => 'classes', - 'propel.output.dir' => $this->targetDir, - 'propel.php.dir' => $this->baseDir + $options = array ('project.dir' => $this->configDir,'build.properties' => "propel.{$this->dbConfig->adapter}.ini",'propel.targetPackage' => 'classes','propel.output.dir' => $this->targetDir,'propel.php.dir' => $this->baseDir ); - self::callPhing(array($taskName), PATH_THIRDPARTY . 'propel-generator/build.xml', $options, false); + self::callPhing( array ($taskName + ), PATH_THIRDPARTY . 'propel-generator/build.xml', $options, false ); } /** - * @param string $target - task name to execute + * + * @param string $target - task name to execute * @param string $buildFile - build file path - * @param array $options - array options to override the options on .ini file - * @param bool $verbose - to show a verbose output + * @param array $options - array options to override the options on .ini file + * @param bool $verbose - to show a verbose output */ - public static function callPhing($target, $buildFile='', $options=array(), $verbose=true) + public static function callPhing ($target, $buildFile = '', $options = array(), $verbose = true) { - G::loadClass('pmPhing'); + G::loadClass( 'pmPhing' ); - $args = array(); + $args = array (); foreach ($options as $key => $value) { $args[] = "-D$key=$value"; } if ($buildFile) { $args[] = '-f'; - $args[] = realpath($buildFile); + $args[] = realpath( $buildFile ); } - if (!$verbose) { + if (! $verbose) { $args[] = '-q'; } - if (is_array($target)) { - $args = array_merge($args, $target); + if (is_array( $target )) { + $args = array_merge( $args, $target ); } else { $args[] = $target; } - if (DIRECTORY_SEPARATOR != '\\' && (function_exists('posix_isatty') && @posix_isatty(STDOUT))) { + if (DIRECTORY_SEPARATOR != '\\' && (function_exists( 'posix_isatty' ) && @posix_isatty( STDOUT ))) { $args[] = '-logger'; $args[] = 'phing.listener.AnsiColorLogger'; } Phing::startup(); - Phing::setProperty('phing.home', getenv('PHING_HOME')); + Phing::setProperty( 'phing.home', getenv( 'PHING_HOME' ) ); $m = new pmPhing(); - $m->execute($args); + $m->execute( $args ); $m->runBuild(); } } - \ No newline at end of file + diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index c737bf338..0a4d833fe 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ /** + * * @package workflow.engine.ProcessMaker */ -G::LoadThirdParty('pear/json', 'class.json'); -G::LoadClass('groups'); -G::LoadClass('tasks'); -G::LoadClass('xmlfield_InputPM'); -G::LoadClass('calendar'); - +G::LoadThirdParty( 'pear/json', 'class.json' ); +G::LoadClass( 'groups' ); +G::LoadClass( 'tasks' ); +G::LoadClass( 'xmlfield_InputPM' ); +G::LoadClass( 'calendar' ); require_once 'classes/model/AppDelegation.php'; require_once 'classes/model/CaseTracker.php'; @@ -65,12 +66,14 @@ require_once 'classes/model/om/BaseUsers.php'; /** * processMap - Process Map class + * * @package workflow.engine.ProcessMaker * @author Julio Cesar Laura Avendano * @copyright 2007 COLOSA */ -class processMap { - /* +class processMap +{ + /* * Load the process map data * @param string $sProcessUID * @param boolean $bView @@ -80,604 +83,618 @@ class processMap { * @return string */ - function load($sProcessUID, $bView = false, $sApplicationUID = '', $iDelegation = 0, $sTask = '', $bCT = false) { - try { - $oProcess = new Process ( ); + public function load ($sProcessUID, $bView = false, $sApplicationUID = '', $iDelegation = 0, $sTask = '', $bCT = false) + { + try { + $oProcess = new Process(); - $aRow = $oProcess->load($sProcessUID); - $oPM->title->label = strip_tags($aRow ['PRO_TITLE']); - $oPM->title->position->x = $aRow ['PRO_TITLE_X']; - $oPM->title->position->y = $aRow ['PRO_TITLE_Y']; - $oPM->task = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TaskPeer::PRO_UID); - $oCriteria->addSelectColumn(TaskPeer::TAS_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->addSelectColumn(TaskPeer::TAS_START); - $oCriteria->addSelectColumn(TaskPeer::TAS_POSX); - $oCriteria->addSelectColumn(TaskPeer::TAS_POSY); - $oCriteria->addSelectColumn(TaskPeer::TAS_COLOR); - $oCriteria->addSelectColumn(TaskPeer::TAS_TYPE); - $aConditions = array(); - $aConditions [] = array(0 => TaskPeer::TAS_UID, 1 => ContentPeer::CON_ID); - $aConditions [] = array(0 => ContentPeer::CON_CATEGORY, 1 => DBAdapter::getStringDelimiter () . 'TAS_TITLE' . DBAdapter::getStringDelimiter ()); - $aConditions [] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ()); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow1 = $oDataset->getRow()) { - $oTask = null; - $oTask->uid = $aRow1 ['TAS_UID']; - $oTask->task_type = $aRow1 ['TAS_TYPE']; - if ($aRow1 ['TAS_TYPE'] == 'NORMAL') { - if (($aRow1 ['CON_VALUE'] == "")) { //There is no Label in Current SYS_LANG language so try to find in English - by default - $oTask1 = new Task ( ); - $aFields1 = $oTask1->load($oTask->uid); - $aRow1 ['CON_VALUE'] = $oTask1->getTasTitle(); - } - $oTask->label = strip_tags($aRow1 ['CON_VALUE']); - } else { - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter (); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $aRow1 ['PRO_UID']); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $aRow1 ['TAS_UID']); - - $oCriteria->addAsColumn('TAS_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAlias("C1", 'CONTENT'); - $tasTitleConds = array(); - $tasTitleConds [] = array(SubProcessPeer::TAS_PARENT, 'C1.CON_ID'); - $tasTitleConds [] = array('C1.CON_CATEGORY', $del . 'TAS_TITLE' . $del); - $tasTitleConds [] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); - - $oDatasetX = SubProcessPeer::doSelectRS($oCriteria); - $oDatasetX->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDatasetX->next(); - $aRowx = $oDatasetX->getRow(); - if ($oProcess->exists($aRowx ['PRO_UID'])) { - //$aRowy = $oProcess->load($aRowx['PRO_UID']); - //$oTask->label = $aRowy['PRO_TITLE']; - $oTask->label = $aRowx ['TAS_TITLE']; - } else { - $oTask->label = strip_tags($aRow1 ['CON_VALUE']); - } - } - $oTask->taskINI = (strtolower($aRow1 ['TAS_START']) == 'true' ? true : false); - $oTask->position->x = (int) $aRow1 ['TAS_POSX']; - $oTask->position->y = (int) $aRow1 ['TAS_POSY']; - $oTask->derivation = null; - $oTask->derivation->to = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $aRow1 ['TAS_UID']); - $oDataset2 = RoutePeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - while ($aRow2 = $oDataset2->getRow()) { - switch ($aRow2 ['ROU_TYPE']) { - case 'SEQUENTIAL' : - $aRow2 ['ROU_TYPE'] = 0; - break; - case 'SELECT' : - $aRow2 ['ROU_TYPE'] = 1; - break; - case 'EVALUATE' : - $aRow2 ['ROU_TYPE'] = 2; - break; - case 'PARALLEL' : - $aRow2 ['ROU_TYPE'] = 3; - break; - case 'PARALLEL-BY-EVALUATION' : - $aRow2 ['ROU_TYPE'] = 4; - break; - case 'SEC-JOIN' : - $aRow2 ['ROU_TYPE'] = 5; - break; - case 'DISCRIMINATOR' : - $aRow2 ['ROU_TYPE'] = 8; - break; - } - $oTo = null; - $oTo->task = $aRow2 ['ROU_NEXT_TASK']; - $oTo->condition = $aRow2 ['ROU_CONDITION']; - $oTo->executant = $aRow2 ['ROU_TO_LAST_USER']; - $oTo->optional = $aRow2 ['ROU_OPTIONAL']; - $oTask->derivation->type = $aRow2 ['ROU_TYPE']; - $oTask->derivation->to [] = $oTo; - $oDataset2->next(); - } - if ($bCT) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS CANT'); - $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1 ['TAS_UID']); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('DEL_FINISH_DATE'); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1 ['TAS_UID']); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow3 = $oDataset2->getRow(); - if ($aRow3) { - $aRow2 ['FINISH'] = ''; - } - if (($aRow2 ['FINISH'] == null) && ($aRow1 ['TAS_UID'] == $sTask)) { - $oTask->color = '#FF0000'; - } else { - if ($aRow2 ['CANT'] != 0) { - if ($aRow2 ['FINISH'] == null) { - //$oTask->color = '#FF9900'; - $oTask->color = '#FF0000'; - } else { - $oTask->color = '#006633'; - } - } - else { - $oTask->color = "#939598"; - } - } - } else { - if ($bView && ($sApplicationUID != '') && ($iDelegation > 0) && ($sTask != '')) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS CANT'); - $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1 ['TAS_UID']); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('DEL_FINISH_DATE'); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1 ['TAS_UID']); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow3 = $oDataset2->getRow(); - if ($aRow3) { - $aRow2 ['FINISH'] = ''; - } - if (($aRow2 ['FINISH'] == null) && ($aRow1 ['TAS_UID'] == $sTask)) { - $oTask->color = '#FF0000'; - } else { - if ($aRow2 ['CANT'] != 0) { - if ($aRow2 ['FINISH'] == null) { - $oTask->color = '#FF9900'; + $aRow = $oProcess->load( $sProcessUID ); + $oPM->title->label = strip_tags( $aRow['PRO_TITLE'] ); + $oPM->title->position->x = $aRow['PRO_TITLE_X']; + $oPM->title->position->y = $aRow['PRO_TITLE_Y']; + $oPM->task = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TaskPeer::PRO_UID ); + $oCriteria->addSelectColumn( TaskPeer::TAS_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->addSelectColumn( TaskPeer::TAS_START ); + $oCriteria->addSelectColumn( TaskPeer::TAS_POSX ); + $oCriteria->addSelectColumn( TaskPeer::TAS_POSY ); + $oCriteria->addSelectColumn( TaskPeer::TAS_COLOR ); + $oCriteria->addSelectColumn( TaskPeer::TAS_TYPE ); + $aConditions = array (); + $aConditions[] = array (0 => TaskPeer::TAS_UID,1 => ContentPeer::CON_ID + ); + $aConditions[] = array (0 => ContentPeer::CON_CATEGORY,1 => DBAdapter::getStringDelimiter() . 'TAS_TITLE' . DBAdapter::getStringDelimiter() + ); + $aConditions[] = array (0 => ContentPeer::CON_LANG,1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskPeer::PRO_UID, $sProcessUID ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow1 = $oDataset->getRow()) { + $oTask = null; + $oTask->uid = $aRow1['TAS_UID']; + $oTask->task_type = $aRow1['TAS_TYPE']; + if ($aRow1['TAS_TYPE'] == 'NORMAL') { + if (($aRow1['CON_VALUE'] == "")) { //There is no Label in Current SYS_LANG language so try to find in English - by default + $oTask1 = new Task(); + $aFields1 = $oTask1->load( $oTask->uid ); + $aRow1['CON_VALUE'] = $oTask1->getTasTitle(); + } + $oTask->label = strip_tags( $aRow1['CON_VALUE'] ); } else { - $oTask->color = '#006633'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $aRow1['PRO_UID'] ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $aRow1['TAS_UID'] ); + + $oCriteria->addAsColumn( 'TAS_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $tasTitleConds = array (); + $tasTitleConds[] = array (SubProcessPeer::TAS_PARENT,'C1.CON_ID' + ); + $tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN ); + + $oDatasetX = SubProcessPeer::doSelectRS( $oCriteria ); + $oDatasetX->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDatasetX->next(); + $aRowx = $oDatasetX->getRow(); + if ($oProcess->exists( $aRowx['PRO_UID'] )) { + //$aRowy = $oProcess->load($aRowx['PRO_UID']); + //$oTask->label = $aRowy['PRO_TITLE']; + $oTask->label = $aRowx['TAS_TITLE']; + } else { + $oTask->label = strip_tags( $aRow1['CON_VALUE'] ); + } } - } else { - $oTask->color = '#939598'; - } + $oTask->taskINI = (strtolower( $aRow1['TAS_START'] ) == 'true' ? true : false); + $oTask->position->x = (int) $aRow1['TAS_POSX']; + $oTask->position->y = (int) $aRow1['TAS_POSY']; + $oTask->derivation = null; + $oTask->derivation->to = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $aRow1['TAS_UID'] ); + $oDataset2 = RoutePeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + while ($aRow2 = $oDataset2->getRow()) { + switch ($aRow2['ROU_TYPE']) { + case 'SEQUENTIAL': + $aRow2['ROU_TYPE'] = 0; + break; + case 'SELECT': + $aRow2['ROU_TYPE'] = 1; + break; + case 'EVALUATE': + $aRow2['ROU_TYPE'] = 2; + break; + case 'PARALLEL': + $aRow2['ROU_TYPE'] = 3; + break; + case 'PARALLEL-BY-EVALUATION': + $aRow2['ROU_TYPE'] = 4; + break; + case 'SEC-JOIN': + $aRow2['ROU_TYPE'] = 5; + break; + case 'DISCRIMINATOR': + $aRow2['ROU_TYPE'] = 8; + break; + } + $oTo = null; + $oTo->task = $aRow2['ROU_NEXT_TASK']; + $oTo->condition = $aRow2['ROU_CONDITION']; + $oTo->executant = $aRow2['ROU_TO_LAST_USER']; + $oTo->optional = $aRow2['ROU_OPTIONAL']; + $oTask->derivation->type = $aRow2['ROU_TYPE']; + $oTask->derivation->to[] = $oTo; + $oDataset2->next(); + } + if ($bCT) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS CANT' ); + $oCriteria->addSelectColumn( 'MIN(DEL_FINISH_DATE) AS FINISH' ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); + $oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'DEL_FINISH_DATE' ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); + $oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow3 = $oDataset2->getRow(); + if ($aRow3) { + $aRow2['FINISH'] = ''; + } + if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) { + $oTask->color = '#FF0000'; + } else { + if ($aRow2['CANT'] != 0) { + if ($aRow2['FINISH'] == null) { + //$oTask->color = '#FF9900'; + $oTask->color = '#FF0000'; + } else { + $oTask->color = '#006633'; + } + } else { + $oTask->color = "#939598"; + } + } + } else { + if ($bView && ($sApplicationUID != '') && ($iDelegation > 0) && ($sTask != '')) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS CANT' ); + $oCriteria->addSelectColumn( 'MIN(DEL_FINISH_DATE) AS FINISH' ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); + $oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'DEL_FINISH_DATE' ); + $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); + $oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow3 = $oDataset2->getRow(); + if ($aRow3) { + $aRow2['FINISH'] = ''; + } + if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) { + $oTask->color = '#FF0000'; + } else { + if ($aRow2['CANT'] != 0) { + if ($aRow2['FINISH'] == null) { + $oTask->color = '#FF9900'; + } else { + $oTask->color = '#006633'; + } + } else { + $oTask->color = '#939598'; + } + } + } + } + + $msg = array (); + G::LoadClass( 'derivation' ); + $Derivation = new Derivation(); + $users = $Derivation->getAllUsersFromAnyTask( $aRow1['TAS_UID'] ); + $sw_error = false; + if (count( $users ) == 0) { + $sw_error = true; + $msg[] = G::LoadTranslation( 'ID_NO_USERS' ); + } + + G::LoadClass( 'ArrayPeer' ); + $stepsCriteria = $this->getStepsCriteria( $aRow1['TAS_UID'] ); + $oDatasetSteps = ArrayBasePeer::doSelectRS( $stepsCriteria ); + $oDatasetSteps->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDatasetSteps->next(); + $countDynaform = 0; + $countOutput = 0; + $countInput = 0; + $countExternal = 0; + + while ($aRowSteps = $oDatasetSteps->getRow()) { + switch ($aRowSteps['STEP_TYPE_OBJ']) { + case 'DYNAFORM': + $countDynaform ++; + break; + case 'INPUT_DOCUMENT': + $countInput ++; + break; + case 'OUTPUT_DOCUMENT': + $countOutput ++; + break; + case 'EXTERNAL': + $countExternal ++; + break; + } + $oDatasetSteps->next(); + } + $totalSteps = $countDynaform + $countInput + $countOutput + $countExternal; + if ($totalSteps == 0) { + $sw_error = true; + $msg[] = G::LoadTranslation( 'ID_TASK_NO_STEPS' ); + } + if ($sw_error) { + $oTask->statusIcons[] = array ('label' => implode( ",", $msg ),'icon' => '/images/alert.gif','message' => implode( ", ", $msg ),'url' => '' + ); + } + + $oPM->task[] = $oTask; + $oDataset->next(); } - } - } + $oPM->executant[] = G::LoadTranslation( 'ID_RULES_AND_USER_GROUPS' ); + $oPM->executant[] = G::LoadTranslation( 'ID_ADD_USER_OF_TASK' ); + $oPM->tasExtra[0]->label = '-- ' . G::LoadTranslation( 'ID_END_OF_PROCESS' ) . ' --'; + $oPM->tasExtra[0]->uid = 'end'; + $oPM->tasExtra[1]->label = '-- ' . G::LoadTranslation( 'ID_TAREA_COLGANTE' ) . ' --'; + $oPM->tasExtra[1]->uid = 'leaf'; + $oPM->guide = array (); + $oPM->text = array (); + $oPM->statusIcons = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_UID ); + // $oCriteria->addSelectColumn ( ContentPeer::CON_VALUE ); + $oCriteria->addAsColumn( "CON_VALUE", "CASE WHEN CONTENT.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE SWIMLANES_ELEMENTS.SWI_UID=A.CON_ID ) ELSE CONTENT.CON_VALUE END " ); + $oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_TYPE ); + $oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_X ); + $oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_Y ); + $aConditions = array (); + $aConditions[] = array (0 => SwimlanesElementsPeer::SWI_UID,1 => ContentPeer::CON_ID + ); + $aConditions[] = array (0 => ContentPeer::CON_CATEGORY,1 => DBAdapter::getStringDelimiter() . 'SWI_TEXT' . DBAdapter::getStringDelimiter() + ); + $aConditions[] = array (0 => ContentPeer::CON_LANG,1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + switch (strtolower( $aRow['SWI_TYPE'] )) { + case 'line': + $oGuide = null; + $oGuide->uid = $aRow['SWI_UID']; + $oGuide->position = ($aRow['SWI_X'] > 0 ? $aRow['SWI_X'] : $aRow['SWI_Y']); + $oGuide->direction = ($aRow['SWI_X'] > 0 ? 'vertical' : 'horizontal'); + $oPM->guide[] = $oGuide; + break; + case 'text': + $oText = null; + $oText->uid = $aRow['SWI_UID']; + $oText->label = strip_tags( ($aRow['CON_VALUE'] != '' ? str_replace( chr( 92 ), '\', str_replace( '<', '<', $aRow['CON_VALUE'] ) ) : '-') ); + // $oText->label = '->' . $aRow ['CON_VALUE'] . '<-' ; + $oText->position->x = $aRow['SWI_X']; + $oText->position->y = $aRow['SWI_Y']; + $oPM->text[] = $oText; + break; + } + $oDataset->next(); + } + $oPM->derivation = array ('Sequential','Evaluate (manual)','Evaluate (auto)','Parallel (fork)','Parallel by evaluation (fork)','Parallel (sequential join)','Parallel (sequential main join)' + ); - $msg = array(); - G::LoadClass('derivation'); - $Derivation = new Derivation(); - $users = $Derivation->getAllUsersFromAnyTask($aRow1 ['TAS_UID']); - $sw_error = false; - if (count($users) == 0) { - $sw_error = true; - $msg[] = G::LoadTranslation('ID_NO_USERS'); - } + //Load extended task properties from plugin. By JHL Jan 18, 2011 + $oPluginRegistry = & PMPluginRegistry::getSingleton(); + $activePluginsForTaskProperties = $oPluginRegistry->getTaskExtendedProperties(); + $oPM->taskOptions = array (); + foreach ($activePluginsForTaskProperties as $key => $taskPropertiesInfo) { + $taskOption['title'] = $taskPropertiesInfo->sName; + $taskOption['id'] = $taskPropertiesInfo->sNamespace . "--" . $taskPropertiesInfo->sName; + $oPM->taskOptions[] = $taskOption; + } - G::LoadClass('ArrayPeer'); - $stepsCriteria = $this->getStepsCriteria($aRow1 ['TAS_UID']); - $oDatasetSteps = ArrayBasePeer::doSelectRS($stepsCriteria); - $oDatasetSteps->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDatasetSteps->next(); - $countDynaform = 0; - $countOutput = 0; - $countInput = 0; - $countExternal = 0; - - while ($aRowSteps = $oDatasetSteps->getRow()) { - switch ($aRowSteps ['STEP_TYPE_OBJ']) { - case 'DYNAFORM' : - $countDynaform++; - break; - case 'INPUT_DOCUMENT' : - $countInput++; - break; - case 'OUTPUT_DOCUMENT' : - $countOutput++; - break; - case 'EXTERNAL' : - $countExternal++; - break; - } - $oDatasetSteps->next(); + $oJSON = new Services_JSON(); + return $oJSON->encode( $oPM ); + } catch (Exception $oError) { + throw ($oError); } - $totalSteps = $countDynaform + $countInput + $countOutput + $countExternal; - if ($totalSteps == 0) { - $sw_error = true; - $msg[] = G::LoadTranslation('ID_TASK_NO_STEPS'); - } - if ($sw_error) { - $oTask->statusIcons[] = array('label' => implode(",", $msg), 'icon' => '/images/alert.gif', 'message' => implode(", ", $msg), 'url' => ''); - } - - $oPM->task [] = $oTask; - $oDataset->next(); - } - $oPM->executant [] = G::LoadTranslation('ID_RULES_AND_USER_GROUPS'); - $oPM->executant [] = G::LoadTranslation('ID_ADD_USER_OF_TASK'); - $oPM->tasExtra [0]->label = '-- ' . G::LoadTranslation('ID_END_OF_PROCESS') . ' --'; - $oPM->tasExtra [0]->uid = 'end'; - $oPM->tasExtra [1]->label = '-- ' . G::LoadTranslation('ID_TAREA_COLGANTE') . ' --'; - $oPM->tasExtra [1]->uid = 'leaf'; - $oPM->guide = array(); - $oPM->text = array(); - $oPM->statusIcons = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_UID); -// $oCriteria->addSelectColumn ( ContentPeer::CON_VALUE ); - $oCriteria->addAsColumn("CON_VALUE", "CASE WHEN CONTENT.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE SWIMLANES_ELEMENTS.SWI_UID=A.CON_ID ) ELSE CONTENT.CON_VALUE END "); - $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_TYPE); - $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_X); - $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_Y); - $aConditions = array(); - $aConditions [] = array(0 => SwimlanesElementsPeer::SWI_UID, 1 => ContentPeer::CON_ID); - $aConditions [] = array(0 => ContentPeer::CON_CATEGORY, 1 => DBAdapter::getStringDelimiter () . 'SWI_TEXT' . DBAdapter::getStringDelimiter ()); - $aConditions [] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ()); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProcessUID); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - switch (strtolower($aRow ['SWI_TYPE'])) { - case 'line' : - $oGuide = null; - $oGuide->uid = $aRow ['SWI_UID']; - $oGuide->position = ($aRow ['SWI_X'] > 0 ? $aRow ['SWI_X'] : $aRow ['SWI_Y']); - $oGuide->direction = ($aRow ['SWI_X'] > 0 ? 'vertical' : 'horizontal'); - $oPM->guide [] = $oGuide; - break; - case 'text' : - $oText = null; - $oText->uid = $aRow ['SWI_UID']; - $oText->label = strip_tags(($aRow ['CON_VALUE'] != '' ? str_replace(chr(92), '\', str_replace('<', '<', $aRow ['CON_VALUE'])) : '-')); - // $oText->label = '->' . $aRow ['CON_VALUE'] . '<-' ; - $oText->position->x = $aRow ['SWI_X']; - $oText->position->y = $aRow ['SWI_Y']; - $oPM->text [] = $oText; - break; - } - $oDataset->next(); - } - $oPM->derivation = array('Sequential', 'Evaluate (manual)', 'Evaluate (auto)', 'Parallel (fork)', 'Parallel by evaluation (fork)', 'Parallel (sequential join)', 'Parallel (sequential main join)'); - - //Load extended task properties from plugin. By JHL Jan 18, 2011 - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $activePluginsForTaskProperties=$oPluginRegistry->getTaskExtendedProperties(); - $oPM->taskOptions = array(); - foreach($activePluginsForTaskProperties as $key => $taskPropertiesInfo){ - $taskOption['title']=$taskPropertiesInfo->sName; - $taskOption['id']=$taskPropertiesInfo->sNamespace."--".$taskPropertiesInfo->sName; - $oPM->taskOptions[]=$taskOption; - } - - $oJSON = new Services_JSON(); - return $oJSON->encode($oPM); - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Create a Process * @param array $aData * @return boolean */ - function createProcess($aData) { - try { - $oProcess = new Process ( ); - return $oProcess->create($aData); - } catch (Exception $oError) { - throw ($oError); + public function createProcess ($aData) + { + try { + $oProcess = new Process(); + return $oProcess->create( $aData ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Update a Process * @param array $aData * @return boolean */ - function updateProcess($aData) { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($aData ['PRO_UID']); - return $oProcess->update($aData); - } catch (Exception $oError) { - throw ($oError); + public function updateProcess ($aData) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $aData['PRO_UID'] ); + return $oProcess->update( $aData ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Edit the Process Map information * @param string $sProcessUID * @return boolean */ - function editProcess($sProcessUID) { - try { - $oProcess = new Process (); + public function editProcess ($sProcessUID) + { + try { + $oProcess = new Process(); - if (!is_null($oProcess)) { - G::loadClass('processes'); - $calendar = new Calendar(); - $files = Processes::getProcessFiles($sProcessUID, 'mail'); + if (! is_null( $oProcess )) { + G::loadClass( 'processes' ); + $calendar = new Calendar(); + $files = Processes::getProcessFiles( $sProcessUID, 'mail' ); - $templates = array(); - $templates[] = 'dummy'; + $templates = array (); + $templates[] = 'dummy'; - foreach ($files as $file) { - $templates[] = array('FILE' => $file['filename'], 'NAME' => $file['filename']); + foreach ($files as $file) { + $templates[] = array ('FILE' => $file['filename'],'NAME' => $file['filename'] + ); + } + + $calendarObj = $calendar->getCalendarList( true, true ); + + global $_DBArray; + $_DBArray['_TEMPLATES1'] = $templates; + $_DBArray['availableCalendars'] = $calendarObj['array']; + $_SESSION['_DBArray'] = $_DBArray; + + $aFields = $oProcess->load( $sProcessUID ); + $aFields['PRO_SUMMARY_DYNAFORM'] = (isset( $aFields['PRO_DYNAFORMS']['PROCESS'] ) ? $aFields['PRO_DYNAFORMS']['PROCESS'] : ''); + $aFields['THETYPE'] = 'UPDATE'; + $calendarInfo = $calendar->getCalendarFor( $sProcessUID, $sProcessUID, $sProcessUID ); + + //If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar + $aFields['PRO_CALENDAR'] = $calendarInfo['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo['CALENDAR_UID'] : ""; + $aFields['SYS_LANG'] = SYS_LANG; + + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_Edit', '', $aFields, 'processes_Save' ); + G::RenderPage( 'publish', 'raw' ); + + return true; + } else { + throw (new Exception( 'This row doesn\'t exist!' )); + } + } catch (Exception $oError) { + throw ($oError); } - - $calendarObj = $calendar->getCalendarList(true, true); - - global $_DBArray; - $_DBArray['_TEMPLATES1'] = $templates; - $_DBArray['availableCalendars'] = $calendarObj['array']; - $_SESSION ['_DBArray'] = $_DBArray; - - $aFields = $oProcess->load($sProcessUID); - $aFields['PRO_SUMMARY_DYNAFORM'] = (isset($aFields['PRO_DYNAFORMS']['PROCESS']) ? $aFields['PRO_DYNAFORMS']['PROCESS'] : ''); - $aFields['THETYPE'] = 'UPDATE'; - $calendarInfo = $calendar->getCalendarFor($sProcessUID, $sProcessUID, $sProcessUID); - - //If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar - $aFields['PRO_CALENDAR'] = $calendarInfo ['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo ['CALENDAR_UID'] : ""; - $aFields['SYS_LANG'] = SYS_LANG; - - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'processes/processes_Edit', '', $aFields, 'processes_Save'); - G::RenderPage('publish', 'raw'); - - return true; - } - else { - throw (new Exception('This row doesn\'t exist!')); - } } - catch (Exception $oError) { - throw ($oError); - } - } - /* + /* * Delete a Process * @param string $sProcessUID * @return boolean */ - function deleteProcess($sProcessUID) { - try { - G::LoadClass('case'); - G::LoadClass('reportTables'); - //Instance all classes necesaries - $oProcess = new Process ( ); - $oDynaform = new Dynaform ( ); - $oInputDocument = new InputDocument ( ); - $oOutputDocument = new OutputDocument ( ); - $oTrigger = new Triggers ( ); - $oRoute = new Route ( ); - $oGateway = new Gateway ( ); - $oEvent = new Event ( ); - $oSwimlaneElement = new SwimlanesElements ( ); - $oConfiguration = new Configuration ( ); - $oDbSource = new DbSource ( ); - $oReportTable = new ReportTables ( ); - $oCaseTracker = new CaseTracker ( ); - $oCaseTrackerObject = new CaseTrackerObject ( ); - //Delete the applications of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUID); - $oDataset = ApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $oCase = new Cases ( ); - while ($aRow = $oDataset->getRow()) { - $oCase->removeCase($aRow ['APP_UID']); - $oDataset->next(); - } - //Delete the tasks of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $this->deleteTask($aRow ['TAS_UID']); - $oDataset->next(); - } - //Delete the dynaforms of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oDynaform->remove($aRow ['DYN_UID']); - $oDataset->next(); - } - //Delete the input documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oInputDocument->remove($aRow ['INP_DOC_UID']); - $oDataset->next(); - } - //Delete the output documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oOutputDocument->remove($aRow ['OUT_DOC_UID']); - $oDataset->next(); - } + public function deleteProcess ($sProcessUID) + { + try { + G::LoadClass( 'case' ); + G::LoadClass( 'reportTables' ); + //Instance all classes necesaries + $oProcess = new Process(); + $oDynaform = new Dynaform(); + $oInputDocument = new InputDocument(); + $oOutputDocument = new OutputDocument(); + $oTrigger = new Triggers(); + $oRoute = new Route(); + $oGateway = new Gateway(); + $oEvent = new Event(); + $oSwimlaneElement = new SwimlanesElements(); + $oConfiguration = new Configuration(); + $oDbSource = new DbSource(); + $oReportTable = new ReportTables(); + $oCaseTracker = new CaseTracker(); + $oCaseTrackerObject = new CaseTrackerObject(); + //Delete the applications of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ApplicationPeer::PRO_UID, $sProcessUID ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $oCase = new Cases(); + while ($aRow = $oDataset->getRow()) { + $oCase->removeCase( $aRow['APP_UID'] ); + $oDataset->next(); + } + //Delete the tasks of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProcessUID ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $this->deleteTask( $aRow['TAS_UID'] ); + $oDataset->next(); + } + //Delete the dynaforms of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oDynaform->remove( $aRow['DYN_UID'] ); + $oDataset->next(); + } + //Delete the input documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oInputDocument->remove( $aRow['INP_DOC_UID'] ); + $oDataset->next(); + } + //Delete the output documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oOutputDocument->remove( $aRow['OUT_DOC_UID'] ); + $oDataset->next(); + } - //Delete the triggers of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TriggersPeer::PRO_UID, $sProcessUID); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oTrigger->remove($aRow ['TRI_UID']); - $oDataset->next(); - } + //Delete the triggers of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTrigger->remove( $aRow['TRI_UID'] ); + $oDataset->next(); + } - //Delete the routes of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oRoute->remove($aRow ['ROU_UID']); - $oDataset->next(); - } + //Delete the routes of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRoute->remove( $aRow['ROU_UID'] ); + $oDataset->next(); + } - //Delete the gateways of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GatewayPeer::PRO_UID, $sProcessUID); - $oDataset = GatewayPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oGateway->remove($aRow ['GAT_UID']); - $oDataset->next(); - } + //Delete the gateways of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GatewayPeer::PRO_UID, $sProcessUID ); + $oDataset = GatewayPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGateway->remove( $aRow['GAT_UID'] ); + $oDataset->next(); + } - //Delete the Event of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(EventPeer::PRO_UID, $sProcessUID); - $oDataset = EventPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oEvent->remove($aRow ['EVN_UID']); - $oDataset->next(); - } + //Delete the Event of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( EventPeer::PRO_UID, $sProcessUID ); + $oDataset = EventPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oEvent->remove( $aRow['EVN_UID'] ); + $oDataset->next(); + } - //Delete the swimlanes elements of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProcessUID); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oSwimlaneElement->remove($aRow ['SWI_UID']); - $oDataset->next(); - } - //Delete the configurations of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ConfigurationPeer::PRO_UID, $sProcessUID); - $oDataset = ConfigurationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oConfiguration->remove($aRow ['CFG_UID'], $aRow ['OBJ_UID'], $aRow ['PRO_UID'], $aRow ['USR_UID'], $aRow ['APP_UID']); - $oDataset->next(); - } - //Delete the DB sources of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProcessUID); - $oDataset = DbSourcePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { + //Delete the swimlanes elements of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oSwimlaneElement->remove( $aRow['SWI_UID'] ); + $oDataset->next(); + } + //Delete the configurations of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ConfigurationPeer::PRO_UID, $sProcessUID ); + $oDataset = ConfigurationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oConfiguration->remove( $aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'] ); + $oDataset->next(); + } + //Delete the DB sources of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProcessUID ); + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { - /** - * note added by gustavo cruz gustavo-at-colosa-dot-com 27-01-2010 - * in order to solve the bug 0004389, we use the validation function Exists - * inside the remove function in order to verify if the DbSource record - * exists in the Database, however there is a strange behavior within the - * propel engine, when the first record is erased somehow the "_deleted" - * attribute of the next row is set to true, so when propel tries to erase - * it, obviously it can't and trows an error. With the "Exist" function - * we ensure that if there is the record in the database, the _delete attribute must be false. - * - * note added by gustavo cruz gustavo-at-colosa-dot-com 28-01-2010 - * I have just identified the source of the issue, when is created a $oDbSource DbSource object - * it's used whenever a record is erased or removed in the db, however the problem - * it's that the same object is used every time, and the delete method invoked - * sets the _deleted attribute to true when its called, of course as we use - * the same object, the first time works fine but trowns an error with the - * next record, cos it's the same object and the delete method checks if the _deleted - * attribute it's true or false, the attrib _deleted is setted to true the - * first time and later is never changed, the issue seems to be part of - * every remove function in the model classes, not only DbSource - * i recommend that a more general solution must be achieved to resolve - * this issue in every model class, to prevent future problems. - * */ - $oDbSource->remove($aRow ['DBS_UID'], $sProcessUID); - $oDataset->next(); - } - //Delete the supervisors - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); - ProcessUserPeer::doDelete($oCriteria); - //Delete the object permissions - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID); - ObjectPermissionPeer::doDelete($oCriteria); - //Delete the step supervisors - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); - StepSupervisorPeer::doDelete($oCriteria); - //Delete the report tables - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProcessUID); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oReportTable->deleteReportTable($aRow ['REP_TAB_UID']); - $oDataset->next(); - } - //Delete case tracker configuration - $oCaseTracker->remove($sProcessUID); - //Delete case tracker objects - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - ProcessUserPeer::doDelete($oCriteria); - //Delete the process - try { - $oProcess->remove($sProcessUID); - } catch (Exception $oError) { //nada - } - return true; - } catch (Exception $oError) { - throw ($oError); + /** + * note added by gustavo cruz gustavo-at-colosa-dot-com 27-01-2010 + * in order to solve the bug 0004389, we use the validation function Exists + * inside the remove function in order to verify if the DbSource record + * exists in the Database, however there is a strange behavior within the + * propel engine, when the first record is erased somehow the "_deleted" + * attribute of the next row is set to true, so when propel tries to erase + * it, obviously it can't and trows an error. With the "Exist" function + * we ensure that if there is the record in the database, the _delete attribute must be false. + * + * note added by gustavo cruz gustavo-at-colosa-dot-com 28-01-2010 + * I have just identified the source of the issue, when is created a $oDbSource DbSource object + * it's used whenever a record is erased or removed in the db, however the problem + * it's that the same object is used every time, and the delete method invoked + * sets the _deleted attribute to true when its called, of course as we use + * the same object, the first time works fine but trowns an error with the + * next record, cos it's the same object and the delete method checks if the _deleted + * attribute it's true or false, the attrib _deleted is setted to true the + * first time and later is never changed, the issue seems to be part of + * every remove function in the model classes, not only DbSource + * i recommend that a more general solution must be achieved to resolve + * this issue in every model class, to prevent future problems. + */ + $oDbSource->remove( $aRow['DBS_UID'], $sProcessUID ); + $oDataset->next(); + } + //Delete the supervisors + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); + ProcessUserPeer::doDelete( $oCriteria ); + //Delete the object permissions + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID ); + ObjectPermissionPeer::doDelete( $oCriteria ); + //Delete the step supervisors + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID ); + StepSupervisorPeer::doDelete( $oCriteria ); + //Delete the report tables + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUID ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oReportTable->deleteReportTable( $aRow['REP_TAB_UID'] ); + $oDataset->next(); + } + //Delete case tracker configuration + $oCaseTracker->remove( $sProcessUID ); + //Delete case tracker objects + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + ProcessUserPeer::doDelete( $oCriteria ); + //Delete the process + try { + $oProcess->remove( $sProcessUID ); + } catch (Exception $oError) { //nada + } + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the process title position * @param string sProcessUID * @param integer $iX @@ -685,132 +702,141 @@ class processMap { * @return boolean */ - function saveTitlePosition($sProcessUID = '', $iX = 0, $iY = 0) { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $aFields ['PRO_UID'] = $sProcessUID; - $aFields ['PRO_TITLE_X'] = $iX; - $aFields ['PRO_TITLE_Y'] = $iY; - $oProcess->update($aFields); - return true; - } catch (Exception $oError) { - throw ($oError); + public function saveTitlePosition ($sProcessUID = '', $iX = 0, $iY = 0) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $aFields['PRO_UID'] = $sProcessUID; + $aFields['PRO_TITLE_X'] = $iX; + $aFields['PRO_TITLE_Y'] = $iY; + $oProcess->update( $aFields ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Steps of Tasks * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function steps($sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - $aFields = array(); - $aFields ['PROCESS'] = $sProcessUID; - $aFields ['TASK'] = $sTaskUID; - $aFields ['CONFIRM'] = G::LoadTranslation('ID_MSG_CONFIRM_DELETE_STEP'); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'steps/steps_List', $this->getStepsCriteria($sTaskUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function steps ($sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $aFields = array (); + $aFields['PROCESS'] = $sProcessUID; + $aFields['TASK'] = $sTaskUID; + $aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DELETE_STEP' ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'steps/steps_List', $this->getStepsCriteria( $sTaskUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the steps list criteria object * @param string $sTaskUID * @return array */ - function getStepsCriteria($sTaskUID = '') { - try { - //call plugin - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $externalSteps = $oPluginRegistry->getSteps(); + public function getStepsCriteria ($sTaskUID = '') + { + try { + //call plugin + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); - $aSteps = array(); - $aSteps [] = array('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer'); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::TAS_UID, $sTaskUID); - $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $urlEdit = ''; - $linkEditValue = ''; + $aSteps = array (); + $aSteps[] = array ('STEP_TITLE' => 'char','STEP_UID' => 'char','STEP_TYPE_OBJ' => 'char','STEP_CONDITION' => 'char','STEP_POSITION' => 'integer' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( StepPeer::STEP_POSITION ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $urlEdit = ''; + $linkEditValue = ''; - switch ($aRow ['STEP_TYPE_OBJ']) { - case 'DYNAFORM' : - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load($aRow ['STEP_UID_OBJ']); - $sTitle = $aFields ['DYN_TITLE']; - /** @@@init2 PROCCESS FOR DIRECT EDIT LINK @by erik@colosa.com ON DATE 02/06/2008 18:48:13 */ - $DYN_UID = $aFields ['DYN_UID']; - $urlEdit = "dynaformEdit('" . $DYN_UID . "', '" . $aRow ['PRO_UID'] . "');"; - $linkEditValue = 'Edit'; - /** @@@end2 */ - break; - case 'INPUT_DOCUMENT' : - $oInputDocument = new InputDocument ( ); - $aFields = $oInputDocument->getByUid($aRow ['STEP_UID_OBJ']); - if( $aFields === false ) - continue; - $sTitle = $aFields ['INP_DOC_TITLE']; - break; - case 'OUTPUT_DOCUMENT' : - $oOutputDocument = new OutputDocument ( ); - $aFields = $oOutputDocument->getByUid($aRow ['STEP_UID_OBJ']); + switch ($aRow['STEP_TYPE_OBJ']) { + case 'DYNAFORM': + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['STEP_UID_OBJ'] ); + $sTitle = $aFields['DYN_TITLE']; + /** + * @@@init2 PROCCESS FOR DIRECT EDIT LINK @by erik@colosa.com ON DATE 02/06/2008 18:48:13 + */ + $DYN_UID = $aFields['DYN_UID']; + $urlEdit = "dynaformEdit('" . $DYN_UID . "', '" . $aRow['PRO_UID'] . "');"; + $linkEditValue = 'Edit'; + /** + * @@@end2 + */ + break; + case 'INPUT_DOCUMENT': + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->getByUid( $aRow['STEP_UID_OBJ'] ); + if ($aFields === false) + continue; + $sTitle = $aFields['INP_DOC_TITLE']; + break; + case 'OUTPUT_DOCUMENT': + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->getByUid( $aRow['STEP_UID_OBJ'] ); - if( $aFields === false ) - continue; - $sTitle = $aFields ['OUT_DOC_TITLE']; - break; - case 'EXTERNAL' : - $sTitle = 'unknown ' . $aRow ['STEP_UID']; - foreach ($externalSteps as $key => $val) { - if ($val->sStepId == $aRow ['STEP_UID_OBJ']) { - $sTitle = $val->sStepTitle; - if (trim($val->sSetupStepPage) != '') { - $urlEdit = "externalStepEdit('" . $aRow ['STEP_UID'] . "', '" . $val->sSetupStepPage . "');"; - $linkEditValue = 'Edit'; - } else { - $urlEdit = ""; - $linkEditValue = ''; + if ($aFields === false) + continue; + $sTitle = $aFields['OUT_DOC_TITLE']; + break; + case 'EXTERNAL': + $sTitle = 'unknown ' . $aRow['STEP_UID']; + foreach ($externalSteps as $key => $val) { + if ($val->sStepId == $aRow['STEP_UID_OBJ']) { + $sTitle = $val->sStepTitle; + if (trim( $val->sSetupStepPage ) != '') { + $urlEdit = "externalStepEdit('" . $aRow['STEP_UID'] . "', '" . $val->sSetupStepPage . "');"; + $linkEditValue = 'Edit'; + } else { + $urlEdit = ""; + $linkEditValue = ''; + } + } + } + break; } - } + $aSteps[] = array ('STEP_TITLE' => $sTitle,'STEP_UID' => $aRow['STEP_UID'],'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'],'STEP_CONDITION' => $aRow['STEP_CONDITION'],'STEP_POSITION' => $aRow['STEP_POSITION'],'urlEdit' => $urlEdit,'linkEditValue' => $linkEditValue,'PRO_UID' => $aRow['PRO_UID'] + ); + $oDataset->next(); } - break; + + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['steps'] = $aSteps; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'steps' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_POSITION' ); + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); } - $aSteps [] = array('STEP_TITLE' => $sTitle, 'STEP_UID' => $aRow ['STEP_UID'], 'STEP_TYPE_OBJ' => $aRow ['STEP_TYPE_OBJ'], 'STEP_CONDITION' => $aRow ['STEP_CONDITION'], 'STEP_POSITION' => $aRow ['STEP_POSITION'], 'urlEdit' => $urlEdit, 'linkEditValue' => $linkEditValue, 'PRO_UID' => $aRow ['PRO_UID']); - $oDataset->next(); - } - - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['steps'] = $aSteps; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('steps'); - $oCriteria->addAscendingOrderByColumn('STEP_POSITION'); - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Return the step triggers list criteria object * @param string $sStepUID * @param string $sTaskUID @@ -818,439 +844,473 @@ class processMap { * @return object */ - function getStepTriggersCriteria($sStepUID = '', $sTaskUID = '', $sType = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('C.CON_VALUE'); - $oCriteria->addSelectColumn('STEP_UID'); - $oCriteria->addSelectColumn('TRI_UID'); - $oCriteria->addSelectColumn('ST_TYPE'); - $oCriteria->addSelectColumn(StepTriggerPeer::ST_POSITION); - $oCriteria->addAsColumn('TRI_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(StepTriggerPeer::TRI_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(StepTriggerPeer::STEP_UID, $sStepUID); - $oCriteria->add(StepTriggerPeer::TAS_UID, $sTaskUID); - $oCriteria->add(StepTriggerPeer::ST_TYPE, $sType); - $oCriteria->addAscendingOrderByColumn(StepTriggerPeer::ST_POSITION); - return $oCriteria; - } + public function getStepTriggersCriteria ($sStepUID = '', $sTaskUID = '', $sType = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'C.CON_VALUE' ); + $oCriteria->addSelectColumn( 'STEP_UID' ); + $oCriteria->addSelectColumn( 'TRI_UID' ); + $oCriteria->addSelectColumn( 'ST_TYPE' ); + $oCriteria->addSelectColumn( StepTriggerPeer::ST_POSITION ); + $oCriteria->addAsColumn( 'TRI_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepTriggerPeer::TRI_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); + $oCriteria->addAscendingOrderByColumn( StepTriggerPeer::ST_POSITION ); + return $oCriteria; + } - /* + /* * Return the available building blocks list criteria object * @param string $sProcessUID * @param string $sTaskUID * @return object */ - function getAvailableBBCriteria($sProcessUID = '', $sTaskUID = '') { - try { - $oTasks = new Tasks ( ); - $aSteps = $oTasks->getStepsOfTask($sTaskUID); - $sUIDs = array(); - foreach ($aSteps as $aStep) { - $sUIDs [] = $aStep ['STEP_UID_OBJ']; - } - $aBB = array(); - $aBB [] = array('STEP_UID' => 'char', 'STEP_TITLE' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_MODE' => 'char'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_UID, $sUIDs, Criteria::NOT_IN); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $i = 0; - while ($aRow = $oDataset->getRow()) { - $i++; - if (($aRow ['DYN_TITLE'] == NULL) || ($aRow ['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_TITLE'] = Content::Load("DYN_TITLE", "", $aRow ['DYN_UID'], SYS_LANG); - } - $aBB [] = array('STEP_UID' => $aRow ['DYN_UID'], 'STEP_TITLE' => $aRow ['DYN_TITLE'], 'STEP_TYPE_OBJ' => 'DYNAFORM', 'STEP_MODE' => ' - '); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { + ' + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { - if (($aRow ['INP_DOC_TITLE'] == NULL) || ($aRow ['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['INP_DOC_TITLE'] = Content::Load("INP_DOC_TITLE", "", $aRow ['INP_DOC_UID'], SYS_LANG); - } - $aBB [] = array('STEP_UID' => $aRow ['INP_DOC_UID'], 'STEP_TITLE' => $aRow ['INP_DOC_TITLE'], 'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT', 'STEP_MODE' => ''); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_UID); - $oCriteria->addAsColumn('OUT_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(OutputDocumentPeer::OUT_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { + if (($aRow['INP_DOC_TITLE'] == null) || ($aRow['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['INP_DOC_TITLE'] = Content::Load( "INP_DOC_TITLE", "", $aRow['INP_DOC_UID'], SYS_LANG ); + } + $aBB[] = array ('STEP_UID' => $aRow['INP_DOC_UID'],'STEP_TITLE' => $aRow['INP_DOC_TITLE'],'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT','STEP_MODE' => '' + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN ); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { - if (($aRow ['OUT_DOC_TITLE'] == NULL) || ($aRow ['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['OUT_DOC_TITLE'] = Content::Load("OUT_DOC_TITLE", "", $aRow ['OUT_DOC_UID'], SYS_LANG); - } - $aBB [] = array('STEP_UID' => $aRow ['OUT_DOC_UID'], 'STEP_TITLE' => $aRow ['OUT_DOC_TITLE'], 'STEP_TYPE_OBJ' => 'OUTPUT_DOCUMENT', 'STEP_MODE' => ''); - $oDataset->next(); - } + if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['OUT_DOC_TITLE'] = Content::Load( "OUT_DOC_TITLE", "", $aRow['OUT_DOC_UID'], SYS_LANG ); + } + $aBB[] = array ('STEP_UID' => $aRow['OUT_DOC_UID'],'STEP_TITLE' => $aRow['OUT_DOC_TITLE'],'STEP_TYPE_OBJ' => 'OUTPUT_DOCUMENT','STEP_MODE' => '' + ); + $oDataset->next(); + } - //call plugin - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $externalSteps = $oPluginRegistry->getSteps(); - if (is_array($externalSteps) && count($externalSteps) > 0) { - foreach ($externalSteps as $key => $stepVar) { - $aBB [] = array('STEP_UID' => $stepVar->sStepId, 'STEP_TITLE' => $stepVar->sStepTitle, 'STEP_TYPE_OBJ' => 'EXTERNAL', 'STEP_MODE' => ''); + //call plugin + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); + if (is_array( $externalSteps ) && count( $externalSteps ) > 0) { + foreach ($externalSteps as $key => $stepVar) { + $aBB[] = array ('STEP_UID' => $stepVar->sStepId,'STEP_TITLE' => $stepVar->sStepTitle,'STEP_TYPE_OBJ' => 'EXTERNAL','STEP_MODE' => '' + ); + } + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['availableBB'] = $aBB; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'availableBB' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_TYPE_OBJ' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_TITLE' ); + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); } - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableBB'] = $aBB; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('availableBB'); - $oCriteria->addAscendingOrderByColumn('STEP_TYPE_OBJ'); - $oCriteria->addAscendingOrderByColumn('STEP_TITLE'); - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Users assigned to Tasks * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function users($sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); + public function users ($sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $_SESSION ['iType'] = 1; + $_SESSION['iType'] = 1; - $aFields ['TASK'] = $sTaskUID; - $aFields ['TYPE'] = $_SESSION ['iType']; - $aFields ['OF_TO_ASSIGN'] = G::LoadTranslation('ID_DE_ASSIGN'); - $aFields ['CONFIRM'] = G::LoadTranslation('ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE'); - $aFields ['UIDS'] = "'0'"; + $aFields['TASK'] = $sTaskUID; + $aFields['TYPE'] = $_SESSION['iType']; + $aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' ); + $aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' ); + $aFields['UIDS'] = "'0'"; - $oTasks = new Tasks ( ); - $oGroups = new Groups ( ); - $aAux1 = $oTasks->getGroupsOfTask($sTaskUID, $_SESSION ['iType']); - foreach ($aAux1 as $aGroup) { - $aAux2 = $oGroups->getUsersOfGroup($aGroup ['GRP_UID']); - foreach ($aAux2 as $aUser) { - $aFields ['UIDS'] .= ",'" . $aUser ['USR_UID'] . "'"; + $oTasks = new Tasks(); + $oGroups = new Groups(); + $aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] ); + foreach ($aAux1 as $aGroup) { + $aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); + foreach ($aAux2 as $aUser) { + $aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'"; + } + } + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $oTask = new Task(); + $aTask = $oTask->load( $sTaskUID ); + + if ($aFields['TAS_TYPE'] == 'TRUE') { + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortList', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields ); + } else { + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortList2', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields ); + } + + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); } - } - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $oTask = new Task ( ); - $aTask = $oTask->load($sTaskUID); - - if ($aFields ['TAS_TYPE'] == 'TRUE') { - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'users/users_ShortList', $this->getTaskUsersCriteria($sTaskUID, $_SESSION ['iType']), $aFields); - } else { - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'users/users_ShortList2', $this->getTaskUsersCriteria($sTaskUID, $_SESSION ['iType']), $aFields); - } - - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Users Adhoc assigned to Tasks * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function users_adhoc($sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); + public function users_adhoc ($sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $_SESSION ['iType'] = 2; + $_SESSION['iType'] = 2; - $aFields ['TASK'] = $sTaskUID; - $aFields ['TYPE'] = $_SESSION ['iType']; - $aFields ['OF_TO_ASSIGN'] = G::LoadTranslation('ID_DE_ASSIGN'); - $aFields ['CONFIRM'] = G::LoadTranslation('ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE'); - $aFields ['UIDS'] = "'0'"; + $aFields['TASK'] = $sTaskUID; + $aFields['TYPE'] = $_SESSION['iType']; + $aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' ); + $aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' ); + $aFields['UIDS'] = "'0'"; - $oTasks = new Tasks ( ); - $oGroups = new Groups ( ); - $aAux1 = $oTasks->getGroupsOfTask($sTaskUID, $_SESSION ['iType']); - foreach ($aAux1 as $aGroup) { - $aAux2 = $oGroups->getUsersOfGroup($aGroup ['GRP_UID']); - foreach ($aAux2 as $aUser) { - $aFields ['UIDS'] .= ",'" . $aUser ['USR_UID'] . "'"; + $oTasks = new Tasks(); + $oGroups = new Groups(); + $aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] ); + foreach ($aAux1 as $aGroup) { + $aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); + foreach ($aAux2 as $aUser) { + $aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'"; + } + } + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $oTask = new Task(); + $aTask = $oTask->load( $sTaskUID ); + + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortListAdhoc', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields ); + + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); } - } - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $oTask = new Task ( ); - $aTask = $oTask->load($sTaskUID); - - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'users/users_ShortListAdhoc', $this->getTaskUsersCriteria($sTaskUID, $_SESSION ['iType']), $aFields); - - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Return the tasks users list criteria object * @param string $sTaskUID * @param integer $iType * @return array */ - function getTaskUsersCriteria($sTaskUID = '', $iType = 1) { - try { - $aUsers = array(); - $aUsers [] = array('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addAsColumn('GRP_TITLE', 'C.CON_VALUE'); - $oCriteria->addSelectColumn(TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TU_TYPE); - $oCriteria->addSelectColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(TaskUserPeer::USR_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 2); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $c = 0; - while ($aRow = $oDataset->getRow()) { - $c++; - $oGroup = new Groupwf ( ); - $aFields = $oGroup->load($aRow ['USR_UID']); - if ($aFields ['GRP_STATUS'] == 'ACTIVE') { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); - $oCriteria->add(GroupUserPeer::GRP_UID, $aRow ['USR_UID']); - $oDataset2 = GroupUserPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - } else { - $aRow2 ['GROUP_INACTIVE'] = '(' . G::LoadTranslation('ID_GROUP_INACTIVE') . ')'; + public function getTaskUsersCriteria ($sTaskUID = '', $iType = 1) + { + try { + $aUsers = array (); + $aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addAsColumn( 'GRP_TITLE', 'C.CON_VALUE' ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (TaskUserPeer::USR_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'GRP_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $c = 0; + while ($aRow = $oDataset->getRow()) { + $c ++; + $oGroup = new Groupwf(); + $aFields = $oGroup->load( $aRow['USR_UID'] ); + if ($aFields['GRP_STATUS'] == 'ACTIVE') { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $aRow['USR_UID'] ); + $oDataset2 = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + } else { + $aRow2['GROUP_INACTIVE'] = '(' . G::LoadTranslation( 'ID_GROUP_INACTIVE' ) . ')'; + } + $aUsers[] = array ('LABEL' => (! isset( $aRow2['GROUP_INACTIVE'] ) ? $aRow['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
' : $aRow['GRP_TITLE'] . ' ' . $aRow2['GROUP_INACTIVE']),'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION'] + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addJoin( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 1 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['taskUsers'] = $aUsers; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'taskUsers' ); + $oCriteria->addDescendingOrderByColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAscendingOrderByColumn( 'LABEL' ); + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); } - $aUsers [] = array('LABEL' => (!isset($aRow2 ['GROUP_INACTIVE']) ? $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation('ID_USER') : G::LoadTranslation('ID_USERS')) . ')
' : $aRow ['GRP_TITLE'] . ' ' . $aRow2 ['GROUP_INACTIVE']), 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TU_TYPE); - $oCriteria->addSelectColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addJoin(TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 1); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers [] = array('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION']); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['taskUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('taskUsers'); - $oCriteria->addDescendingOrderByColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addAscendingOrderByColumn('LABEL'); - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Return the available users and users groups list criteria object * @param string $sTaskUID * @param integer $iType * @return object */ - function getAvailableUsersCriteria($sTaskUID = '', $iType = 1) { - try { - $oTasks = new Tasks ( ); - $aAux = $oTasks->getGroupsOfTask($sTaskUID, $iType); - $aUIDS1 = array(); - $aUIDS2 = array(); - foreach ($aAux as $aGroup) { - $aUIDS1 [] = $aGroup ['GRP_UID']; - } - $aAux = $oTasks->getUsersOfTask($sTaskUID, $iType); - foreach ($aAux as $aUser) { - $aUIDS2 [] = $aUser ['USR_UID']; - } - $aUsers = array(); - $aUsers [] = array('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $groups = new Groupwf(); - $start = ''; - $limit = ''; - $filter = ''; - $result = $groups->getAllGroup($start,$limit,$filter); - $c = 0; - foreach ($result['rows'] as $results) { - $c++; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); - $oCriteria->add(GroupUserPeer::GRP_UID, $results ['GRP_UID']); - $oDataset2 = GroupUserPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $aUsers [] = array ('LABEL' => $results ['GRP_TITLE'] .' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation('ID_USER') : G::LoadTranslation('ID_USERS')) . ')
', 'TAS_UID' => $sTaskUID, 'USR_UID' => $results ['GRP_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 2); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers [] = array('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 1); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('availableUsers'); - $oCriteria->addDescendingOrderByColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addAscendingOrderByColumn('LABEL'); - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); + public function getAvailableUsersCriteria ($sTaskUID = '', $iType = 1) + { + try { + $oTasks = new Tasks(); + $aAux = $oTasks->getGroupsOfTask( $sTaskUID, $iType ); + $aUIDS1 = array (); + $aUIDS2 = array (); + foreach ($aAux as $aGroup) { + $aUIDS1[] = $aGroup['GRP_UID']; + } + $aAux = $oTasks->getUsersOfTask( $sTaskUID, $iType ); + foreach ($aAux as $aUser) { + $aUIDS2[] = $aUser['USR_UID']; + } + $aUsers = array (); + $aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $groups = new Groupwf(); + $start = ''; + $limit = ''; + $filter = ''; + $result = $groups->getAllGroup( $start, $limit, $filter ); + $c = 0; + foreach ($result['rows'] as $results) { + $c ++; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $results['GRP_UID'] ); + $oDataset2 = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $aUsers[] = array ('LABEL' => $results['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
','TAS_UID' => $sTaskUID,'USR_UID' => $results['GRP_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 2 + ); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $sTaskUID,'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 1 + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['availableUsers'] = $aUsers; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'availableUsers' ); + $oCriteria->addDescendingOrderByColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAscendingOrderByColumn( 'LABEL' ); + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Conditions of the steps * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function stepsConditions($sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); + public function stepsConditions ($sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $aFields ['PROCESS'] = $sProcessUID; - $aFields ['TASK'] = $sTaskUID; - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'steps/conditions_List', $this->getStepsCriteria($sTaskUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + $aFields['PROCESS'] = $sProcessUID; + $aFields['TASK'] = $sTaskUID; + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'steps/conditions_List', $this->getStepsCriteria( $sTaskUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Triggers of the steps * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function stepsTriggers($sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); + public function stepsTriggers ($sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $_SESSION ['PROCESS'] = $sProcessUID; - $_SESSION ['TASK'] = $sTaskUID; - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('view', 'steps/triggers_Tree'); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + $_SESSION['PROCESS'] = $sProcessUID; + $_SESSION['TASK'] = $sTaskUID; + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'view', 'steps/triggers_Tree' ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Add a new task * @param string $sProcessUID * @param integer $iX @@ -1258,203 +1318,206 @@ class processMap { * @return string */ - function addTask($sProcessUID = '', $iX = 0, $iY = 0, $iWidth = 165, $iHeight = 40) { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('TAS_UID'); - $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + public function addTask ($sProcessUID = '', $iX = 0, $iY = 0, $iWidth = 165, $iHeight = 40) + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'TAS_UID' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProcessUID ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $aTasks = array(); - $iTaskNumber = 0; + $aTasks = array (); + $iTaskNumber = 0; - while ($oDataset->next()) { - $aRow = $oDataset->getRow(); + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); - $aTasks[] = $aRow ["TAS_UID"]; - $iTaskNumber = $iTaskNumber + 1; - } - - if ($iTaskNumber > 0) { - $criteria = new Criteria("workflow"); - - $criteria->addSelectColumn(ContentPeer::CON_LANG); - $criteria->addSelectColumn(ContentPeer::CON_VALUE); - $criteria->add(ContentPeer::CON_ID, $aTasks, Criteria::IN); - $criteria->add(ContentPeer::CON_CATEGORY, "TAS_TITLE"); - - $rsSQLCON = ContentPeer::doSelectRS($criteria); - $rsSQLCON->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $numMaxLang = 0; - $numMax = 0; - - while ($rsSQLCON->next()) { - $row = $rsSQLCON->getRow(); - - $conLang = $row["CON_LANG"]; - $conValue = $row["CON_VALUE"]; - - if (preg_match("/^\S+\s(\d+)$/", $conValue, $matches)) { - $n = intval($matches[1]); - - if ($conLang == SYS_LANG) { - if ($n > $numMaxLang) { - $numMaxLang = $n; - } + $aTasks[] = $aRow["TAS_UID"]; + $iTaskNumber = $iTaskNumber + 1; } - else { - if ($n > $numMax) { - $numMax = $n; - } + + if ($iTaskNumber > 0) { + $criteria = new Criteria( "workflow" ); + + $criteria->addSelectColumn( ContentPeer::CON_LANG ); + $criteria->addSelectColumn( ContentPeer::CON_VALUE ); + $criteria->add( ContentPeer::CON_ID, $aTasks, Criteria::IN ); + $criteria->add( ContentPeer::CON_CATEGORY, "TAS_TITLE" ); + + $rsSQLCON = ContentPeer::doSelectRS( $criteria ); + $rsSQLCON->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $numMaxLang = 0; + $numMax = 0; + + while ($rsSQLCON->next()) { + $row = $rsSQLCON->getRow(); + + $conLang = $row["CON_LANG"]; + $conValue = $row["CON_VALUE"]; + + if (preg_match( "/^\S+\s(\d+)$/", $conValue, $matches )) { + $n = intval( $matches[1] ); + + if ($conLang == SYS_LANG) { + if ($n > $numMaxLang) { + $numMaxLang = $n; + } + } else { + if ($n > $numMax) { + $numMax = $n; + } + } + } + } + + if ($numMaxLang > 0) { + $numMax = $numMaxLang; + } + + if ($numMax > 0 && $numMax > $iTaskNumber) { + $iTaskNumber = $numMax + 1; + } else { + $iTaskNumber = $iTaskNumber + 1; + } + } else { + $iTaskNumber = 1; } - } - } - if ($numMaxLang > 0) { - $numMax = $numMaxLang; - } + $oTask = new Task(); + $oNewTask->label = G::LoadTranslation( 'ID_TASK' ) . ' ' . $iTaskNumber; + $oNewTask->uid = $oTask->create( array ('PRO_UID' => $sProcessUID,'TAS_TITLE' => $oNewTask->label,'TAS_POSX' => $iX,'TAS_POSY' => $iY,'TAS_WIDTH' => $iWidth,'TAS_HEIGHT' => $iHeight + ) ); + $oNewTask->statusIcons = array (); + $oNewTask->statusIcons[] = array ('label' => '','icon' => '/images/alert.gif','message' => '','url' => '' + ); + $oJSON = new Services_JSON(); - if ($numMax > 0 && $numMax > $iTaskNumber) { - $iTaskNumber = $numMax + 1; + return $oJSON->encode( $oNewTask ); + } catch (Exception $oError) { + throw ($oError); } - else { - $iTaskNumber = $iTaskNumber + 1; - } - } - else { - $iTaskNumber = 1; - } - - $oTask = new Task(); - $oNewTask->label = G::LoadTranslation('ID_TASK') . ' ' . $iTaskNumber; - $oNewTask->uid = $oTask->create(array('PRO_UID' => $sProcessUID, 'TAS_TITLE' => $oNewTask->label, 'TAS_POSX' => $iX, 'TAS_POSY' => $iY, 'TAS_WIDTH' => $iWidth, 'TAS_HEIGHT' => $iHeight)); - $oNewTask->statusIcons = array(); - $oNewTask->statusIcons[] = array('label' => '', 'icon' => '/images/alert.gif', 'message' => '', 'url' => ''); - $oJSON = new Services_JSON(); - - return $oJSON->encode($oNewTask); } - catch (Exception $oError) { - throw ($oError); - } - } - /* + /* * Edit the task properties * @param string $sTaskUID * @return boolean */ - function editTaskProperties($sTaskUID = '', $iForm = 1, $iIndex = 0) { - $sw_template=false; - try { - switch ($iForm) { - case 1 : - $sFilename = 'tasks/tasks_Definition.xml'; - break; - case 2 : - $sFilename = 'tasks/tasks_AssignmentRules.xml'; - break; - case 3 : - $sFilename = 'tasks/tasks_TimingControl.xml'; - break; - case 4 : - $sFilename = 'tasks/tasks_Owner.xml'; - break; - case 5 : - $sFilename = 'tasks/tasks_Permissions.xml'; - break; - case 6 : - $sFilename = 'tasks/tasks_Labels.xml'; - break; - case 7 : - $sFilename = 'tasks/tasks_Notifications.xml'; - break; - default: - //if the $iForm is not one of the defaults then search under Plugins for an extended property. By JHL Jan 18, 2011 - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $activePluginsForTaskProperties=$oPluginRegistry->getTaskExtendedProperties(); - $oPM->taskOptions = array(); - foreach($activePluginsForTaskProperties as $key => $taskPropertiesInfo){ - $id=$taskPropertiesInfo->sNamespace."--".$taskPropertiesInfo->sName; - if($id==$iForm){ - $sFilename=$taskPropertiesInfo->sPage; - $sw_template=true; - } - } + public function editTaskProperties ($sTaskUID = '', $iForm = 1, $iIndex = 0) + { + $sw_template = false; + try { + switch ($iForm) { + case 1: + $sFilename = 'tasks/tasks_Definition.xml'; + break; + case 2: + $sFilename = 'tasks/tasks_AssignmentRules.xml'; + break; + case 3: + $sFilename = 'tasks/tasks_TimingControl.xml'; + break; + case 4: + $sFilename = 'tasks/tasks_Owner.xml'; + break; + case 5: + $sFilename = 'tasks/tasks_Permissions.xml'; + break; + case 6: + $sFilename = 'tasks/tasks_Labels.xml'; + break; + case 7: + $sFilename = 'tasks/tasks_Notifications.xml'; + break; + default: + //if the $iForm is not one of the defaults then search under Plugins for an extended property. By JHL Jan 18, 2011 + $oPluginRegistry = & PMPluginRegistry::getSingleton(); + $activePluginsForTaskProperties = $oPluginRegistry->getTaskExtendedProperties(); + $oPM->taskOptions = array (); + foreach ($activePluginsForTaskProperties as $key => $taskPropertiesInfo) { + $id = $taskPropertiesInfo->sNamespace . "--" . $taskPropertiesInfo->sName; + if ($id == $iForm) { + $sFilename = $taskPropertiesInfo->sPage; + $sw_template = true; + } + } - //$sFilename = 'tasks/tasks_Owner.xml'; - break; - } - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - $aFields ['INDEX'] = $iIndex; - $aFields ['IFORM'] = $iForm; - $aFields ['LANG'] = SYS_LANG; + //$sFilename = 'tasks/tasks_Owner.xml'; + break; + } + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $aFields['INDEX'] = $iIndex; + $aFields['IFORM'] = $iForm; + $aFields['LANG'] = SYS_LANG; - /** Task Notifications **/ - if($iForm == 7 || $iForm == 1 ) { - G::loadClass('processes'); - $files = Processes::getProcessFiles($aFields['PRO_UID'], 'mail'); + /** + * Task Notifications * + */ + if ($iForm == 7 || $iForm == 1) { + G::loadClass( 'processes' ); + $files = Processes::getProcessFiles( $aFields['PRO_UID'], 'mail' ); - $templates = array(); - $templates[] = 'dummy'; + $templates = array (); + $templates[] = 'dummy'; - foreach ($files as $file) { - $templates[] = array('FILE' => $file['filename'], 'NAME' => $file['filename']); + foreach ($files as $file) { + $templates[] = array ('FILE' => $file['filename'],'NAME' => $file['filename'] + ); + } + + global $_DBArray; + $_DBArray['_TEMPLATES1'] = $templates; + $_SESSION['_DBArray'] = $_DBArray; + + if ($iForm == 7) { + // Additional configuration + G::loadClass( 'configuration' ); + $oConf = new Configurations(); + $oConf->loadConfig( $x, 'TAS_EXTRA_PROPERTIES', $aFields['TAS_UID'], '', '' ); + $conf = $oConf->aConfig; + if (isset( $conf['TAS_DEF_MESSAGE_TYPE'] ) && isset( $conf['TAS_DEF_MESSAGE_TYPE'] )) { + $aFields['TAS_DEF_MESSAGE_TYPE'] = $conf['TAS_DEF_MESSAGE_TYPE']; + $aFields['TAS_DEF_MESSAGE_TEMPLATE'] = $conf['TAS_DEF_MESSAGE_TEMPLATE']; + } + } + } + + if ($iForm == 3) { //Load Calendar Information + $calendar = new Calendar(); + $calendarObj = $calendar->getCalendarList( true, true ); + + global $_DBArray; + + $_DBArray['availableCalendars'] = $calendarObj['array']; + + $_SESSION['_DBArray'] = $_DBArray; + + $calendarInfo = $calendar->getCalendarFor( $sTaskUID, $sTaskUID, $sTaskUID ); + + //If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar + $aFields['TAS_CALENDAR'] = $calendarInfo['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo['CALENDAR_UID'] : ""; + } + global $G_PUBLISH; + G::LoadClass( 'xmlfield_InputPM' ); + $G_PUBLISH = new Publisher(); + if ($sw_template) { + $G_PUBLISH->AddContent( 'view', $sFilename ); + } else { + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', $sFilename, '', $aFields ); + } + + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); } - - global $_DBArray; - $_DBArray['_TEMPLATES1'] = $templates; - $_SESSION['_DBArray'] = $_DBArray; - - if ($iForm == 7) { - // Additional configuration - G::loadClass('configuration'); - $oConf = new Configurations; - $oConf->loadConfig($x, 'TAS_EXTRA_PROPERTIES', $aFields['TAS_UID'], '', ''); - $conf = $oConf->aConfig; - if( isset($conf['TAS_DEF_MESSAGE_TYPE']) && isset($conf['TAS_DEF_MESSAGE_TYPE'])) { - $aFields['TAS_DEF_MESSAGE_TYPE'] = $conf['TAS_DEF_MESSAGE_TYPE']; - $aFields['TAS_DEF_MESSAGE_TEMPLATE'] = $conf['TAS_DEF_MESSAGE_TEMPLATE']; - } - } - } - - if ($iForm == 3) { //Load Calendar Information - $calendar = new Calendar ( ); - $calendarObj = $calendar->getCalendarList(true, true); - - global $_DBArray; - - $_DBArray ['availableCalendars'] = $calendarObj ['array']; - - $_SESSION ['_DBArray'] = $_DBArray; - - $calendarInfo = $calendar->getCalendarFor($sTaskUID, $sTaskUID, $sTaskUID); - - //If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar - $aFields ['TAS_CALENDAR'] = $calendarInfo ['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo ['CALENDAR_UID'] : ""; - } - global $G_PUBLISH; - G::LoadClass('xmlfield_InputPM'); - $G_PUBLISH = new Publisher ( ); - if($sw_template){ - $G_PUBLISH->AddContent('view', $sFilename); - }else{ - $G_PUBLISH->AddContent('xmlform', 'xmlform', $sFilename, '', $aFields); - } - - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); } - } - /* + /* * Save the tasks positions * @param string $sTaskUID * @param integer $iX @@ -1462,112 +1525,115 @@ class processMap { * @return integer */ - function saveTaskPosition($sTaskUID = '', $iX = 0, $iY = 0) { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); + public function saveTaskPosition ($sTaskUID = '', $iX = 0, $iY = 0) + { + try { + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $aFields ['TAS_UID'] = $sTaskUID; - $aFields ['TAS_POSX'] = $iX; - $aFields ['TAS_POSY'] = $iY; - return $oTask->update($aFields); - } catch (Exception $oError) { - throw ($oError); + $aFields['TAS_UID'] = $sTaskUID; + $aFields['TAS_POSX'] = $iX; + $aFields['TAS_POSY'] = $iY; + return $oTask->update( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete a task * @param string $sTaskUID * @return boolean */ - function deleteTask($sTaskUID = '') { - try { - $oTasks = new Tasks ( ); - $oTasks->deleteTask($sTaskUID); - return true; - } catch (Exception $oError) { - throw ($oError); + public function deleteTask ($sTaskUID = '') + { + try { + $oTasks = new Tasks(); + $oTasks->deleteTask( $sTaskUID ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete a gateway * @param string $sProcessUID * @param string $sGatewayUID * @return boolean */ - function deleteGateway($sProcessUID = '', $sGatewayUID = '') { - try { - //First get all routes information related to $sGatewayUID - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('ROU_UID'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::GAT_UID, $sGatewayUID); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while($aRow = $oDataset->getRow()){ - $aRoutes [] = $aRow ['ROU_UID']; - $oDataset->next(); - } + public function deleteGateway ($sProcessUID = '', $sGatewayUID = '') + { + try { + //First get all routes information related to $sGatewayUID + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'ROU_UID' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::GAT_UID, $sGatewayUID ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRoutes[] = $aRow['ROU_UID']; + $oDataset->next(); + } - $oGateway = new Gateway ( ); - if($oGateway->gatewayExists($sGatewayUID)) - { - $oTasks = new Tasks ( ); - $res = $oGateway->remove($sGatewayUID); - if($res){ - $oRoute = new Route( ); - foreach($aRoutes as $sRouteId){ - $oRoute->remove($sRouteId); - } - } - } - return; - } catch (Exception $oError) { - throw ($oError); + $oGateway = new Gateway(); + if ($oGateway->gatewayExists( $sGatewayUID )) { + $oTasks = new Tasks(); + $res = $oGateway->remove( $sGatewayUID ); + if ($res) { + $oRoute = new Route(); + foreach ($aRoutes as $sRouteId) { + $oRoute->remove( $sRouteId ); + } + } + } + return; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Add a gateway * @param string $sProcessUID * @param string $sGatewayUID * @return boolean */ - function addGateway($oData) { - try { - $oGateway = new Gateway ( ); - $aData = array(); - $aData['PRO_UID'] = $oData->pro_uid; - $aData['GAT_X'] = $oData->position->x; - $aData['GAT_Y'] = $oData->position->y; - $aData['GAT_TYPE'] = $oData->gat_type; - $sGat_uid = $oData->gat_uid; - $oGatewayData = GatewayPeer::retrieveByPK($sGat_uid); - if (is_null($oGatewayData)) { - $sGat_uid = $oGateway->create($aData); - }else{ - $aData['GAT_UID'] = $sGat_uid; - if (isset($oData->tas_from)) - $aData['TAS_UID'] = $oData->tas_from; - if (isset($oData->tas_to)) - $aData['GAT_NEXT_TASK'] = $oData->tas_to; - $oGateway->update($aData); - } - $oEncode->uid = $sGat_uid; - $oJSON = new Services_JSON ( ); - return $oJSON->encode($oEncode); - } catch (Exception $oError) { - throw ($oError); + public function addGateway ($oData) + { + try { + $oGateway = new Gateway(); + $aData = array (); + $aData['PRO_UID'] = $oData->pro_uid; + $aData['GAT_X'] = $oData->position->x; + $aData['GAT_Y'] = $oData->position->y; + $aData['GAT_TYPE'] = $oData->gat_type; + $sGat_uid = $oData->gat_uid; + $oGatewayData = GatewayPeer::retrieveByPK( $sGat_uid ); + if (is_null( $oGatewayData )) { + $sGat_uid = $oGateway->create( $aData ); + } else { + $aData['GAT_UID'] = $sGat_uid; + if (isset( $oData->tas_from )) + $aData['TAS_UID'] = $oData->tas_from; + if (isset( $oData->tas_to )) + $aData['GAT_NEXT_TASK'] = $oData->tas_to; + $oGateway->update( $aData ); + } + $oEncode->uid = $sGat_uid; + $oJSON = new Services_JSON(); + return $oJSON->encode( $oEncode ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Add a new guide * @param string $sProcessUID * @param integer $iPosition @@ -1575,27 +1641,30 @@ class processMap { * @return string */ - function addGuide($sProcessUID = '', $iPosition = 0, $sDirection = 'vertical') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oSL = new SwimlanesElements ( ); - switch ($sDirection) { - case 'vertical' : - $oNewGuide->uid = $oSL->create(array('PRO_UID' => $sProcessUID, 'SWI_TYPE' => 'LINE', 'SWI_X' => $iPosition, 'SWI_Y' => 0)); - break; - case 'horizontal' : - $oNewGuide->uid = $oSL->create(array('PRO_UID' => $sProcessUID, 'SWI_TYPE' => 'LINE', 'SWI_X' => 0, 'SWI_Y' => $iPosition)); - break; - } - $oJSON = new Services_JSON ( ); - return $oJSON->encode($oNewGuide); - } catch (Exception $oError) { - throw ($oError); + public function addGuide ($sProcessUID = '', $iPosition = 0, $sDirection = 'vertical') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oSL = new SwimlanesElements(); + switch ($sDirection) { + case 'vertical': + $oNewGuide->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'LINE','SWI_X' => $iPosition,'SWI_Y' => 0 + ) ); + break; + case 'horizontal': + $oNewGuide->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'LINE','SWI_X' => 0,'SWI_Y' => $iPosition + ) ); + break; + } + $oJSON = new Services_JSON(); + return $oJSON->encode( $oNewGuide ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the guide position * @param string $sSEUID * @param integer $iPosition @@ -1603,61 +1672,66 @@ class processMap { * @return integer */ - function saveGuidePosition($sSEUID = '', $iPosition = 0, $sDirection = 'vertical') { - try { - $oSL = new SwimlanesElements ( ); - $aFields = $oSL->load($sSEUID); - switch ($sDirection) { - case 'vertical' : - return $oSL->update(array('SWI_UID' => $sSEUID, 'SWI_X' => $iPosition)); - break; - case 'horizontal' : - return $oSL->update(array('SWI_UID' => $sSEUID, 'SWI_Y' => $iPosition)); - break; - } - } catch (Exception $oError) { - throw ($oError); + public function saveGuidePosition ($sSEUID = '', $iPosition = 0, $sDirection = 'vertical') + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSEUID ); + switch ($sDirection) { + case 'vertical': + return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_X' => $iPosition + ) ); + break; + case 'horizontal': + return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_Y' => $iPosition + ) ); + break; + } + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete a guide * @param string $sUID * @return boolean */ - function deleteGuide($sSEUID = '') { - try { - $oSL = new SwimlanesElements ( ); - $aFields = $oSL->load($sSEUID); - $oSL->remove($sSEUID); - return true; - } catch (Exception $oError) { - throw ($oError); + public function deleteGuide ($sSEUID = '') + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSEUID ); + $oSL->remove( $sSEUID ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete all guides * @param string $sProcessUID * @return boolean */ - function deleteGuides($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProcessUID); - $oCriteria->add(SwimlanesElementsPeer::SWI_TYPE, 'LINE'); - SwimlanesElementsPeer::doDelete($oCriteria); - return true; - } catch (Exception $oError) { - throw ($oError); + public function deleteGuides ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( SwimlanesElementsPeer::SWI_TYPE, 'LINE' ); + SwimlanesElementsPeer::doDelete( $oCriteria ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Add a new text * @param string $sProcessUID * @param string $sLabel @@ -1666,37 +1740,41 @@ class processMap { * @return string */ - function addText($sProcessUID = '', $sLabel = '', $iX = 0, $iY = 0 , $sNext_uid = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oSL = new SwimlanesElements ( ); - $oNewText->uid = $oSL->create(array('PRO_UID' => $sProcessUID, 'SWI_TYPE' => 'TEXT', 'SWI_TEXT' => $sLabel, 'SWI_X' => $iX, 'SWI_Y' => $iY,'SWI_NEXT_UID' => $sNext_uid)); - $oJSON = new Services_JSON ( ); - return $oJSON->encode($oNewText); - } catch (Exception $oError) { - throw ($oError); + public function addText ($sProcessUID = '', $sLabel = '', $iX = 0, $iY = 0, $sNext_uid = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oSL = new SwimlanesElements(); + $oNewText->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'TEXT','SWI_TEXT' => $sLabel,'SWI_X' => $iX,'SWI_Y' => $iY,'SWI_NEXT_UID' => $sNext_uid + ) ); + $oJSON = new Services_JSON(); + return $oJSON->encode( $oNewText ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Update a text * @param string $sSEUID * @param string $sLabel * @return integer */ - function updateText($sSEUID = '', $sLabel = '' , $sNext_uid = '') { - try { - $oSL = new SwimlanesElements ( ); - $aFields = $oSL->load($sSEUID); - return $oSL->update(array('SWI_UID' => $sSEUID, 'SWI_TEXT' => $sLabel,'SWI_NEXT_UID' => $sNext_uid)); - } catch (Exception $oError) { - throw ($oError); + public function updateText ($sSEUID = '', $sLabel = '', $sNext_uid = '') + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSEUID ); + return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_TEXT' => $sLabel,'SWI_NEXT_UID' => $sNext_uid + ) ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the text position * @param string $sSEUID * @param integer $iX @@ -1704,34 +1782,37 @@ class processMap { * @return integer */ - function saveTextPosition($sSEUID = '', $iX = 0, $iY = 0) { - try { - $oSL = new SwimlanesElements ( ); - $aFields = $oSL->load($sSEUID); - return $oSL->update(array('SWI_UID' => $sSEUID, 'SWI_X' => $iX, 'SWI_Y' => $iY)); - } catch (Exception $oError) { - throw ($oError); + public function saveTextPosition ($sSEUID = '', $iX = 0, $iY = 0) + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSEUID ); + return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_X' => $iX,'SWI_Y' => $iY + ) ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete a text * @param string $sSEUID * @return boolean */ - function deleteText($sSEUID = '') { - try { - $oSL = new SwimlanesElements ( ); - $aFields = $oSL->load($sSEUID); - $oSL->remove($sSEUID); - return true; - } catch (Exception $oError) { - throw ($oError); + public function deleteText ($sSEUID = '') + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSEUID ); + $oSL->remove( $sSEUID ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the gateways positions * @param string $sGatewayUID * @param integer $iX @@ -1739,380 +1820,423 @@ class processMap { * @return integer */ - function saveGatewayPosition($sGatewayUID = '', $iX = 0, $iY = 0) { - try { - $oGateway = new Gateway ( ); - $aFields = $oGateway->load($sGatewayUID); + public function saveGatewayPosition ($sGatewayUID = '', $iX = 0, $iY = 0) + { + try { + $oGateway = new Gateway(); + $aFields = $oGateway->load( $sGatewayUID ); - $aFields ['GAT_UID'] = $sGatewayUID; - $aFields ['GAT_X'] = $iX; - $aFields ['GAT_Y'] = $iY; - return $oGateway->update($aFields); - } catch (Exception $oError) { - throw ($oError); + $aFields['GAT_UID'] = $sGatewayUID; + $aFields['GAT_X'] = $iX; + $aFields['GAT_Y'] = $iY; + return $oGateway->update( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Presents a small list of dynaforms of the process * @param string $sProcessUID * @return boolean */ - function dynaformsList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/dynaforms_ShortList', $this->getDynaformsCriteria($sProcessUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function dynaformsList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_ShortList', $this->getDynaformsCriteria( $sProcessUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the dynaforms list criteria object * @param string $sProcessUID * @return object */ - function getDynaformsCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addSelectColumn(DynaformPeer::PRO_UID); - $oCriteria->addSelectColumn(DynaformPeer::DYN_TYPE); - $oCriteria->addAsColumn('DYN_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('DYN_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); + public function getDynaformsCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addSelectColumn( DynaformPeer::PRO_UID ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_TYPE ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'DYN_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $dynaformArray = array(); - $dynaformArray [] = array('d' => 'char'); - while ($aRow = $oDataset->getRow()) { - if (($aRow ['DYN_TITLE'] == NULL) || ($aRow ['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_TITLE'] = Content::Load("DYN_TITLE", "", $aRow ['DYN_UID'], SYS_LANG); - } - if (($aRow ['DYN_DESCRIPTION'] == NULL) || ($aRow ['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_DESCRIPTION'] = Content::Load("DYN_DESCRIPTION", "", $aRow ['DYN_UID'], SYS_LANG); - } - $dynaformArray [] = $aRow; - $oDataset->next(); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $dynaformArray = array (); + $dynaformArray[] = array ('d' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG ); + } + if (($aRow['DYN_DESCRIPTION'] == null) || ($aRow['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_DESCRIPTION'] = Content::Load( "DYN_DESCRIPTION", "", $aRow['DYN_UID'], SYS_LANG ); + } + $dynaformArray[] = $aRow; + $oDataset->next(); + } + + return $oCriteria; } + /** + * getDynaformsList + * + * @param string $sProcessUID + * @return array $dynaformArray + */ + public function getDynaformsList ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addSelectColumn( DynaformPeer::PRO_UID ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_TYPE ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'DYN_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); - return $oCriteria; - } + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $dynaformArray = array (); + while ($aRow = $oDataset->getRow()) { + if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG ); + } + if (($aRow['DYN_DESCRIPTION'] == null) || ($aRow['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_DESCRIPTION'] = Content::Load( "DYN_DESCRIPTION", "", $aRow['DYN_UID'], SYS_LANG ); + } + $dynaformArray[] = $aRow; + $oDataset->next(); + } - /** - * getDynaformsList - * - * @param string $sProcessUID - * @return array $dynaformArray - */ - function getDynaformsList($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addSelectColumn(DynaformPeer::PRO_UID); - $oCriteria->addSelectColumn(DynaformPeer::DYN_TYPE); - $oCriteria->addAsColumn('DYN_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('DYN_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $dynaformArray = array(); - while ($aRow = $oDataset->getRow()) { - if (($aRow ['DYN_TITLE'] == NULL) || ($aRow ['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_TITLE'] = Content::Load("DYN_TITLE", "", $aRow ['DYN_UID'], SYS_LANG); - } - if (($aRow ['DYN_DESCRIPTION'] == NULL) || ($aRow ['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_DESCRIPTION'] = Content::Load("DYN_DESCRIPTION", "", $aRow ['DYN_UID'], SYS_LANG); - } - $dynaformArray [] = $aRow; - $oDataset->next(); + return $dynaformArray; } - return $dynaformArray; - } - - /* + /* * Presents a small list of output documents of the process * @param string $sProcessUID * @return boolean */ - function outputdocsList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'outputdocs/outputdocs_ShortList', $this->getOutputDocumentsCriteria($sProcessUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function outputdocsList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'outputdocs/outputdocs_ShortList', $this->getOutputDocumentsCriteria( $sProcessUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the output documents list criteria object * @param string $sProcessUID * @return object */ - function getOutputDocumentsCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_UID); - $oCriteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_TYPE); - $oCriteria->addSelectColumn(OutputDocumentPeer::PRO_UID); - $oCriteria->addAsColumn('OUT_DOC_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('OUT_DOC_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(OutputDocumentPeer::OUT_DOC_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(OutputDocumentPeer::OUT_DOC_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'OUT_DOC_DESCRIPTION' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); + public function getOutputDocumentsCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_TYPE ); + $oCriteria->addSelectColumn( OutputDocumentPeer::PRO_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'OUT_DOC_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'OUT_DOC_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $outputDocArray = array(); - $outputDocArray [] = array('d' => 'char'); - while ($aRow = $oDataset->getRow()) { - if (($aRow ['OUT_DOC_TITLE'] == NULL) || ($aRow ['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $outputDocument = new OutputDocument ( ); - $outputDocumentObj = $outputDocument->load($aRow ['OUT_DOC_UID']); - $aRow ['OUT_DOC_TITLE'] = $outputDocumentObj ['OUT_DOC_TITLE']; - $aRow ['OUT_DOC_DESCRIPTION'] = $outputDocumentObj ['OUT_DOC_DESCRIPTION']; - } - $outputDocArray [] = $aRow; - $oDataset->next(); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $outputDocArray = array (); + $outputDocArray[] = array ('d' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $outputDocument = new OutputDocument(); + $outputDocumentObj = $outputDocument->load( $aRow['OUT_DOC_UID'] ); + $aRow['OUT_DOC_TITLE'] = $outputDocumentObj['OUT_DOC_TITLE']; + $aRow['OUT_DOC_DESCRIPTION'] = $outputDocumentObj['OUT_DOC_DESCRIPTION']; + } + $outputDocArray[] = $aRow; + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['outputDocArray'] = $outputDocArray; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'outputDocArray' ); + + return $oCriteria; } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['outputDocArray'] = $outputDocArray; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('outputDocArray'); - return $oCriteria; - } - - /* + /* * Presents a small list of input documents of the process * @param string $sProcessUID Process UID * @return void */ - function inputdocsList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'inputdocs/inputdocs_ShortList', $this->getInputDocumentsCriteria($sProcessUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function inputdocsList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_ShortList', $this->getInputDocumentsCriteria( $sProcessUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the input documents list criteria object * @param string $sProcessUID * @return object */ - function getInputDocumentsCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addSelectColumn(InputDocumentPeer::PRO_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('INP_DOC_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'INP_DOC_DESCRIPTION' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); + public function getInputDocumentsCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'INP_DOC_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'INP_DOC_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $inputDocArray = ""; - $inputDocArray [] = array('INP_DOC_UID' => 'char', 'PRO_UID' => 'char', 'INP_DOC_TITLE' => 'char', 'INP_DOC_DESCRIPTION' => 'char'); - while ($aRow = $oDataset->getRow()) { - if (($aRow ['INP_DOC_TITLE'] == NULL) || ($aRow ['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $inputDocument = new InputDocument ( ); - $inputDocumentObj = $inputDocument->load($aRow ['INP_DOC_UID']); - $aRow ['INP_DOC_TITLE'] = $inputDocumentObj ['INP_DOC_TITLE']; - $aRow ['INP_DOC_DESCRIPTION'] = $inputDocumentObj ['INP_DOC_DESCRIPTION']; - } - $inputDocArray [] = $aRow; - $oDataset->next(); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $inputDocArray = ""; + $inputDocArray[] = array ('INP_DOC_UID' => 'char','PRO_UID' => 'char','INP_DOC_TITLE' => 'char','INP_DOC_DESCRIPTION' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + if (($aRow['INP_DOC_TITLE'] == null) || ($aRow['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $inputDocument = new InputDocument(); + $inputDocumentObj = $inputDocument->load( $aRow['INP_DOC_UID'] ); + $aRow['INP_DOC_TITLE'] = $inputDocumentObj['INP_DOC_TITLE']; + $aRow['INP_DOC_DESCRIPTION'] = $inputDocumentObj['INP_DOC_DESCRIPTION']; + } + $inputDocArray[] = $aRow; + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + + $_DBArray['inputDocArrayMain'] = $inputDocArray; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'inputDocArrayMain' ); + + return $oCriteria; } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['inputDocArrayMain'] = $inputDocArray; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('inputDocArrayMain'); - - return $oCriteria; - } - - /* + /* * Presents a small list of triggers of the process * @param string $sProcessUID * @return void */ - function triggersList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'triggers/triggers_ShortList', $this->getTriggersCriteria($sProcessUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function triggersList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'triggers/triggers_ShortList', $this->getTriggersCriteria( $sProcessUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the triggers list criteria object * @param string $sProcessUID * @return object */ - function getTriggersCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TriggersPeer::TRI_UID); - $oCriteria->addSelectColumn(TriggersPeer::PRO_UID); - $oCriteria->addAsColumn('TRI_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('TRI_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(TriggersPeer::TRI_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(TriggersPeer::TRI_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TriggersPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn('TRI_TITLE'); + public function getTriggersCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TriggersPeer::TRI_UID ); + $oCriteria->addSelectColumn( TriggersPeer::PRO_UID ); + $oCriteria->addAsColumn( 'TRI_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'TRI_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (TriggersPeer::TRI_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (TriggersPeer::TRI_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID ); + $oCriteria->addAscendingOrderByColumn( 'TRI_TITLE' ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $triggersArray = ""; + $triggersArray[] = array ('TRI_UID' => 'char','PRO_UID' => 'char','TRI_TITLE' => 'char','TRI_DESCRIPTION' => 'char' + ); + while ($aRow = $oDataset->getRow()) { - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $triggersArray = ""; - $triggersArray [] = array('TRI_UID' => 'char', 'PRO_UID' => 'char', 'TRI_TITLE' => 'char', 'TRI_DESCRIPTION' => 'char'); - while ($aRow = $oDataset->getRow()) { + if (($aRow['TRI_TITLE'] == null) || ($aRow['TRI_TITLE'] == "")) { // There is no transaltion for this Trigger name, try to get/regenerate the label + $triggerO = new Triggers(); + $triggerObj = $triggerO->load( $aRow['TRI_UID'] ); + $aRow['TRI_TITLE'] = $triggerObj['TRI_TITLE']; + $aRow['TRI_DESCRIPTION'] = $triggerObj['TRI_DESCRIPTION']; + } + $triggersArray[] = $aRow; + $oDataset->next(); + } - if (($aRow ['TRI_TITLE'] == NULL) || ($aRow ['TRI_TITLE'] == "")) { // There is no transaltion for this Trigger name, try to get/regenerate the label - $triggerO = new Triggers ( ); - $triggerObj = $triggerO->load($aRow ['TRI_UID']); - $aRow ['TRI_TITLE'] = $triggerObj ['TRI_TITLE']; - $aRow ['TRI_DESCRIPTION'] = $triggerObj ['TRI_DESCRIPTION']; - } - $triggersArray [] = $aRow; - $oDataset->next(); + return $oCriteria; } - - return $oCriteria; - } - - /* + /* * Return the triggers list in a array * @param string $sProcessUID * @return array */ - function getTriggers($sProcessUID = '') { - $aTriggers = Array(); - $oCriteria = $this->getTriggersCriteria($sProcessUID); + public function getTriggers ($sProcessUID = '') + { + $aTriggers = Array (); + $oCriteria = $this->getTriggersCriteria( $sProcessUID ); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - while ($oDataset->next()) - array_push($aTriggers, $oDataset->getRow()); + while ($oDataset->next()) + array_push( $aTriggers, $oDataset->getRow() ); - return $aTriggers; - } + return $aTriggers; + } - /* + /* * Presents a small list of Scheduled Tasks of the process * @param string $sProcessUID * @return void */ - function caseSchedulerList($sProcessUID = '') { - try { - /* $oCaseScheduler = new CaseScheduler(); + public function caseSchedulerList ($sProcessUID = '') + { + try { + /* $oCaseScheduler = new CaseScheduler(); $aRows = $oCaseScheduler->getAll(); //$oCaseScheduler->caseSchedulerCron(); @@ -2220,260 +2344,260 @@ class processMap { $G_PUBLISH->AddContent('propeltable', 'paged-table', '/cases/cases_Scheduler_List', $oCriteria, array('CONFIRM' => G::LoadTranslation('ID_MSG_CONFIRM_DELETE_CASE_SCHEDULER'))); G::RenderPage('publish'); //return true; */ - $schedulerPath = SYS_URI . "cases/cases_Scheduler_List"; - $html = ""; - echo $html; - } catch (Exception $oError) { - throw ($oError); + $schedulerPath = SYS_URI . "cases/cases_Scheduler_List"; + $html = ""; + echo $html; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Presents a small list of Scheduled Task Logs of the process * @param string $sProcessUID * @return void */ - function logCaseSchedulerList($sProcessUID = '') { - try { - $oLogCaseScheduler = new LogCasesScheduler(); - $aRows = $oLogCaseScheduler->getAll(); + public function logCaseSchedulerList ($sProcessUID = '') + { + try { + $oLogCaseScheduler = new LogCasesScheduler(); + $aRows = $oLogCaseScheduler->getAll(); - $fieldNames = Array( - 'PRO_UID' => 'char', - 'TAS_UID' => 'char', - 'USR_NAME' => 'char', - 'EXEC_DATE' => 'char', - 'EXEC_HOUR' => 'char', - 'RESULT' => 'char', - 'SCH_UID' => 'char', - 'WS_CREATE_CASE_STATUS' => 'char', - 'WS_ROUTE_CASE_STATUS' => 'char', - ); + $fieldNames = Array ('PRO_UID' => 'char','TAS_UID' => 'char','USR_NAME' => 'char','EXEC_DATE' => 'char','EXEC_HOUR' => 'char','RESULT' => 'char','SCH_UID' => 'char','WS_CREATE_CASE_STATUS' => 'char','WS_ROUTE_CASE_STATUS' => 'char' + ); - $aRows = array_merge(Array($fieldNames), $aRows); + $aRows = array_merge( Array ($fieldNames + ), $aRows ); - $_DBArray['log_cases_scheduler'] = $aRows; - $_SESSION['_DBArray'] = $_DBArray; + $_DBArray['log_cases_scheduler'] = $aRows; + $_SESSION['_DBArray'] = $_DBArray; - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('log_cases_scheduler'); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'log_cases_scheduler' ); - $G_PUBLISH = new Publisher; - $G_PUBLISH->ROWS_PER_PAGE = 10; - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'cases/cases_Scheduler_Log', $oCriteria); - $G_PUBLISH->oPropelTable->rowsPerPage = 10; - G::RenderPage('publish', 'blank'); - } catch (Exception $oError) { - throw ($oError); + $G_PUBLISH = new Publisher(); + $G_PUBLISH->ROWS_PER_PAGE = 10; + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'cases/cases_Scheduler_Log', $oCriteria ); + $G_PUBLISH->oPropelTable->rowsPerPage = 10; + G::RenderPage( 'publish', 'blank' ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Presents a small list of messages of the process * @param string $sProcessUID * @return void */ - function messagesList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $aFields ['PRO_UID'] = $sProcessUID; - $aFields ['SYS_LANG'] = SYS_LANG; - $G_PUBLISH = new Publisher ( ); - //$G_PUBLISH->AddContent('pagedtable', 'paged-table', 'messages/messages_ShortList', $this->getMessagesCriteria($sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function messagesList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $aFields['PRO_UID'] = $sProcessUID; + $aFields['SYS_LANG'] = SYS_LANG; + $G_PUBLISH = new Publisher(); + //$G_PUBLISH->AddContent('pagedtable', 'paged-table', 'messages/messages_ShortList', $this->getMessagesCriteria($sProcessUID)); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Presents a small list of report tables of the process * @param string $sProcessUID * @return void */ - function reportTablesList($sProcessUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'reportTables/reportTables_ShortList', $this->getReportTablesCriteria($sProcessUID), $aFields); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function reportTablesList ($sProcessUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'reportTables/reportTables_ShortList', $this->getReportTablesCriteria( $sProcessUID ), $aFields ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the report tables list criteria object * @param string $sProcessUID * @return object */ - function getReportTablesCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_UID); - $oCriteria->addSelectColumn(ReportTablePeer::PRO_UID); - $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_NAME); - $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_TYPE); - $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_CONNECTION); - // $oCriteria->addAsColumn ( 'REP_TAB_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAsColumn('REP_TAB_TITLE', "CASE WHEN C.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE A.CON_ID = REPORT_TABLE.REP_TAB_UID ) ELSE C.CON_VALUE END "); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(ReportTablePeer::REP_TAB_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'REP_TAB_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProcessUID); - return $oCriteria; - } + public function getReportTablesCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_UID ); + $oCriteria->addSelectColumn( ReportTablePeer::PRO_UID ); + $oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_NAME ); + $oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_TYPE ); + $oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_CONNECTION ); + // $oCriteria->addAsColumn ( 'REP_TAB_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAsColumn( 'REP_TAB_TITLE', "CASE WHEN C.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE A.CON_ID = REPORT_TABLE.REP_TAB_UID ) ELSE C.CON_VALUE END " ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (ReportTablePeer::REP_TAB_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'REP_TAB_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUID ); + return $oCriteria; + } - /* + /* * Show the current pattern * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function currentPattern($sProcessUID, $sTaskUID) { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - $aFields = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $params = array(); -// $sql = BasePeer::createSelectSql($oCriteria, $params); -// echo $sProcessUID."-".$sTaskUID."-"; -// echo $sql; -// var_dump($aRow); -// die(); + public function currentPattern ($sProcessUID, $sTaskUID) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $aFields = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( RoutePeer::ROU_CASE ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + $params = array (); + // $sql = BasePeer::createSelectSql($oCriteria, $params); + // echo $sProcessUID."-".$sTaskUID."-"; + // echo $sql; + // var_dump($aRow); + // die(); - if (is_array($aRow)) { - $aFields ['ROU_TYPE'] = $aRow ['ROU_TYPE']; - $aFields ['ROU_TYPE_OLD'] = $aRow ['ROU_TYPE']; - switch ($aRow ['ROU_TYPE']) { - case 'SEQUENTIAL' : - case 'SEC-JOIN' : - $aFields ['ROU_UID'] = $aRow ['ROU_UID']; - $aFields ['ROU_NEXT_TASK'] = $aRow ['ROU_NEXT_TASK']; - $aFields ['ROU_TO_LAST_USER'] = $aRow ['ROU_TO_LAST_USER']; - if ($aRow ['ROU_TYPE'] == 'SEQUENTIAL') { - $sXmlform = 'patterns_Sequential'; - } else { - $sXmlform = 'patterns_ParallelJoin'; + if (is_array( $aRow )) { + $aFields['ROU_TYPE'] = $aRow['ROU_TYPE']; + $aFields['ROU_TYPE_OLD'] = $aRow['ROU_TYPE']; + switch ($aRow['ROU_TYPE']) { + case 'SEQUENTIAL': + case 'SEC-JOIN': + $aFields['ROU_UID'] = $aRow['ROU_UID']; + $aFields['ROU_NEXT_TASK'] = $aRow['ROU_NEXT_TASK']; + $aFields['ROU_TO_LAST_USER'] = $aRow['ROU_TO_LAST_USER']; + if ($aRow['ROU_TYPE'] == 'SEQUENTIAL') { + $sXmlform = 'patterns_Sequential'; + } else { + $sXmlform = 'patterns_ParallelJoin'; + } + break; + case 'SELECT': + $aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + $oDataset->next(); + } + $sXmlform = 'patterns_Select'; + break; + case 'EVALUATE': + G::LoadClass( 'xmlfield_InputPM' ); + $aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + $oDataset->next(); + } + $sXmlform = 'patterns_Evaluate'; + break; + case 'PARALLEL': + $aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $oDataset->next(); + } + $sXmlform = 'patterns_Parallel'; + break; + case 'PARALLEL-BY-EVALUATION': + G::LoadClass( 'xmlfield_InputPM' ); + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL']; + $oDataset->next(); + } + $sXmlform = 'patterns_ParallelByEvaluation'; + break; + case 'DISCRIMINATOR': + G::LoadClass( 'xmlfield_InputPM' ); + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL']; + G::LoadClass( 'tasks' ); + $oTasks = new Tasks(); + $routeData = $oTasks->getRouteByType( $sProcessUID, $aRow['ROU_NEXT_TASK'], $aRow['ROU_TYPE'] ); + $aFields['ROUTE_COUNT'] = count( $routeData ); + $sXmlform = 'patterns_Discriminator'; + break; + default: + throw new Exception( G::loadTranslation( 'ID_INVALID_ROU_TYPE_DEFINITION_ON_ROUTE_TABLE' ) ); + break; + } } - break; - case 'SELECT' : - $aFields ['GRID_SELECT_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_SELECT_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - $oDataset->next(); - } - $sXmlform = 'patterns_Select'; - break; - case 'EVALUATE' : - G::LoadClass('xmlfield_InputPM'); - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - $oDataset->next(); - } - $sXmlform = 'patterns_Evaluate'; - break; - case 'PARALLEL' : - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $oDataset->next(); - } - $sXmlform = 'patterns_Parallel'; - break; - case 'PARALLEL-BY-EVALUATION' : - G::LoadClass('xmlfield_InputPM'); - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_OPTIONAL'] [$aRow ['ROU_CASE']] = $aRow ['ROU_OPTIONAL']; - $oDataset->next(); - } - $sXmlform = 'patterns_ParallelByEvaluation'; - break; - case 'DISCRIMINATOR' : - G::LoadClass ( 'xmlfield_InputPM' ); - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_OPTIONAL'] [$aRow ['ROU_CASE']] = $aRow ['ROU_OPTIONAL']; - G::LoadClass('tasks'); - $oTasks = new Tasks(); - $routeData = $oTasks->getRouteByType($sProcessUID, $aRow['ROU_NEXT_TASK'], $aRow['ROU_TYPE']); - $aFields['ROUTE_COUNT'] = count($routeData); - $sXmlform = 'patterns_Discriminator'; - break; - default: - throw new Exception(G::loadTranslation('ID_INVALID_ROU_TYPE_DEFINITION_ON_ROUTE_TABLE')); - break; + + $aFields['action'] = 'savePattern'; + $aFields['LANG'] = SYS_LANG; + $aFields['PROCESS'] = $sProcessUID; + $aFields['TASK'] = $sTaskUID; + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'patterns/' . $sXmlform, '', $aFields, '../patterns/patterns_Ajax' ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $aMessage = array (); + $aMessage['MESSAGE'] = $oError->getMessage(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); + G::RenderPage( 'publish', 'blank' ); + die(); } - } - - $aFields ['action'] = 'savePattern'; - $aFields ['LANG'] = SYS_LANG; - $aFields ['PROCESS'] = $sProcessUID; - $aFields ['TASK'] = $sTaskUID; - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'patterns/' . $sXmlform, '', $aFields, '../patterns/patterns_Ajax'); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - global $G_PUBLISH; - $G_PUBLISH = new Publisher(); - $aMessage = array(); - $aMessage['MESSAGE'] = $oError->getMessage(); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); - G::RenderPage( 'publish','blank'); - die; } - } - /* + /* * Show the new pattern form * @param string $sProcessUID * @param string $sTaskUID @@ -2482,847 +2606,896 @@ class processMap { * @return boolean */ - function newPattern($sProcessUID, $sTaskUID, $sNextTask, $sType) { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - $aFields = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if (is_array($aRow)) { - $aFields ['ROU_TYPE_OLD'] = $aRow ['ROU_TYPE']; - if ($sType == $aFields ['ROU_TYPE_OLD']) { - switch ($sType) { - case 'SELECT' : - $aFields ['GRID_SELECT_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_SELECT_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_SELECT_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - $oDataset->next(); - } - break; - case 'EVALUATE' : - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_TO_LAST_USER'] [$aRow ['ROU_CASE']] = $aRow ['ROU_TO_LAST_USER']; - $oDataset->next(); - } - break; - case 'PARALLEL' : - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $oDataset->next(); - } - break; - case 'PARALLEL-BY-EVALUATION' : - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - while ($aRow = $oDataset->getRow()) { - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $oDataset->next(); - } - break; - case 'DISCRIMINATOR' : - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_OPTIONAL'] [$aRow ['ROU_CASE']] = $aRow ['ROU_OPTIONAL']; - while ( $aRow = $oDataset->getRow () ) { - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_UID'] [$aRow ['ROU_CASE']] = $aRow ['ROU_UID']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_NEXT_TASK'] [$aRow ['ROU_CASE']] = $aRow ['ROU_NEXT_TASK']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_CONDITION'] [$aRow ['ROU_CASE']] = $aRow ['ROU_CONDITION']; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_OPTIONAL'] [$aRow ['ROU_CASE']] = $aRow ['ROU_OPTIONAL']; - $oDataset->next (); - } - break; - } - } else { + public function newPattern ($sProcessUID, $sTaskUID, $sNextTask, $sType) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $aFields = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( RoutePeer::ROU_CASE ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if (is_array( $aRow )) { + $aFields['ROU_TYPE_OLD'] = $aRow['ROU_TYPE']; + if ($sType == $aFields['ROU_TYPE_OLD']) { + switch ($sType) { + case 'SELECT': + $aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + $oDataset->next(); + } + break; + case 'EVALUATE': + $aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER']; + $oDataset->next(); + } + break; + case 'PARALLEL': + $aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $oDataset->next(); + } + break; + case 'PARALLEL-BY-EVALUATION': + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $oDataset->next(); + } + break; + case 'DISCRIMINATOR': + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL']; + while ($aRow = $oDataset->getRow()) { + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION']; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL']; + $oDataset->next(); + } + break; + } + } else { + } + } + switch ($sType) { + case 'SEQUENTIAL': + case 'SEC-JOIN': + $aFields['ROU_NEXT_TASK'] = $sNextTask; + break; + case 'SELECT': + $iRow = (isset( $aFields['GRID_SELECT_TYPE'] ) ? count( $aFields['GRID_SELECT_TYPE']['ROU_UID'] ) + 1 : 0); + $aFields['GRID_SELECT_TYPE']['ROU_UID'][$iRow] = ''; + $aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask; + $aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$iRow] = ''; + $aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$iRow] = ''; + break; + case 'EVALUATE': + $iRow = (isset( $aFields['GRID_PARALLEL_EVALUATION_TYPE'] ) ? count( $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'] ) + 1 : 0); + $aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$iRow] = ''; + $aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask; + $aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$iRow] = ''; + $aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$iRow] = ''; + break; + case 'PARALLEL': + $iRow = (isset( $aFields['GRID_PARALLEL_TYPE'] ) ? count( $aFields['GRID_PARALLEL_TYPE']['ROU_UID'] ) + 1 : 0); + $aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$iRow] = ''; + $aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask; + $aFields['GRID_PARALLEL_TYPE']['ROU_CONDITION'][$iRow] = ''; + $aFields['GRID_PARALLEL_TYPE']['ROU_TO_LAST_USER'][$iRow] = ''; + break; + case 'PARALLEL-BY-EVALUATION': + $iRow = (isset( $aFields['GRID_PARALLEL_EVALUATION_TYPE'] ) ? count( $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'] ) + 1 : 0); + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$iRow] = ''; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$iRow] = ''; + $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_TO_LAST_USER'][$iRow] = ''; + break; + case 'DISCRIMINATOR': + $iRow = (isset( $aFields['GRID_DISCRIMINATOR_TYPE'] ) ? count( $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'] ) + 1 : 0); + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$iRow] = ''; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$iRow] = ''; + $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_TO_LAST_USER'][$iRow] = ''; + break; + } + $aFields['action'] = 'savePattern'; + $aFields['LANG'] = SYS_LANG; + $aFields['PROCESS'] = $sProcessUID; + $aFields['TASK'] = $sTaskUID; + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'patterns/patterns_Current', '', $aFields, '../patterns/patterns_Ajax' ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); } - } - switch ($sType) { - case 'SEQUENTIAL' : - case 'SEC-JOIN' : - $aFields ['ROU_NEXT_TASK'] = $sNextTask; - break; - case 'SELECT' : - $iRow = (isset($aFields ['GRID_SELECT_TYPE']) ? count($aFields ['GRID_SELECT_TYPE'] ['ROU_UID']) + 1 : 0); - $aFields ['GRID_SELECT_TYPE'] ['ROU_UID'] [$iRow] = ''; - $aFields ['GRID_SELECT_TYPE'] ['ROU_NEXT_TASK'] [$iRow] = $sNextTask; - $aFields ['GRID_SELECT_TYPE'] ['ROU_CONDITION'] [$iRow] = ''; - $aFields ['GRID_SELECT_TYPE'] ['ROU_TO_LAST_USER'] [$iRow] = ''; - break; - case 'EVALUATE' : - $iRow = (isset($aFields ['GRID_PARALLEL_EVALUATION_TYPE']) ? count($aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID']) + 1 : 0); - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_UID'] [$iRow] = ''; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_NEXT_TASK'] [$iRow] = $sNextTask; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_CONDITION'] [$iRow] = ''; - $aFields ['GRID_EVALUATE_TYPE'] ['ROU_TO_LAST_USER'] [$iRow] = ''; - break; - case 'PARALLEL' : - $iRow = (isset($aFields ['GRID_PARALLEL_TYPE']) ? count($aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID']) + 1 : 0); - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_UID'] [$iRow] = ''; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_NEXT_TASK'] [$iRow] = $sNextTask; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_CONDITION'] [$iRow] = ''; - $aFields ['GRID_PARALLEL_TYPE'] ['ROU_TO_LAST_USER'] [$iRow] = ''; - break; - case 'PARALLEL-BY-EVALUATION' : - $iRow = (isset($aFields ['GRID_PARALLEL_EVALUATION_TYPE']) ? count($aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID']) + 1 : 0); - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_UID'] [$iRow] = ''; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_NEXT_TASK'] [$iRow] = $sNextTask; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_CONDITION'] [$iRow] = ''; - $aFields ['GRID_PARALLEL_EVALUATION_TYPE'] ['ROU_TO_LAST_USER'] [$iRow] = ''; - break; - case 'DISCRIMINATOR' : - $iRow = (isset ( $aFields ['GRID_DISCRIMINATOR_TYPE'] ) ? count ( $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_UID'] ) + 1 : 0); - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_UID'] [$iRow] = ''; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_NEXT_TASK'] [$iRow] = $sNextTask; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_CONDITION'] [$iRow] = ''; - $aFields ['GRID_DISCRIMINATOR_TYPE'] ['ROU_TO_LAST_USER'] [$iRow] = ''; - break; - } - $aFields ['action'] = 'savePattern'; - $aFields ['LANG'] = SYS_LANG; - $aFields ['PROCESS'] = $sProcessUID; - $aFields ['TASK'] = $sTaskUID; - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'patterns/patterns_Current', '', $aFields, '../patterns/patterns_Ajax'); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); } - } - /** - * getNumberOfRoutes - * - * @param string $sProcessUID Default value empty - * @param string $sTaskUID Default value empty - * @param string $sNextTask Default value empty - * @param string $sType Default value empty - * @return intenger ( int ) $aRow ['ROUTE_NUMBER'] - */ - function getNumberOfRoutes($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sNextTask); - $oCriteria->add(RoutePeer::ROU_TYPE, $sType); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - return (int) $aRow ['ROUTE_NUMBER']; - } catch (Exception $oError) { - throw ($oError); + /** + * getNumberOfRoutes + * + * @param string $sProcessUID Default value empty + * @param string $sTaskUID Default value empty + * @param string $sNextTask Default value empty + * @param string $sType Default value empty + * @return intenger ( int ) $aRow ['ROUTE_NUMBER'] + */ + public function getNumberOfRoutes ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS ROUTE_NUMBER' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + $oCriteria->add( RoutePeer::ROU_NEXT_TASK, $sNextTask ); + $oCriteria->add( RoutePeer::ROU_TYPE, $sType ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + return (int) $aRow['ROUTE_NUMBER']; + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * saveNewPattern - * - * @param string $sProcessUID Default value empty - * @param string $sTaskUID Default value empty - * @param string $sNextTask Default value empty - * @param string $sType Default value empty - * @param boolean $sDelete - * @return array void - */ - function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete='') { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); - $oCriteria->addSelectColumn('GAT_UID AS GATEWAY_UID'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->add(RoutePeer::ROU_TYPE, $sType); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $aFields ['PRO_UID'] = $sProcessUID; - $aFields ['TAS_UID'] = $sTaskUID; - $aFields ['ROU_NEXT_TASK'] = $sNextTask; - $aFields ['ROU_TYPE'] = $sType; - $aFields ['ROU_CASE'] = (int) $aRow ['ROUTE_NUMBER'] + 1; + /** + * saveNewPattern + * + * @param string $sProcessUID Default value empty + * @param string $sTaskUID Default value empty + * @param string $sNextTask Default value empty + * @param string $sType Default value empty + * @param boolean $sDelete + * @return array void + */ + public function saveNewPattern ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS ROUTE_NUMBER' ); + $oCriteria->addSelectColumn( 'GAT_UID AS GATEWAY_UID' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + $oCriteria->add( RoutePeer::ROU_TYPE, $sType ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + $aFields['PRO_UID'] = $sProcessUID; + $aFields['TAS_UID'] = $sTaskUID; + $aFields['ROU_NEXT_TASK'] = $sNextTask; + $aFields['ROU_TYPE'] = $sType; + $aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1; - $sGatewayUID = $aRow['GATEWAY_UID']; + $sGatewayUID = $aRow['GATEWAY_UID']; - if($sDelete && $sGatewayUID != ''){ - $oGateway = new Gateway ( ); - $oGateway->remove($sGatewayUID); - } - //Getting Gateway UID after saving gateway - //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') - if($sType != 'SEQUENTIAL') - { - $oProcessMap = new processMap(); - $sGatewayUID = $oProcessMap->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); - } + if ($sDelete && $sGatewayUID != '') { + $oGateway = new Gateway(); + $oGateway->remove( $sGatewayUID ); + } + //Getting Gateway UID after saving gateway + //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') + if ($sType != 'SEQUENTIAL') { + $oProcessMap = new processMap(); + $sGatewayUID = $oProcessMap->saveNewGateway( $sProcessUID, $sTaskUID, $sNextTask ); + } - $aFields ['GAT_UID'] = (isset($sGatewayUID))?$sGatewayUID:''; - $oRoute = new Route ( ); - $oRoute->create($aFields); - } catch (Exception $oError) { - throw ($oError); + $aFields['GAT_UID'] = (isset( $sGatewayUID )) ? $sGatewayUID : ''; + $oRoute = new Route(); + $oRoute->create( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * saveNewGateway - * - * @param string $sProcessUID Default value empty - * @param string $sTaskUID Default value empty - * @param string $sNextTask Default value empty - * @param string $sType Default value empty (Route Type) - * @return string $sGatewayUID - */ - function saveNewGateway($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') { - try { - $oTask = new Task(); - $aTaskDetails = $oTask->load($sTaskUID); - $aFields ['PRO_UID'] = $sProcessUID; - $aFields ['TAS_UID'] = $sTaskUID; - $aFields ['GAT_NEXT_TASK'] = $sNextTask; - $aFields ['GAT_X'] = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH']/2; - $aFields ['GAT_Y'] = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; + /** + * saveNewGateway + * + * @param string $sProcessUID Default value empty + * @param string $sTaskUID Default value empty + * @param string $sNextTask Default value empty + * @param string $sType Default value empty (Route Type) + * @return string $sGatewayUID + */ + public function saveNewGateway ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') + { + try { + $oTask = new Task(); + $aTaskDetails = $oTask->load( $sTaskUID ); + $aFields['PRO_UID'] = $sProcessUID; + $aFields['TAS_UID'] = $sTaskUID; + $aFields['GAT_NEXT_TASK'] = $sNextTask; + $aFields['GAT_X'] = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH'] / 2; + $aFields['GAT_Y'] = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; - switch($sType) - { - case 'PARALLEL': - $aFields ['GAT_TYPE'] = 'bpmnGatewayParallel'; - break; - case 'SEC-JOIN': - $aFields ['GAT_TYPE'] = 'bpmnGatewayParallel'; - break; - case 'EVALUATE': - $aFields ['GAT_TYPE'] = 'bpmnGatewayExclusiveData'; - break; - case 'PARALLEL-BY-EVALUATION': - $aFields ['GAT_TYPE'] = 'bpmnGatewayInclusive'; - break; - case 'SELECT': - $aFields ['GAT_TYPE'] = 'bpmnGatewayExclusiveData'; - break; - case 'DISCRIMINATOR': - $aFields ['GAT_TYPE'] = 'bpmnGatewayComplex'; - break; - } + switch ($sType) { + case 'PARALLEL': + $aFields['GAT_TYPE'] = 'bpmnGatewayParallel'; + break; + case 'SEC-JOIN': + $aFields['GAT_TYPE'] = 'bpmnGatewayParallel'; + break; + case 'EVALUATE': + $aFields['GAT_TYPE'] = 'bpmnGatewayExclusiveData'; + break; + case 'PARALLEL-BY-EVALUATION': + $aFields['GAT_TYPE'] = 'bpmnGatewayInclusive'; + break; + case 'SELECT': + $aFields['GAT_TYPE'] = 'bpmnGatewayExclusiveData'; + break; + case 'DISCRIMINATOR': + $aFields['GAT_TYPE'] = 'bpmnGatewayComplex'; + break; + } - $oGateway = new Gateway ( ); + $oGateway = new Gateway(); - $sGatewayUID = $oGateway->create($aFields); + $sGatewayUID = $oGateway->create( $aFields ); - return $sGatewayUID; + return $sGatewayUID; - } catch (Exception $oError) { - throw ($oError); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Delete a derivation rule * @param string $sTaskUID * @return boolean */ - function deleteDerivation($sTaskUID = '') { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - RoutePeer::doDelete($oCriteria); - return true; - return true; - } catch (Exception $oError) { - throw ($oError); + public function deleteDerivation ($sTaskUID = '') + { + try { + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + RoutePeer::doDelete( $oCriteria ); + return true; + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * getConditionProcessList - * - * @return object $oCriteria - */ - function getConditionProcessList() { - $aProcesses = array(); - $aProcesses [] = array('PRO_UID' => 'char', 'PRO_TITLE' => 'char', 'PRO_DESCRIPTION' => 'char', 'PRO_STATUS' => 'char', 'PRO_CATEGORY' => 'char', 'PRO_CATEGORY_LABEL' => 'char'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessPeer::PRO_UID); - $oCriteria->add(ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL); - $oDataset = ProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + /** + * getConditionProcessList + * + * @return object $oCriteria + */ + public function getConditionProcessList () + { + $aProcesses = array (); + $aProcesses[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','PRO_DESCRIPTION' => 'char','PRO_STATUS' => 'char','PRO_CATEGORY' => 'char','PRO_CATEGORY_LABEL' => 'char' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_UID ); + $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - - - $oDataset->next(); - $oProcess = new Process ( ); - while ($aRow = $oDataset->getRow()) { - $aProcess = $oProcess->load($aRow ['PRO_UID']); - $aProcesses [] = array('PRO_UID' => $aProcess ['PRO_UID'], 'PRO_TITLE' => $aProcess ['PRO_TITLE'], 'PRO_DESCRIPTION' => $aProcess ['PRO_DESCRIPTION'], 'PRO_STATUS' => ($aProcess ['PRO_STATUS'] == 'ACTIVE' ? G::LoadTranslation('ID_ACTIVE') : G::LoadTranslation('ID_INACTIVE')), 'PRO_CATEGORY' => $aProcess ['PRO_CATEGORY'], 'PRO_CATEGORY_LABEL' => $aProcess ['PRO_CATEGORY_LABEL']); - $oDataset->next(); + $oDataset->next(); + $oProcess = new Process(); + while ($aRow = $oDataset->getRow()) { + $aProcess = $oProcess->load( $aRow['PRO_UID'] ); + $aProcesses[] = array ('PRO_UID' => $aProcess['PRO_UID'],'PRO_TITLE' => $aProcess['PRO_TITLE'],'PRO_DESCRIPTION' => $aProcess['PRO_DESCRIPTION'],'PRO_STATUS' => ($aProcess['PRO_STATUS'] == 'ACTIVE' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' )),'PRO_CATEGORY' => $aProcess['PRO_CATEGORY'],'PRO_CATEGORY_LABEL' => $aProcess['PRO_CATEGORY_LABEL'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['processes'] = $aProcesses; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'processes' ); + return $oCriteria; } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['processes'] = $aProcesses; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('processes'); - return $oCriteria; - } - /* + /* * Show the dynaforms for the supervisors * @param string $sProcessUID * @return boolean */ - function supervisorDynaforms($sProcessUID) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/dynaforms_Supervisor', $this->getSupervisorDynaformsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function supervisorDynaforms ($sProcessUID) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_Supervisor', $this->getSupervisorDynaformsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * supervisorInputs - * - * @param string $sProcessUID - * @return boolean true - * throw Exception $oError - */ - function supervisorInputs($sProcessUID) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'inputdocs/inputdocs_Supervisor', $this->getSupervisorInputsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + /** + * supervisorInputs + * + * @param string $sProcessUID + * @return boolean true + * throw Exception $oError + */ + public function supervisorInputs ($sProcessUID) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_Supervisor', $this->getSupervisorInputsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * webEntry - * - * @param string $sProcessUID - * @return boolean true - * throw Exception $oError - */ - function webEntry($sProcessUID) { - try { - global $G_PUBLISH; - global $G_FORM; - $G_PUBLISH = new Publisher ( ); + /** + * webEntry + * + * @param string $sProcessUID + * @return boolean true + * throw Exception $oError + */ + public function webEntry ($sProcessUID) + { + try { + global $G_PUBLISH; + global $G_FORM; + $G_PUBLISH = new Publisher(); - if (G::is_https ()) - $http = 'https://'; - else - $http = 'http://'; + if (G::is_https()) + $http = 'https://'; + else + $http = 'http://'; - $link = $http . $_SERVER ['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sProcessUID . '/'; + $link = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sProcessUID . '/'; - $row = array(); - $c = 0; + $row = array (); + $c = 0; - /* + /* $oTask = new Task ( ); $TaskFields = $oTask->kgetassigType ( $sProcessUID , $tas=''); */ - $TaskFields ['TAS_ASSIGN_TYPE'] = ''; - $row [] = array('W_TITLE' => '', 'W_DELETE' => '', 'TAS_ASSIGN_TYPE' => $TaskFields ['TAS_ASSIGN_TYPE']); + $TaskFields['TAS_ASSIGN_TYPE'] = ''; + $row[] = array ('W_TITLE' => '','W_DELETE' => '','TAS_ASSIGN_TYPE' => $TaskFields['TAS_ASSIGN_TYPE'] + ); - if (is_dir(PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID)) { - $dir = opendir(PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID); - while ($archivo = readdir($dir)) { //print $archivo." ****
"; - if ($archivo != '.') { - if ($archivo != '..') { - $one = 0; - $two = 0; + if (is_dir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID )) { + $dir = opendir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID ); + while ($archivo = readdir( $dir )) { //print $archivo." ****
"; + if ($archivo != '.') { + if ($archivo != '..') { + $one = 0; + $two = 0; - $alink = $link . $archivo; + $alink = $link . $archivo; - $one = count(explode('wsClient.php', $archivo)); - $two = count(explode('Post.php', $archivo)); + $one = count( explode( 'wsClient.php', $archivo ) ); + $two = count( explode( 'Post.php', $archivo ) ); - if ($one == 1 && $two == 1) { - $arlink = "" . $alink . ""; - $linkdelete = sprintf("delete", $alink, $archivo, $sProcessUID); - $row [] = array('W_LINK' => $arlink, 'W_FILENAME' => $archivo, 'W_PRO_UID' => $sProcessUID); - } + if ($one == 1 && $two == 1) { + $arlink = "" . $alink . ""; + $linkdelete = sprintf( "delete", $alink, $archivo, $sProcessUID ); + $row[] = array ('W_LINK' => $arlink,'W_FILENAME' => $archivo,'W_PRO_UID' => $sProcessUID + ); + } + } + } + } } - } - } - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['reports'] = $row; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); - //if ($TaskFields['TAS_ASSIGN_TYPE'] == 'BALANCED') { - //$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array('PRO_UID' => $sProcessUID, 'LANG' => SYS_LANG)); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/dynaforms_WebEntryList', $oCriteria, array('PRO_UID' => $sProcessUID, 'LANG' => SYS_LANG)); - /* }else{ + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['reports'] = $row; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); + //if ($TaskFields['TAS_ASSIGN_TYPE'] == 'BALANCED') { + //$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array('PRO_UID' => $sProcessUID, 'LANG' => SYS_LANG)); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_WebEntryList', $oCriteria, array ('PRO_UID' => $sProcessUID,'LANG' => SYS_LANG + ) ); + /* }else{ $aMessage['MESSAGE'] = G::loadTranslation( 'WEBEN_ONLY_BALANCED' ); $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'login/showMessage', '',$aMessage ); } */ - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * webEntry_new - * - * @param string $sProcessUID - * @return boolean true - * throw Exception $oError - */ - function webEntry_new($sProcessUID) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array('PRO_UID' => $sProcessUID, 'LANG' => SYS_LANG)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + /** + * webEntry_new + * + * @param string $sProcessUID + * @return boolean true + * throw Exception $oError + */ + public function webEntry_new ($sProcessUID) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array ('PRO_UID' => $sProcessUID,'LANG' => SYS_LANG + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } -/** - * webEntryByTask - * - * @param string $sProcessUID - * @return boolean true - * throw Exception $oError - */ -// function webEntryByTask($sProcessUID, $sEventUID) { -// $event = new Event(); -// $event->load($sEventUID); -// $task_uid = $event->getEvnTasUidTo(); -// $tasks = new Tasks(); -// $tasks->get -// $link = $sProcessUID.'/'.str_replace ( ' ', '_', str_replace ( '/', '_',$task_uid)); -// -// return $link; -// } + /** + * webEntryByTask + * + * @param string $sProcessUID + * @return boolean true + * throw Exception $oError + */ + // function webEntryByTask($sProcessUID, $sEventUID) { + // $event = new Event(); + // $event->load($sEventUID); + // $task_uid = $event->getEvnTasUidTo(); + // $tasks = new Tasks(); + // $tasks->get + // $link = $sProcessUID.'/'.str_replace ( ' ', '_', str_replace ( '/', '_',$task_uid)); + // + // return $link; + // } - /* + + /* * Return the supervisors dynaforms list criteria object * @param string $sProcessUID * @return object */ - function getSupervisorDynaformsCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::PRO_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_TYPE_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(StepSupervisorPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID); - $aConditions [] = array(StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'DYNAFORM' . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); - $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM'); - $oCriteria->addAscendingOrderByColumn(StepSupervisorPeer::STEP_POSITION); - return $oCriteria; - } + public function getSupervisorDynaformsCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::PRO_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_TYPE_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_POSITION ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,DynaformPeer::DYN_UID + ); + $aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'DYNAFORM' . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); + $oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION ); + return $oCriteria; + } - /* + /* * Return the supervisors dynaforms list criteria object * @param string $sProcessUID * @return object */ - function getSupervisorInputsCriteria($sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::PRO_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_TYPE_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(StepSupervisorPeer::STEP_UID_OBJ, InputDocumentPeer::INP_DOC_UID); - $aConditions [] = array(StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); - $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT'); - $oCriteria->addAscendingOrderByColumn(StepSupervisorPeer::STEP_POSITION); - return $oCriteria; - } + public function getSupervisorInputsCriteria ($sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::PRO_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_TYPE_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_POSITION ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,InputDocumentPeer::INP_DOC_UID + ); + $aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT' ); + $oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION ); + return $oCriteria; + } - /* + /* * Show the available dynaforms for the supervisors * @param string $sProcessUID * @return boolean */ - function availableSupervisorDynaforms($sProcessUID) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/dynaforms_AvailableSupervisorDynaforms', $this->getAvailableSupervisorDynaformsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function availableSupervisorDynaforms ($sProcessUID) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_AvailableSupervisorDynaforms', $this->getAvailableSupervisorDynaformsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Show the available input documents for the supervisors * @param string $sProcessUID * @return boolean */ - function availableSupervisorInputs($sProcessUID) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'inputdocs/inputdocs_AvailableSupervisorInputs', $this->getAvailableSupervisorInputsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + public function availableSupervisorInputs ($sProcessUID) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_AvailableSupervisorInputs', $this->getAvailableSupervisorInputsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Return the available supervisors dynaforms list criteria object * @param string $sProcessUID * @return object */ - function getAvailableSupervisorDynaformsCriteria($sProcessUID = '') { - $oCriteria = $this->getSupervisorDynaformsCriteria($sProcessUID); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['STEP_UID_OBJ']; - $oDataset->next(); + public function getAvailableSupervisorDynaformsCriteria ($sProcessUID = '') + { + $oCriteria = $this->getSupervisorDynaformsCriteria( $sProcessUID ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['STEP_UID_OBJ']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addSelectColumn( DynaformPeer::PRO_UID ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oCriteria->add( DynaformPeer::DYN_UID, $aUIDS, Criteria::NOT_IN ); + return $oCriteria; } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addSelectColumn(DynaformPeer::PRO_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oCriteria->add(DynaformPeer::DYN_UID, $aUIDS, Criteria::NOT_IN); - return $oCriteria; - } - /* + /* * Return the available supervisors input documents list criteria object * @param string $sProcessUID * @return object */ - function getAvailableSupervisorInputsCriteria($sProcessUID = '') { - $oCriteria = $this->getSupervisorInputsCriteria($sProcessUID); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['STEP_UID_OBJ']; - $oDataset->next(); + public function getAvailableSupervisorInputsCriteria ($sProcessUID = '') + { + $oCriteria = $this->getSupervisorInputsCriteria( $sProcessUID ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['STEP_UID_OBJ']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $aUIDS, Criteria::NOT_IN ); + return $oCriteria; } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addSelectColumn(InputDocumentPeer::PRO_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $aUIDS, Criteria::NOT_IN); - return $oCriteria; - } - /** - * assignSupervisorStep - * - * @param string $sProcessUID - * @param string $sObjType - * @param string $sObjUID - * @return void - */ - function assignSupervisorStep($sProcessUID, $sObjType, $sObjUID) { - $oStepSupervisor = new StepSupervisor ( ); - $oStepSupervisor->create(array('PRO_UID' => $sProcessUID, 'STEP_TYPE_OBJ' => $sObjType, 'STEP_UID_OBJ' => $sObjUID, 'STEP_POSITION' => $oStepSupervisor->getNextPosition($sProcessUID, $sObjType))); - } - - /** - * removeSupervisorStep - * - * @param string $sStepUID - * @param string $sProcessUID - * @param string $sObjType - * @param string $sObjUID - * @param integer $iPosition - * @return void - */ - function removeSupervisorStep($sStepUID, $sProcessUID, $sObjType, $sObjUID, $iPosition) { - $oStepSupervisor = new StepSupervisor ( ); - $oStepSupervisor->remove($sStepUID); - $oStepSupervisor->reorderPositions($sProcessUID, $iPosition, $sObjType); - } - - /** - * listProcessesUser - * - * @param string $sProcessUID - * @return object(Criteria) $oCriteria - */ - function listProcessesUser($sProcessUID) { - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessUserPeer::PU_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::USR_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::PU_TYPE); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addJoin(ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); - return $oCriteria; - } - - /** - * listNoProcessesUser - * - * @param string $sProcessUID - * @return object(Criteria) $oCriteria - */ - function listNoProcessesUser($sProcessUID) { - G::LoadSystem('rbac'); - $memcache = & PMmemcached::getSingleton(SYS_SYS); - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessUserPeer::USR_UID); - $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); - $oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR'); - $oDataset = ProcessUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['USR_UID']; - $oDataset->next(); + /** + * assignSupervisorStep + * + * @param string $sProcessUID + * @param string $sObjType + * @param string $sObjUID + * @return void + */ + public function assignSupervisorStep ($sProcessUID, $sObjType, $sObjUID) + { + $oStepSupervisor = new StepSupervisor(); + $oStepSupervisor->create( array ('PRO_UID' => $sProcessUID,'STEP_TYPE_OBJ' => $sObjType,'STEP_UID_OBJ' => $sObjUID,'STEP_POSITION' => $oStepSupervisor->getNextPosition( $sProcessUID, $sObjType ) + ) ); } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - $oRBAC = RBAC::getSingleton (); - while ($aRow = $oDataset->getRow()) { - $memKey = 'rbacSession' . session_id(); - if ( ($oRBAC->aUserInfo = $memcache->get($memKey)) === false ) { - $oRBAC->loadUserRolePermission($oRBAC->sSystem, $aRow ['USR_UID']); - $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); - } - $aPermissions = $oRBAC->aUserInfo [$oRBAC->sSystem] ['PERMISSIONS']; - $bInclude = false; - foreach ($aPermissions as $aPermission) { - if ($aPermission ['PER_CODE'] == 'PM_SUPERVISOR') { - $bInclude = true; - } - } - if ($bInclude) { - $aUIDS [] = $aRow ['USR_UID']; - } - $oDataset->next(); + + /** + * removeSupervisorStep + * + * @param string $sStepUID + * @param string $sProcessUID + * @param string $sObjType + * @param string $sObjUID + * @param integer $iPosition + * @return void + */ + public function removeSupervisorStep ($sStepUID, $sProcessUID, $sObjType, $sObjUID, $iPosition) + { + $oStepSupervisor = new StepSupervisor(); + $oStepSupervisor->remove( $sStepUID ); + $oStepSupervisor->reorderPositions( $sProcessUID, $iPosition, $sObjType ); } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::IN); - return $oCriteria; - } - /** - * assignProcessUser - * - * @param string $sProcessUID - * @param string $sUsrUID - * @return void - */ - function assignProcessUser($sProcessUID, $sUsrUID) { - $oProcessUser = new ProcessUser ( ); - $oProcessUser->create(array('PU_UID' => G::generateUniqueID (), 'PRO_UID' => $sProcessUID, 'USR_UID' => $sUsrUID, 'PU_TYPE' => 'SUPERVISOR')); - } + /** + * listProcessesUser + * + * @param string $sProcessUID + * @return object(Criteria) $oCriteria + */ + public function listProcessesUser ($sProcessUID) + { - /** - * removeProcessUser - * - * @param string $sPUUID - * @return void - */ - function removeProcessUser($sPUUID) { - $oProcessUser = new ProcessUser ( ); - $oProcessUser->remove($sPUUID); - } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessUserPeer::PU_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::USR_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::PRO_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::PU_TYPE ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_EMAIL ); + $oCriteria->addJoin( ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); + return $oCriteria; + } - /** - * getObjectsPermissionsCriteria - * - * @param string $sProcessUID - * @return object(Criteria) $oCriteria - */ - function getObjectsPermissionsCriteria($sProcessUID) { - G::LoadClass('case'); - Cases::verifyTable (); - $aObjectsPermissions = array(); - $aObjectsPermissions [] = array('OP_UID' => 'char', 'TASK_TARGET' => 'char', 'GROUP_USER' => 'char', 'TASK_SOURCE' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT' => 'char', 'PARTICIPATED' => 'char', 'ACTION' => 'char', 'OP_CASE_STATUS' => 'char'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::TAS_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::USR_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_USER_RELATION); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_TASK_SOURCE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_PARTICIPATE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_TYPE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_ACTION); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_CASE_STATUS); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - //Obtain task target - if (($aRow ['TAS_UID'] != '') && ($aRow ['TAS_UID'] != '0')) { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($aRow ['TAS_UID']); - $sTaskTarget = $aFields ['TAS_TITLE']; - } catch (Exception $oError) { - $sTaskTarget = 'All Tasks'; + /** + * listNoProcessesUser + * + * @param string $sProcessUID + * @return object(Criteria) $oCriteria + */ + public function listNoProcessesUser ($sProcessUID) + { + G::LoadSystem( 'rbac' ); + $memcache = & PMmemcached::getSingleton( SYS_SYS ); + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessUserPeer::USR_UID ); + $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( ProcessUserPeer::PU_TYPE, 'SUPERVISOR' ); + $oDataset = ProcessUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['USR_UID']; + $oDataset->next(); } - } else { - $sTaskTarget = G::LoadTranslation('ID_ANY_TASK'); - } - //Obtain user or group - if ($aRow ['OP_USER_RELATION'] == 1) { - $oUser = new Users ( ); - $aFields = $oUser->load($aRow ['USR_UID']); - $sUserGroup = $aFields ['USR_FIRSTNAME'] . ' ' . $aFields ['USR_LASTNAME'] . ' (' . $aFields ['USR_USERNAME'] . ')'; - } else { - $oGroup = new Groupwf ( ); - if ($aRow ['USR_UID'] != '') { - try { - $aFields = $oGroup->load($aRow ['USR_UID']); - $sUserGroup = $aFields ['GRP_TITLE']; - } catch (Exception $oError) { - $sUserGroup = '(GROUP DELETED)'; - } - } else { - $sUserGroup = G::LoadTranslation('ID_ANY'); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + $oRBAC = RBAC::getSingleton(); + while ($aRow = $oDataset->getRow()) { + $memKey = 'rbacSession' . session_id(); + if (($oRBAC->aUserInfo = $memcache->get( $memKey )) === false) { + $oRBAC->loadUserRolePermission( $oRBAC->sSystem, $aRow['USR_UID'] ); + $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); + } + $aPermissions = $oRBAC->aUserInfo[$oRBAC->sSystem]['PERMISSIONS']; + $bInclude = false; + foreach ($aPermissions as $aPermission) { + if ($aPermission['PER_CODE'] == 'PM_SUPERVISOR') { + $bInclude = true; + } + } + if ($bInclude) { + $aUIDS[] = $aRow['USR_UID']; + } + $oDataset->next(); } - } - //Obtain task source - if (($aRow ['OP_TASK_SOURCE'] != '') && ($aRow ['OP_TASK_SOURCE'] != '0')) { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($aRow ['OP_TASK_SOURCE']); - $sTaskSource = $aFields ['TAS_TITLE']; - } catch (Exception $oError) { - $sTaskSource = 'All Tasks'; - } - } else { - $sTaskSource = G::LoadTranslation('ID_ANY_TASK'); - } - //Obtain object and type - switch ($aRow ['OP_OBJ_TYPE']) { - case 'ALL' : - $sObjectType = G::LoadTranslation('ID_ALL'); - $sObject = G::LoadTranslation('ID_ALL'); - break; - case 'ANY' ://For backward compatibility (some process with ANY instead of ALL - $sObjectType = G::LoadTranslation('ID_ALL'); - $sObject = G::LoadTranslation('ID_ALL'); - break; - /* case 'ANY_DYNAFORM': + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::IN ); + return $oCriteria; + } + + /** + * assignProcessUser + * + * @param string $sProcessUID + * @param string $sUsrUID + * @return void + */ + public function assignProcessUser ($sProcessUID, $sUsrUID) + { + $oProcessUser = new ProcessUser(); + $oProcessUser->create( array ('PU_UID' => G::generateUniqueID(),'PRO_UID' => $sProcessUID,'USR_UID' => $sUsrUID,'PU_TYPE' => 'SUPERVISOR' + ) ); + } + + /** + * removeProcessUser + * + * @param string $sPUUID + * @return void + */ + public function removeProcessUser ($sPUUID) + { + $oProcessUser = new ProcessUser(); + $oProcessUser->remove( $sPUUID ); + } + + /** + * getObjectsPermissionsCriteria + * + * @param string $sProcessUID + * @return object(Criteria) $oCriteria + */ + public function getObjectsPermissionsCriteria ($sProcessUID) + { + G::LoadClass( 'case' ); + Cases::verifyTable(); + $aObjectsPermissions = array (); + $aObjectsPermissions[] = array ('OP_UID' => 'char','TASK_TARGET' => 'char','GROUP_USER' => 'char','TASK_SOURCE' => 'char','OBJECT_TYPE' => 'char','OBJECT' => 'char','PARTICIPATED' => 'char','ACTION' => 'char','OP_CASE_STATUS' => 'char' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::TAS_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::USR_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_USER_RELATION ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_TASK_SOURCE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_PARTICIPATE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_TYPE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_ACTION ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_CASE_STATUS ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //Obtain task target + if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) { + try { + $oTask = new Task(); + $aFields = $oTask->load( $aRow['TAS_UID'] ); + $sTaskTarget = $aFields['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskTarget = 'All Tasks'; + } + } else { + $sTaskTarget = G::LoadTranslation( 'ID_ANY_TASK' ); + } + //Obtain user or group + if ($aRow['OP_USER_RELATION'] == 1) { + $oUser = new Users(); + $aFields = $oUser->load( $aRow['USR_UID'] ); + $sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')'; + } else { + $oGroup = new Groupwf(); + if ($aRow['USR_UID'] != '') { + try { + $aFields = $oGroup->load( $aRow['USR_UID'] ); + $sUserGroup = $aFields['GRP_TITLE']; + } catch (Exception $oError) { + $sUserGroup = '(GROUP DELETED)'; + } + } else { + $sUserGroup = G::LoadTranslation( 'ID_ANY' ); + } + } + //Obtain task source + if (($aRow['OP_TASK_SOURCE'] != '') && ($aRow['OP_TASK_SOURCE'] != '0')) { + try { + $oTask = new Task(); + $aFields = $oTask->load( $aRow['OP_TASK_SOURCE'] ); + $sTaskSource = $aFields['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskSource = 'All Tasks'; + } + } else { + $sTaskSource = G::LoadTranslation( 'ID_ANY_TASK' ); + } + //Obtain object and type + switch ($aRow['OP_OBJ_TYPE']) { + case 'ALL': + $sObjectType = G::LoadTranslation( 'ID_ALL' ); + $sObject = G::LoadTranslation( 'ID_ALL' ); + break; + case 'ANY': //For backward compatibility (some process with ANY instead of ALL + $sObjectType = G::LoadTranslation( 'ID_ALL' ); + $sObject = G::LoadTranslation( 'ID_ALL' ); + break; + /* case 'ANY_DYNAFORM': $sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM'); $sObject = G::LoadTranslation('ID_ALL'); break; @@ -3334,3587 +3507,3883 @@ class processMap { $sObjectType = G::LoadTranslation('ID_ANY_OUTPUT'); $sObject = G::LoadTranslation('ID_ALL'); break; */ - case 'DYNAFORM' : - $sObjectType = G::LoadTranslation('ID_DYNAFORM'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['DYN_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - case 'INPUT' : - $sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oInputDocument = new InputDocument ( ); - $aFields = $oInputDocument->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['INP_DOC_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - case 'OUTPUT' : - $sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oOutputDocument = new OutputDocument ( ); - $aFields = $oOutputDocument->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['OUT_DOC_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - default : - $sObjectType = G::LoadTranslation('ID_ALL'); - $sObject = G::LoadTranslation('ID_ALL'); - break; - } - //Participated - if ($aRow ['OP_PARTICIPATE'] == 0) { - $sParticipated = G::LoadTranslation('ID_NO'); - } else { - $sParticipated = G::LoadTranslation('ID_YES'); - } - //Obtain action (permission) - $sAction = G::LoadTranslation('ID_' . $aRow ['OP_ACTION']); - //Add to array - $aObjectsPermissions [] = array('OP_UID' => $aRow ['OP_UID'], 'TASK_TARGET' => $sTaskTarget, 'GROUP_USER' => $sUserGroup, 'TASK_SOURCE' => $sTaskSource, 'OBJECT_TYPE' => $sObjectType, 'OBJECT' => $sObject, 'PARTICIPATED' => $sParticipated, 'ACTION' => $sAction, 'OP_CASE_STATUS' => $aRow ['OP_CASE_STATUS']); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['objectsPermissions'] = $aObjectsPermissions; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('objectsPermissions'); - return $oCriteria; - } - - //new functions - function getAllObjectPermissionCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = ObjectPermissionPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - function getExtObjectsPermissions($start, $limit,$sProcessUID) { - G::LoadClass('case'); - Cases::verifyTable (); - $aObjectsPermissions = array(); - //$aObjectsPermissions [] = array('OP_UID' => 'char', 'TASK_TARGET' => 'char', 'GROUP_USER' => 'char', 'TASK_SOURCE' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT' => 'char', 'PARTICIPATED' => 'char', 'ACTION' => 'char', 'OP_CASE_STATUS' => 'char'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::TAS_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::USR_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_USER_RELATION); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_TASK_SOURCE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_PARTICIPATE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_TYPE); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_UID); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_ACTION); - $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_CASE_STATUS); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - //Obtain task target - if (($aRow ['TAS_UID'] != '') && ($aRow ['TAS_UID'] != '0')) { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($aRow ['TAS_UID']); - $sTaskTarget = $aFields ['TAS_TITLE']; - } catch (Exception $oError) { - $sTaskTarget = 'All Tasks'; + case 'DYNAFORM': + $sObjectType = G::LoadTranslation( 'ID_DYNAFORM' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['DYN_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + case 'INPUT': + $sObjectType = G::LoadTranslation( 'ID_INPUT_DOCUMENT' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['INP_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + case 'OUTPUT': + $sObjectType = G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['OUT_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + default: + $sObjectType = G::LoadTranslation( 'ID_ALL' ); + $sObject = G::LoadTranslation( 'ID_ALL' ); + break; + } + //Participated + if ($aRow['OP_PARTICIPATE'] == 0) { + $sParticipated = G::LoadTranslation( 'ID_NO' ); + } else { + $sParticipated = G::LoadTranslation( 'ID_YES' ); + } + //Obtain action (permission) + $sAction = G::LoadTranslation( 'ID_' . $aRow['OP_ACTION'] ); + //Add to array + $aObjectsPermissions[] = array ('OP_UID' => $aRow['OP_UID'],'TASK_TARGET' => $sTaskTarget,'GROUP_USER' => $sUserGroup,'TASK_SOURCE' => $sTaskSource,'OBJECT_TYPE' => $sObjectType,'OBJECT' => $sObject,'PARTICIPATED' => $sParticipated,'ACTION' => $sAction,'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS'] + ); + $oDataset->next(); } - } else { - $sTaskTarget = G::LoadTranslation('ID_ANY_TASK'); - } - //Obtain user or group - if ($aRow ['OP_USER_RELATION'] == 1) { - $oUser = new Users ( ); - $aFields = $oUser->load($aRow ['USR_UID']); - $sUserGroup = $aFields ['USR_FIRSTNAME'] . ' ' . $aFields ['USR_LASTNAME'] . ' (' . $aFields ['USR_USERNAME'] . ')'; - } else { - $oGroup = new Groupwf ( ); - if ($aRow ['USR_UID'] != '') { - try { - $aFields = $oGroup->load($aRow ['USR_UID']); - $sUserGroup = $aFields ['GRP_TITLE']; - } catch (Exception $oError) { - $sUserGroup = '(GROUP DELETED)'; - } - } else { - $sUserGroup = G::LoadTranslation('ID_ANY'); - } - } - //Obtain task source - if (($aRow ['OP_TASK_SOURCE'] != '') && ($aRow ['OP_TASK_SOURCE'] != '0')) { - try { - $oTask = new Task ( ); - $aFields = $oTask->load($aRow ['OP_TASK_SOURCE']); - $sTaskSource = $aFields ['TAS_TITLE']; - } catch (Exception $oError) { - $sTaskSource = 'All Tasks'; - } - } else { - $sTaskSource = G::LoadTranslation('ID_ANY_TASK'); - } - //Obtain object and type - switch ($aRow ['OP_OBJ_TYPE']) { - case 'ALL' : - $sObjectType = G::LoadTranslation('ID_ALL'); - $sObject = G::LoadTranslation('ID_ALL'); - break; - case 'DYNAFORM' : - $sObjectType = G::LoadTranslation('ID_DYNAFORM'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['DYN_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - case 'INPUT' : - $sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oInputDocument = new InputDocument ( ); - $aFields = $oInputDocument->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['INP_DOC_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - case 'OUTPUT' : - $sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT'); - if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { - $oOutputDocument = new OutputDocument ( ); - $aFields = $oOutputDocument->load($aRow ['OP_OBJ_UID']); - $sObject = $aFields ['OUT_DOC_TITLE']; - } else { - $sObject = G::LoadTranslation('ID_ALL'); - } - break; - } - //Participated - if ($aRow ['OP_PARTICIPATE'] == 0) { - $sParticipated = G::LoadTranslation('ID_NO'); - } else { - $sParticipated = G::LoadTranslation('ID_YES'); - } - //Obtain action (permission) - $sAction = G::LoadTranslation('ID_' . $aRow ['OP_ACTION']); - //Add to array - $aObjectsPermissions [] = array('OP_UID' => $aRow ['OP_UID'], 'TASK_TARGET' => $sTaskTarget, 'GROUP_USER' => $sUserGroup, 'TASK_SOURCE' => $sTaskSource, 'OBJECT_TYPE' => $sObjectType, 'OBJECT' => $sObject, 'PARTICIPATED' => $sParticipated, 'ACTION' => $sAction, 'OP_CASE_STATUS' => $aRow ['OP_CASE_STATUS']); - $oDataset->next(); + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['objectsPermissions'] = $aObjectsPermissions; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'objectsPermissions' ); + return $oCriteria; } - return $aObjectsPermissions; - } - /** - * objectsPermissionsList - * - * @param string $sProcessUID - * @return boolean true - */ - function objectsPermissionsList($sProcessUID) { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'processes/processes_ObjectsPermissionsList', $this->getObjectsPermissionsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } - - /** - * newObjectPermission - * - * @param string $sProcessUID - * @return boolean true - */ - function newObjectPermission($sProcessUID) { - $usersGroups = ''; - $aAllObjects = array(); - $aAllObjects [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllDynaforms = array(); - $aAllDynaforms [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllInputs = array(); - $aAllInputs [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllOutputs = array(); - $aAllOutputs [] = array('UID' => 'char', 'LABEL' => 'char'); - $oCriteria = $this->getDynaformsCriteria($sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'XMLFORM'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRow ['DYN_TITLE'] = (isset($aRow ['DYN_TITLE'])) ? $aRow ['DYN_TITLE'] : ''; - $aAllObjects [] = array('UID' => 'DYNAFORM|' . $aRow ['DYN_UID'], - 'LABEL' => $aRow ['DYN_TITLE'] . ' (' . G::LoadTranslation('ID_DYNAFORM') . ')'); - $aAllDynaforms [] = array('UID' => $aRow ['DYN_UID'], - 'LABEL' => $aRow ['DYN_TITLE']); - $oDataset->next(); + + public function getExtObjectsPermissions ($start, $limit, $sProcessUID) + { + G::LoadClass( 'case' ); + Cases::verifyTable(); + $aObjectsPermissions = array (); + //$aObjectsPermissions [] = array('OP_UID' => 'char', 'TASK_TARGET' => 'char', 'GROUP_USER' => 'char', 'TASK_SOURCE' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT' => 'char', 'PARTICIPATED' => 'char', 'ACTION' => 'char', 'OP_CASE_STATUS' => 'char'); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::TAS_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::USR_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_USER_RELATION ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_TASK_SOURCE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_PARTICIPATE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_TYPE ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_UID ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_ACTION ); + $oCriteria->addSelectColumn( ObjectPermissionPeer::OP_CASE_STATUS ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') + $oCriteria->setOffset( $start ); + if ($limit != '') + $oCriteria->setLimit( $limit ); + + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //Obtain task target + if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) { + try { + $oTask = new Task(); + $aFields = $oTask->load( $aRow['TAS_UID'] ); + $sTaskTarget = $aFields['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskTarget = 'All Tasks'; + } + } else { + $sTaskTarget = G::LoadTranslation( 'ID_ANY_TASK' ); + } + //Obtain user or group + if ($aRow['OP_USER_RELATION'] == 1) { + $oUser = new Users(); + $aFields = $oUser->load( $aRow['USR_UID'] ); + $sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')'; + } else { + $oGroup = new Groupwf(); + if ($aRow['USR_UID'] != '') { + try { + $aFields = $oGroup->load( $aRow['USR_UID'] ); + $sUserGroup = $aFields['GRP_TITLE']; + } catch (Exception $oError) { + $sUserGroup = '(GROUP DELETED)'; + } + } else { + $sUserGroup = G::LoadTranslation( 'ID_ANY' ); + } + } + //Obtain task source + if (($aRow['OP_TASK_SOURCE'] != '') && ($aRow['OP_TASK_SOURCE'] != '0')) { + try { + $oTask = new Task(); + $aFields = $oTask->load( $aRow['OP_TASK_SOURCE'] ); + $sTaskSource = $aFields['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskSource = 'All Tasks'; + } + } else { + $sTaskSource = G::LoadTranslation( 'ID_ANY_TASK' ); + } + //Obtain object and type + switch ($aRow['OP_OBJ_TYPE']) { + case 'ALL': + $sObjectType = G::LoadTranslation( 'ID_ALL' ); + $sObject = G::LoadTranslation( 'ID_ALL' ); + break; + case 'DYNAFORM': + $sObjectType = G::LoadTranslation( 'ID_DYNAFORM' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['DYN_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + case 'INPUT': + $sObjectType = G::LoadTranslation( 'ID_INPUT_DOCUMENT' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['INP_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + case 'OUTPUT': + $sObjectType = G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ); + if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) { + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->load( $aRow['OP_OBJ_UID'] ); + $sObject = $aFields['OUT_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation( 'ID_ALL' ); + } + break; + } + //Participated + if ($aRow['OP_PARTICIPATE'] == 0) { + $sParticipated = G::LoadTranslation( 'ID_NO' ); + } else { + $sParticipated = G::LoadTranslation( 'ID_YES' ); + } + //Obtain action (permission) + $sAction = G::LoadTranslation( 'ID_' . $aRow['OP_ACTION'] ); + //Add to array + $aObjectsPermissions[] = array ('OP_UID' => $aRow['OP_UID'],'TASK_TARGET' => $sTaskTarget,'GROUP_USER' => $sUserGroup,'TASK_SOURCE' => $sTaskSource,'OBJECT_TYPE' => $sObjectType,'OBJECT' => $sObject,'PARTICIPATED' => $sParticipated,'ACTION' => $sAction,'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS'] + ); + $oDataset->next(); + } + return $aObjectsPermissions; } - G::LoadClass('ArrayPeer'); - $oDataset = ArrayBasePeer::doSelectRS($this->getInputDocumentsCriteria($sProcessUID)); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAllObjects [] = array('UID' => 'INPUT_DOCUMENT|' . $aRow ['INP_DOC_UID'], - 'LABEL' => $aRow ['INP_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_INPUT_DOCUMENT') . ')'); - $aAllInputs [] = array('UID' => $aRow ['INP_DOC_UID'], - 'LABEL' => $aRow ['INP_DOC_TITLE']); - $oDataset->next(); + + /** + * objectsPermissionsList + * + * @param string $sProcessUID + * @return boolean true + */ + public function objectsPermissionsList ($sProcessUID) + { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'processes/processes_ObjectsPermissionsList', $this->getObjectsPermissionsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; } - G::LoadClass('ArrayPeer'); - $oDataset = ArrayBasePeer::doSelectRS($this->getOutputDocumentsCriteria($sProcessUID)); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAllObjects [] = array('UID' => 'OUTPUT_DOCUMENT|' . $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_OUTPUT_DOCUMENT') . ')'); - $aAllOutputs [] = array('UID' => $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE']); - $oDataset->next(); + + /** + * newObjectPermission + * + * @param string $sProcessUID + * @return boolean true + */ + public function newObjectPermission ($sProcessUID) + { + $usersGroups = ''; + $aAllObjects = array (); + $aAllObjects[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllDynaforms = array (); + $aAllDynaforms[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllInputs = array (); + $aAllInputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllOutputs = array (); + $aAllOutputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + $oCriteria = $this->getDynaformsCriteria( $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'XMLFORM' ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRow['DYN_TITLE'] = (isset( $aRow['DYN_TITLE'] )) ? $aRow['DYN_TITLE'] : ''; + $aAllObjects[] = array ('UID' => 'DYNAFORM|' . $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] . ' (' . G::LoadTranslation( 'ID_DYNAFORM' ) . ')' + ); + $aAllDynaforms[] = array ('UID' => $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] + ); + $oDataset->next(); + } + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getInputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'INPUT_DOCUMENT|' . $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_INPUT_DOCUMENT' ) . ')' + ); + $aAllInputs[] = array ('UID' => $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] + ); + $oDataset->next(); + } + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getOutputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'OUTPUT_DOCUMENT|' . $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ) . ')' + ); + $aAllOutputs[] = array ('UID' => $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['allObjects'] = $aAllObjects; + $_DBArray['allDynaforms'] = $aAllDynaforms; + $_DBArray['allInputs'] = $aAllInputs; + $_DBArray['allOutputs'] = $aAllOutputs; + $_SESSION['_DBArray'] = $_DBArray; + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_NewObjectPermission', '', array ('GROUP_USER' => $usersGroups,'LANG' => SYS_LANG,'PRO_UID' => $sProcessUID,'ID_DELETE' => G::LoadTranslation( 'ID_DELETE' ) + ), 'processes_SaveObjectPermission' ); + G::RenderPage( 'publish', 'raw' ); + return true; } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['allObjects'] = $aAllObjects; - $_DBArray ['allDynaforms'] = $aAllDynaforms; - $_DBArray ['allInputs'] = $aAllInputs; - $_DBArray ['allOutputs'] = $aAllOutputs; - $_SESSION ['_DBArray'] = $_DBArray; - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'processes/processes_NewObjectPermission', '', array('GROUP_USER' => $usersGroups, 'LANG' => SYS_LANG, 'PRO_UID' => $sProcessUID, 'ID_DELETE' => G::LoadTranslation('ID_DELETE')), 'processes_SaveObjectPermission'); - G::RenderPage('publish', 'raw'); - return true; - } - /** - * editObjectPermission - * - * @param string $sOP_UID - * @param string $sProcessUID - * @return void - */ - function editObjectPermission($sOP_UID, $sProcessUID) { + /** + * editObjectPermission + * + * @param string $sOP_UID + * @param string $sProcessUID + * @return void + */ + public function editObjectPermission ($sOP_UID, $sProcessUID) + { - $oCriteria = new Criteria ( ); - $oCriteria->add(ObjectPermissionPeer::OP_UID, $sOP_UID); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRows = $oDataset->getRow(); + $oCriteria = new Criteria(); + $oCriteria->add( ObjectPermissionPeer::OP_UID, $sOP_UID ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRows = $oDataset->getRow(); - $oCriteria = new Criteria ( ); - $oCriteria->add(GroupwfPeer::GRP_UID, $aRows ['USR_UID']); - if (GroupwfPeer::doCount($oCriteria) == 1) - $user = '2|' . $aRows ['USR_UID']; + $oCriteria = new Criteria(); + $oCriteria->add( GroupwfPeer::GRP_UID, $aRows['USR_UID'] ); + if (GroupwfPeer::doCount( $oCriteria ) == 1) + $user = '2|' . $aRows['USR_UID']; - $oCriteria = new Criteria ( ); - $oCriteria->add(UsersPeer::USR_UID, $aRows ['USR_UID']); - if (UsersPeer::doCount($oCriteria) == 1) - $user = '1|' . $aRows ['USR_UID']; + $oCriteria = new Criteria(); + $oCriteria->add( UsersPeer::USR_UID, $aRows['USR_UID'] ); + if (UsersPeer::doCount( $oCriteria ) == 1) + $user = '1|' . $aRows['USR_UID']; - $aFields ['LANG'] = SYS_LANG; - $aFields ['OP_UID'] = $aRows ['OP_UID']; - $aFields ['PRO_UID'] = $aRows ['PRO_UID']; - $aFields ['OP_CASE_STATUS'] = $aRows ['OP_CASE_STATUS']; - $aFields ['TAS_UID'] = $aRows ['TAS_UID']; - $aFields ['OP_TASK_SOURCE'] = $aRows ['OP_TASK_SOURCE']; - $aFields ['OP_PARTICIPATE'] = $aRows ['OP_PARTICIPATE']; - $aFields ['OP_OBJ_TYPE'] = $aRows ['OP_OBJ_TYPE']; - $aFields ['OP_ACTION'] = $aRows ['OP_ACTION']; + $aFields['LANG'] = SYS_LANG; + $aFields['OP_UID'] = $aRows['OP_UID']; + $aFields['PRO_UID'] = $aRows['PRO_UID']; + $aFields['OP_CASE_STATUS'] = $aRows['OP_CASE_STATUS']; + $aFields['TAS_UID'] = $aRows['TAS_UID']; + $aFields['OP_TASK_SOURCE'] = $aRows['OP_TASK_SOURCE']; + $aFields['OP_PARTICIPATE'] = $aRows['OP_PARTICIPATE']; + $aFields['OP_OBJ_TYPE'] = $aRows['OP_OBJ_TYPE']; + $aFields['OP_ACTION'] = $aRows['OP_ACTION']; - switch ($aRows ['OP_OBJ_TYPE']) { - /* case 'ANY': + switch ($aRows['OP_OBJ_TYPE']) { + /* case 'ANY': $aFields['OP_OBJ_TYPE'] = ''; break; */ - case 'DYNAFORM' : - $aFields ['DYNAFORMS'] = $aRows ['OP_OBJ_UID']; - break; - case 'INPUT' : - $aFields ['INPUTS'] = $aRows ['OP_OBJ_UID']; - break; - case 'OUTPUT' : - $aFields ['OUTPUTS'] = $aRows ['OP_OBJ_UID']; - break; - } - - $usersGroups = ''; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addAsColumn( 'GRP_TITLE', ContentPeer::CON_VALUE ); + $aConditions = array (); + $aConditions[] = array (GroupwfPeer::GRP_UID,ContentPeer::CON_ID + ); + $aConditions[] = array (ContentPeer::CON_CATEGORY,DBAdapter::getStringDelimiter() . 'GRP_TITLE' . DBAdapter::getStringDelimiter() + ); + $aConditions[] = array (ContentPeer::CON_LANG,DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->addAscendingOrderByColumn( 'GRP_TITLE' ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + if ($oDataset->getRecordCount() > 0) { + $usersGroups .= ''; + while ($aRow = $oDataset->getRow()) { + $usersGroups .= ''; + $oDataset->next(); + } + $usersGroups .= ''; + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oCriteria->addAscendingOrderByColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addAscendingOrderByColumn( UsersPeer::USR_LASTNAME ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + if ($oDataset->getRecordCount() > 0) { + $usersGroups .= ''; + while ($aRow = $oDataset->getRow()) { + $usersGroups .= ''; + $oDataset->next(); + } + $usersGroups .= ''; + } + + $aAllObjects = array (); + $aAllObjects[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllDynaforms = array (); + $aAllDynaforms[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllInputs = array (); + $aAllInputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllOutputs = array (); + $aAllOutputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + //dynaforms + $oCriteria = $this->getDynaformsCriteria( $aRows['PRO_UID'] ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'XMLFORM' ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'DYNAFORM|' . $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] . ' (' . G::LoadTranslation( 'ID_DYNAFORM' ) . ')' + ); + $aAllDynaforms[] = array ('UID' => $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] + ); + $oDataset->next(); + } + //inputs + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getInputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'INPUT_DOCUMENT|' . $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_INPUT_DOCUMENT' ) . ')' + ); + $aAllInputs[] = array ('UID' => $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] + ); + $oDataset->next(); + } + //outputs + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getOutputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'OUTPUT_DOCUMENT|' . $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ) . ')' + ); + $aAllOutputs[] = array ('UID' => $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['allObjects'] = $aAllObjects; + $_DBArray['allDynaforms'] = $aAllDynaforms; + $_DBArray['allInputs'] = $aAllInputs; + $_DBArray['allOutputs'] = $aAllOutputs; + $_SESSION['_DBArray'] = $_DBArray; + + $aFields['GROUP_USER'] = $usersGroups; + $aFields['ID_DELETE'] = G::LoadTranslation( 'ID_DELETE' ); + + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_EditObjectPermission', '', $aFields, 'processes_SaveEditObjectPermission' ); + G::RenderPage( 'publish', 'raw' ); } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['objects'] = $aObjects; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('objects'); - $oCriteria->addAscendingOrderByColumn('CTO_POSITION'); - return $oCriteria; - } - /** - * availableCaseTrackerObjects - * - * @param string $sProcessUID - * @return boolean true - */ - function availableCaseTrackerObjects($sProcessUID) { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'tracker/tracker_AvailableCaseTrackerObjects', $this->getAvailableCaseTrackerObjectsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } - - /** - * getAvailableCaseTrackerObjectsCriteria - * - * @param string $sProcessUID Default value empty - * @return object(Criteria) $oCriteria - */ - function getAvailableCaseTrackerObjectsCriteria($sProcessUID = '') { - $oCriteria = $this->getCaseTrackerObjectsCriteria($sProcessUID); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aDynaformsUIDS = array(); - $aInputsUIDS = array(); - $aOutputsUIDS = array(); - while ($aRow = $oDataset->getRow()) { - switch ($aRow ['CTO_TYPE_OBJ']) { - case 'DYNAFORM' : - $aDynaformsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - case 'INPUT_DOCUMENT' : - $aInputsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - case 'OUTPUT_DOCUMENT' : - $aOutputsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - } - $oDataset->next(); - } - $aAvailableObjects = array(); - $aAvailableObjects [] = array('OBJECT_UID' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT_TITLE' => 'char'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oCriteria->add(DynaformPeer::DYN_UID, $aDynaformsUIDS, Criteria::NOT_IN); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['DYN_UID'], 'OBJECT_TYPE' => 'DYNAFORM', 'OBJECT_TITLE' => $aRow ['DYN_TITLE']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $aInputsUIDS, Criteria::NOT_IN); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['INP_DOC_UID'], 'OBJECT_TYPE' => 'INPUT_DOCUMENT', 'OBJECT_TITLE' => $aRow ['INP_DOC_TITLE']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_UID); - $oCriteria->addAsColumn('OUT_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(OutputDocumentPeer::OUT_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(OutputDocumentPeer::OUT_DOC_UID, $aOutputsUIDS, Criteria::NOT_IN); - - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['OUT_DOC_UID'], 'OBJECT_TYPE' => 'OUTPUT_DOCUMENT', 'OBJECT_TITLE' => $aRow ['OUT_DOC_TITLE']); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableObjects'] = $aAvailableObjects; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('availableObjects'); - return $oCriteria; - } - - /** - * assignCaseTrackerObject - * - * @param string $sProcessUID - * @param string $sObjType - * @param string $sObjUID - * @return void - */ - function assignCaseTrackerObject($sProcessUID, $sObjType, $sObjUID) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $iPosition = CaseTrackerObjectPeer::doCount($oCriteria) + 1; - $oCaseTrackerObject = new CaseTrackerObject ( ); - $ctoUID = $oCaseTrackerObject->create(array('PRO_UID' => $sProcessUID, 'CTO_TYPE_OBJ' => $sObjType, 'CTO_UID_OBJ' => $sObjUID, 'CTO_POSITION' => $iPosition, 'CTO_CONDITION' => '')); - return $ctoUID; - } - - /** - * removeCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function removeCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - $oCaseTrackerObject = new CaseTrackerObject ( ); - $oCaseTrackerObject->remove($sCTOUID); - $oCaseTrackerObject->reorderPositions($sProcessUID, $iPosition); - } - - /** - * upCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function upCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - if ($iPosition > 1) { - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, $iPosition); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1)); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1)); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_UID, $sCTOUID); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - } - } - - /** - * downCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function downCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MAX_POSITION'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if ($iPosition < (int) $aRow ['MAX_POSITION']) { - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, $iPosition); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1)); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1)); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_UID, $sCTOUID); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - } - } - - /** - * processFilesManager - * - * @param string $sProcessUID - * @return void - */ - function processFilesManager($sProcessUID) { - G::LoadClass('ArrayPeer'); - global $_DBArray; - global $G_PUBLISH; - - $oCriteria = new Criteria('dbarray'); - $G_PUBLISH = new Publisher(); - - $aDirectories = array(); - $aDirectories[] = array('DIRECTORY' => 'char'); - $aDirectories[] = array('DIRECTORY' => ''.G::loadTranslation('ID_TEMPLATES').''); - $aDirectories[] = array('DIRECTORY' => ''.G::loadTranslation('ID_PUBLIC').''); - - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray['directories'] = $aDirectories; - $_SESSION['_DBArray'] = $_DBArray; - - $oCriteria->setDBArrayTable('directories'); - - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'processes/processes_DirectoriesList', $oCriteria); - G::RenderPage('publish', 'raw'); - } - - /** - * exploreDirectory - * - * @param string $sProcessUID - * @param string $sMainDirectory - * @param string $sCurrentDirectory - * @return void - */ - function exploreDirectory($sProcessUID, $sMainDirectory, $sCurrentDirectory) { - switch ($sMainDirectory) { - case 'mailTemplates' : - $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP; - break; - case 'public' : - $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP; - break; - default : - die (); - break; - } - G::verifyPath($sDirectory, true); - $sDirectory .= $sCurrentDirectory . PATH_SEP; - $aTheFiles = array(); - $aTheFiles [] = array('PATH' => 'char', 'EDIT' => 'char', 'DOWNLOAD_TEXT' => '', 'DOWNLOAD_JS' => '', 'DELETE_TEXT' => 'char', 'DELETE_JS' => 'char'); - $aDirectories = array(); - $aFiles = array(); - $oDirectory = dir($sDirectory); - while ($sObject = $oDirectory->read()) { - if (($sObject !== '.') && ($sObject !== '..')) { - $sPath = $sDirectory . $sObject; - if (is_dir($sPath)) { - $aDirectories [] = array('PATH' => ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : '') . $sObject, 'DIRECTORY' => $sObject); + /** + * caseTracker + * + * @param string $sProcessUID + * @return boolean true + */ + public function caseTracker ($sProcessUID) + { + $oCriteria = new Criteria(); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProcessUID ); + $oCaseTracker = new CaseTracker(); + if (CaseTrackerPeer::doCount( $oCriteria ) === 0) { + $aCaseTracker = array ('PRO_UID' => $sProcessUID,'CT_MAP_TYPE' => 'PROCESSMAP','CT_DERIVATION_HISTORY' => 1,'CT_MESSAGE_HISTORY' => 1 + ); + $oCaseTracker->create( $aCaseTracker ); } else { - $aAux = pathinfo($sPath); - $aFiles [] = array('FILE' => $sObject, 'EXT' => $aAux ['extension']); + $aCaseTracker = $oCaseTracker->load( $sProcessUID ); } - } + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'tracker/tracker_Configuration', '', $aCaseTracker, '../tracker/tracker_Save' ); + G::RenderPage( 'publish', 'raw' ); + return true; } - $oDirectory->close(); - if ($sCurrentDirectory == '') { - $aTheFiles [] = array('PATH' => '..', 'EDIT' => '', 'DOWNLOAD_TEXT' => '', 'DOWNLOAD_JS' => '', 'DELETE_TEXT' => '', 'DELETE_JS' => ''); - } else { - $aAux = explode(PATH_SEP, $sCurrentDirectory); - array_pop($aAux); - $aTheFiles [] = array('PATH' => '..', 'EDIT' => '', 'DOWNLOAD_TEXT' => '', 'DOWNLOAD_JS' => '', 'DELETE_TEXT' => '', 'DELETE_JS' => ''); + + /** + * caseTrackerObjects + * + * @param string $sProcessUID + * @return boolean true + */ + public function caseTrackerObjects ($sProcessUID) + { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_objectsList', $this->getCaseTrackerObjectsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; } - foreach ($aDirectories as $aDirectories) { - $aTheFiles [] = array('PATH' => '' . $aDirectories ['DIRECTORY'] . '', 'EDIT' => '', 'DOWNLOAD_TEXT' => '', 'DOWNLOAD_JS' => '', 'DELETE_TEXT' => G::LoadTranslation('ID_DELETE'), 'DELETE_JS' => 'deleteDirectory(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aDirectories ['DIRECTORY'] . '\');'); - } - foreach ($aFiles as $aFile) { - $aTheFiles [] = array('PATH' => $aFile ['FILE'], 'EDIT' => ($sMainDirectory == 'mailTemplates' ? 'Edit' : ''), 'EDIT_JS' => "editFile('{$sProcessUID}', @@PATH)", 'DOWNLOAD_TEXT' => G::LoadTranslation('ID_DOWNLOAD'), 'DOWNLOAD_JS' => 'downloadFile(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aFile ['FILE'] . '\');', 'DELETE_TEXT' => G::LoadTranslation('ID_DELETE'), 'DELETE_JS' => 'deleteFile(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aFile ['FILE'] . '\');'); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['objects'] = $aTheFiles; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('objects'); - $oCriteria->addAscendingOrderByColumn('DOWNLOAD_TEXT'); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'processes/files-paged-table', 'processes/processes_FilesList',$oCriteria, array('PRO_UID' => $sProcessUID, 'MAIN_DIRECTORY' => $sMainDirectory, 'CURRENT_DIRECTORY' => $sCurrentDirectory)); - G::RenderPage('publish', 'raw'); - } - - /** - * deleteFile - * - * @param string $sProcessUID - * @param string $sMainDirectory - * @param string $sCurrentDirectory - * @param string $sFile - * @return void - */ - function deleteFile($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sFile) { - switch ($sMainDirectory) { - case 'mailTemplates' : - $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - case 'public' : - $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - default : - die (); - break; - } - if (file_exists($sDirectory . $sFile)) { - unlink($sDirectory . $sFile); - } - } - - /** - * deleteDirectory - * - * @param string $sProcessUID - * @param string $sMainDirectory - * @param string $sCurrentDirectory - * @param string $sDirToDelete - * @return void - */ - function deleteDirectory($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sDirToDelete) { - switch ($sMainDirectory) { - case 'mailTemplates' : - $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - case 'public' : - $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - default : - die (); - break; - } - if (file_exists($sDirectory . $sDirToDelete)) { - G::rm_dir($sDirectory . $sDirToDelete); - } - } - - function downloadFile($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sFile) { - switch ($sMainDirectory) { - case 'mailTemplates' : - $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - case 'public' : - $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); - break; - default : - die (); - break; - } - if (file_exists($sDirectory . $sFile)) { - G::streamFile($sDirectory . $sFile, true); - } - } - - /* For sub-process */ - - /** - * addSubProcess - * - * @param string $sProcessUID - * @param integer $iX - * @param integer $iY - * @return void - */ - function addSubProcess($sProcessUID = '', $iX = 0, $iY = 0) { - try { - $oTask = new Task ( ); - $oNewTask->label = 'Sub-Process'; //G::LoadTranslation('ID_TASK'); - $oNewTask->uid = $oTask->create(array('PRO_UID' => $sProcessUID, 'TAS_TITLE' => $oNewTask->label, 'TAS_POSX' => $iX, 'TAS_POSY' => $iY, 'TAS_TYPE' => 'SUBPROCESS')); - $oJSON = new Services_JSON ( ); - - $oOP = new SubProcess ( ); - $aData = array('SP_UID' => G::generateUniqueID (), 'PRO_UID' => 0, 'TAS_UID' => 0, 'PRO_PARENT' => $sProcessUID, 'TAS_PARENT' => $oNewTask->uid, 'SP_TYPE' => 'SIMPLE', 'SP_SYNCHRONOUS' => 0, 'SP_SYNCHRONOUS_TYPE' => 'ALL', 'SP_SYNCHRONOUS_WAIT' => 0, 'SP_VARIABLES_OUT' => '', 'SP_VARIABLES_IN' => '', 'SP_GRID_IN' => ''); - $oOP->create($aData); - - return $oJSON->encode($oNewTask); - } catch (Exception $oError) { - throw ($oError); - } - } - - /** - * deleteSubProcess - * - * @param string $sProcessUID - * @param string $sTaskUID - * @return boolean true - * throw Exception $oError - */ - function deleteSubProcess($sProcessUID = '', $sTaskUID = '') { - try { - $oTasks = new Tasks ( ); - $oTasks->deleteTask($sTaskUID); - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('SP_UID'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProcessUID); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $sTaskUID); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - $oSubProcess = new SubProcess ( ); - $oSubProcess->remove($aRow ['SP_UID']); - - return true; - } catch (Exception $oError) { - throw ($oError); - } - } - - /** - * subProcess_Properties - * - * @param string $sProcessUID - * @param string $sTaskUID - * @param string $sIndex - * @return void - * throw Exception $oError - * @throw Exception $oError - */ - function subProcess_Properties($sProcessUID = '', $sTaskUID = '', $sIndex = '') { - try { //echo "$sProcessUID = '', $sTaskUID = '', $sIndex = ''"; - $SP_VARIABLES_OUT = array(); - $SP_VARIABLES_IN = array(); - - /* Prepare page before to show */ - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['NewCase'] = $this->subProcess_TaskIni($sProcessUID); - unset($_DBArray ['TheProcesses']); - $_DBArray ['TheProcesses'] [] = array('pro_uid' => 'char', 'value' => 'char'); - $i = 0; - foreach ($_DBArray ['NewCase'] as $aRow) { - if ($i > 0) { - $_DBArray ['TheProcesses'] [] = array('pro_uid' => $aRow ['pro_uid'] . '_' . $i, 'value' => $aRow ['value']); + /** + * getCaseTrackerObjectsCriteria + * + * @param string $sProcessUID + * @return object(Criteria) $oCriteria + */ + public function getCaseTrackerObjectsCriteria ($sProcessUID) + { + $aObjects = array (); + $aObjects[] = array ('CTO_TITLE' => 'char','CTO_UID' => 'char','CTO_TYPE_OBJ' => 'char','CTO_UID_OBJ' => 'char','CTO_CONDITION' => 'char','CTO_POSITION' => 'integer' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $oCriteria->addAscendingOrderByColumn( CaseTrackerObjectPeer::CTO_POSITION ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + try { + switch ($aRow['CTO_TYPE_OBJ']) { + case 'DYNAFORM': + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['DYN_TITLE']; + break; + case 'INPUT_DOCUMENT': + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['INP_DOC_TITLE']; + break; + case 'OUTPUT_DOCUMENT': + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['OUT_DOC_TITLE']; + break; + } + $aObjects[] = array ('CTO_TITLE' => $sTitle,'CTO_UID' => $aRow['CTO_UID'],'CTO_TYPE_OBJ' => $aRow['CTO_TYPE_OBJ'],'CTO_UID_OBJ' => $aRow['CTO_UID_OBJ'],'CTO_CONDITION' => $aRow['CTO_CONDITION'],'CTO_POSITION' => $aRow['CTO_POSITION'] + ); + } catch (Exception $oError) { //Nothing + } + $oDataset->next(); } - $i++; - } - //print'
';print_r($_DBArray['NewCase']);print'
'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter (); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProcessUID); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProcessUID); - $oCriteria->add(SubProcessPeer::TAS_PARENT, $sTaskUID); + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['objects'] = $aObjects; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'objects' ); + $oCriteria->addAscendingOrderByColumn( 'CTO_POSITION' ); + return $oCriteria; + } - $oCriteria->addAsColumn('CON_VALUE', 'C1.CON_VALUE', 'CON_TITLE'); - $oCriteria->addAlias("C1", 'CONTENT'); - $tasTitleConds = array(); - $tasTitleConds [] = array(SubProcessPeer::TAS_PARENT, 'C1.CON_ID'); - $tasTitleConds [] = array('C1.CON_CATEGORY', $del . 'TAS_TITLE' . $del); - $tasTitleConds [] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); + /** + * availableCaseTrackerObjects + * + * @param string $sProcessUID + * @return boolean true + */ + public function availableCaseTrackerObjects ($sProcessUID) + { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_AvailableCaseTrackerObjects', $this->getAvailableCaseTrackerObjectsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - $aRow ['TASKS'] = $aRow ['TAS_UID']; - //print "
".$aRow['TASKS']."
"; - //$aRow['SPROCESS_NAME'] = $aRow['TAS_TITLE']; - $aRow ['TAS_TITLE'] = $aRow ['CON_VALUE']; - $aRow ['SPROCESS_NAME'] = $aRow ['CON_VALUE']; - $SP_VARIABLES_OUT = unserialize($aRow ['SP_VARIABLES_OUT']); - if (is_array($SP_VARIABLES_OUT)) { - $i = 1; - foreach ($SP_VARIABLES_OUT as $indice => $valor) { - $aRow ['grid1'] [$i] ['VAR_OUT1'] = $indice; - $aRow ['grid1'] [$i] ['VAR_OUT2'] = $valor; - $i++; + /** + * getAvailableCaseTrackerObjectsCriteria + * + * @param string $sProcessUID Default value empty + * @return object(Criteria) $oCriteria + */ + public function getAvailableCaseTrackerObjectsCriteria ($sProcessUID = '') + { + $oCriteria = $this->getCaseTrackerObjectsCriteria( $sProcessUID ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aDynaformsUIDS = array (); + $aInputsUIDS = array (); + $aOutputsUIDS = array (); + while ($aRow = $oDataset->getRow()) { + switch ($aRow['CTO_TYPE_OBJ']) { + case 'DYNAFORM': + $aDynaformsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + case 'INPUT_DOCUMENT': + $aInputsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + case 'OUTPUT_DOCUMENT': + $aOutputsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + } + $oDataset->next(); } - } - - $SP_VARIABLES_IN = unserialize($aRow ['SP_VARIABLES_IN']); - if (is_array($SP_VARIABLES_IN)) { - $j = 1; - foreach ($SP_VARIABLES_IN as $indice => $valor) { - $aRow ['grid2'] [$j] ['VAR_IN1'] = $indice; - $aRow ['grid2'] [$j] ['VAR_IN2'] = $valor; - $j++; + $aAvailableObjects = array (); + $aAvailableObjects[] = array ('OBJECT_UID' => 'char','OBJECT_TYPE' => 'char','OBJECT_TITLE' => 'char' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oCriteria->add( DynaformPeer::DYN_UID, $aDynaformsUIDS, Criteria::NOT_IN ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['DYN_UID'],'OBJECT_TYPE' => 'DYNAFORM','OBJECT_TITLE' => $aRow['DYN_TITLE'] + ); + $oDataset->next(); } - } - $aRow ['INDEX'] = $sIndex; - //print '
';print_r($aRow); - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'processes/processes_subProcess', '', $aRow, 'processes_subProcessSave'); - G::RenderPage('publish', 'raw'); - } catch (Exception $oError) { - throw ($oError); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $aInputsUIDS, Criteria::NOT_IN ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['INP_DOC_UID'],'OBJECT_TYPE' => 'INPUT_DOCUMENT','OBJECT_TITLE' => $aRow['INP_DOC_TITLE'] + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( OutputDocumentPeer::OUT_DOC_UID, $aOutputsUIDS, Criteria::NOT_IN ); + + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['OUT_DOC_UID'],'OBJECT_TYPE' => 'OUTPUT_DOCUMENT','OBJECT_TITLE' => $aRow['OUT_DOC_TITLE'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['availableObjects'] = $aAvailableObjects; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'availableObjects' ); + return $oCriteria; } - } - /** - * subProcess_TaskIni - * - * @param string $sProcessUID - * @return array $rows - */ - function subProcess_TaskIni($sProcessUID) { - $tasks = array(); - $aUIDS = array(); - $aUIDS [] = $sProcessUID; - $c = new Criteria ( ); - $c->clearSelectColumns(); - $c->addSelectColumn(TaskPeer::TAS_UID); - $c->addSelectColumn(TaskPeer::PRO_UID); - $c->add(TaskPeer::TAS_START, 'TRUE'); - $c->add(TaskPeer::PRO_UID, $aUIDS, Criteria::NOT_IN); - //$c->add(TaskPeer::PRO_UID, $sProcessUID, Criteria::NOT_EQUAL); - $rs = TaskPeer::doSelectRS($c); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while (is_array($row)) { - $tasks [] = array('TAS_UID' => $row ['TAS_UID'], 'PRO_UID' => $row ['PRO_UID']); - $rs->next(); - $row = $rs->getRow(); + /** + * assignCaseTrackerObject + * + * @param string $sProcessUID + * @param string $sObjType + * @param string $sObjUID + * @return void + */ + public function assignCaseTrackerObject ($sProcessUID, $sObjType, $sObjUID) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $iPosition = CaseTrackerObjectPeer::doCount( $oCriteria ) + 1; + $oCaseTrackerObject = new CaseTrackerObject(); + $ctoUID = $oCaseTrackerObject->create( array ('PRO_UID' => $sProcessUID,'CTO_TYPE_OBJ' => $sObjType,'CTO_UID_OBJ' => $sObjUID,'CTO_POSITION' => $iPosition,'CTO_CONDITION' => '' + ) ); + return $ctoUID; } - $rows [] = array('uid' => 'char', 'value' => 'char', 'pro_uid' => 'char'); - foreach ($tasks as $key => $val) { - $tasTitle = Content::load('TAS_TITLE', '', $val ['TAS_UID'], SYS_LANG); - $proTitle = Content::load('PRO_TITLE', '', $val ['PRO_UID'], SYS_LANG); - $title = " $proTitle ($tasTitle)"; - $rows [] = array('uid' => $val ['TAS_UID'], 'value' => $title, 'pro_uid' => $val ['PRO_UID']); + + /** + * removeCaseTrackerObject + * + * @param string $sCTOUID + * @param string $sProcessUID + * @param integer $iPosition + * @return void + */ + public function removeCaseTrackerObject ($sCTOUID, $sProcessUID, $iPosition) + { + $oCaseTrackerObject = new CaseTrackerObject(); + $oCaseTrackerObject->remove( $sCTOUID ); + $oCaseTrackerObject->reorderPositions( $sProcessUID, $iPosition ); } - return $rows; - } - /** - * eventsList - * - * @param string $sProcessUID - * @param string $type - * @return boolean true - * throw Exception $oError - */ - function eventsList($sProcessUID, $type) { - try { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $oHeadPublisher = & headPublisher::getSingleton (); - $oHeadPublisher->addScriptFile('/jscore/events/events.js'); + /** + * upCaseTrackerObject + * + * @param string $sCTOUID + * @param string $sProcessUID + * @param integer $iPosition + * @return void + */ + public function upCaseTrackerObject ($sCTOUID, $sProcessUID, $iPosition) + { + if ($iPosition > 1) { + $oCriteria1 = new Criteria( 'workflow' ); + $oCriteria1->add( CaseTrackerObjectPeer::CTO_POSITION, $iPosition ); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $oCriteria2->add( CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1) ); + BasePeer::doUpdate( $oCriteria2, $oCriteria1, Propel::getConnection( 'workflow' ) ); - switch ($type) { - case 'message': $EVN_ACTION = "SEND_MESSAGE"; - break; - case 'conditional': $EVN_ACTION = "EXECUTE_CONDITIONAL_TRIGGER"; - break; - case 'multiple': $EVN_ACTION = "EXECUTE_TRIGGER"; - break; - } - - $oCriteria = $this->getEventsCriteria($sProcessUID, $EVN_ACTION); - - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/eventsShortList', $oCriteria, array('PRO_UID' => $sProcessUID, 'EVN_TYPE' => $EVN_ACTION)); - G::RenderPage('publish', 'raw'); - return true; - } catch (Exception $oError) { - throw ($oError); + $oCriteria1 = new Criteria( 'workflow' ); + $oCriteria1->add( CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1) ); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->add( CaseTrackerObjectPeer::CTO_UID, $sCTOUID ); + BasePeer::doUpdate( $oCriteria2, $oCriteria1, Propel::getConnection( 'workflow' ) ); + } } - } - /* get all the events for a specified process */ - - /** - * getEventsCriteria - * - * @param string $sProcessUID - * @param string $EVN_ACTION - * @return object(Criteria) $oCriteria - */ - function getEventsCriteria($sProcessUID, $EVN_ACTION) { - try { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::EVN_ACTION); - $oCriteria->addSelectColumn(EventPeer::EVN_STATUS); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS); - $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); - - $oCriteria->addAsColumn('EVN_DESCRIPTION', ContentPeer::CON_VALUE); - $aConditions = array(); - $aConditions [] = array(EventPeer::EVN_UID, ContentPeer::CON_ID); - $aConditions [] = array(ContentPeer::CON_CATEGORY, $sDelimiter . 'EVN_DESCRIPTION' . $sDelimiter); - $aConditions [] = array(ContentPeer::CON_LANG, $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(EventPeer::PRO_UID, $sProcessUID); - - switch ($EVN_ACTION) { - case 'SEND_MESSAGE' : $oCriteria->add(EventPeer::EVN_ACTION, "SEND_MESSAGE"); - break; - case 'EXECUTE_CONDITIONAL_TRIGGER': $oCriteria->add(EventPeer::EVN_ACTION, "EXECUTE_CONDITIONAL_TRIGGER"); - break; - case 'EXECUTE_TRIGGER' : $oCriteria->add(EventPeer::EVN_ACTION, "EXECUTE_TRIGGER"); - break; - } - - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); + /** + * downCaseTrackerObject + * + * @param string $sCTOUID + * @param string $sProcessUID + * @param integer $iPosition + * @return void + */ + public function downCaseTrackerObject ($sCTOUID, $sProcessUID, $iPosition) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS MAX_POSITION' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if ($iPosition < (int) $aRow['MAX_POSITION']) { + $oCriteria1 = new Criteria( 'workflow' ); + $oCriteria1->add( CaseTrackerObjectPeer::CTO_POSITION, $iPosition ); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $oCriteria2->add( CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1) ); + BasePeer::doUpdate( $oCriteria2, $oCriteria1, Propel::getConnection( 'workflow' ) ); + $oCriteria1 = new Criteria( 'workflow' ); + $oCriteria1->add( CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1) ); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->add( CaseTrackerObjectPeer::CTO_UID, $sCTOUID ); + BasePeer::doUpdate( $oCriteria2, $oCriteria1, Propel::getConnection( 'workflow' ) ); + } } - } -// processMap -/****************************All Functions for New ProcessMap******************************************************/ - /* + /** + * processFilesManager + * + * @param string $sProcessUID + * @return void + */ + public function processFilesManager ($sProcessUID) + { + G::LoadClass( 'ArrayPeer' ); + global $_DBArray; + global $G_PUBLISH; + + $oCriteria = new Criteria( 'dbarray' ); + $G_PUBLISH = new Publisher(); + + $aDirectories = array (); + $aDirectories[] = array ('DIRECTORY' => 'char' + ); + $aDirectories[] = array ('DIRECTORY' => '' . G::loadTranslation( 'ID_TEMPLATES' ) . '' + ); + $aDirectories[] = array ('DIRECTORY' => '' . G::loadTranslation( 'ID_PUBLIC' ) . '' + ); + + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['directories'] = $aDirectories; + $_SESSION['_DBArray'] = $_DBArray; + + $oCriteria->setDBArrayTable( 'directories' ); + + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'processes/processes_DirectoriesList', $oCriteria ); + G::RenderPage( 'publish', 'raw' ); + } + + /** + * exploreDirectory + * + * @param string $sProcessUID + * @param string $sMainDirectory + * @param string $sCurrentDirectory + * @return void + */ + public function exploreDirectory ($sProcessUID, $sMainDirectory, $sCurrentDirectory) + { + switch ($sMainDirectory) { + case 'mailTemplates': + $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP; + break; + case 'public': + $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP; + break; + default: + die(); + break; + } + G::verifyPath( $sDirectory, true ); + $sDirectory .= $sCurrentDirectory . PATH_SEP; + $aTheFiles = array (); + $aTheFiles[] = array ('PATH' => 'char','EDIT' => 'char','DOWNLOAD_TEXT' => '','DOWNLOAD_JS' => '','DELETE_TEXT' => 'char','DELETE_JS' => 'char' + ); + $aDirectories = array (); + $aFiles = array (); + $oDirectory = dir( $sDirectory ); + while ($sObject = $oDirectory->read()) { + if (($sObject !== '.') && ($sObject !== '..')) { + $sPath = $sDirectory . $sObject; + if (is_dir( $sPath )) { + $aDirectories[] = array ('PATH' => ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : '') . $sObject,'DIRECTORY' => $sObject + ); + } else { + $aAux = pathinfo( $sPath ); + $aFiles[] = array ('FILE' => $sObject,'EXT' => $aAux['extension'] + ); + } + } + } + $oDirectory->close(); + if ($sCurrentDirectory == '') { + $aTheFiles[] = array ('PATH' => '..','EDIT' => '','DOWNLOAD_TEXT' => '','DOWNLOAD_JS' => '','DELETE_TEXT' => '','DELETE_JS' => '' + ); + } else { + $aAux = explode( PATH_SEP, $sCurrentDirectory ); + array_pop( $aAux ); + $aTheFiles[] = array ('PATH' => '..','EDIT' => '','DOWNLOAD_TEXT' => '','DOWNLOAD_JS' => '','DELETE_TEXT' => '','DELETE_JS' => '' + ); + } + foreach ($aDirectories as $aDirectories) { + $aTheFiles[] = array ('PATH' => '' . $aDirectories['DIRECTORY'] . '','EDIT' => '','DOWNLOAD_TEXT' => '','DOWNLOAD_JS' => '','DELETE_TEXT' => G::LoadTranslation( 'ID_DELETE' ),'DELETE_JS' => 'deleteDirectory(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aDirectories['DIRECTORY'] . '\');' + ); + } + foreach ($aFiles as $aFile) { + $aTheFiles[] = array ('PATH' => $aFile['FILE'],'EDIT' => ($sMainDirectory == 'mailTemplates' ? 'Edit' : ''),'EDIT_JS' => "editFile('{$sProcessUID}', @@PATH)",'DOWNLOAD_TEXT' => G::LoadTranslation( 'ID_DOWNLOAD' ),'DOWNLOAD_JS' => 'downloadFile(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aFile['FILE'] . '\');','DELETE_TEXT' => G::LoadTranslation( 'ID_DELETE' ),'DELETE_JS' => 'deleteFile(\'' . $sProcessUID . '\', \'' . $sMainDirectory . '\', \'' . $sCurrentDirectory . '\', \'' . $aFile['FILE'] . '\');' + ); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['objects'] = $aTheFiles; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'objects' ); + $oCriteria->addAscendingOrderByColumn( 'DOWNLOAD_TEXT' ); + + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'propeltable', 'processes/files-paged-table', 'processes/processes_FilesList', $oCriteria, array ('PRO_UID' => $sProcessUID,'MAIN_DIRECTORY' => $sMainDirectory,'CURRENT_DIRECTORY' => $sCurrentDirectory + ) ); + G::RenderPage( 'publish', 'raw' ); + } + + /** + * deleteFile + * + * @param string $sProcessUID + * @param string $sMainDirectory + * @param string $sCurrentDirectory + * @param string $sFile + * @return void + */ + public function deleteFile ($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sFile) + { + switch ($sMainDirectory) { + case 'mailTemplates': + $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + case 'public': + $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + default: + die(); + break; + } + if (file_exists( $sDirectory . $sFile )) { + unlink( $sDirectory . $sFile ); + } + } + + /** + * deleteDirectory + * + * @param string $sProcessUID + * @param string $sMainDirectory + * @param string $sCurrentDirectory + * @param string $sDirToDelete + * @return void + */ + public function deleteDirectory ($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sDirToDelete) + { + switch ($sMainDirectory) { + case 'mailTemplates': + $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + case 'public': + $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + default: + die(); + break; + } + if (file_exists( $sDirectory . $sDirToDelete )) { + G::rm_dir( $sDirectory . $sDirToDelete ); + } + } + + public function downloadFile ($sProcessUID, $sMainDirectory, $sCurrentDirectory, $sFile) + { + switch ($sMainDirectory) { + case 'mailTemplates': + $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + case 'public': + $sDirectory = PATH_DATA_PUBLIC . $sProcessUID . PATH_SEP . ($sCurrentDirectory != '' ? $sCurrentDirectory . PATH_SEP : ''); + break; + default: + die(); + break; + } + if (file_exists( $sDirectory . $sFile )) { + G::streamFile( $sDirectory . $sFile, true ); + } + } + + /* For sub-process */ + + /** + * addSubProcess + * + * @param string $sProcessUID + * @param integer $iX + * @param integer $iY + * @return void + */ + public function addSubProcess ($sProcessUID = '', $iX = 0, $iY = 0) + { + try { + $oTask = new Task(); + $oNewTask->label = 'Sub-Process'; //G::LoadTranslation('ID_TASK'); + $oNewTask->uid = $oTask->create( array ('PRO_UID' => $sProcessUID,'TAS_TITLE' => $oNewTask->label,'TAS_POSX' => $iX,'TAS_POSY' => $iY,'TAS_TYPE' => 'SUBPROCESS' + ) ); + $oJSON = new Services_JSON(); + + $oOP = new SubProcess(); + $aData = array ('SP_UID' => G::generateUniqueID(),'PRO_UID' => 0,'TAS_UID' => 0,'PRO_PARENT' => $sProcessUID,'TAS_PARENT' => $oNewTask->uid,'SP_TYPE' => 'SIMPLE','SP_SYNCHRONOUS' => 0,'SP_SYNCHRONOUS_TYPE' => 'ALL','SP_SYNCHRONOUS_WAIT' => 0,'SP_VARIABLES_OUT' => '','SP_VARIABLES_IN' => '','SP_GRID_IN' => '' + ); + $oOP->create( $aData ); + + return $oJSON->encode( $oNewTask ); + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * deleteSubProcess + * + * @param string $sProcessUID + * @param string $sTaskUID + * @return boolean true + * throw Exception $oError + */ + public function deleteSubProcess ($sProcessUID = '', $sTaskUID = '') + { + try { + $oTasks = new Tasks(); + $oTasks->deleteTask( $sTaskUID ); + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'SP_UID' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProcessUID ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $sTaskUID ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + $oSubProcess = new SubProcess(); + $oSubProcess->remove( $aRow['SP_UID'] ); + + return true; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * subProcess_Properties + * + * @param string $sProcessUID + * @param string $sTaskUID + * @param string $sIndex + * @return void throw Exception $oError + * @throw Exception $oError + */ + public function subProcess_Properties ($sProcessUID = '', $sTaskUID = '', $sIndex = '') + { + try { //echo "$sProcessUID = '', $sTaskUID = '', $sIndex = ''"; + $SP_VARIABLES_OUT = array (); + $SP_VARIABLES_IN = array (); + + /* Prepare page before to show */ + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['NewCase'] = $this->subProcess_TaskIni( $sProcessUID ); + unset( $_DBArray['TheProcesses'] ); + $_DBArray['TheProcesses'][] = array ('pro_uid' => 'char','value' => 'char' + ); + $i = 0; + foreach ($_DBArray['NewCase'] as $aRow) { + if ($i > 0) { + $_DBArray['TheProcesses'][] = array ('pro_uid' => $aRow['pro_uid'] . '_' . $i,'value' => $aRow['value'] + ); + } + $i ++; + } + //print'
';print_r($_DBArray['NewCase']);print'
'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProcessUID ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProcessUID ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $sTaskUID ); + + $oCriteria->addAsColumn( 'CON_VALUE', 'C1.CON_VALUE', 'CON_TITLE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $tasTitleConds = array (); + $tasTitleConds[] = array (SubProcessPeer::TAS_PARENT,'C1.CON_ID' + ); + $tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN ); + + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + $aRow['TASKS'] = $aRow['TAS_UID']; + //print "
".$aRow['TASKS']."
"; + //$aRow['SPROCESS_NAME'] = $aRow['TAS_TITLE']; + $aRow['TAS_TITLE'] = $aRow['CON_VALUE']; + $aRow['SPROCESS_NAME'] = $aRow['CON_VALUE']; + $SP_VARIABLES_OUT = unserialize( $aRow['SP_VARIABLES_OUT'] ); + if (is_array( $SP_VARIABLES_OUT )) { + $i = 1; + foreach ($SP_VARIABLES_OUT as $indice => $valor) { + $aRow['grid1'][$i]['VAR_OUT1'] = $indice; + $aRow['grid1'][$i]['VAR_OUT2'] = $valor; + $i ++; + } + } + + $SP_VARIABLES_IN = unserialize( $aRow['SP_VARIABLES_IN'] ); + if (is_array( $SP_VARIABLES_IN )) { + $j = 1; + foreach ($SP_VARIABLES_IN as $indice => $valor) { + $aRow['grid2'][$j]['VAR_IN1'] = $indice; + $aRow['grid2'][$j]['VAR_IN2'] = $valor; + $j ++; + } + } + $aRow['INDEX'] = $sIndex; + //print '
';print_r($aRow); + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_subProcess', '', $aRow, 'processes_subProcessSave' ); + G::RenderPage( 'publish', 'raw' ); + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * subProcess_TaskIni + * + * @param string $sProcessUID + * @return array $rows + */ + public function subProcess_TaskIni ($sProcessUID) + { + $tasks = array (); + $aUIDS = array (); + $aUIDS[] = $sProcessUID; + $c = new Criteria(); + $c->clearSelectColumns(); + $c->addSelectColumn( TaskPeer::TAS_UID ); + $c->addSelectColumn( TaskPeer::PRO_UID ); + $c->add( TaskPeer::TAS_START, 'TRUE' ); + $c->add( TaskPeer::PRO_UID, $aUIDS, Criteria::NOT_IN ); + //$c->add(TaskPeer::PRO_UID, $sProcessUID, Criteria::NOT_EQUAL); + $rs = TaskPeer::doSelectRS( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + while (is_array( $row )) { + $tasks[] = array ('TAS_UID' => $row['TAS_UID'],'PRO_UID' => $row['PRO_UID'] + ); + $rs->next(); + $row = $rs->getRow(); + } + $rows[] = array ('uid' => 'char','value' => 'char','pro_uid' => 'char' + ); + foreach ($tasks as $key => $val) { + $tasTitle = Content::load( 'TAS_TITLE', '', $val['TAS_UID'], SYS_LANG ); + $proTitle = Content::load( 'PRO_TITLE', '', $val['PRO_UID'], SYS_LANG ); + $title = " $proTitle ($tasTitle)"; + $rows[] = array ('uid' => $val['TAS_UID'],'value' => $title,'pro_uid' => $val['PRO_UID'] + ); + } + return $rows; + } + + /** + * eventsList + * + * @param string $sProcessUID + * @param string $type + * @return boolean true + * throw Exception $oError + */ + public function eventsList ($sProcessUID, $type) + { + try { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $oHeadPublisher = & headPublisher::getSingleton(); + $oHeadPublisher->addScriptFile( '/jscore/events/events.js' ); + + switch ($type) { + case 'message': + $EVN_ACTION = "SEND_MESSAGE"; + break; + case 'conditional': + $EVN_ACTION = "EXECUTE_CONDITIONAL_TRIGGER"; + break; + case 'multiple': + $EVN_ACTION = "EXECUTE_TRIGGER"; + break; + } + + $oCriteria = $this->getEventsCriteria( $sProcessUID, $EVN_ACTION ); + + $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'events/eventsShortList', $oCriteria, array ('PRO_UID' => $sProcessUID,'EVN_TYPE' => $EVN_ACTION + ) ); + G::RenderPage( 'publish', 'raw' ); + return true; + } catch (Exception $oError) { + throw ($oError); + } + } + + /* get all the events for a specified process */ + + /** + * getEventsCriteria + * + * @param string $sProcessUID + * @param string $EVN_ACTION + * @return object(Criteria) $oCriteria + */ + public function getEventsCriteria ($sProcessUID, $EVN_ACTION) + { + try { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_ACTION ); + $oCriteria->addSelectColumn( EventPeer::EVN_STATUS ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN_OCCURS ); + $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); + + $oCriteria->addAsColumn( 'EVN_DESCRIPTION', ContentPeer::CON_VALUE ); + $aConditions = array (); + $aConditions[] = array (EventPeer::EVN_UID,ContentPeer::CON_ID + ); + $aConditions[] = array (ContentPeer::CON_CATEGORY,$sDelimiter . 'EVN_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array (ContentPeer::CON_LANG,$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( EventPeer::PRO_UID, $sProcessUID ); + + switch ($EVN_ACTION) { + case 'SEND_MESSAGE': + $oCriteria->add( EventPeer::EVN_ACTION, "SEND_MESSAGE" ); + break; + case 'EXECUTE_CONDITIONAL_TRIGGER': + $oCriteria->add( EventPeer::EVN_ACTION, "EXECUTE_CONDITIONAL_TRIGGER" ); + break; + case 'EXECUTE_TRIGGER': + $oCriteria->add( EventPeer::EVN_ACTION, "EXECUTE_TRIGGER" ); + break; + } + + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); + } + } + + // processMap + /** + * **************************All Functions for New ProcessMap***************************************************** + */ + /* * Edit the Process Map information * @param string $sProcessUID * @return boolean */ - function editProcessNew($sProcessUID) - { - try { - $oProcess = new Process ( ); - if (! is_null ( $oProcess )) { - $calendar = new Calendar ( ); - $calendarObj = $calendar->getCalendarList ( true, true ); + public function editProcessNew ($sProcessUID) + { + try { + $oProcess = new Process(); + if (! is_null( $oProcess )) { + $calendar = new Calendar(); + $calendarObj = $calendar->getCalendarList( true, true ); - global $_DBArray; + global $_DBArray; - $_DBArray ['availableCalendars'] = $calendarObj ['array']; + $_DBArray['availableCalendars'] = $calendarObj['array']; - $_SESSION ['_DBArray'] = $_DBArray; - $aFields = $oProcess->load ( $sProcessUID ); - $aFields ['THETYPE'] = 'UPDATE'; - $calendarInfo = $calendar->getCalendarFor ( $sProcessUID, $sProcessUID, $sProcessUID ); - //If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar - $aFields ['PRO_CALENDAR'] = $calendarInfo ['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo ['CALENDAR_UID'] : ""; + $_SESSION['_DBArray'] = $_DBArray; + $aFields = $oProcess->load( $sProcessUID ); + $aFields['THETYPE'] = 'UPDATE'; + $calendarInfo = $calendar->getCalendarFor( $sProcessUID, $sProcessUID, $sProcessUID ); + //If the public function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar + $aFields['PRO_CALENDAR'] = $calendarInfo['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo['CALENDAR_UID'] : ""; - return $aFields; - } else { - throw (new Exception ( 'This row doesn\'t exist!' )); - } - } catch ( Exception $oError ) { - throw ($oError); + return $aFields; + } else { + throw (new Exception( 'This row doesn\'t exist!' )); + } + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Load all categories * @return array */ - function loadProcessCategory() - { - $aProcessCategory = ''; - require_once ( "classes/model/ProcessCategory.php" ); - $Criteria = new Criteria('workflow'); - $Criteria->clearSelectColumns ( ); + public function loadProcessCategory () + { + $aProcessCategory = ''; + require_once ("classes/model/ProcessCategory.php"); + $Criteria = new Criteria( 'workflow' ); + $Criteria->clearSelectColumns(); - $Criteria->addSelectColumn ( ProcessCategoryPeer::CATEGORY_UID ); - $Criteria->addSelectColumn ( ProcessCategoryPeer::CATEGORY_PARENT ); - $Criteria->addSelectColumn ( ProcessCategoryPeer::CATEGORY_NAME ); - $Criteria->addSelectColumn ( ProcessCategoryPeer::CATEGORY_ICON ); + $Criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_UID ); + $Criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_PARENT ); + $Criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_NAME ); + $Criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_ICON ); - $Criteria->add ( processCategoryPeer::CATEGORY_UID, "xx" , CRITERIA::NOT_EQUAL ); - $oDataset = processCategoryPeer::doSelectRS ( $Criteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aProcessCategory[] = $aRow; - $oDataset->next (); + $Criteria->add( processCategoryPeer::CATEGORY_UID, "xx", CRITERIA::NOT_EQUAL ); + $oDataset = processCategoryPeer::doSelectRS( $Criteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aProcessCategory[] = $aRow; + $oDataset->next(); + } + + return $aProcessCategory; } - return $aProcessCategory; - } - - /* + /* * Save the tasks Width and Height * @param string $sTaskUID * @param integer $iX * @param integer $iY * @return integer */ - function saveTaskCordinates($sTaskUID = '', $iX = 110, $iY = 60) - { - try { - $oTask = new Task ( ); - $aFields = $oTask->load ( $sTaskUID ); + public function saveTaskCordinates ($sTaskUID = '', $iX = 110, $iY = 60) + { + try { + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $aFields ['TAS_UID'] = $sTaskUID; - $aFields ['TAS_WIDTH'] = $iX; - $aFields ['TAS_HEIGHT'] = $iY; - return $oTask->update ( $aFields ); - } catch ( Exception $oError ) { - throw ($oError); + $aFields['TAS_UID'] = $sTaskUID; + $aFields['TAS_WIDTH'] = $iX; + $aFields['TAS_HEIGHT'] = $iY; + return $oTask->update( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the Annotation Width and Height * @param string $sSwimLaneUID * @param integer $iX * @param integer $iY * @return integer */ - function saveAnnotationCordinates($sSwimLaneUID = '', $iX = 110, $iY = 60) - { - try { - $oSL = new SwimlanesElements( ); - $aFields = $oSL->load ( $sSwimLaneUID ); + public function saveAnnotationCordinates ($sSwimLaneUID = '', $iX = 110, $iY = 60) + { + try { + $oSL = new SwimlanesElements(); + $aFields = $oSL->load( $sSwimLaneUID ); - $aFields ['SWI_UID'] = $sSwimLaneUID; - $aFields ['SWI_WIDTH'] = $iX; - $aFields ['SWI_HEIGHT'] = $iY; - return $oSL->update ( $aFields ); - } catch ( Exception $oError ) { - throw ($oError); + $aFields['SWI_UID'] = $sSwimLaneUID; + $aFields['SWI_WIDTH'] = $iX; + $aFields['SWI_HEIGHT'] = $iY; + return $oSL->update( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /* + /* * Save the Event Position * @param string $sSwimLaneUID * @param integer $iX * @param integer $iY * @return integer */ - function saveEventPosition($sEventUID = '', $iX = 110, $iY = 60) - { - try { - $oEvents = new Event( ); - $aFields = $oEvents->load ( $sEventUID ); + public function saveEventPosition ($sEventUID = '', $iX = 110, $iY = 60) + { + try { + $oEvents = new Event(); + $aFields = $oEvents->load( $sEventUID ); - $aFields ['EVN_UID'] = $sEventUID; - $aFields ['EVN_POSX'] = $iX; - $aFields ['EVN_POSY'] = $iY; - return $oEvents->update ( $aFields ); - } catch ( Exception $oError ) { - throw ($oError); + $aFields['EVN_UID'] = $sEventUID; + $aFields['EVN_POSX'] = $iX; + $aFields['EVN_POSY'] = $iY; + return $oEvents->update( $aFields ); + } catch (Exception $oError) { + throw ($oError); + } } - } - /** get all the Active process - * - * SELECT PROCESS.PRO_UID AS UID, CONTENT.CON_VALUE AS VALUE FROM PROCESS, CONTENT - WHERE (PROCESS.PRO_UID=CONTENT.CON_ID AND PROCESS.PRO_STATUS!='DISABLED' AND CONTENT.CON_CATEGORY='PRO_TITLE' AND CONTENT.CON_LANG='en') - ORDER BY CONTENT.CON_VALUE - ]]> - */ - function getAllProcesses() - { + /** + * get all the Active process + * + * SELECT PROCESS.PRO_UID AS UID, CONTENT.CON_VALUE AS VALUE FROM PROCESS, CONTENT + * WHERE (PROCESS.PRO_UID=CONTENT.CON_ID AND PROCESS.PRO_STATUS!='DISABLED' AND CONTENT.CON_CATEGORY='PRO_TITLE' AND CONTENT.CON_LANG='en') + * ORDER BY CONTENT.CON_VALUE + * ]]> + */ + public function getAllProcesses () + { - $aProcesses = array (); - //$aProcesses [] = array ('PRO_UID' => 'char', 'PRO_TITLE' => 'char'); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( ProcessPeer::PRO_UID ); - $oCriteria->add ( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); - $oDataset = ProcessPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); + $aProcesses = array (); + //$aProcesses [] = array ('PRO_UID' => 'char', 'PRO_TITLE' => 'char'); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_UID ); + $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $oProcess = new Process ( ); - while ( $aRow = $oDataset->getRow () ) { - $aProcess = $oProcess->load ( $aRow ['PRO_UID'] ); - $aProcesses [] = array ('value' => $aProcess ['PRO_UID'], 'name' => $aProcess ['PRO_TITLE'] ); - $oDataset->next (); + $oDataset->next(); + $oProcess = new Process(); + while ($aRow = $oDataset->getRow()) { + $aProcess = $oProcess->load( $aRow['PRO_UID'] ); + $aProcesses[] = array ('value' => $aProcess['PRO_UID'],'name' => $aProcess['PRO_TITLE'] + ); + $oDataset->next(); + } + $oJSON = new Services_JSON(); + return $oJSON->encode( $aProcesses ); } - $oJSON = new Services_JSON ( ); - return $oJSON->encode ( $aProcesses); - } - /* + /* * Return the steps list criteria object * @param string $sTaskUID * @return array * */ - function getDynaformList($sTaskUID = '') - { - try { - //call plugin - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $externalSteps = $oPluginRegistry->getSteps (); + public function getDynaformList ($sTaskUID = '') + { + try { + //call plugin + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); - $aSteps = array (); - //$aSteps [] = array ('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer' ); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->add ( StepPeer::TAS_UID, $sTaskUID ); - $oCriteria->addAscendingOrderByColumn ( StepPeer::STEP_POSITION ); - $oDataset = StepPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $urlEdit = ''; - $linkEditValue = ''; + $aSteps = array (); + //$aSteps [] = array ('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer' ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( StepPeer::STEP_POSITION ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $urlEdit = ''; + $linkEditValue = ''; - switch ($aRow ['STEP_TYPE_OBJ']) { - case 'DYNAFORM' : - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load ( $aRow ['STEP_UID_OBJ'] ); - $sTitle = $aFields ['DYN_TITLE']; - $DYN_UID = $aFields ['DYN_UID']; - break; + switch ($aRow['STEP_TYPE_OBJ']) { + case 'DYNAFORM': + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['STEP_UID_OBJ'] ); + $sTitle = $aFields['DYN_TITLE']; + $DYN_UID = $aFields['DYN_UID']; + break; + } + $aSteps[] = array ('name' => $sTitle,'value' => $DYN_UID + ); + $oDataset->next(); + } + return $aSteps; + } catch (Exception $oError) { + throw ($oError); } - $aSteps [] = array ('name' => $sTitle, 'value' => $DYN_UID); - $oDataset->next (); - } - return $aSteps; - } catch ( Exception $oError ) { - throw ($oError); } - } - function listNewWebEntry($sProcessUID,$sEventUID) - { - try { - global $G_PUBLISH; - global $G_FORM; - $G_PUBLISH = new Publisher ( ); + public function listNewWebEntry ($sProcessUID, $sEventUID) + { + try { + global $G_PUBLISH; + global $G_FORM; + $G_PUBLISH = new Publisher(); - require_once 'classes/model/Event.php'; - $oEvent = new Event(); - $arlink = ''; - $oEvent = EventPeer::retrieveByPK($sEventUID); - if (!is_null($oEvent)) { - $oData = $oEvent->load($sEventUID); - $dynTitle = ''; - $dynUid = ''; - $task_name = ''; - $usr_uid_evn = $oEvent->getEvnConditions(); + require_once 'classes/model/Event.php'; + $oEvent = new Event(); + $arlink = ''; + $oEvent = EventPeer::retrieveByPK( $sEventUID ); + if (! is_null( $oEvent )) { + $oData = $oEvent->load( $sEventUID ); + $dynTitle = ''; + $dynUid = ''; + $task_name = ''; + $usr_uid_evn = $oEvent->getEvnConditions(); - if($oData['EVN_ACTION'] != '' && $oData['EVN_ACTION'] != 'WEB_ENTRY') - { - require_once 'classes/model/Content.php'; - require_once 'classes/model/Task.php'; - require_once 'classes/model/Dynaform.php'; - $oContent = new Content(); - $dynTitle = $oContent->load('DYN_TITLE', '', $oData['EVN_ACTION'], 'en'); - $task_uid = $oEvent->getEvnTasUidTo(); + if ($oData['EVN_ACTION'] != '' && $oData['EVN_ACTION'] != 'WEB_ENTRY') { + require_once 'classes/model/Content.php'; + require_once 'classes/model/Task.php'; + require_once 'classes/model/Dynaform.php'; + $oContent = new Content(); + $dynTitle = $oContent->load( 'DYN_TITLE', '', $oData['EVN_ACTION'], 'en' ); + $task_uid = $oEvent->getEvnTasUidTo(); - $dyn = new Dynaform(); - $dyn->load($oData['EVN_ACTION']); + $dyn = new Dynaform(); + $dyn->load( $oData['EVN_ACTION'] ); - $dynUid = $dyn->getDynUid(); + $dynUid = $dyn->getDynUid(); - $task = new Task(); - $task->load($task_uid); - $task_name = $task->getTasTitle(); + $task = new Task(); + $task->load( $task_uid ); + $task_name = $task->getTasTitle(); - if (G::is_https ()) - $http = 'https://'; - else - $http = 'http://'; + if (G::is_https()) + $http = 'https://'; + else + $http = 'http://'; - $link = $http . $_SERVER ['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sProcessUID . '/'; + $link = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sProcessUID . '/'; - $row = array (); - $c = 0; + $row = array (); + $c = 0; - /* + /* $oTask = new Task ( ); $TaskFields = $oTask->kgetassigType ( $sProcessUID , $tas=''); */ - $TaskFields ['TAS_ASSIGN_TYPE'] = ''; - //$row [] = array ('W_TITLE' => '', 'W_DELETE' => '', 'TAS_ASSIGN_TYPE' => $TaskFields ['TAS_ASSIGN_TYPE'] ); + $TaskFields['TAS_ASSIGN_TYPE'] = ''; + //$row [] = array ('W_TITLE' => '', 'W_DELETE' => '', 'TAS_ASSIGN_TYPE' => $TaskFields ['TAS_ASSIGN_TYPE'] ); - if (is_dir ( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID )) { - $dir = opendir ( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID ); - $dynTitle = str_replace ( ' ', '_', str_replace ( '/', '_', $dynTitle ) ); - $arlink = $link . $dynTitle.'.php'; - //$arlink = "" . $alink . ""; - } + if (is_dir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID )) { + $dir = opendir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID ); + $dynTitle = str_replace( ' ', '_', str_replace( '/', '_', $dynTitle ) ); + $arlink = $link . $dynTitle . '.php'; + //$arlink = "" . $alink . ""; + + + } + } + } + $row = array ('W_LINK' => $arlink,'DYN_TITLE' => $dynTitle,'TAS_TITLE' => $task_name,'USR_UID' => $usr_uid_evn,'DYN_UID' => $dynUid + ); + // $oJSON = new Services_JSON ( ); + // $tmpData = $oJSON->encode( $row ) ; + // $tmpData = str_replace("\\/","/",'{success:true,data:'.$tmpData.'}'); // unescape the slashes + // $result = $tmpData; + $result = array (); + $result['success'] = true; + $result['data'] = $row; + return $result; + } catch (Exception $oError) { + throw ($oError); } - } - $row = array ('W_LINK' => $arlink,'DYN_TITLE'=>$dynTitle,'TAS_TITLE'=>$task_name, 'USR_UID'=>$usr_uid_evn, 'DYN_UID'=>$dynUid); -// $oJSON = new Services_JSON ( ); -// $tmpData = $oJSON->encode( $row ) ; -// $tmpData = str_replace("\\/","/",'{success:true,data:'.$tmpData.'}'); // unescape the slashes -// $result = $tmpData; - $result = array(); - $result['success'] = true; - $result['data'] = $row; - return $result; - } catch ( Exception $oError ) { - throw ($oError); } - } - - - /* + /* * Users assigned to Tasks * @param string $sProcessUID * @param string $sTaskUID * @return boolean */ - function usersExtList($start, $limit,$sProcessUID = '', $sTaskUID = '') - { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load ( $sProcessUID ); - $oTask = new Task ( ); - $aFields = $oTask->load ( $sTaskUID ); + public function usersExtList ($start, $limit, $sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); - $_SESSION ['iType'] = 1; + $_SESSION['iType'] = 1; - $aFields ['TASK'] = $sTaskUID; - $aFields ['TYPE'] = $_SESSION ['iType']; - $aFields ['OF_TO_ASSIGN'] = G::LoadTranslation ( 'ID_DE_ASSIGN' ); - $aFields ['CONFIRM'] = G::LoadTranslation ( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' ); - $aFields ['UIDS'] = "'0'"; + $aFields['TASK'] = $sTaskUID; + $aFields['TYPE'] = $_SESSION['iType']; + $aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' ); + $aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' ); + $aFields['UIDS'] = "'0'"; - $oTasks = new Tasks ( ); - $oGroups = new Groups ( ); - $aAux1 = $oTasks->getGroupsOfTask ( $sTaskUID, $_SESSION ['iType'] ); - foreach ( $aAux1 as $aGroup ) { - $aAux2 = $oGroups->getUsersOfGroup ( $aGroup ['GRP_UID'] ); - foreach ( $aAux2 as $aUser ) { - $aFields ['UIDS'] .= ",'" . $aUser ['USR_UID'] . "'"; + $oTasks = new Tasks(); + $oGroups = new Groups(); + $aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] ); + foreach ($aAux1 as $aGroup) { + $aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); + foreach ($aAux2 as $aUser) { + $aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'"; + } + } + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $oTask = new Task(); + $aTask = $oTask->load( $sTaskUID ); + + $this->getExtTaskUsersCriteria( $start, $limit, $sTaskUID, $_SESSION['iType'] ); + return $_SESSION['_DBArray']['taskUsers']; + + } catch (Exception $oError) { + throw ($oError); } - } - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $oTask = new Task ( ); - $aTask = $oTask->load ( $sTaskUID ); - - $this->getExtTaskUsersCriteria ($start, $limit, $sTaskUID, $_SESSION ['iType'] ); - return $_SESSION ['_DBArray']['taskUsers']; - - } catch ( Exception $oError ) { - throw ($oError); } - } - function caseNewSchedulerList($sSchUID) - { - try { - $oCaseScheduler = new CaseScheduler(); - $aRows = $oCaseScheduler->load($sSchUID); - return $aRows; + public function caseNewSchedulerList ($sSchUID) + { + try { + $oCaseScheduler = new CaseScheduler(); + $aRows = $oCaseScheduler->load( $sSchUID ); + return $aRows; - } catch ( Exception $oError ) { - throw ($oError); - } - } - //new functions - function getAllTaskUserCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = TaskUserPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - function getExtTaskUsersCriteria($start, $limit,$sTaskUID = '', $iType = 1) - { - try { - $aUsers = array (); - $aUsers [] = array ('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer' ); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addAsColumn ( 'GRP_TITLE', 'C.CON_VALUE' ); - $oCriteria->addSelectColumn ( TaskUserPeer::TAS_UID ); - $oCriteria->addSelectColumn ( TaskUserPeer::USR_UID ); - $oCriteria->addSelectColumn ( TaskUserPeer::TU_TYPE ); - $oCriteria->addSelectColumn ( TaskUserPeer::TU_RELATION ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (TaskUserPeer::USR_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( TaskUserPeer::TAS_UID, $sTaskUID ); - $oCriteria->add ( TaskUserPeer::TU_TYPE, $iType ); - $oCriteria->add ( TaskUserPeer::TU_RELATION, 2 ); - - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = TaskUserPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $c = 0; - while ( $aRow = $oDataset->getRow () ) { - $c ++; - $oGroup = new Groupwf ( ); - $aFields = $oGroup->load ( $aRow ['USR_UID'] ); - if ($aFields ['GRP_STATUS'] == 'ACTIVE') { - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( 'COUNT(*) AS MEMBERS_NUMBER' ); - $oCriteria->add ( GroupUserPeer::GRP_UID, $aRow ['USR_UID'] ); - $oDataset2 = GroupUserPeer::doSelectRS ( $oCriteria ); - $oDataset2->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset2->next (); - $aRow2 = $oDataset2->getRow (); - } else { - $aRow2 ['GROUP_INACTIVE'] = '(' . G::LoadTranslation ( 'ID_GROUP_INACTIVE' ) . ')'; + } catch (Exception $oError) { + throw ($oError); } - //$aUsers [] = array ('LABEL' => (! isset ( $aRow2 ['GROUP_INACTIVE'] ) ? $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . (( int ) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation ( 'ID_USER' ) : G::LoadTranslation ( 'ID_USERS' )) . ')
' : $aRow ['GRP_TITLE'] . ' ' . $aRow2 ['GROUP_INACTIVE']), 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION'] ); - $aUsers [] = array ('LABEL' => (! isset ( $aRow2 ['GROUP_INACTIVE'] ) ? $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . (( int ) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation ( 'ID_USER' ) : G::LoadTranslation ( 'ID_USERS' )) . ')
' : $aRow ['GRP_TITLE'] . ' ' . $aRow2 ['GROUP_INACTIVE']), 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION'] ); - $oDataset->next (); - } - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn ( UsersPeer::USR_LASTNAME ); - $oCriteria->addSelectColumn ( TaskUserPeer::TAS_UID ); - $oCriteria->addSelectColumn ( TaskUserPeer::USR_UID ); - $oCriteria->addSelectColumn ( TaskUserPeer::TU_TYPE ); - $oCriteria->addSelectColumn ( TaskUserPeer::TU_RELATION ); - $oCriteria->addJoin ( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); - $oCriteria->add ( TaskUserPeer::TAS_UID, $sTaskUID ); - $oCriteria->add ( TaskUserPeer::TU_TYPE, $iType ); - $oCriteria->add ( TaskUserPeer::TU_RELATION, 1 ); - $oDataset = TaskUserPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aUsers [] = array ('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION'] ); - $oDataset->next (); - } - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['taskUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass ( 'ArrayPeer' ); - $oCriteria = new Criteria ( 'dbarray' ); - $oCriteria->setDBArrayTable ( 'taskUsers' ); - $oCriteria->addDescendingOrderByColumn ( TaskUserPeer::TU_RELATION ); - $oCriteria->addAscendingOrderByColumn ( 'LABEL' ); - return $oCriteria; - } catch ( Exception $oError ) { - throw ($oError); } - } + //new functions + public function getAllTaskUserCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = TaskUserPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); - - function getAvailableExtUsersCriteria($sTaskUID = '', $iType = 1) - { - try { - $oTasks = new Tasks ( ); - $aAux = $oTasks->getGroupsOfTask ( $sTaskUID, $iType ); - $aUIDS1 = array (); - $aUIDS2 = array (); - foreach ( $aAux as $aGroup ) { - $aUIDS1 [] = $aGroup ['GRP_UID']; - } - $aAux = $oTasks->getUsersOfTask ( $sTaskUID, $iType ); - foreach ( $aAux as $aUser ) { - $aUIDS2 [] = $aUser ['USR_UID']; - } - $aUsers = array (); - //$aUsers [] = array ('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer' ); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( GroupwfPeer::GRP_UID ); - $oCriteria->addAsColumn ( 'GRP_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (GroupwfPeer::GRP_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); - $oCriteria->add ( GroupwfPeer::GRP_UID, $aUIDS1, Criteria::NOT_IN ); - //$oCriteria->add(GroupwfPeer::GRP_UID, '', Criteria::NOT_EQUAL); - $oDataset = GroupwfPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $c = 0; - while ( $aRow = $oDataset->getRow () ) { - $c ++; - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( 'COUNT(*) AS MEMBERS_NUMBER' ); - $oCriteria->add ( GroupUserPeer::GRP_UID, $aRow ['GRP_UID'] ); - $oDataset2 = GroupUserPeer::doSelectRS ( $oCriteria ); - $oDataset2->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset2->next (); - $aRow2 = $oDataset2->getRow (); - //$aUsers [] = array ('LABEL' => $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . (( int ) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation ( 'ID_USER' ) : G::LoadTranslation ( 'ID_USERS' )) . ')
', 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['GRP_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 2 ); - $aUsers [] = array ('LABEL' => $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . (( int ) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation ( 'ID_USER' ) : G::LoadTranslation ( 'ID_USERS' )) . ')
', 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['GRP_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 2 ); - $oDataset->next (); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( UsersPeer::USR_UID ); - $oCriteria->addSelectColumn ( UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn ( UsersPeer::USR_LASTNAME ); - $oCriteria->add ( UsersPeer::USR_STATUS, 'ACTIVE' ); - $oCriteria->add ( UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN ); - $oDataset = UsersPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aUsers [] = array ('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 1 ); - $oDataset->next (); - } - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - - //return $oCriteria; - return $_SESSION ['_DBArray']['availableUsers']; - } catch ( Exception $oError ) { - throw ($oError); + if (is_array( $aRow )) + return $aRow[0]; + else + return 0; } - } - /* - * Return the Additional PM tables list created by user - * @return object - */ - function getExtAdditionalTablesList($sTab_UID='') - { - $aAdditionalTables = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION); - $oCriteria->add(AdditionalTablesPeer::ADD_TAB_UID, '', Criteria::NOT_EQUAL); + public function getExtTaskUsersCriteria ($start, $limit, $sTaskUID = '', $iType = 1) + { + try { + $aUsers = array (); + $aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addAsColumn( 'GRP_TITLE', 'C.CON_VALUE' ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (TaskUserPeer::USR_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'GRP_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); - $oDataset = AdditionalTablesPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aAdditionalTables [] = array ('ADD_TAB_UID' => $aRow ['ADD_TAB_UID'], 'ADD_TAB_NAME' => $aRow ['ADD_TAB_NAME'], 'ADD_TAB_DESCRIPTION' => $aRow ['ADD_TAB_DESCRIPTION']); - $oDataset->next (); - } - return $aAdditionalTables; - } + $this->tmpCriteria = clone $oCriteria; - /* - * Return the available building blocks list criteria object - * @param string $sProcessUID - * @param string $sTaskUID - * @return object - */ - function getExtAvailableBBCriteria($sProcessUID = '', $sTaskUID = '') - { - try { - $_SESSION['TASK'] = $sTaskUID; - $oTasks = new Tasks ( ); - $_SESSION['TASK'] = $sTaskUID; - $aSteps = $oTasks->getStepsOfTask ( $sTaskUID ); - $sUIDs = array (); - foreach ( $aSteps as $aStep ) { - $sUIDs [] = $aStep ['STEP_UID_OBJ']; - } - $aBB = array (); - $aBB [] = array ('STEP_UID' => 'char', 'STEP_TITLE' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_MODE' => 'char','STEP_UID_OBJ' => 'char' ); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( DynaformPeer::DYN_UID ); - $oCriteria->addAsColumn ( 'DYN_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (DynaformPeer::DYN_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( DynaformPeer::PRO_UID, $sProcessUID ); - $oCriteria->add ( DynaformPeer::DYN_UID, $sUIDs, Criteria::NOT_IN ); - $oCriteria->add ( DynaformPeer::DYN_TYPE, 'xmlform' ); - $oDataset = DynaformPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $i = 0; - while ( $aRow = $oDataset->getRow () ) { - $i ++; - /*$aBB [] = array ('STEP_UID' => $aRow ['DYN_UID'], 'STEP_TITLE' => $aRow ['DYN_TITLE'], 'STEP_TYPE_OBJ' => 'DYNAFORM', 'STEP_MODE' => ' ' );*/ - $aBB [] = array ('STEP_UID' => $aRow ['DYN_UID'], 'STEP_TITLE' => $aRow ['DYN_TITLE'], 'STEP_TYPE_OBJ' => 'DYNAFORM', 'STEP_MODE' => 'EDIT', 'STEP_UID_OBJ' => $aRow ['DYN_UID']); - $oDataset->next (); - } - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_UID ); - $oCriteria->addAsColumn ( 'INP_DOC_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (InputDocumentPeer::INP_DOC_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( InputDocumentPeer::PRO_UID, $sProcessUID ); - $oCriteria->add ( InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN ); - $oDataset = InputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aBB [] = array ('STEP_UID' => $aRow ['INP_DOC_UID'], 'STEP_UID_OBJ' => $aRow ['INP_DOC_UID'], 'STEP_TITLE' => $aRow ['INP_DOC_TITLE'], 'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT', 'STEP_MODE' => '' ); - $oDataset->next (); - } - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( OutputDocumentPeer::OUT_DOC_UID ); - $oCriteria->addAsColumn ( 'OUT_DOC_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (OutputDocumentPeer::OUT_DOC_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( OutputDocumentPeer::PRO_UID, $sProcessUID ); - $oCriteria->add ( OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN ); - $oDataset = OutputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aBB [] = array ('STEP_UID' => $aRow ['OUT_DOC_UID'],'STEP_UID_OBJ' => $aRow ['OUT_DOC_UID'], 'STEP_TITLE' => $aRow ['OUT_DOC_TITLE'], 'STEP_TYPE_OBJ' => 'OUTPUT_DOCUMENT', 'STEP_MODE' => '' ); - $oDataset->next (); - } - - //call plugin - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $externalSteps = $oPluginRegistry->getSteps (); - if (is_array ( $externalSteps ) && count ( $externalSteps ) > 0) { - foreach ( $externalSteps as $key => $stepVar ) { - $aBB [] = array ('STEP_UID' => $stepVar->sStepId, 'STEP_TITLE' => $stepVar->sStepTitle, 'STEP_TYPE_OBJ' => 'EXTERNAL', 'STEP_MODE' => '' ); - } - } - - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableBB'] = $aBB; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass ( 'ArrayPeer' ); - $oCriteria = new Criteria ( 'dbarray' ); - $oCriteria->setDBArrayTable ( 'availableBB' ); - $oCriteria->addAscendingOrderByColumn ( 'STEP_TYPE_OBJ' ); - $oCriteria->addAscendingOrderByColumn ( 'STEP_TITLE' ); - //return $oCriteria; - return $_SESSION ['_DBArray']['availableBB']; - } catch ( Exception $oError ) { - throw ($oError); - } - } - - //new functions - function getAllStepCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = StepPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the steps list criteria object - * @param string $sTaskUID - * @return array - */ - function getExtStepsCriteria($start, $limit, $sTaskUID = '') - { - try { - //call plugin - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $externalSteps = $oPluginRegistry->getSteps (); - - $aSteps = array (); - $aSteps [] = array ('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer','STEP_MODE' => 'char','STEP_UID_OBJ' => 'char' ); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->add ( StepPeer::TAS_UID, $sTaskUID ); - $oCriteria->addAscendingOrderByColumn ( StepPeer::STEP_POSITION ); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = StepPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $urlEdit = ''; - $linkEditValue = ''; - - switch ($aRow ['STEP_TYPE_OBJ']) { - case 'DYNAFORM' : - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load ( $aRow ['STEP_UID_OBJ'] ); - $sTitle = $aFields ['DYN_TITLE']; - /** @@@init2 PROCCESS FOR DIRECT EDIT LINK @by erik@colosa.com ON DATE 02/06/2008 18:48:13*/ - $DYN_UID = $aFields ['DYN_UID']; - $urlEdit = "dynaformEdit('" . $DYN_UID . "', '" . $aRow ['PRO_UID'] . "');"; - $linkEditValue = 'Edit'; - /** @@@end2*/ - break; - case 'INPUT_DOCUMENT' : - $oInputDocument = new InputDocument ( ); - $aFields = $oInputDocument->load ( $aRow ['STEP_UID_OBJ'] ); - $sTitle = $aFields ['INP_DOC_TITLE']; - break; - case 'OUTPUT_DOCUMENT' : - $oOutputDocument = new OutputDocument ( ); - $aFields = $oOutputDocument->load ( $aRow ['STEP_UID_OBJ'] ); - $sTitle = $aFields ['OUT_DOC_TITLE']; - break; - case 'EXTERNAL' : - $sTitle = 'unknown ' . $aRow ['STEP_UID']; - foreach ( $externalSteps as $key => $val ) { - if ($val->sStepId == $aRow ['STEP_UID_OBJ']) { - $sTitle = $val->sStepTitle; - if (trim ( $val->sSetupStepPage ) != '') { - $urlEdit = "externalStepEdit('" . $aRow ['STEP_UID'] . "', '" . $val->sSetupStepPage . "');"; - $linkEditValue = 'Edit'; - } else { - $urlEdit = ""; - $linkEditValue = ''; - } - } + $aBB[] = array ('STEP_UID' => $aRow['DYN_UID'],'STEP_TITLE' => $aRow['DYN_TITLE'],'STEP_TYPE_OBJ' => 'DYNAFORM','STEP_MODE' => 'EDIT','STEP_UID_OBJ' => $aRow['DYN_UID'] + ); + $oDataset->next(); } - break; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID'); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aBB[] = array ( + 'STEP_UID' => $aRow['INP_DOC_UID'], + 'STEP_UID_OBJ' => $aRow['INP_DOC_UID'], + 'STEP_TITLE' => $aRow['INP_DOC_TITLE'], + 'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT', + 'STEP_MODE' => '' + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C.CON_ID'); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN ); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aBB[] = array ( + 'STEP_UID' => $aRow['OUT_DOC_UID'], + 'STEP_UID_OBJ' => $aRow['OUT_DOC_UID'], + 'STEP_TITLE' => $aRow['OUT_DOC_TITLE'], + 'STEP_TYPE_OBJ' => 'OUTPUT_DOCUMENT', + 'STEP_MODE' => '' + ); + $oDataset->next(); + } + + //call plugin + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); + if (is_array( $externalSteps ) && count( $externalSteps ) > 0) { + foreach ($externalSteps as $key => $stepVar) { + $aBB[] = array ('STEP_UID' => $stepVar->sStepId,'STEP_TITLE' => $stepVar->sStepTitle,'STEP_TYPE_OBJ' => 'EXTERNAL','STEP_MODE' => '' + ); + } + } + + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['availableBB'] = $aBB; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'availableBB' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_TYPE_OBJ' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_TITLE' ); + //return $oCriteria; + return $_SESSION['_DBArray']['availableBB']; + } catch (Exception $oError) { + throw ($oError); } - $aSteps [] = array ('STEP_TITLE' => $sTitle, 'STEP_UID' => $aRow ['STEP_UID'], 'STEP_TYPE_OBJ' => $aRow ['STEP_TYPE_OBJ'], 'STEP_CONDITION' => $aRow ['STEP_CONDITION'], 'STEP_POSITION' => $aRow ['STEP_POSITION'], 'urlEdit' => $urlEdit, 'linkEditValue' => $linkEditValue, 'PRO_UID' => $aRow ['PRO_UID'],'STEP_MODE' => $aRow['STEP_MODE'],'STEP_UID_OBJ' => $aRow['STEP_UID_OBJ'] ); - $oDataset->next (); - } - - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['steps'] = $aSteps; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass ( 'ArrayPeer' ); - $oCriteria = new Criteria ( 'dbarray' ); - $oCriteria->setDBArrayTable ( 'steps' ); - $oCriteria->addAscendingOrderByColumn ( 'STEP_POSITION' ); - //return $oCriteria; - return $_SESSION ['_DBArray']['steps']; - } catch ( Exception $oError ) { - throw ($oError); } - } - //new functions - function getAllStepTriggerCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = StepTriggerPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); + public function getAllStepCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = StepPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } - /* + /** + * Return the steps list criteria object + * @param string $sTaskUID + * @return array + */ + public function getExtStepsCriteria ($start, $limit, $sTaskUID = '') + { + try { + //call plugin + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $externalSteps = $oPluginRegistry->getSteps(); + + $aSteps = array (); + $aSteps[] = array ( + 'STEP_TITLE' => 'char', + 'STEP_UID' => 'char', + 'STEP_TYPE_OBJ' => 'char', + 'STEP_CONDITION' => 'char', + 'STEP_POSITION' => 'integer', + 'STEP_MODE' => 'char', + 'STEP_UID_OBJ' => 'char' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( StepPeer::STEP_POSITION ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $urlEdit = ''; + $linkEditValue = ''; + + switch ($aRow['STEP_TYPE_OBJ']) { + case 'DYNAFORM': + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['STEP_UID_OBJ'] ); + $sTitle = $aFields['DYN_TITLE']; + /** + * @@@init2 PROCCESS FOR DIRECT EDIT LINK @by erik@colosa.com ON DATE 02/06/2008 18:48:13 + */ + $DYN_UID = $aFields['DYN_UID']; + $urlEdit = "dynaformEdit('" . $DYN_UID . "', '" . $aRow['PRO_UID'] . "');"; + $linkEditValue = 'Edit'; + /** + * @@@end2 + */ + break; + case 'INPUT_DOCUMENT': + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->load( $aRow['STEP_UID_OBJ'] ); + $sTitle = $aFields['INP_DOC_TITLE']; + break; + case 'OUTPUT_DOCUMENT': + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->load( $aRow['STEP_UID_OBJ'] ); + $sTitle = $aFields['OUT_DOC_TITLE']; + break; + case 'EXTERNAL': + $sTitle = 'unknown ' . $aRow['STEP_UID']; + foreach ($externalSteps as $key => $val) { + if ($val->sStepId == $aRow['STEP_UID_OBJ']) { + $sTitle = $val->sStepTitle; + if (trim( $val->sSetupStepPage ) != '') { + $urlEdit = "externalStepEdit('" . $aRow['STEP_UID'] . "', '" . $val->sSetupStepPage . "');"; + $linkEditValue = 'Edit'; + } else { + $urlEdit = ""; + $linkEditValue = ''; + } + } + } + break; + } + $aSteps[] = array ('STEP_TITLE' => $sTitle,'STEP_UID' => $aRow['STEP_UID'],'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'],'STEP_CONDITION' => $aRow['STEP_CONDITION'],'STEP_POSITION' => $aRow['STEP_POSITION'],'urlEdit' => $urlEdit,'linkEditValue' => $linkEditValue,'PRO_UID' => $aRow['PRO_UID'],'STEP_MODE' => $aRow['STEP_MODE'],'STEP_UID_OBJ' => $aRow['STEP_UID_OBJ'] + ); + $oDataset->next(); + } + + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['steps'] = $aSteps; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'steps' ); + $oCriteria->addAscendingOrderByColumn( 'STEP_POSITION' ); + //return $oCriteria; + return $_SESSION['_DBArray']['steps']; + } catch (Exception $oError) { + throw ($oError); + } + } + + //new functions + public function getAllStepTriggerCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = StepTriggerPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /* * Return the steps trigger criteria array * @param string $sTaskUID * @return array */ - function getExtStepTriggersCriteria($start, $limit, $sStepUID = '', $sTaskUID = '', $sType = '') - { - //$_SESSION['TASK'] = $sTaskUID; - $aBB = array (); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( 'C.CON_VALUE' ); - $oCriteria->addSelectColumn ( 'STEP_UID' ); - $oCriteria->addSelectColumn ( 'TRI_UID' ); - $oCriteria->addSelectColumn ( 'ST_TYPE' ); - $oCriteria->addSelectColumn ( 'ST_CONDITION' ); - $oCriteria->addSelectColumn ( StepTriggerPeer::ST_POSITION ); - $oCriteria->addAsColumn ( 'TRI_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (StepTriggerPeer::TRI_UID, 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( StepTriggerPeer::STEP_UID, $sStepUID ); - $oCriteria->add ( StepTriggerPeer::TAS_UID, $sTaskUID ); - $oCriteria->add ( StepTriggerPeer::ST_TYPE, $sType ); - $oCriteria->addAscendingOrderByColumn ( StepTriggerPeer::ST_POSITION ); - $this->tmpCriteria = clone $oCriteria; + public function getExtStepTriggersCriteria ($start, $limit, $sStepUID = '', $sTaskUID = '', $sType = '') + { + //$_SESSION['TASK'] = $sTaskUID; + $aBB = array (); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'C.CON_VALUE' ); + $oCriteria->addSelectColumn( 'STEP_UID' ); + $oCriteria->addSelectColumn( 'TRI_UID' ); + $oCriteria->addSelectColumn( 'ST_TYPE' ); + $oCriteria->addSelectColumn( 'ST_CONDITION' ); + $oCriteria->addSelectColumn( StepTriggerPeer::ST_POSITION ); + $oCriteria->addAsColumn( 'TRI_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepTriggerPeer::TRI_UID,'C.CON_ID'); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); + $oCriteria->addAscendingOrderByColumn( StepTriggerPeer::ST_POSITION ); + $this->tmpCriteria = clone $oCriteria; - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aBB[] = array ('CON_VALUE' => $aRow['CON_VALUE'],'STEP_UID' => $aRow['STEP_UID'],'ST_TYPE' => $aRow['ST_TYPE'],'ST_POSITION' => $aRow['ST_POSITION'],'ST_CONDITION' => $aRow['ST_CONDITION'],'TRI_UID' => $aRow['TRI_UID'],'TRI_TITLE' => $aRow['TRI_TITLE'] + ); + $oDataset->next(); + } + return $aBB; + } - $oDataset = InputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aBB [] = array ('CON_VALUE' => $aRow ['CON_VALUE'],'STEP_UID' => $aRow ['STEP_UID'], 'ST_TYPE' => $aRow ['ST_TYPE'],'ST_POSITION' => $aRow ['ST_POSITION'],'ST_CONDITION' => $aRow ['ST_CONDITION'], 'TRI_UID' => $aRow ['TRI_UID'],'TRI_TITLE' => $aRow ['TRI_TITLE'] ); - $oDataset->next (); - } - return $aBB; - } - - /* + /* * Return the available step triggers list object * @param string $sStepUID * @param string $sTaskUID * @param string $sType * @return object */ - function getExtAvailableStepTriggersCriteria($sProcessUID = '',$sStepUID = '', $sTaskUID = '', $sType = '') - { - try - { - $_SESSION['TASK'] = $sTaskUID; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('TRI_UID'); - $oCriteria->add(StepTriggerPeer::TAS_UID , $sTaskUID); - $oCriteria->add(StepTriggerPeer::STEP_UID, $sStepUID); - $oCriteria->add(StepTriggerPeer::ST_TYPE , $sType); - $oDataset = StepTriggerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $sUIDs = "'0'"; - $aUIDs = array(); - while ($aRow = $oDataset->getRow()) { - $sUIDs .= ",'" . $aRow['TRI_UID'] . "'"; - $aUIDs[] = $aRow['TRI_UID']; - $oDataset->next(); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - //$oCriteria->addSelectColumn ( ContentPeer::CON_ID ); - $oCriteria->addSelectColumn('TRI_UID'); - $oCriteria->addSelectColumn('C.CON_VALUE'); - $oCriteria->addAsColumn ( 'TRI_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAlias ( 'C', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array ('TRI_UID', 'C.CON_ID' ); - $aConditions [] = array ('C.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter ); - $aConditions [] = array ('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add(TriggersPeer::TRI_UID, $aUIDs, Criteria::NOT_IN); - $oCriteria->add(TriggersPeer::PRO_UID, $sProcessUID); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ( $aRow = $oDataset->getRow () ) { - $aBB [] = array ('CON_VALUE' => $aRow ['CON_VALUE'],'STEP_UID' => $sStepUID, 'ST_TYPE' => $sType,'TRI_UID' => $aRow ['TRI_UID'],'TRI_TITLE' => $aRow ['TRI_TITLE'] ); - $oDataset->next (); - } - return $aBB; - } - catch ( Exception $e ) { - throw ($e); + public function getExtAvailableStepTriggersCriteria ($sProcessUID = '', $sStepUID = '', $sTaskUID = '', $sType = '') + { + try { + $_SESSION['TASK'] = $sTaskUID; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'TRI_UID' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID ); + $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); + $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $sUIDs = "'0'"; + $aUIDs = array (); + while ($aRow = $oDataset->getRow()) { + $sUIDs .= ",'" . $aRow['TRI_UID'] . "'"; + $aUIDs[] = $aRow['TRI_UID']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + //$oCriteria->addSelectColumn ( ContentPeer::CON_ID ); + $oCriteria->addSelectColumn( 'TRI_UID' ); + $oCriteria->addSelectColumn( 'C.CON_VALUE' ); + $oCriteria->addAsColumn( 'TRI_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array ('TRI_UID','C.CON_ID'); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TriggersPeer::TRI_UID, $aUIDs, Criteria::NOT_IN ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aBB[] = array ( + 'CON_VALUE' => $aRow['CON_VALUE'], + 'STEP_UID' => $sStepUID, + 'ST_TYPE' => $sType, + 'TRI_UID' => $aRow['TRI_UID'], + 'TRI_TITLE' => $aRow['TRI_TITLE'] + ); + $oDataset->next(); + } + return $aBB; + } catch (Exception $e) { + throw ($e); } - } + } - //new functions - //deprecated - function getAllDynaformCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = DynaformPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); + //new functions + //deprecated + public function getAllDynaformCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = DynaformPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } - /* + /* * Return the dynaforms list array * @param string $sProcessUID * @return object */ - function getExtDynaformsList($start, $limit, $sProcessUID = '') - { - //select the main fields for dynaform and the title and description from CONTENT Table - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( DynaformPeer::DYN_UID ); - //$oCriteria->addSelectColumn ( DynaformPeer::PRO_UID ); - $oCriteria->addSelectColumn ( DynaformPeer::DYN_TYPE ); - $oCriteria->addAsColumn ( 'DYN_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAsColumn ( 'DYN_DESCRIPTION', 'C2.CON_VALUE' ); - $oCriteria->addAlias ( 'C1', 'CONTENT' ); - $oCriteria->addAlias ( 'C2', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (DynaformPeer::DYN_UID, 'C1.CON_ID' ); - $aConditions [] = array ('C1.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter ); - $aConditions [] = array ('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $aConditions = array (); - $aConditions [] = array (DynaformPeer::DYN_UID, 'C2.CON_ID' ); - $aConditions [] = array ('C2.CON_CATEGORY', $sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter ); - $aConditions [] = array ('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( DynaformPeer::PRO_UID, $sProcessUID ); + public function getExtDynaformsList ($start, $limit, $sProcessUID = '') + { + //select the main fields for dynaform and the title and description from CONTENT Table + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + //$oCriteria->addSelectColumn ( DynaformPeer::PRO_UID ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_TYPE ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'DYN_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); - //if we have pagination, we use it and limit the query - if($start != '') - $oCriteria->setOffset($start); - - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = DynaformPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $dynaformArray = array (); - $gridLabel = G::LoadTranslation( 'ID_GRID' ); - $normalLabel = G::LoadTranslation( 'ID_NORMAL' ); - - while ( $aRow = $oDataset->getRow () ) { - //this is a trick to copy the description and title from other language when the current language does not exist for this content row. - if (($aRow ['DYN_TITLE'] == NULL)||($aRow ['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_TITLE'] = Content::Load("DYN_TITLE","",$aRow ['DYN_UID'],SYS_LANG); - } - if (($aRow ['DYN_DESCRIPTION'] == NULL)||($aRow ['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $aRow ['DYN_DESCRIPTION'] = Content::Load("DYN_DESCRIPTION","",$aRow ['DYN_UID'],SYS_LANG); - } - - if ( $aRow['DYN_TYPE'] == 'grid' ) $aRow['DYN_TYPE'] = $gridLabel; - if ( $aRow['DYN_TYPE'] == 'xmlform' ) $aRow['DYN_TYPE'] = $normalLabel; - $aRow['TAS_EDIT'] = 0; - $aRow['TAS_VIEW'] = 0; - $dynaformArray [] = $aRow; - $oDataset->next (); - } - $result = array(); - - //Now count how many times the dynaform was used in different tasks in VIEW mode, - $groupbyCriteria = new Criteria ( 'workflow' ); - $groupbyCriteria->clearSelectColumns(); - $groupbyCriteria->addSelectColumn ( StepPeer::STEP_UID_OBJ ); - $groupbyCriteria->addSelectColumn('COUNT(TAS_UID)'); - $groupbyCriteria->add(StepPeer::PRO_UID, $sProcessUID ); - $groupbyCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); - $groupbyCriteria->add(StepPeer::STEP_MODE, 'VIEW'); - $groupbyCriteria->addGroupByColumn(StepPeer::STEP_UID_OBJ); - $oDataset = DynaformPeer::doSelectRS ( $groupbyCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - foreach ( $dynaformArray as $key => $val ) { - if ($val['DYN_UID'] == $aRow['STEP_UID_OBJ'] ) $dynaformArray[$key]['TAS_VIEW'] = $aRow['COUNT(TAS_UID)'] ; - } - $oDataset->next (); - } - - //Now count how many times the dynaform was used in different tasks in EDIT mode, - $groupbyCriteria = new Criteria ( 'workflow' ); - $groupbyCriteria->clearSelectColumns(); - $groupbyCriteria->addSelectColumn ( StepPeer::STEP_UID_OBJ ); - $groupbyCriteria->addSelectColumn('COUNT(TAS_UID)'); - $groupbyCriteria->add(StepPeer::PRO_UID, $sProcessUID ); - $groupbyCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); - $groupbyCriteria->add(StepPeer::STEP_MODE, 'EDIT'); - $groupbyCriteria->addGroupByColumn(StepPeer::STEP_UID_OBJ); - $oDataset = DynaformPeer::doSelectRS ( $groupbyCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - foreach ( $dynaformArray as $key => $val ) { - if ($val['DYN_UID'] == $aRow['STEP_UID_OBJ'] ) $dynaformArray[$key]['TAS_EDIT'] = $aRow['COUNT(TAS_UID)'] ; - } - $oDataset->next (); - } - - //now query to get total dynaform for this process, - //$counCriteria is used to count how many dynaforms there are in this process - $countCriteria = new Criteria ( 'workflow' ); - $countCriteria->clearSelectColumns(); - $countCriteria->addSelectColumn('COUNT(*)'); - $countCriteria->add ( DynaformPeer::PRO_UID, $sProcessUID ); - $oDataset = DynaformPeer::doSelectRS($countCriteria); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - $result['totalCount'] = $aRow[0]; - else - $result['totalCount'] = 0; - $result['data'] = $dynaformArray; - - return $result; - } - - - //new functions - function getAllInputDocumentCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = InputDocumentPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the Input Documents list array - * @param string $sProcessUID - * @return object - */ - function getExtInputDocumentsCriteria($start, $limit,$sProcessUID = '') - { - $aTasks = $this->getAllInputDocsByTask($sProcessUID); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_UID ); - $oCriteria->addSelectColumn ( InputDocumentPeer::PRO_UID ); - $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_VERSIONING ); - $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_DESTINATION_PATH ); - $oCriteria->addAsColumn ( 'INP_DOC_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAsColumn ( 'INP_DOC_DESCRIPTION', 'C2.CON_VALUE' ); - $oCriteria->addAlias ( 'C1', 'CONTENT' ); - $oCriteria->addAlias ( 'C2', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (InputDocumentPeer::INP_DOC_UID, 'C1.CON_ID' ); - $aConditions [] = array ('C1.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter ); - $aConditions [] = array ('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $aConditions = array (); - $aConditions [] = array (InputDocumentPeer::INP_DOC_UID, 'C2.CON_ID' ); - $aConditions [] = array ('C2.CON_CATEGORY', $sDelimiter . 'INP_DOC_DESCRIPTION' . $sDelimiter ); - $aConditions [] = array ('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( InputDocumentPeer::PRO_UID, $sProcessUID ); - - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = InputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $inputDocArray = ""; - $inputDocArray [] = array ('INP_DOC_UID' => 'char', 'PRO_UID' => 'char', 'INP_DOC_TITLE' => 'char', 'INP_DOC_DESCRIPTION' => 'char' ); - while ( $aRow = $oDataset->getRow () ) { - if (($aRow ['INP_DOC_TITLE'] == NULL)||($aRow ['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $inputDocument = new InputDocument ( ); - $inputDocumentObj = $inputDocument->load ( $aRow ['INP_DOC_UID'] ); - $aRow ['INP_DOC_TITLE'] = $inputDocumentObj ['INP_DOC_TITLE']; - $aRow ['INP_DOC_DESCRIPTION'] = $inputDocumentObj ['INP_DOC_DESCRIPTION']; - } - $aRow['INP_DOC_TASKS'] = isset($aTasks[$aRow ['INP_DOC_UID']]) ? $aTasks[$aRow ['INP_DOC_UID']] :0; - $inputDocArray [] = $aRow; - $oDataset->next (); - } - /*global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['inputDocArrayMain'] = $inputDocArray; - //$_SESSION ['_DBArray']['inputDocArrayMain'] = $_DBArray;*/ - - - return $inputDocArray; - } - - //new functions - function getAllOutputDocumentCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = OutputDocumentPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the Output Documents list array - * @param string $sProcessUID - * @return object - */ - function getExtOutputDocumentsCriteria($start, $limit,$sProcessUID = '') - { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( OutputDocumentPeer::OUT_DOC_UID ); - $oCriteria->addSelectColumn ( OutputDocumentPeer::OUT_DOC_TYPE ); - $oCriteria->addSelectColumn ( OutputDocumentPeer::PRO_UID ); - $oCriteria->addAsColumn ( 'OUT_DOC_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAsColumn ( 'OUT_DOC_DESCRIPTION', 'C2.CON_VALUE' ); - $oCriteria->addAlias ( 'C1', 'CONTENT' ); - $oCriteria->addAlias ( 'C2', 'CONTENT' ); - $aConditions = array (); - $aConditions [] = array (OutputDocumentPeer::OUT_DOC_UID, 'C1.CON_ID' ); - $aConditions [] = array ('C1.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter ); - $aConditions [] = array ('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $aConditions = array (); - $aConditions [] = array (OutputDocumentPeer::OUT_DOC_UID, 'C2.CON_ID' ); - $aConditions [] = array ('C2.CON_CATEGORY', $sDelimiter . 'OUT_DOC_DESCRIPTION' . $sDelimiter ); - $aConditions [] = array ('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); - $oCriteria->addJoinMC ( $aConditions, Criteria::LEFT_JOIN ); - $oCriteria->add ( OutputDocumentPeer::PRO_UID, $sProcessUID ); - - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = OutputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $outputDocArray = array (); - $outputDocArray [] = array ('d' => 'char' ); - while ( $aRow = $oDataset->getRow () ) { - if (($aRow ['OUT_DOC_TITLE'] == NULL)||($aRow ['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label - $outputDocument = new OutputDocument ( ); - $outputDocumentObj = $outputDocument->load ( $aRow ['OUT_DOC_UID'] ); - $aRow ['OUT_DOC_TITLE'] = $outputDocumentObj ['OUT_DOC_TITLE']; - $aRow ['OUT_DOC_DESCRIPTION'] = $outputDocumentObj ['OUT_DOC_DESCRIPTION']; - } - $outputDocArray [] = $aRow; - $oDataset->next (); - } - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['outputDocArray'] = $outputDocArray; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass ( 'ArrayPeer' ); - $oCriteria = new Criteria ( 'dbarray' ); - $oCriteria->setDBArrayTable ( 'outputDocArray' ); - - return $outputDocArray; - } - - /** - * subProcess_Properties New Processmap - * - * @param string $sProcessUID - * @param string $sTaskUID - * @param string $sIndex - * @param string $sType (0=>'Asynchronous' , 1=>'Synchronous') - * @return void - * throw Exception $oError - */ - function subProcessExtProperties($sProcessUID = '', $sTaskUID = '', $sIndex = '',$sType = '') - { - try { //echo "$sProcessUID = '', $sTaskUID = '', $sIndex = ''"; - $SP_VARIABLES_OUT = array (); - $SP_VARIABLES_IN = array (); - - /* Prepare page before to show */ - global $_DBArray; - $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['NewCase'] = $this->subProcess_TaskIni ( $sProcessUID ); - unset ( $_DBArray ['TheProcesses'] ); - $_DBArray ['TheProcesses'] [] = array ('pro_uid' => 'char', 'value' => 'char' ); - $i = 0; - foreach ( $_DBArray ['NewCase'] as $aRow ) { - if ($i > 0) { - $_DBArray ['TheProcesses'] [] = array ('pro_uid' => $aRow ['pro_uid'] . '_' . $i, 'value' => $aRow ['value'] ); + //if we have pagination, we use it and limit the query + if ($start != '') { + $oCriteria->setOffset( $start ); } - $i ++; - } - //print'
';print_r($_DBArray['NewCase']);print'
'; - $oCriteria = new Criteria ( 'workflow' ); - $del = DBAdapter::getStringDelimiter (); - $oCriteria->add ( SubProcessPeer::PRO_PARENT, $sProcessUID ); - $oCriteria->add ( SubProcessPeer::TAS_PARENT, $sTaskUID ); - - $oCriteria->addAsColumn ( 'CON_VALUE', 'C1.CON_VALUE', 'CON_TITLE' ); - $oCriteria->addAlias ( "C1", 'CONTENT' ); - $tasTitleConds = array (); - $tasTitleConds [] = array (SubProcessPeer::TAS_PARENT, 'C1.CON_ID' ); - $tasTitleConds [] = array ('C1.CON_CATEGORY', $del . 'TAS_TITLE' . $del ); - $tasTitleConds [] = array ('C1.CON_LANG', $del . SYS_LANG . $del ); - $oCriteria->addJoinMC ( $tasTitleConds, Criteria::LEFT_JOIN ); - - $oDataset = SubProcessPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aRow = $oDataset->getRow (); - /*while($aRow = $oDataset->getRow ()) { - - $aSubProcess [] = array ('CON_VALUE' => $aRow ['CON_VALUE'], 'TAS_UID' => $sTaskUID, 'TASKS' => $sTaskUID,'TAS_TITLE' => $aRow ['CON_VALUE'], - 'SPROCESS_NAME' => $aRow ['CON_VALUE'] - ); - $oDataset->next (); - }*/ - - $aRow ['TASKS'] = $aRow ['TAS_UID']; - //print "
".$aRow['TASKS']."
"; - //$aRow['SPROCESS_NAME'] = $aRow['TAS_TITLE']; - $aRow ['TAS_TITLE'] = $aRow ['CON_VALUE']; - $aRow ['SPROCESS_NAME'] = $aRow ['CON_VALUE']; - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - $aRow ['PRO_TITLE'] = Content::load ( 'PRO_TITLE', '', $aRow ['PRO_UID'] , $lang ); - - if($sType == 0) - { - $SP_VARIABLES_OUT = unserialize ( $aRow ['SP_VARIABLES_OUT'] ); - if (is_array ( $SP_VARIABLES_OUT )) { - $i = 0; - //$aRow1 = array(); - foreach ( $SP_VARIABLES_OUT as $indice => $valor ) { - //$aRow1 [$i] = $aRow; - $aRow [$i]['VAR_OUT1'] = $indice; - $aRow [$i]['VAR_OUT2'] = $valor; - //$aRow1 [$i]['PROCESSES'] = $_DBArray ['TheProcesses']; - $i ++; - } - } - } - - if($sType == 1) - { - $SP_VARIABLES_IN = unserialize ( $aRow ['SP_VARIABLES_IN'] ); - if (is_array ( $SP_VARIABLES_IN )) { - $j = 0; - foreach ( $SP_VARIABLES_IN as $indice => $valor ) { - $aRow1 [$j] = $aRow; - $aRow1 [$j] ['VAR_IN1'] = $indice; - $aRow1 [$j] ['VAR_IN2'] = $valor; - //$aRow1 [$i]['PROCESSES'] = $_DBArray ['TheProcesses']; - $j ++; - } - } - } - $aRow ['INDEX'] = $sIndex; - //print '
';print_r($aRow); - return $aRow; - //return $aSubProcess; - - } catch ( Exception $oError ) { - throw ($oError); - } - } - - //new functions - function getAllProcessSupervisorsCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = ProcessUserPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /** - * listProcessesUser for Extjs - * - * @param string $sProcessUID - * @return array(aProcessUser) $aProcessUser - */ - function listExtProcessesSupervisors($start, $limit,$sProcessUID) { - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessUserPeer::PU_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::USR_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID); - $oCriteria->addSelectColumn(ProcessUserPeer::PU_TYPE); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addJoin(ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - $oDataset = ProcessUserPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aProcessUser = ''; - while ( $aRow = $oDataset->getRow () ) { - $aProcessUser [] = array ('PU_UID' => $aRow ['PU_UID'],'USR_UID' => $aRow ['USR_UID'],'PU_TYPE' => $aRow ['PU_TYPE'],'USR_FIRSTNAME' => $aRow ['USR_FIRSTNAME'],'USR_LASTNAME' => $aRow ['USR_LASTNAME'],'USR_EMAIL' => $aRow ['USR_EMAIL']); - $oDataset->next (); - } - return $aProcessUser; - } - - /** - * listExtNoProcessesUser for Extjs - * - * @param string $sProcessUID - * @return array(aAvailableUser) $aAvailableUser - */ - function listExtNoProcessesUser($sProcessUID) { - G::LoadSystem('rbac'); - $memcache = & PMmemcached::getSingleton(SYS_SYS); - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessUserPeer::USR_UID); - $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID); - $oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR'); - $oDataset = ProcessUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['USR_UID']; - $oDataset->next(); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - $oRBAC = RBAC::getSingleton (); - while ($aRow = $oDataset->getRow()) { - $memKey = 'rbacSession' . session_id(); - if ( ($oRBAC->aUserInfo = $memcache->get($memKey)) === false ) { - $oRBAC->loadUserRolePermission($oRBAC->sSystem, $aRow ['USR_UID']); - $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); - } - $aPermissions = $oRBAC->aUserInfo [$oRBAC->sSystem] ['PERMISSIONS']; - $bInclude = false; - foreach ($aPermissions as $aPermission) { - if ($aPermission ['PER_CODE'] == 'PM_SUPERVISOR') { - $bInclude = true; + if ($limit != '') { + $oCriteria->setLimit( $limit ); } - } - if ($bInclude) { - $aUIDS [] = $aRow ['USR_UID']; - } - $oDataset->next(); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $dynaformArray = array (); + $gridLabel = G::LoadTranslation( 'ID_GRID' ); + $normalLabel = G::LoadTranslation( 'ID_NORMAL' ); + + while ($aRow = $oDataset->getRow()) { + //this is a trick to copy the description and title from other language when the current language does not exist for this content row. + if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG ); + } + if (($aRow['DYN_DESCRIPTION'] == null) || ($aRow['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $aRow['DYN_DESCRIPTION'] = Content::Load( "DYN_DESCRIPTION", "", $aRow['DYN_UID'], SYS_LANG ); + } + + if ($aRow['DYN_TYPE'] == 'grid') + $aRow['DYN_TYPE'] = $gridLabel; + if ($aRow['DYN_TYPE'] == 'xmlform') + $aRow['DYN_TYPE'] = $normalLabel; + $aRow['TAS_EDIT'] = 0; + $aRow['TAS_VIEW'] = 0; + $dynaformArray[] = $aRow; + $oDataset->next(); + } + $result = array (); + + //Now count how many times the dynaform was used in different tasks in VIEW mode, + $groupbyCriteria = new Criteria( 'workflow' ); + $groupbyCriteria->clearSelectColumns(); + $groupbyCriteria->addSelectColumn( StepPeer::STEP_UID_OBJ ); + $groupbyCriteria->addSelectColumn( 'COUNT(TAS_UID)' ); + $groupbyCriteria->add( StepPeer::PRO_UID, $sProcessUID ); + $groupbyCriteria->add( StepPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); + $groupbyCriteria->add( StepPeer::STEP_MODE, 'VIEW' ); + $groupbyCriteria->addGroupByColumn( StepPeer::STEP_UID_OBJ ); + $oDataset = DynaformPeer::doSelectRS( $groupbyCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + foreach ($dynaformArray as $key => $val) { + if ($val['DYN_UID'] == $aRow['STEP_UID_OBJ']) { + $dynaformArray[$key]['TAS_VIEW'] = $aRow['COUNT(TAS_UID)']; + } + } + $oDataset->next(); + } + + //Now count how many times the dynaform was used in different tasks in EDIT mode, + $groupbyCriteria = new Criteria( 'workflow' ); + $groupbyCriteria->clearSelectColumns(); + $groupbyCriteria->addSelectColumn( StepPeer::STEP_UID_OBJ ); + $groupbyCriteria->addSelectColumn( 'COUNT(TAS_UID)' ); + $groupbyCriteria->add( StepPeer::PRO_UID, $sProcessUID ); + $groupbyCriteria->add( StepPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); + $groupbyCriteria->add( StepPeer::STEP_MODE, 'EDIT' ); + $groupbyCriteria->addGroupByColumn( StepPeer::STEP_UID_OBJ ); + $oDataset = DynaformPeer::doSelectRS( $groupbyCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + foreach ($dynaformArray as $key => $val) { + if ($val['DYN_UID'] == $aRow['STEP_UID_OBJ']) { + $dynaformArray[$key]['TAS_EDIT'] = $aRow['COUNT(TAS_UID)']; + } + } + $oDataset->next(); + } + + //now query to get total dynaform for this process, + //$counCriteria is used to count how many dynaforms there are in this process + $countCriteria = new Criteria( 'workflow' ); + $countCriteria->clearSelectColumns(); + $countCriteria->addSelectColumn( 'COUNT(*)' ); + $countCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oDataset = DynaformPeer::doSelectRS( $countCriteria ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + $result['totalCount'] = $aRow[0]; + } else { + $result['totalCount'] = 0; + } + $result['data'] = $dynaformArray; + + return $result; } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::IN); - - $oDataset = UsersPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aAvailableUser = ''; - while ( $aRow = $oDataset->getRow () ) { - $aAvailableUser [] = array ('USR_UID' => $aRow ['USR_UID'],'USR_FIRSTNAME' => $aRow ['USR_FIRSTNAME'],'USR_LASTNAME' => $aRow ['USR_LASTNAME']); - $oDataset->next (); - } - return $aAvailableUser; - } - - //new functions - function getAllSupervisorDynaformsCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = StepSupervisorPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the supervisors dynaforms list array - * @param string $sProcessUID - * @return array - */ - - function getExtSupervisorDynaformsList($start, $limit,$sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::PRO_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_TYPE_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(StepSupervisorPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID); - $aConditions [] = array(StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'DYNAFORM' . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); - $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM'); - $oCriteria->addAscendingOrderByColumn(StepSupervisorPeer::STEP_POSITION); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = StepSupervisorPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aProcessDynaform = ''; - while ( $aRow = $oDataset->getRow () ) { - $aProcessDynaform [] = array ('DYN_TITLE' => $aRow ['DYN_TITLE'],'DYN_UID' => $aRow ['DYN_UID'],'STEP_UID' => $aRow ['STEP_UID'],'STEP_UID_OBJ' => $aRow ['STEP_UID_OBJ'],'STEP_TYPE_OBJ' => $aRow ['STEP_TYPE_OBJ'],'STEP_POSITION' => $aRow ['STEP_POSITION']); - $oDataset->next (); - } - return $aProcessDynaform; - } - - /* - * Return the available supervisors dynaforms list array - * @param string $sProcessUID - * @return array - */ - - function getExtAvailableSupervisorDynaformsList($sProcessUID = '') { - $oCriteria = $this->getSupervisorDynaformsCriteria($sProcessUID); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['STEP_UID_OBJ']; - $oDataset->next(); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addSelectColumn(DynaformPeer::PRO_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oCriteria->add(DynaformPeer::DYN_UID, $aUIDS, Criteria::NOT_IN); - - $oDataset = DynaformPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aAvailableProcessDynaform = ''; - while ( $aRow = $oDataset->getRow () ) { - $aAvailableProcessDynaform [] = array ('DYN_TITLE' => $aRow ['DYN_TITLE'],'DYN_UID' => $aRow ['DYN_UID']); - $oDataset->next (); - } - return $aAvailableProcessDynaform; - } - - //new functions - function getAllSupervisorInputsCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = StepSupervisorPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the supervisors input document list array - * @param string $sProcessUID - * @return array - */ - - function getExtSupervisorInputsList($start, $limit,$sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::PRO_UID); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_TYPE_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_UID_OBJ); - $oCriteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(StepSupervisorPeer::STEP_UID_OBJ, InputDocumentPeer::INP_DOC_UID); - $aConditions [] = array(StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); - $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT'); - $oCriteria->addAscendingOrderByColumn(StepSupervisorPeer::STEP_POSITION); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - $oDataset = StepSupervisorPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aProcessInputDoc = ''; - while ( $aRow = $oDataset->getRow () ) { - $aProcessInputDoc [] = array ('INP_DOC_TITLE' => $aRow ['INP_DOC_TITLE'],'INP_DOC_UID' => $aRow ['INP_DOC_UID'],'STEP_UID' => $aRow ['STEP_UID'],'STEP_UID_OBJ' => $aRow ['STEP_UID_OBJ'],'STEP_TYPE_OBJ' => $aRow ['STEP_TYPE_OBJ'],'STEP_POSITION' => $aRow ['STEP_POSITION']); - $oDataset->next (); - } - return $aProcessInputDoc; - } - - /* - * Return the available supervisors input documents list array - * @param string $sProcessUID - * @return array - */ - - function getExtAvailableSupervisorInputsList($sProcessUID = '') { - $oCriteria = $this->getSupervisorInputsCriteria($sProcessUID); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aUIDS = array(); - while ($aRow = $oDataset->getRow()) { - $aUIDS [] = $aRow ['STEP_UID_OBJ']; - $oDataset->next(); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addSelectColumn(InputDocumentPeer::PRO_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $aUIDS, Criteria::NOT_IN); - $oDataset = InputDocumentPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - $aAvailableProcessIODoc = ''; - while ( $aRow = $oDataset->getRow () ) { - $aAvailableProcessIODoc [] = array ('INP_DOC_TITLE' => $aRow ['INP_DOC_TITLE'],'INP_DOC_UID' => $aRow ['INP_DOC_UID']); - $oDataset->next (); - } - return $aAvailableProcessIODoc; - } //new functions - function getAllDbSourceCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = DbSourcePeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - - /** - * listDBSConnection - * - * @param string $sProcessUID - * @return array(aDBList) $aDBList - */ - function getExtCriteriaDBSList($start, $limit,$sProcessUID) + public function getAllInputDocumentCount () { - try - { - $aDBList = array (); - //$aDBList [] = array ('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer','STEP_MODE' => 'char','STEP_UID_OBJ' => 'char' ); + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = InputDocumentPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /** + * Return the Input Documents list array + * + * @param string $sProcessUID + * @return object + */ + public function getExtInputDocumentsCriteria ($start, $limit, $sProcessUID = '') + { + $aTasks = $this->getAllInputDocsByTask( $sProcessUID ); $sDelimiter = DBAdapter::getStringDelimiter(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_UID); - $oCriteria->addSelectColumn(DbSourcePeer::PRO_UID); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_TYPE); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_SERVER); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_DATABASE_NAME); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_USERNAME); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_PASSWORD); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_PORT); - $oCriteria->addAsColumn('DBS_DESCRIPTION', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions[] = array(DbSourcePeer::DBS_UID, 'C.CON_ID'); - $aConditions[] = array('C.CON_CATEGORY', $sDelimiter . 'DBS_DESCRIPTION' . $sDelimiter); - $aConditions[] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProcessUID); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_VERSIONING ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_DESTINATION_PATH ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'INP_DOC_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'INP_DOC_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); $this->tmpCriteria = clone $oCriteria; - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = DbSourcePeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next (); - while ( $aRow = $oDataset->getRow () ) { - $aDBList [] = array ('DBS_UID' => $aRow ['DBS_UID'],'DBS_TYPE' => $aRow ['DBS_TYPE'],'DBS_SERVER' => $aRow ['DBS_SERVER'],'DBS_DATABASE_NAME' => $aRow ['DBS_DATABASE_NAME'],'DBS_USERNAME' => $aRow ['DBS_USERNAME'],'DBS_PASSWORD' => $aRow ['DBS_PASSWORD'],'DBS_DESCRIPTION' => $aRow ['DBS_DESCRIPTION'],'DBS_PORT' => $aRow ['DBS_PORT']); - $oDataset->next (); + if ($start != '') { + $oCriteria->setOffset( $start ); } - return $aDBList; - } - catch ( Exception $e ) { + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $inputDocArray = ""; + $inputDocArray[] = array ('INP_DOC_UID' => 'char','PRO_UID' => 'char','INP_DOC_TITLE' => 'char','INP_DOC_DESCRIPTION' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + if (($aRow['INP_DOC_TITLE'] == null) || ($aRow['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label + $inputDocument = new InputDocument(); + $inputDocumentObj = $inputDocument->load( $aRow['INP_DOC_UID'] ); + $aRow['INP_DOC_TITLE'] = $inputDocumentObj['INP_DOC_TITLE']; + $aRow['INP_DOC_DESCRIPTION'] = $inputDocumentObj['INP_DOC_DESCRIPTION']; + } + $aRow['INP_DOC_TASKS'] = isset( $aTasks[$aRow['INP_DOC_UID']] ) ? $aTasks[$aRow['INP_DOC_UID']] : 0; + $inputDocArray[] = $aRow; + $oDataset->next(); + } + /*global $_DBArray; + $_DBArray = (isset ( $_SESSION ['_DBArray'] ) ? $_SESSION ['_DBArray'] : ''); + $_DBArray ['inputDocArrayMain'] = $inputDocArray; + //$_SESSION ['_DBArray']['inputDocArrayMain'] = $_DBArray;*/ + + return $inputDocArray; + } + + public function getAllOutputDocumentCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = OutputDocumentPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /** + * Return the Output Documents list array + * + * @param string $sProcessUID + * @return object + */ + + public function getExtOutputDocumentsCriteria ($start, $limit, $sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_TYPE ); + $oCriteria->addSelectColumn( OutputDocumentPeer::PRO_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'OUT_DOC_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'OUT_DOC_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $outputDocArray = array (); + $outputDocArray[] = array ('d' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + // There is no transaltion for this Document name, try to get/regenerate the label + if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) { + $outputDocument = new OutputDocument(); + $outputDocumentObj = $outputDocument->load( $aRow['OUT_DOC_UID'] ); + $aRow['OUT_DOC_TITLE'] = $outputDocumentObj['OUT_DOC_TITLE']; + $aRow['OUT_DOC_DESCRIPTION'] = $outputDocumentObj['OUT_DOC_DESCRIPTION']; + } + $outputDocArray[] = $aRow; + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['outputDocArray'] = $outputDocArray; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'outputDocArray' ); + + return $outputDocArray; + } + + /** + * subProcess_Properties New Processmap + * + * @param string $sProcessUID + * @param string $sTaskUID + * @param string $sIndex + * @param string $sType (0=>'Asynchronous' , 1=>'Synchronous') + * @return void throw Exception $oError + */ + public function subProcessExtProperties ($sProcessUID = '', $sTaskUID = '', $sIndex = '', $sType = '') + { + try { + $SP_VARIABLES_OUT = array (); + $SP_VARIABLES_IN = array (); + + /* Prepare page before to show */ + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['NewCase'] = $this->subProcess_TaskIni( $sProcessUID ); + unset( $_DBArray['TheProcesses'] ); + $_DBArray['TheProcesses'][] = array ('pro_uid' => 'char','value' => 'char' + ); + $i = 0; + foreach ($_DBArray['NewCase'] as $aRow) { + if ($i > 0) { + $_DBArray['TheProcesses'][] = array ('pro_uid' => $aRow['pro_uid'] . '_' . $i,'value' => $aRow['value'] + ); + } + $i ++; + } + //print'
';print_r($_DBArray['NewCase']);print'
'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProcessUID ); + $oCriteria->add( SubProcessPeer::TAS_PARENT, $sTaskUID ); + + $oCriteria->addAsColumn( 'CON_VALUE', 'C1.CON_VALUE', 'CON_TITLE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $tasTitleConds = array (); + $tasTitleConds[] = array (SubProcessPeer::TAS_PARENT,'C1.CON_ID' + ); + $tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN ); + + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + /* + while($aRow = $oDataset->getRow ()) { + $aSubProcess [] = array ('CON_VALUE' => $aRow ['CON_VALUE'], 'TAS_UID' => $sTaskUID, 'TASKS' => $sTaskUID,'TAS_TITLE' => $aRow ['CON_VALUE'], + 'SPROCESS_NAME' => $aRow ['CON_VALUE'] + ); + $oDataset->next (); + } + */ + + $aRow['TASKS'] = $aRow['TAS_UID']; + //print "
".$aRow['TASKS']."
"; + //$aRow['SPROCESS_NAME'] = $aRow['TAS_TITLE']; + $aRow['TAS_TITLE'] = $aRow['CON_VALUE']; + $aRow['SPROCESS_NAME'] = $aRow['CON_VALUE']; + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + $aRow['PRO_TITLE'] = Content::load( 'PRO_TITLE', '', $aRow['PRO_UID'], $lang ); + + if ($sType == 0) { + $SP_VARIABLES_OUT = unserialize( $aRow['SP_VARIABLES_OUT'] ); + if (is_array( $SP_VARIABLES_OUT )) { + $i = 0; + //$aRow1 = array(); + foreach ($SP_VARIABLES_OUT as $indice => $valor) { + //$aRow1 [$i] = $aRow; + $aRow[$i]['VAR_OUT1'] = $indice; + $aRow[$i]['VAR_OUT2'] = $valor; + //$aRow1 [$i]['PROCESSES'] = $_DBArray ['TheProcesses']; + $i ++; + } + } + } + + if ($sType == 1) { + $SP_VARIABLES_IN = unserialize( $aRow['SP_VARIABLES_IN'] ); + if (is_array( $SP_VARIABLES_IN )) { + $j = 0; + foreach ($SP_VARIABLES_IN as $indice => $valor) { + $aRow1[$j] = $aRow; + $aRow1[$j]['VAR_IN1'] = $indice; + $aRow1[$j]['VAR_IN2'] = $valor; + //$aRow1 [$i]['PROCESSES'] = $_DBArray ['TheProcesses']; + $j ++; + } + } + } + $aRow['INDEX'] = $sIndex; + //print '
';print_r($aRow); + return $aRow; + //return $aSubProcess; + + } catch (Exception $oError) { + throw ($oError); + } + } + + public function getAllProcessSupervisorsCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = ProcessUserPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /** + * listProcessesUser for Extjs + * + * @param string $sProcessUID + * @return array(aProcessUser) $aProcessUser + */ + public function listExtProcessesSupervisors ($start, $limit, $sProcessUID) + { + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessUserPeer::PU_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::USR_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::PRO_UID ); + $oCriteria->addSelectColumn( ProcessUserPeer::PU_TYPE ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_EMAIL ); + $oCriteria->addJoin( ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = ProcessUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aProcessUser = ''; + while ($aRow = $oDataset->getRow()) { + $aProcessUser[] = array ('PU_UID' => $aRow['PU_UID'],'USR_UID' => $aRow['USR_UID'],'PU_TYPE' => $aRow['PU_TYPE'],'USR_FIRSTNAME' => $aRow['USR_FIRSTNAME'],'USR_LASTNAME' => $aRow['USR_LASTNAME'],'USR_EMAIL' => $aRow['USR_EMAIL'] + ); + $oDataset->next(); + } + return $aProcessUser; + } + + /** + * listExtNoProcessesUser for Extjs + * + * @param string $sProcessUID + * @return array(aAvailableUser) $aAvailableUser + */ + public function listExtNoProcessesUser ($sProcessUID) + { + G::LoadSystem( 'rbac' ); + $memcache = & PMmemcached::getSingleton( SYS_SYS ); + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessUserPeer::USR_UID ); + $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( ProcessUserPeer::PU_TYPE, 'SUPERVISOR' ); + $oDataset = ProcessUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['USR_UID']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + $oRBAC = RBAC::getSingleton(); + while ($aRow = $oDataset->getRow()) { + $memKey = 'rbacSession' . session_id(); + if (($oRBAC->aUserInfo = $memcache->get( $memKey )) === false) { + $oRBAC->loadUserRolePermission( $oRBAC->sSystem, $aRow['USR_UID'] ); + $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); + } + $aPermissions = $oRBAC->aUserInfo[$oRBAC->sSystem]['PERMISSIONS']; + $bInclude = false; + foreach ($aPermissions as $aPermission) { + if ($aPermission['PER_CODE'] == 'PM_SUPERVISOR') { + $bInclude = true; + } + } + if ($bInclude) { + $aUIDS[] = $aRow['USR_UID']; + } + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::IN ); + + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aAvailableUser = ''; + while ($aRow = $oDataset->getRow()) { + $aAvailableUser[] = array ('USR_UID' => $aRow['USR_UID'],'USR_FIRSTNAME' => $aRow['USR_FIRSTNAME'],'USR_LASTNAME' => $aRow['USR_LASTNAME'] + ); + $oDataset->next(); + } + return $aAvailableUser; + } + + //new functions + public function getAllSupervisorDynaformsCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = StepSupervisorPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /** + * Return the supervisors dynaforms list array + * + * @param string $sProcessUID + * @return array + */ + + public function getExtSupervisorDynaformsList ($start, $limit, $sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::PRO_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_TYPE_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_POSITION ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,DynaformPeer::DYN_UID + ); + $aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'DYNAFORM' . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM' ); + $oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aProcessDynaform = ''; + while ($aRow = $oDataset->getRow()) { + $aProcessDynaform[] = array ('DYN_TITLE' => $aRow['DYN_TITLE'],'DYN_UID' => $aRow['DYN_UID'],'STEP_UID' => $aRow['STEP_UID'],'STEP_UID_OBJ' => $aRow['STEP_UID_OBJ'],'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'],'STEP_POSITION' => $aRow['STEP_POSITION'] + ); + $oDataset->next(); + } + return $aProcessDynaform; + } + + /* + * Return the available supervisors dynaforms list array + * @param string $sProcessUID + * @return array + */ + + public function getExtAvailableSupervisorDynaformsList ($sProcessUID = '') + { + $oCriteria = $this->getSupervisorDynaformsCriteria( $sProcessUID ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['STEP_UID_OBJ']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addSelectColumn( DynaformPeer::PRO_UID ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oCriteria->add( DynaformPeer::DYN_UID, $aUIDS, Criteria::NOT_IN ); + + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aAvailableProcessDynaform = ''; + while ($aRow = $oDataset->getRow()) { + $aAvailableProcessDynaform[] = array ('DYN_TITLE' => $aRow['DYN_TITLE'],'DYN_UID' => $aRow['DYN_UID'] + ); + $oDataset->next(); + } + return $aAvailableProcessDynaform; + } + + //new functions + public function getAllSupervisorInputsCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = StepSupervisorPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /* + * Return the supervisors input document list array + * @param string $sProcessUID + * @return array + */ + + public function getExtSupervisorInputsList ($start, $limit, $sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::PRO_UID ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_TYPE_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID_OBJ ); + $oCriteria->addSelectColumn( StepSupervisorPeer::STEP_POSITION ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,InputDocumentPeer::INP_DOC_UID); + $aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID'); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT' ); + $oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aProcessInputDoc = ''; + while ($aRow = $oDataset->getRow()) { + $aProcessInputDoc[] = array ('INP_DOC_TITLE' => $aRow['INP_DOC_TITLE'],'INP_DOC_UID' => $aRow['INP_DOC_UID'],'STEP_UID' => $aRow['STEP_UID'],'STEP_UID_OBJ' => $aRow['STEP_UID_OBJ'],'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'],'STEP_POSITION' => $aRow['STEP_POSITION'] + ); + $oDataset->next(); + } + return $aProcessInputDoc; + } + + /* + * Return the available supervisors input documents list array + * @param string $sProcessUID + * @return array + */ + + public function getExtAvailableSupervisorInputsList ($sProcessUID = '') + { + $oCriteria = $this->getSupervisorInputsCriteria( $sProcessUID ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aUIDS = array (); + while ($aRow = $oDataset->getRow()) { + $aUIDS[] = $aRow['STEP_UID_OBJ']; + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $aUIDS, Criteria::NOT_IN ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aAvailableProcessIODoc = ''; + while ($aRow = $oDataset->getRow()) { + $aAvailableProcessIODoc[] = array ('INP_DOC_TITLE' => $aRow['INP_DOC_TITLE'],'INP_DOC_UID' => $aRow['INP_DOC_UID'] + ); + $oDataset->next(); + } + return $aAvailableProcessIODoc; + } + + //new functions + public function getAllDbSourceCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = DbSourcePeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /** + * listDBSConnection + * + * @param string $sProcessUID + * @return array(aDBList) $aDBList + */ + public function getExtCriteriaDBSList ($start, $limit, $sProcessUID) + { + try { + $aDBList = array (); + //$aDBList [] = array ('STEP_TITLE' => 'char', 'STEP_UID' => 'char', 'STEP_TYPE_OBJ' => 'char', 'STEP_CONDITION' => 'char', 'STEP_POSITION' => 'integer','STEP_MODE' => 'char','STEP_UID_OBJ' => 'char' ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_UID ); + $oCriteria->addSelectColumn( DbSourcePeer::PRO_UID ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_TYPE ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_SERVER ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_USERNAME ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_PASSWORD ); + $oCriteria->addSelectColumn( DbSourcePeer::DBS_PORT ); + $oCriteria->addAsColumn( 'DBS_DESCRIPTION', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DbSourcePeer::DBS_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DBS_DESCRIPTION' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProcessUID ); + + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aDBList[] = array ('DBS_UID' => $aRow['DBS_UID'],'DBS_TYPE' => $aRow['DBS_TYPE'],'DBS_SERVER' => $aRow['DBS_SERVER'],'DBS_DATABASE_NAME' => $aRow['DBS_DATABASE_NAME'],'DBS_USERNAME' => $aRow['DBS_USERNAME'],'DBS_PASSWORD' => $aRow['DBS_PASSWORD'],'DBS_DESCRIPTION' => $aRow['DBS_DESCRIPTION'],'DBS_PORT' => $aRow['DBS_PORT'] + ); + $oDataset->next(); + } + return $aDBList; + } catch (Exception $e) { throw ($e); } } /** - * newExtObjectPermission - * - * @param string $sProcessUID - * @param string $sAction - * @return array depending on action - */ - function newExtObjectPermission($sProcessUID,$sAction) + * newExtObjectPermission + * + * @param string $sProcessUID + * @param string $sAction + * @return array depending on action + */ + public function newExtObjectPermission ($sProcessUID, $sAction) { - $aAllTasks = array(); - $aAllTasks [] = array('UID' => 'char', 'LABEL' => 'char'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TaskPeer::PRO_UID); - $oCriteria->addSelectColumn(TaskPeer::TAS_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $aConditions = array(); - $aConditions [] = array(0 => TaskPeer::TAS_UID, 1 => ContentPeer::CON_ID); - $aConditions [] = array(0 => ContentPeer::CON_CATEGORY, 1 => DBAdapter::getStringDelimiter () . 'TAS_TITLE' . DBAdapter::getStringDelimiter ()); - $aConditions [] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ()); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAllTasks [] = array('UID' => $aRow ['TAS_UID'], 'LABEL' => $aRow ['CON_VALUE']); - $oDataset->next(); - } - $aUsersGroups = array(); - $aUsersGroups [] = array('UID' => 'char', 'LABEL' => 'char'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE); - $aConditions = array(); - $aConditions [] = array(GroupwfPeer::GRP_UID, ContentPeer::CON_ID); - $aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ()); - $aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ()); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsersGroups [] = array('UID' => '2|' . $aRow ['GRP_UID'], 'LABEL' => $aRow ['GRP_TITLE'] . ' (' . G::LoadTranslation('ID_GROUP') . ')'); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsersGroups [] = array('UID' => '1|' . $aRow ['USR_UID'], 'LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'] . ' (' . $aRow ['USR_USERNAME'] . ')'); - $oDataset->next(); - } - $aAllObjects = array(); - $aAllObjects [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllDynaforms = array(); - $aAllDynaforms [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllInputs = array(); - $aAllInputs [] = array('UID' => 'char', 'LABEL' => 'char'); - $aAllOutputs = array(); - $aAllOutputs [] = array('UID' => 'char', 'LABEL' => 'char'); - $oCriteria = $this->getDynaformsCriteria($sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'XMLFORM'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRow ['DYN_TITLE'] = (isset($aRow ['DYN_TITLE'])) ? $aRow ['DYN_TITLE'] : ''; - $aAllObjects [] = array('UID' => 'DYNAFORM|' . $aRow ['DYN_UID'], - 'LABEL' => $aRow ['DYN_TITLE'] . ' (' . G::LoadTranslation('ID_DYNAFORM') . ')'); - $aAllDynaforms [] = array('UID' => $aRow ['DYN_UID'], - 'LABEL' => $aRow ['DYN_TITLE']); - $oDataset->next(); - } - G::LoadClass('ArrayPeer'); - $oDataset = ArrayBasePeer::doSelectRS($this->getInputDocumentsCriteria($sProcessUID)); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAllObjects [] = array('UID' => 'INPUT_DOCUMENT|' . $aRow ['INP_DOC_UID'], - 'LABEL' => $aRow ['INP_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_INPUT_DOCUMENT') . ')'); - $aAllInputs [] = array('UID' => $aRow ['INP_DOC_UID'], - 'LABEL' => $aRow ['INP_DOC_TITLE']); - $oDataset->next(); - } - G::LoadClass('ArrayPeer'); - $oDataset = ArrayBasePeer::doSelectRS($this->getOutputDocumentsCriteria($sProcessUID)); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAllObjects [] = array('UID' => 'OUTPUT_DOCUMENT|' . $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_OUTPUT_DOCUMENT') . ')'); - $aAllOutputs [] = array('UID' => $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE']); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - - switch($sAction){ - case 'tasks': - return $aAllTasks; - break; - case 'users': - return $aUsersGroups; - break; - case 'dynaform': - return $aAllDynaforms; - break; - case 'input': - return $aAllInputs; - break; - case 'output': - return $aAllOutputs; - break; - } - } - - function ExtcaseTracker($sProcessUID) { - $oCriteria = new Criteria ( ); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $sProcessUID); - $oCaseTracker = new CaseTracker ( ); - if (CaseTrackerPeer::doCount($oCriteria) === 0) { - $aCaseTracker = array('PRO_UID' => $sProcessUID, 'CT_MAP_TYPE' => 'PROCESSMAP', 'CT_DERIVATION_HISTORY' => 1, 'CT_MESSAGE_HISTORY' => 1); - $oCaseTracker->create($aCaseTracker); - } else { - $aCaseTracker = $oCaseTracker->load($sProcessUID); - } - return $aCaseTracker; - /*global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'tracker/tracker_Configuration', '', $aCaseTracker, '../tracker/tracker_Save'); - G::RenderPage('publish', 'raw'); - return true;*/ - } - - //new functions - function getAllCaseTrackerObjectCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = CaseTrackerObjectPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /** - * getCaseTrackerObjectsCriteria - * - * @param string $sProcessUID - * @return object(Criteria) $oCriteria - */ - function getExtCaseTrackerObjectsCriteria($start, $limit,$sProcessUID) { - $aObjects = array(); - $aObjects [] = array('CTO_TITLE' => 'char', 'CTO_UID' => 'char', 'CTO_TYPE_OBJ' => 'char', 'CTO_UID_OBJ' => 'char', 'CTO_CONDITION' => 'char', 'CTO_POSITION' => 'integer'); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(CaseTrackerObjectPeer::CTO_POSITION); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - try { - switch ($aRow ['CTO_TYPE_OBJ']) { - case 'DYNAFORM' : - $oDynaform = new Dynaform ( ); - $aFields = $oDynaform->load($aRow ['CTO_UID_OBJ']); - $sTitle = $aFields ['DYN_TITLE']; - break; - case 'INPUT_DOCUMENT' : - $oInputDocument = new InputDocument ( ); - $aFields = $oInputDocument->load($aRow ['CTO_UID_OBJ']); - $sTitle = $aFields ['INP_DOC_TITLE']; - break; - case 'OUTPUT_DOCUMENT' : - $oOutputDocument = new OutputDocument ( ); - $aFields = $oOutputDocument->load($aRow ['CTO_UID_OBJ']); - $sTitle = $aFields ['OUT_DOC_TITLE']; - break; + $aAllTasks = array (); + $aAllTasks[] = array ('UID' => 'char','LABEL' => 'char' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TaskPeer::PRO_UID ); + $oCriteria->addSelectColumn( TaskPeer::TAS_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $aConditions = array (); + $aConditions[] = array (0 => TaskPeer::TAS_UID,1 => ContentPeer::CON_ID + ); + $aConditions[] = array (0 => ContentPeer::CON_CATEGORY,1 => DBAdapter::getStringDelimiter() . 'TAS_TITLE' . DBAdapter::getStringDelimiter() + ); + $aConditions[] = array (0 => ContentPeer::CON_LANG,1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskPeer::PRO_UID, $sProcessUID ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllTasks[] = array ('UID' => $aRow['TAS_UID'],'LABEL' => $aRow['CON_VALUE'] + ); + $oDataset->next(); } - $aObjects [] = array('CTO_TITLE' => $sTitle, 'CTO_UID' => $aRow ['CTO_UID'], 'CTO_TYPE_OBJ' => $aRow ['CTO_TYPE_OBJ'], 'CTO_UID_OBJ' => $aRow ['CTO_UID_OBJ'], 'CTO_CONDITION' => $aRow ['CTO_CONDITION'], 'CTO_POSITION' => $aRow ['CTO_POSITION']); - } + $aUsersGroups = array (); + $aUsersGroups[] = array ('UID' => 'char','LABEL' => 'char' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addAsColumn( 'GRP_TITLE', ContentPeer::CON_VALUE ); + $aConditions = array (); + $aConditions[] = array (GroupwfPeer::GRP_UID,ContentPeer::CON_ID + ); + $aConditions[] = array (ContentPeer::CON_CATEGORY,DBAdapter::getStringDelimiter() . 'GRP_TITLE' . DBAdapter::getStringDelimiter() + ); + $aConditions[] = array (ContentPeer::CON_LANG,DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsersGroups[] = array ('UID' => '2|' . $aRow['GRP_UID'],'LABEL' => $aRow['GRP_TITLE'] . ' (' . G::LoadTranslation( 'ID_GROUP' ) . ')' + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsersGroups[] = array ('UID' => '1|' . $aRow['USR_UID'],'LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'] . ' (' . $aRow['USR_USERNAME'] . ')' + ); + $oDataset->next(); + } + $aAllObjects = array (); + $aAllObjects[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllDynaforms = array (); + $aAllDynaforms[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllInputs = array (); + $aAllInputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + $aAllOutputs = array (); + $aAllOutputs[] = array ('UID' => 'char','LABEL' => 'char' + ); + $oCriteria = $this->getDynaformsCriteria( $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'XMLFORM' ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRow['DYN_TITLE'] = (isset( $aRow['DYN_TITLE'] )) ? $aRow['DYN_TITLE'] : ''; + $aAllObjects[] = array ('UID' => 'DYNAFORM|' . $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] . ' (' . G::LoadTranslation( 'ID_DYNAFORM' ) . ')' + ); + $aAllDynaforms[] = array ('UID' => $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] + ); + $oDataset->next(); + } + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getInputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'INPUT_DOCUMENT|' . $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_INPUT_DOCUMENT' ) . ')' + ); + $aAllInputs[] = array ('UID' => $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] + ); + $oDataset->next(); + } + G::LoadClass( 'ArrayPeer' ); + $oDataset = ArrayBasePeer::doSelectRS( $this->getOutputDocumentsCriteria( $sProcessUID ) ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects[] = array ('UID' => 'OUTPUT_DOCUMENT|' . $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ) . ')' + ); + $aAllOutputs[] = array ('UID' => $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); - catch (Exception $oError) { //Nothing - } - $oDataset->next(); + switch ($sAction) { + case 'tasks': + return $aAllTasks; + break; + case 'users': + return $aUsersGroups; + break; + case 'dynaform': + return $aAllDynaforms; + break; + case 'input': + return $aAllInputs; + break; + case 'output': + return $aAllOutputs; + break; + } } - // return $aObjects; - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['objects'] = $aObjects; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('objects'); - $oCriteria->addAscendingOrderByColumn('CTO_POSITION'); - return $aObjects; - } - - /** - * getAvailableCaseTrackerObjectsCriteria - * - * @param string $sProcessUID Default value empty - * @return object(Criteria) $oCriteria - */ - function getAvailableExtCaseTrackerObjects($sProcessUID = '') { - $oCriteria = $this->getCaseTrackerObjectsCriteria($sProcessUID); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aDynaformsUIDS = array(); - $aInputsUIDS = array(); - $aOutputsUIDS = array(); - while ($aRow = $oDataset->getRow()) { - switch ($aRow ['CTO_TYPE_OBJ']) { - case 'DYNAFORM' : - $aDynaformsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - case 'INPUT_DOCUMENT' : - $aInputsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - case 'OUTPUT_DOCUMENT' : - $aOutputsUIDS [] = $aRow ['CTO_UID_OBJ']; - break; - } - $oDataset->next(); + public function ExtcaseTracker ($sProcessUID) + { + $oCriteria = new Criteria(); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProcessUID ); + $oCaseTracker = new CaseTracker(); + if (CaseTrackerPeer::doCount( $oCriteria ) === 0) { + $aCaseTracker = array ('PRO_UID' => $sProcessUID,'CT_MAP_TYPE' => 'PROCESSMAP','CT_DERIVATION_HISTORY' => 1,'CT_MESSAGE_HISTORY' => 1 + ); + $oCaseTracker->create( $aCaseTracker ); + } else { + $aCaseTracker = $oCaseTracker->load( $sProcessUID ); + } + return $aCaseTracker; + /*global $G_PUBLISH; + $G_PUBLISH = new Publisher ( ); + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'tracker/tracker_Configuration', '', $aCaseTracker, '../tracker/tracker_Save'); + G::RenderPage('publish', 'raw'); + return true;*/ } - $aAvailableObjects = array(); - $aAvailableObjects [] = array('OBJECT_UID' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT_TITLE' => 'char'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); - $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(DynaformPeer::DYN_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oCriteria->add(DynaformPeer::DYN_UID, $aDynaformsUIDS, Criteria::NOT_IN); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['DYN_UID'], 'OBJECT_TYPE' => 'DYNAFORM', 'OBJECT_TITLE' => $aRow ['DYN_TITLE']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(InputDocumentPeer::INP_DOC_UID); - $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $aInputsUIDS, Criteria::NOT_IN); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['INP_DOC_UID'], 'OBJECT_TYPE' => 'INPUT_DOCUMENT', 'OBJECT_TITLE' => $aRow ['INP_DOC_TITLE']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(OutputDocumentPeer::OUT_DOC_UID); - $oCriteria->addAsColumn('OUT_DOC_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(OutputDocumentPeer::OUT_DOC_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); - $oCriteria->add(OutputDocumentPeer::OUT_DOC_UID, $aOutputsUIDS, Criteria::NOT_IN); - - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aAvailableObjects [] = array('OBJECT_UID' => $aRow ['OUT_DOC_UID'], 'OBJECT_TYPE' => 'OUTPUT_DOCUMENT', 'OBJECT_TITLE' => $aRow ['OUT_DOC_TITLE']); - $oDataset->next(); - } - return $aAvailableObjects; - /*global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableObjects'] = $aAvailableObjects; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('availableObjects'); - return $oCriteria;*/ - } //new functions - function getAllReportTableCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = ReportTablePeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - function getExtReportTables($start, $limit,$sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_UID); - $oCriteria->addSelectColumn(ReportTablePeer::PRO_UID); - // $oCriteria->addAsColumn ( 'REP_TAB_TITLE', 'C.CON_VALUE' ); - $oCriteria->addAsColumn('REP_TAB_TITLE', "CASE WHEN C.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE A.CON_ID = REPORT_TABLE.REP_TAB_UID ) ELSE C.CON_VALUE END "); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(ReportTablePeer::REP_TAB_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'REP_TAB_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProcessUID); - - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aReportTable[] = array('REP_TAB_UID' => $aRow ['REP_TAB_UID'], 'REP_TAB_TITLE' => $aRow['REP_TAB_TITLE']); - $oDataset->next(); - } - return $aReportTable; - } - - - function getExtAvailableUsersList($sTaskUID = '', $iType = 2) { - try { - $oTasks = new Tasks ( ); - $aAux = $oTasks->getGroupsOfTask($sTaskUID, $iType); - $aUIDS1 = array(); - $aUIDS2 = array(); - foreach ($aAux as $aGroup) { - $aUIDS1 [] = $aGroup ['GRP_UID']; - } - $aAux = $oTasks->getUsersOfTask($sTaskUID, $iType); - foreach ($aAux as $aUser) { - $aUIDS2 [] = $aUser ['USR_UID']; - } - $aUsers = array(); - $aUsers [] = array('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addAsColumn('GRP_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(GroupwfPeer::GRP_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oCriteria->add(GroupwfPeer::GRP_UID, $aUIDS1, Criteria::NOT_IN); - //$oCriteria->add(GroupwfPeer::GRP_UID, '', Criteria::NOT_EQUAL); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $c = 0; - while ($aRow = $oDataset->getRow()) { - $c++; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); - $oCriteria->add(GroupUserPeer::GRP_UID, $aRow ['GRP_UID']); - $oDataset2 = GroupUserPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $aUsers [] = array('LABEL' => $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation('ID_USER') : G::LoadTranslation('ID_USERS')) . ')
', 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['GRP_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 2); + public function getAllCaseTrackerObjectCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $c ); $oDataset->next(); - } - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oCriteria->add(UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers [] = array('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $sTaskUID, 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $iType, 'TU_RELATION' => 1); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['availableUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - return $_SESSION ['_DBArray']['availableUsers']; - } catch (Exception $oError) { - throw ($oError); - } - } + $aRow = $oDataset->getRow(); - -function getExtTaskUsersAdHocCriteria($start, $limit,$sTaskUID = '', $iType = 1) { - try { - $aUsers = array(); - $aUsers [] = array('LABEL' => 'char', 'TAS_UID' => 'char', 'USR_UID' => 'char', 'TU_TYPE' => 'integer', 'TU_RELATION' => 'integer'); - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addAsColumn('GRP_TITLE', 'C.CON_VALUE'); - $oCriteria->addSelectColumn(TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TU_TYPE); - $oCriteria->addSelectColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addAlias('C', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(TaskUserPeer::USR_UID, 'C.CON_ID'); - $aConditions [] = array('C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter); - $aConditions [] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 2); - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $c = 0; - while ($aRow = $oDataset->getRow()) { - $c++; - $oGroup = new Groupwf ( ); - $aFields = $oGroup->load($aRow ['USR_UID']); - if ($aFields ['GRP_STATUS'] == 'ACTIVE') { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); - $oCriteria->add(GroupUserPeer::GRP_UID, $aRow ['USR_UID']); - $oDataset2 = GroupUserPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); + if (is_array( $aRow )) { + return $aRow[0]; } else { - $aRow2 ['GROUP_INACTIVE'] = '(' . G::LoadTranslation('ID_GROUP_INACTIVE') . ')'; + return 0; } - $aUsers [] = array('LABEL' => (!isset($aRow2 ['GROUP_INACTIVE']) ? $aRow ['GRP_TITLE'] . ' (' . $aRow2 ['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2 ['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation('ID_USER') : G::LoadTranslation('ID_USERS')) . ')
' : $aRow ['GRP_TITLE'] . ' ' . $aRow2 ['GROUP_INACTIVE']), 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION']); - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TU_TYPE); - $oCriteria->addSelectColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addJoin(TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 1); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers [] = array('LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'], 'TAS_UID' => $aRow ['TAS_UID'], 'USR_UID' => $aRow ['USR_UID'], 'TU_TYPE' => $aRow ['TU_TYPE'], 'TU_RELATION' => $aRow ['TU_RELATION']); - $oDataset->next(); - } - global $_DBArray; - $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); - $_DBArray ['taskUsers'] = $aUsers; - $_SESSION ['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('taskUsers'); - $oCriteria->addDescendingOrderByColumn(TaskUserPeer::TU_RELATION); - $oCriteria->addAscendingOrderByColumn('LABEL'); - return $oCriteria; - } catch (Exception $oError) { - throw ($oError); - } - } - - - /** - * editObjectPermission - * - * @param string $sOP_UID - * @param string $sProcessUID - * @return void - */ - function editExtObjectPermission($sProcessUID , $sOP_UID ) { - - $oCriteria = new Criteria ( ); - $oCriteria->add(ObjectPermissionPeer::OP_UID, $sOP_UID); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRows = $oDataset->getRow(); - - $oCriteria = new Criteria ( ); - $oCriteria->add(GroupwfPeer::GRP_UID, $aRows ['USR_UID']); - if (GroupwfPeer::doCount($oCriteria) == 1) - $user = '2|' . $aRows ['USR_UID']; - - $oCriteria = new Criteria ( ); - $oCriteria->add(UsersPeer::USR_UID, $aRows ['USR_UID']); - if (UsersPeer::doCount($oCriteria) == 1) - $user = '1|' . $aRows ['USR_UID']; - - - $aFields ['LANG'] = SYS_LANG; - $aFields ['OP_UID'] = $aRows ['OP_UID']; - $aFields ['PRO_UID'] = $aRows ['PRO_UID']; - $aFields ['OP_CASE_STATUS'] = $aRows ['OP_CASE_STATUS']; - $aFields ['TAS_UID'] = $aRows ['TAS_UID']; - $aFields ['OP_GROUP_USER'] = $user; - $aFields ['OP_TASK_SOURCE'] = $aRows ['OP_TASK_SOURCE']; - $aFields ['OP_PARTICIPATE'] = $aRows ['OP_PARTICIPATE']; - $aFields ['OP_OBJ_TYPE'] = $aRows ['OP_OBJ_TYPE']; - $aFields ['OP_ACTION'] = $aRows ['OP_ACTION']; - - - - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - $aFields['TASK_TARGET_NAME'] = Content::load ( 'TAS_TITLE', '', $aRows ['TAS_UID'] , $lang ); - $aFields['TASK_SOURCE_NAME'] = Content::load ( 'TAS_TITLE', '', $aRows ['OP_TASK_SOURCE'] , $lang ); - $oUser = UsersPeer::retrieveByPK( $aRows ['USR_UID'] ); - if (!is_null($oUser)) - $aFields ['USR_FULLNAME'] = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname() ; - else - throw(new Exception( "The row '" . $aRows ['USR_UID'] . "' in table USER doesn't exist!" )); - - - switch ($aRows ['OP_OBJ_TYPE']) { - /* case 'ANY': - $aFields['OP_OBJ_TYPE'] = ''; - break; */ - case 'DYNAFORM' : - $aFields ['DYNAFORM'] = $aRows ['OP_OBJ_UID']; - $aFields ['DYNAFORM_NAME'] = Content::load ( 'DYN_TITLE', '', $aRows ['OP_OBJ_UID'] , $lang ); - break; - case 'INPUT' : - $aFields ['INPUT'] = $aRows ['OP_OBJ_UID']; - $aFields ['INPUT_NAME'] = Content::load ( 'INP_DOC_TITLE', '', $aRows ['OP_OBJ_UID'] , $lang ); - break; - case 'OUTPUT' : - $aFields ['OUTPUT'] = $aRows ['OP_OBJ_UID']; - $aFields ['OUTPUT_NAME'] = Content::load ( 'OUT_DOC_TITLE', '', $aRows ['OP_OBJ_UID'] , $lang ); - break; } - return $aFields; - } + /** + * getCaseTrackerObjectsCriteria + * + * @param string $sProcessUID + * @return object(Criteria) $oCriteria + */ + public function getExtCaseTrackerObjectsCriteria ($start, $limit, $sProcessUID) + { + $aObjects = array (); + $aObjects[] = array ('CTO_TITLE' => 'char','CTO_UID' => 'char','CTO_TYPE_OBJ' => 'char','CTO_UID_OBJ' => 'char','CTO_CONDITION' => 'char','CTO_POSITION' => 'integer' + ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID ); + $oCriteria->addAscendingOrderByColumn( CaseTrackerObjectPeer::CTO_POSITION ); + $this->tmpCriteria = clone $oCriteria; - - function getExtusersadhoc($start, $limit,$sProcessUID = '', $sTaskUID = '') { - try { - $oProcess = new Process ( ); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task ( ); - $aFields = $oTask->load($sTaskUID); - - $_SESSION ['iType'] = 2; - - $aFields ['TASK'] = $sTaskUID; - $aFields ['TYPE'] = $_SESSION ['iType']; - $aFields ['OF_TO_ASSIGN'] = G::LoadTranslation('ID_DE_ASSIGN'); - $aFields ['CONFIRM'] = G::LoadTranslation('ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE'); - $aFields ['UIDS'] = "'0'"; - - $oTasks = new Tasks ( ); - $oGroups = new Groups ( ); - $aAux1 = $oTasks->getGroupsOfTask($sTaskUID, $_SESSION ['iType']); - foreach ($aAux1 as $aGroup) { - $aAux2 = $oGroups->getUsersOfGroup($aGroup ['GRP_UID']); - foreach ($aAux2 as $aUser) { - $aFields ['UIDS'] .= ",'" . $aUser ['USR_UID'] . "'"; + if ($start != '') { + $oCriteria->setOffset( $start ); } - } - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $oTask = new Task ( ); - $aTask = $oTask->load($sTaskUID); - //$assignedUsers = getExtTaskUsersCriteria($sTaskUID, $_SESSION ['iType']); - $this->getExtTaskUsersAdHocCriteria ($start, $limit, $sTaskUID, $_SESSION ['iType'] ); - return $_SESSION ['_DBArray']['taskUsers']; - - } catch ( Exception $oError ) { - throw ($oError); + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + try { + switch ($aRow['CTO_TYPE_OBJ']) { + case 'DYNAFORM': + $oDynaform = new Dynaform(); + $aFields = $oDynaform->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['DYN_TITLE']; + break; + case 'INPUT_DOCUMENT': + $oInputDocument = new InputDocument(); + $aFields = $oInputDocument->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['INP_DOC_TITLE']; + break; + case 'OUTPUT_DOCUMENT': + $oOutputDocument = new OutputDocument(); + $aFields = $oOutputDocument->load( $aRow['CTO_UID_OBJ'] ); + $sTitle = $aFields['OUT_DOC_TITLE']; + break; + } + $aObjects[] = array ('CTO_TITLE' => $sTitle,'CTO_UID' => $aRow['CTO_UID'],'CTO_TYPE_OBJ' => $aRow['CTO_TYPE_OBJ'],'CTO_UID_OBJ' => $aRow['CTO_UID_OBJ'],'CTO_CONDITION' => $aRow['CTO_CONDITION'],'CTO_POSITION' => $aRow['CTO_POSITION'] + ); + } catch (Exception $oError) { + //Nothing + } + $oDataset->next(); + } + // return $aObjects; + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['objects'] = $aObjects; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'objects' ); + $oCriteria->addAscendingOrderByColumn( 'CTO_POSITION' ); + return $aObjects; } - } -function saveExtddEvents($oData) -{ - $oTask = new Task(); - $oEvent = new Event(); - $sEvn_uid = ''; - $aData = array(); - $aData['PRO_UID'] = $oData->uid; - $aData['EVN_TYPE'] = $oData->evn_type; - $aData['EVN_POSX'] = $oData->position->x; - $aData['EVN_POSY'] = $oData->position->y; + /** + * getAvailableCaseTrackerObjectsCriteria + * + * @param string $sProcessUID Default value empty + * @return object(Criteria) $oCriteria + */ + public function getAvailableExtCaseTrackerObjects ($sProcessUID = '') + { + $oCriteria = $this->getCaseTrackerObjectsCriteria( $sProcessUID ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aDynaformsUIDS = array (); + $aInputsUIDS = array (); + $aOutputsUIDS = array (); + while ($aRow = $oDataset->getRow()) { + switch ($aRow['CTO_TYPE_OBJ']) { + case 'DYNAFORM': + $aDynaformsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + case 'INPUT_DOCUMENT': + $aInputsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + case 'OUTPUT_DOCUMENT': + $aOutputsUIDS[] = $aRow['CTO_UID_OBJ']; + break; + } + $oDataset->next(); + } + $aAvailableObjects = array (); + $aAvailableObjects[] = array ('OBJECT_UID' => 'char','OBJECT_TYPE' => 'char','OBJECT_TITLE' => 'char' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_UID ); + $oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oCriteria->add( DynaformPeer::DYN_UID, $aDynaformsUIDS, Criteria::NOT_IN ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['DYN_UID'],'OBJECT_TYPE' => 'DYNAFORM','OBJECT_TITLE' => $aRow['DYN_TITLE'] + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID ); + $oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( InputDocumentPeer::INP_DOC_UID, $aInputsUIDS, Criteria::NOT_IN ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['INP_DOC_UID'],'OBJECT_TYPE' => 'INPUT_DOCUMENT','OBJECT_TITLE' => $aRow['INP_DOC_TITLE'] + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID ); + $oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( OutputDocumentPeer::OUT_DOC_UID, $aOutputsUIDS, Criteria::NOT_IN ); - $aData['EVN_STATUS'] = 'ACTIVE'; - $aData['EVN_WHEN'] = '1'; - $aData['EVN_ACTION'] = ''; - - if(preg_match("/Inter/", $aData['EVN_TYPE'])){ - $aData['EVN_RELATED_TO'] = 'MULTIPLE'; - } - if(preg_match("/Start/", $aData['EVN_TYPE'])){ - $aData['EVN_RELATED_TO'] = 'MULTIPLE'; - } - $sEvn_uid = $oData->evn_uid; - $oEventData = EventPeer::retrieveByPK($sEvn_uid); - if (is_null($oEventData)) { - $sEvn_uid = $oEvent->create($aData); - }else{ - $aData['EVN_UID'] = $sEvn_uid; - $oEvent->update($aData); - } - $oEncode->uid = $sEvn_uid; - $oJSON = new Services_JSON ( ); - return $oJSON->encode($oEncode); - } - - -function saveExtEvents($oData) -{ - $oTask = new Task(); - $oEvent = new Event(); - $sEvn_uid = ''; - $sEvn_type = $oData->evn_type; - $output = 0; - $aDataEvent = array(); - $aDataTask = array(); - $aDataEvent['EVN_UID'] = $oData->evn_uid; - $aDataEvent['EVN_RELATED_TO'] = 'MULTIPLE'; - $aDataEvent['EVN_TYPE'] = $oData->evn_type; - - if(preg_match("/Start/", $sEvn_type)){ - if(isset($oData->tas_uid) && $oData->tas_uid != '') { - $aDataTask['TAS_UID'] = $oData->tas_uid; - $aDataTask['TAS_START'] = $oData->tas_start; - $aDataTask['EVN_TYPE'] = $oData->evn_type; - $aDataTask['TAS_EVN_UID'] = $oData->evn_uid; - $oTask->update($aDataTask); - - $aDataEvent['EVN_TAS_UID_TO'] = $oData->tas_uid; - $output = $oEvent->update($aDataEvent); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAvailableObjects[] = array ('OBJECT_UID' => $aRow['OUT_DOC_UID'],'OBJECT_TYPE' => 'OUTPUT_DOCUMENT','OBJECT_TITLE' => $aRow['OUT_DOC_TITLE'] + ); + $oDataset->next(); + } + return $aAvailableObjects; + /*global $_DBArray; + $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); + $_DBArray ['availableObjects'] = $aAvailableObjects; + $_SESSION ['_DBArray'] = $_DBArray; + G::LoadClass('ArrayPeer'); + $oCriteria = new Criteria('dbarray'); + $oCriteria->setDBArrayTable('availableObjects'); + return $oCriteria;*/ + } + + //new functions + public function getAllReportTableCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = ReportTablePeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + public function getExtReportTables ($start, $limit, $sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_UID ); + $oCriteria->addSelectColumn( ReportTablePeer::PRO_UID ); + // $oCriteria->addAsColumn ( 'REP_TAB_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAsColumn( 'REP_TAB_TITLE', "CASE WHEN C.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE A.CON_ID = REPORT_TABLE.REP_TAB_UID ) ELSE C.CON_VALUE END " ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (ReportTablePeer::REP_TAB_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'REP_TAB_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUID ); + + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aReportTable[] = array ('REP_TAB_UID' => $aRow['REP_TAB_UID'],'REP_TAB_TITLE' => $aRow['REP_TAB_TITLE'] + ); + $oDataset->next(); + } + return $aReportTable; + } + + public function getExtAvailableUsersList ($sTaskUID = '', $iType = 2) + { + try { + $oTasks = new Tasks(); + $aAux = $oTasks->getGroupsOfTask( $sTaskUID, $iType ); + $aUIDS1 = array (); + $aUIDS2 = array (); + foreach ($aAux as $aGroup) { + $aUIDS1[] = $aGroup['GRP_UID']; + } + $aAux = $oTasks->getUsersOfTask( $sTaskUID, $iType ); + foreach ($aAux as $aUser) { + $aUIDS2[] = $aUser['USR_UID']; + } + $aUsers = array (); + $aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addAsColumn( 'GRP_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (GroupwfPeer::GRP_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'GRP_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->add( GroupwfPeer::GRP_UID, $aUIDS1, Criteria::NOT_IN ); + //$oCriteria->add(GroupwfPeer::GRP_UID, '', Criteria::NOT_EQUAL); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $c = 0; + while ($aRow = $oDataset->getRow()) { + $c ++; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $aRow['GRP_UID'] ); + $oDataset2 = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $aUsers[] = array ('LABEL' => $aRow['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
','TAS_UID' => $sTaskUID,'USR_UID' => $aRow['GRP_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 2 + ); + $oDataset->next(); + } + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oCriteria->add( UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $sTaskUID,'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 1 + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['availableUsers'] = $aUsers; + $_SESSION['_DBArray'] = $_DBArray; + return $_SESSION['_DBArray']['availableUsers']; + } catch (Exception $oError) { + throw ($oError); + } + } + + public function getExtTaskUsersAdHocCriteria ($start, $limit, $sTaskUID = '', $iType = 1) + { + try { + $aUsers = array (); + $aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer' + ); + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addAsColumn( 'GRP_TITLE', 'C.CON_VALUE' ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAlias( 'C', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (TaskUserPeer::USR_UID,'C.CON_ID' + ); + $aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'GRP_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $c = 0; + while ($aRow = $oDataset->getRow()) { + $c ++; + $oGroup = new Groupwf(); + $aFields = $oGroup->load( $aRow['USR_UID'] ); + if ($aFields['GRP_STATUS'] == 'ACTIVE') { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $aRow['USR_UID'] ); + $oDataset2 = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + } else { + $aRow2['GROUP_INACTIVE'] = '(' . G::LoadTranslation( 'ID_GROUP_INACTIVE' ) . ')'; + } + $aUsers[] = array ('LABEL' => (! isset( $aRow2['GROUP_INACTIVE'] ) ? $aRow['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
' : $aRow['GRP_TITLE'] . ' ' . $aRow2['GROUP_INACTIVE']),'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION'] + ); + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addJoin( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 1 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION'] + ); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); + $_DBArray['taskUsers'] = $aUsers; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'taskUsers' ); + $oCriteria->addDescendingOrderByColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->addAscendingOrderByColumn( 'LABEL' ); + return $oCriteria; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * editObjectPermission + * + * @param string $sOP_UID + * @param string $sProcessUID + * @return void + */ + public function editExtObjectPermission ($sProcessUID, $sOP_UID) + { + $oCriteria = new Criteria(); + $oCriteria->add( ObjectPermissionPeer::OP_UID, $sOP_UID ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRows = $oDataset->getRow(); + + $oCriteria = new Criteria(); + $oCriteria->add( GroupwfPeer::GRP_UID, $aRows['USR_UID'] ); + if (GroupwfPeer::doCount( $oCriteria ) == 1) { + $user = '2|' . $aRows['USR_UID']; + } + $oCriteria = new Criteria(); + $oCriteria->add( UsersPeer::USR_UID, $aRows['USR_UID'] ); + if (UsersPeer::doCount( $oCriteria ) == 1) { + $user = '1|' . $aRows['USR_UID']; + } + $aFields['LANG'] = SYS_LANG; + $aFields['OP_UID'] = $aRows['OP_UID']; + $aFields['PRO_UID'] = $aRows['PRO_UID']; + $aFields['OP_CASE_STATUS'] = $aRows['OP_CASE_STATUS']; + $aFields['TAS_UID'] = $aRows['TAS_UID']; + $aFields['OP_GROUP_USER'] = $user; + $aFields['OP_TASK_SOURCE'] = $aRows['OP_TASK_SOURCE']; + $aFields['OP_PARTICIPATE'] = $aRows['OP_PARTICIPATE']; + $aFields['OP_OBJ_TYPE'] = $aRows['OP_OBJ_TYPE']; + $aFields['OP_ACTION'] = $aRows['OP_ACTION']; + + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + $aFields['TASK_TARGET_NAME'] = Content::load( 'TAS_TITLE', '', $aRows['TAS_UID'], $lang ); + $aFields['TASK_SOURCE_NAME'] = Content::load( 'TAS_TITLE', '', $aRows['OP_TASK_SOURCE'], $lang ); + $oUser = UsersPeer::retrieveByPK( $aRows['USR_UID'] ); + if (! is_null( $oUser )) { + $aFields['USR_FULLNAME'] = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname(); + } else { + throw (new Exception( "The row '" . $aRows['USR_UID'] . "' in table USER doesn't exist!" )); + } + switch ($aRows['OP_OBJ_TYPE']) { + /* case 'ANY': + $aFields['OP_OBJ_TYPE'] = ''; + break; + */ + case 'DYNAFORM': + $aFields['DYNAFORM'] = $aRows['OP_OBJ_UID']; + $aFields['DYNAFORM_NAME'] = Content::load( 'DYN_TITLE', '', $aRows['OP_OBJ_UID'], $lang ); + break; + case 'INPUT': + $aFields['INPUT'] = $aRows['OP_OBJ_UID']; + $aFields['INPUT_NAME'] = Content::load( 'INP_DOC_TITLE', '', $aRows['OP_OBJ_UID'], $lang ); + break; + case 'OUTPUT': + $aFields['OUTPUT'] = $aRows['OP_OBJ_UID']; + $aFields['OUTPUT_NAME'] = Content::load( 'OUT_DOC_TITLE', '', $aRows['OP_OBJ_UID'], $lang ); + break; + } + + return $aFields; + } + + public function getExtusersadhoc ($start, $limit, $sProcessUID = '', $sTaskUID = '') + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + + $_SESSION['iType'] = 2; + + $aFields['TASK'] = $sTaskUID; + $aFields['TYPE'] = $_SESSION['iType']; + $aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' ); + $aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' ); + $aFields['UIDS'] = "'0'"; + + $oTasks = new Tasks(); + $oGroups = new Groups(); + $aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] ); + foreach ($aAux1 as $aGroup) { + $aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); + foreach ($aAux2 as $aUser) { + $aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'"; + } + } + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $oTask = new Task(); + $aTask = $oTask->load( $sTaskUID ); + //$assignedUsers = getExtTaskUsersCriteria($sTaskUID, $_SESSION ['iType']); + $this->getExtTaskUsersAdHocCriteria( $start, $limit, $sTaskUID, $_SESSION['iType'] ); + return $_SESSION['_DBArray']['taskUsers']; + + } catch (Exception $oError) { + throw ($oError); + } + } + + public function saveExtddEvents ($oData) + { + $oTask = new Task(); + $oEvent = new Event(); + $sEvn_uid = ''; + $aData = array (); + $aData['PRO_UID'] = $oData->uid; + $aData['EVN_TYPE'] = $oData->evn_type; + $aData['EVN_POSX'] = $oData->position->x; + $aData['EVN_POSY'] = $oData->position->y; + + $aData['EVN_STATUS'] = 'ACTIVE'; + $aData['EVN_WHEN'] = '1'; + $aData['EVN_ACTION'] = ''; + + if (preg_match( "/Inter/", $aData['EVN_TYPE'] )) { + $aData['EVN_RELATED_TO'] = 'MULTIPLE'; + } + if (preg_match( "/Start/", $aData['EVN_TYPE'] )) { + $aData['EVN_RELATED_TO'] = 'MULTIPLE'; + } + $sEvn_uid = $oData->evn_uid; + $oEventData = EventPeer::retrieveByPK( $sEvn_uid ); + if (is_null( $oEventData )) { + $sEvn_uid = $oEvent->create( $aData ); + } else { + $aData['EVN_UID'] = $sEvn_uid; + $oEvent->update( $aData ); + } + $oEncode->uid = $sEvn_uid; + $oJSON = new Services_JSON(); + return $oJSON->encode( $oEncode ); + } + + public function saveExtEvents ($oData) + { + $oTask = new Task(); + $oEvent = new Event(); + $sEvn_uid = ''; + $sEvn_type = $oData->evn_type; + $output = 0; + $aDataEvent = array (); + $aDataTask = array (); + $aDataEvent['EVN_UID'] = $oData->evn_uid; + $aDataEvent['EVN_RELATED_TO'] = 'MULTIPLE'; + $aDataEvent['EVN_TYPE'] = $oData->evn_type; + + if (preg_match( "/Start/", $sEvn_type )) { + if (isset( $oData->tas_uid ) && $oData->tas_uid != '') { + $aDataTask['TAS_UID'] = $oData->tas_uid; + $aDataTask['TAS_START'] = $oData->tas_start; + $aDataTask['EVN_TYPE'] = $oData->evn_type; + $aDataTask['TAS_EVN_UID'] = $oData->evn_uid; + $oTask->update( $aDataTask ); + + $aDataEvent['EVN_TAS_UID_TO'] = $oData->tas_uid; + $output = $oEvent->update( $aDataEvent ); + } + } elseif (preg_match( "/Inter/", $sEvn_type )) { + $aDataEvent['EVN_TAS_UID_FROM'] = $oData->tas_from; + $aDataEvent['EVN_TAS_UID_TO'] = $oData->tas_to; + $output = $oEvent->update( $aDataEvent ); + } + return $output; + } + + //new functions + public function getAllTriggersCount () + { + $c = $this->tmpCriteria; + $c->clearSelectColumns(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = TriggersPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + /* + * Return the triggers list criteria object + * @param string $sProcessUID + * @return object + */ + public function getExtTriggersList ($start, $limit, $sProcessUID = '') + { + $sDelimiter = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TriggersPeer::TRI_UID ); + $oCriteria->addSelectColumn( TriggersPeer::PRO_UID ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID ); + $this->tmpCriteria = clone $oCriteria; + + $oCriteria->addAsColumn( 'TRI_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAsColumn( 'TRI_DESCRIPTION', 'C2.CON_VALUE' ); + $oCriteria->addAlias( 'C1', 'CONTENT' ); + $oCriteria->addAlias( 'C2', 'CONTENT' ); + $aConditions = array (); + $aConditions[] = array (TriggersPeer::TRI_UID,'C1.CON_ID' + ); + $aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $aConditions = array (); + $aConditions[] = array (TriggersPeer::TRI_UID,'C2.CON_ID' + ); + $aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter + ); + $aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID ); + $oCriteria->addAscendingOrderByColumn( 'TRI_TITLE' ); + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '') { + $oCriteria->setLimit( $limit ); + } + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $triggersArray = ""; + $triggersArray[] = array ('TRI_UID' => 'char','PRO_UID' => 'char','TRI_TITLE' => 'char','TRI_DESCRIPTION' => 'char' + ); + while ($aRow = $oDataset->getRow()) { + + if (($aRow['TRI_TITLE'] == null) || ($aRow['TRI_TITLE'] == "")) { + // There is no translation for this Trigger name, try to get/regenerate the label + $triggerO = new Triggers(); + $triggerObj = $triggerO->load( $aRow['TRI_UID'] ); + $aRow['TRI_TITLE'] = $triggerObj['TRI_TITLE']; + $aRow['TRI_DESCRIPTION'] = $triggerObj['TRI_DESCRIPTION']; + } + $triggersArray[] = $aRow; + $oDataset->next(); + } + return $triggersArray; + + } + + public function getAllInputDocsByTask ($sPRO_UID) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( StepPeer::STEP_UID_OBJ ); + $oCriteria->addSelectColumn( 'COUNT(*) AS CNT' ); + $oCriteria->addGroupByColumn( StepPeer::STEP_UID_OBJ ); + $oCriteria->add( StepPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT' ); + $oCriteria->add( StepPeer::PRO_UID, $sPRO_UID ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $aIDocs = array (); + while ($oDataset->next()) { + $row = $oDataset->getRow(); + $aIDocs[$row['STEP_UID_OBJ']] = $row['CNT']; + } + return $aIDocs; + } + + public function getMaximunTaskX ($processUid) + { + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( 'MAX(TAS_POSX) AS MAX_X' ); + $criteria->add( TaskPeer::PRO_UID, $processUid ); + + $dataset = TaskPeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + + $row = $dataset->getRow(); + + return (int) $row['MAX_X']; } - } - else if(preg_match("/Inter/", $sEvn_type)){ - $aDataEvent['EVN_TAS_UID_FROM'] = $oData->tas_from; - $aDataEvent['EVN_TAS_UID_TO'] = $oData->tas_to; - $output = $oEvent->update($aDataEvent); - } - return $output; } - - //new functions - function getAllTriggersCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = TriggersPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - /* - * Return the triggers list criteria object - * @param string $sProcessUID - * @return object - */ - - function getExtTriggersList($start, $limit, $sProcessUID = '') { - $sDelimiter = DBAdapter::getStringDelimiter (); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TriggersPeer::TRI_UID); - $oCriteria->addSelectColumn(TriggersPeer::PRO_UID); - $oCriteria->add(TriggersPeer::PRO_UID, $sProcessUID); - $this->tmpCriteria = clone $oCriteria; - - $oCriteria->addAsColumn('TRI_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAsColumn('TRI_DESCRIPTION', 'C2.CON_VALUE'); - $oCriteria->addAlias('C1', 'CONTENT'); - $oCriteria->addAlias('C2', 'CONTENT'); - $aConditions = array(); - $aConditions [] = array(TriggersPeer::TRI_UID, 'C1.CON_ID'); - $aConditions [] = array('C1.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter); - $aConditions [] = array('C1.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $aConditions = array(); - $aConditions [] = array(TriggersPeer::TRI_UID, 'C2.CON_ID'); - $aConditions [] = array('C2.CON_CATEGORY', $sDelimiter . 'TRI_TITLE' . $sDelimiter); - $aConditions [] = array('C2.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->add(TriggersPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn('TRI_TITLE'); - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '') - $oCriteria->setLimit($limit); - - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $triggersArray = ""; - $triggersArray [] = array('TRI_UID' => 'char', 'PRO_UID' => 'char', 'TRI_TITLE' => 'char', 'TRI_DESCRIPTION' => 'char'); - while ($aRow = $oDataset->getRow()) { - - if (($aRow ['TRI_TITLE'] == NULL) || ($aRow ['TRI_TITLE'] == "")) { // There is no transaltion for this Trigger name, try to get/regenerate the label - $triggerO = new Triggers ( ); - $triggerObj = $triggerO->load($aRow ['TRI_UID']); - $aRow ['TRI_TITLE'] = $triggerObj ['TRI_TITLE']; - $aRow ['TRI_DESCRIPTION'] = $triggerObj ['TRI_DESCRIPTION']; - } - $triggersArray [] = $aRow; - $oDataset->next(); - } - return $triggersArray; - - } - - function getAllInputDocsByTask($sPRO_UID){ - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(StepPeer::STEP_UID_OBJ); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - $oCriteria->addGroupByColumn(StepPeer::STEP_UID_OBJ); - $oCriteria->add(StepPeer::STEP_TYPE_OBJ,'INPUT_DOCUMENT'); - $oCriteria->add(StepPeer::PRO_UID, $sPRO_UID); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $aIDocs = array(); - while ($oDataset->next()){ - $row = $oDataset->getRow(); - $aIDocs[$row['STEP_UID_OBJ']] = $row['CNT']; - } - return $aIDocs; - } - - function getMaximunTaskX($processUid) { - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn('MAX(TAS_POSX) AS MAX_X'); - $criteria->add(TaskPeer::PRO_UID, $processUid); - - $dataset = TaskPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - - $row = $dataset->getRow(); - - return (int)$row['MAX_X']; - } - -} diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 9acd9ea59..06692368e 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -50,2478 +51,2700 @@ require_once 'classes/model/Event.php'; require_once 'classes/model/CaseScheduler.php'; require_once 'classes/model/ProcessCategory.php'; -G::LoadClass('tasks'); -G::LoadClass('reportTables'); -G::LoadClass('processMap'); -G::LoadThirdParty('pear/json','class.json'); +G::LoadClass( 'tasks' ); +G::LoadClass( 'reportTables' ); +G::LoadClass( 'processMap' ); +G::LoadThirdParty( 'pear/json', 'class.json' ); -class Processes { +class Processes +{ - /** - * change Status of any Process - * @param string $sProUid - * @return boolean - * @package workflow.engine.ProcessMaker - */ - function changeStatus ( $sProUid = '') { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - if ( $Fields['PRO_STATUS'] == 'ACTIVE' ) - $proFields['PRO_STATUS'] = 'INACTIVE'; - else - $proFields['PRO_STATUS'] = 'ACTIVE'; + /** + * change Status of any Process + * + * @param string $sProUid + * @return boolean + * @package workflow.engine.ProcessMaker + */ + function changeStatus ($sProUid = '') + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + if ($Fields['PRO_STATUS'] == 'ACTIVE') + $proFields['PRO_STATUS'] = 'INACTIVE'; + else + $proFields['PRO_STATUS'] = 'ACTIVE'; - $oProcess->Update( $proFields ); - } + $oProcess->Update( $proFields ); + } - /** - * change debug mode of any Process - * @param string $sProUid - * @return boolean - * @package workflow.engine.ProcessMaker - */ - function changeDebugMode ( $sProUid = '') { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - if ( $Fields['PRO_DEBUG'] == '1' ) - $proFields['PRO_DEBUG'] = '0'; - else - $proFields['PRO_DEBUG'] = '1'; + /** + * change debug mode of any Process + * + * @param string $sProUid + * @return boolean + * @package workflow.engine.ProcessMaker + */ + function changeDebugMode ($sProUid = '') + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + if ($Fields['PRO_DEBUG'] == '1') + $proFields['PRO_DEBUG'] = '0'; + else + $proFields['PRO_DEBUG'] = '1'; - $oProcess->Update( $proFields ); - } + $oProcess->Update( $proFields ); + } - /** - * changes in DB the parent GUID - * @param $sProUid process uid - * @param $sParentUid process parent uid - * @return $sProUid - */ - function changeProcessParent( $sProUid, $sParentUid) { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - $Fields['PRO_PARENT'] == $sParentUid; - $oProcess->Update( $proFields ); - } + /** + * changes in DB the parent GUID + * + * @param $sProUid process uid + * @param $sParentUid process parent uid + * @return $sProUid + */ + function changeProcessParent ($sProUid, $sParentUid) + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + $Fields['PRO_PARENT'] == $sParentUid; + $oProcess->Update( $proFields ); + } - /** - * verify if the process $sProUid exists - * @param string $sProUid - * @return boolean - */ - function processExists ( $sProUid = '') { - $oProcess = new Process(); - return $oProcess->processExists( $sProUid ); - } + /** + * verify if the process $sProUid exists + * + * @param string $sProUid + * @return boolean + */ + function processExists ($sProUid = '') + { + $oProcess = new Process(); + return $oProcess->processExists( $sProUid ); + } - /** - * get an unused process GUID - * @return $sProUid - */ - function getUnusedProcessGUID( ) { - do { - $sNewProUid = G::generateUniqueID() ; - } while ( $this->processExists ( $sNewProUid ) ); - return $sNewProUid; - } + /** + * get an unused process GUID + * + * @return $sProUid + */ + function getUnusedProcessGUID () + { + do { + $sNewProUid = G::generateUniqueID(); + } while ($this->processExists( $sNewProUid )); + return $sNewProUid; + } - /** - * verify if the task $sTasUid exists - * @param string $sTasUid - * @return boolean - */ - function taskExists ( $sTasUid = '') { - $oTask = new Task(); - return $oTask->taskExists( $sTasUid ); - } + /** + * verify if the task $sTasUid exists + * + * @param string $sTasUid + * @return boolean + */ + function taskExists ($sTasUid = '') + { + $oTask = new Task(); + return $oTask->taskExists( $sTasUid ); + } - /** - * get an unused task GUID - * @return $sTasUid - */ - function getUnusedTaskGUID( ) { - do { - $sNewTasUid = G::generateUniqueID() ; - } while ( $this->taskExists ( $sNewTasUid ) ); - return $sNewTasUid; - } + /** + * get an unused task GUID + * + * @return $sTasUid + */ + function getUnusedTaskGUID () + { + do { + $sNewTasUid = G::generateUniqueID(); + } while ($this->taskExists( $sNewTasUid )); + return $sNewTasUid; + } - /** - * verify if the dynaform $sDynUid exists - * @param string $sDynUid - * @return boolean - */ - function dynaformExists ( $sDynUid = '') { - $oDynaform = new Dynaform(); - return $oDynaform->dynaformExists( $sDynUid ); - } + /** + * verify if the dynaform $sDynUid exists + * + * @param string $sDynUid + * @return boolean + */ + function dynaformExists ($sDynUid = '') + { + $oDynaform = new Dynaform(); + return $oDynaform->dynaformExists( $sDynUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function inputExists ( $sUid = '') { - $oInput = new InputDocument(); - return $oInput->inputExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function inputExists ($sUid = '') + { + $oInput = new InputDocument(); + return $oInput->inputExists( $sUid ); + } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function outputExists ($sUid = '') + { + $oOutput = new OutputDocument(); + return $oOutput->outputExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function outputExists ( $sUid = '') { - $oOutput = new OutputDocument(); - return $oOutput->outputExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function triggerExists ($sUid = '') + { + $oTrigger = new Triggers(); + return $oTrigger->triggerExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function triggerExists ( $sUid = '') { - $oTrigger = new Triggers(); - return $oTrigger->triggerExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function SubProcessExists ($sUid = '') + { + $oSubProcess = new SubProcess(); + return $oSubProcess->subProcessExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function SubProcessExists ( $sUid = '') { - $oSubProcess = new SubProcess(); - return $oSubProcess->subProcessExists( $sUid ); - } + /** + * verify if a caseTrackerObject object exists + * + * @param string $sUid + * @return boolean + */ + function caseTrackerObjectExists ($sUid = '') + { + $oCaseTrackerObject = new CaseTrackerObject(); + return $oCaseTrackerObject->caseTrackerObjectExists( $sUid ); + } - /** - * verify if a caseTrackerObject object exists - * @param string $sUid - * @return boolean - */ - function caseTrackerObjectExists ( $sUid = '') { - $oCaseTrackerObject = new CaseTrackerObject(); - return $oCaseTrackerObject->caseTrackerObjectExists( $sUid ); - } + /** + * verify if a caseTracker Object exists + * + * @param string $sUid + * @return boolean + */ + function caseTrackerExists ($sUid = '') + { + $oCaseTracker = new CaseTracker(); + return $oCaseTracker->caseTrackerExists( $sUid ); + } - /** - * verify if a caseTracker Object exists - * @param string $sUid - * @return boolean - */ - function caseTrackerExists ( $sUid = '') { - $oCaseTracker = new CaseTracker(); - return $oCaseTracker->caseTrackerExists( $sUid ); - } + /** + * verify if a dbconnection exists + * + * @param string $sUid + * @return boolean + */ + function dbConnectionExists ($sUid = '') + { + $oDBSource = new DbSource(); + return $oDBSource->Exists( $sUid ); + } - /** - * verify if a dbconnection exists - * @param string $sUid - * @return boolean - */ - function dbConnectionExists ( $sUid = '') { - $oDBSource = new DbSource(); - return $oDBSource->Exists( $sUid ); - } + /** + * verify if a objectPermission exists + * + * @param string $sUid + * @return boolean + */ + function objectPermissionExists ($sUid = '') + { + $oObjectPermission = new ObjectPermission(); + return $oObjectPermission->Exists( $sUid ); + } - /** - * verify if a objectPermission exists - * @param string $sUid - * @return boolean - */ - function objectPermissionExists ( $sUid = '') { - $oObjectPermission = new ObjectPermission(); - return $oObjectPermission->Exists( $sUid ); - } + /** + * verify if a route exists + * + * @param string $sUid + * @return boolean + */ + function routeExists ($sUid = '') + { + $oRoute = new Route(); + return $oRoute->routeExists( $sUid ); + } - /** - * verify if a route exists - * @param string $sUid - * @return boolean - */ - function routeExists ( $sUid = '') { - $oRoute = new Route(); - return $oRoute->routeExists( $sUid ); - } + /** + * verify if a stage exists + * + * @param string $sUid + * @return boolean + */ + function stageExists ($sUid = '') + { + $oStage = new Stage(); + return $oStage->Exists( $sUid ); + } - /** - * verify if a stage exists - * @param string $sUid - * @return boolean - */ - function stageExists ( $sUid = '') { - $oStage = new Stage(); - return $oStage->Exists( $sUid ); - } + /** + * verify if a swimlane exists + * + * @param string $sUid + * @return boolean + */ + function slExists ($sUid = '') + { + $oSL = new SwimlanesElements(); + return $oSL->swimlanesElementsExists( $sUid ); + } - /** - * verify if a swimlane exists - * @param string $sUid - * @return boolean - */ - function slExists ( $sUid = '') { - $oSL = new SwimlanesElements(); - return $oSL->swimlanesElementsExists( $sUid ); - } + /** + * verify if a reportTable exists + * + * @param string $sUid + * @return boolean + */ + function reportTableExists ($sUid = '') + { + $oReportTable = new ReportTable(); + return $oReportTable->reportTableExists( $sUid ); + } - /** - * verify if a reportTable exists - * @param string $sUid - * @return boolean - */ - function reportTableExists ( $sUid = '') { - $oReportTable = new ReportTable(); - return $oReportTable->reportTableExists( $sUid ); - } + /** + * verify if a reportVar exists + * + * @param string $sUid + * @return boolean + */ + function reportVarExists ($sUid = '') + { + $oReportVar = new ReportVar(); + return $oReportVar->reportVarExists( $sUid ); + } - /** - * verify if a reportVar exists - * @param string $sUid - * @return boolean - */ - function reportVarExists ( $sUid = '') { - $oReportVar = new ReportVar(); - return $oReportVar->reportVarExists( $sUid ); - } + /** + * verify if a caseTrackerObject exists + * + * @param string $sUid + * @return boolean + */ + function fieldsConditionsExists ($sUid = '') + { + $oFieldCondition = new FieldCondition(); + return $oFieldCondition->Exists( $sUid ); + } - /** - * verify if a caseTrackerObject exists - * @param string $sUid - * @return boolean - */ - function fieldsConditionsExists ( $sUid = '') { - $oFieldCondition = new FieldCondition(); - return $oFieldCondition->Exists($sUid); - } + /** + * verify if an event exists + * + * @param string $sUid + * @return boolean + */ + function eventExists ($sUid = '') + { + $oEvent = new Event(); + return $oEvent->Exists( $sUid ); + } - /** - * verify if an event exists - * @param string $sUid - * @return boolean - */ - function eventExists ( $sUid = '') { - $oEvent = new Event(); - return $oEvent->Exists($sUid); - } + /** + * verify if a caseScheduler exists + * + * @param string $sUid + * @return boolean + */ + function caseSchedulerExists ($sUid = '') + { + $oCaseScheduler = new CaseScheduler(); + return $oCaseScheduler->Exists( $sUid ); + } - /** - * verify if a caseScheduler exists - * @param string $sUid - * @return boolean - */ - function caseSchedulerExists ( $sUid = '') { - $oCaseScheduler = new CaseScheduler(); - return $oCaseScheduler->Exists($sUid); - } + /** + * get an unused input GUID + * + * @return $sProUid + */ + function getUnusedInputGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->inputExists( $sNewUid )); + return $sNewUid; + } + /** + * get an unused output GUID + * + * @return $sProUid + */ + function getUnusedOutputGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->outputExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused input GUID - * @return $sProUid - */ - function getUnusedInputGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->inputExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get an unused trigger GUID + * + * @return $sProUid + */ + function getUnusedTriggerGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->triggerExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused output GUID - * @return $sProUid - */ - function getUnusedOutputGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->outputExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get an unused trigger GUID + * + * @return $sProUid + */ + function getUnusedSubProcessGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->subProcessExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused trigger GUID - * @return $sProUid - */ - function getUnusedTriggerGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->triggerExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused CaseTrackerObject GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedCaseTrackerObjectGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->caseTrackerObjectExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused trigger GUID - * @return $sProUid - */ - function getUnusedSubProcessGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->subProcessExists ( $sNewUid ) ); - return $sNewUid; - } - /** - * get a Unused CaseTrackerObject GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedCaseTrackerObjectGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->caseTrackerObjectExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Database Source GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedDBSourceGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->dbConnectionExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Database Source GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedDBSourceGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->dbConnectionExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Object Permission GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedObjectPermissionGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->objectPermissionExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Object Permission GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedObjectPermissionGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->objectPermissionExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Route GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRouteGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->routeExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Route GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRouteGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->routeExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Stage GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedStageGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->stageExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Stage GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedStageGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->stageExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused SL GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedSLGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->slExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused SL GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedSLGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->slExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Report Table GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRTGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->reportTableExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Report Table GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRTGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->reportTableExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Report Var GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRTVGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->reportVarExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Report Var GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRTVGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->reportVarExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function stepExists ($sUid = '') + { + $oStep = new Step(); + return $oStep->stepExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function stepExists ( $sUid = '') { - $oStep = new Step(); - return $oStep->stepExists( $sUid ); - } + /** + * get an unused step GUID + * + * @return $sUid + */ + function getUnusedStepGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->stepExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused step GUID - * @return $sUid - */ - function getUnusedStepGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->stepExists ( $sNewUid ) ); - return $sNewUid; - } - - - /* + /* * get an unused Dynaform GUID * @return $sDynUid */ - function getUnusedDynaformGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->dynaformExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Field Condition GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedFieldConditionGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->fieldsConditionsExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Event GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedEventGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this-> eventExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Case Scheduler GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedCaseSchedulerGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this-> caseSchedulerExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * change the GUID for a serialized process - * @param string $sProUid - * @return boolean - */ - function setProcessGUID( &$oData, $sNewProUid ) { - $sProUid = $oData->process['PRO_UID']; - $oData->process['PRO_UID'] = $sNewProUid; - - if ( isset($oData->tasks ) && is_array($oData->tasks) ) { - foreach ($oData->tasks as $key => $val ) { - $oData->tasks[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ($oData->routes as $key => $val ) { - $oData->routes[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->lanes ) && is_array($oData->lanes) ) { - foreach ($oData->lanes as $key => $val ) { - $oData->lanes[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->inputs ) && is_array($oData->inputs) ) { - foreach ($oData->inputs as $key => $val ) { - $oData->inputs[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->outputs ) && is_array($oData->outputs) ) { - foreach ($oData->outputs as $key => $val ) { - $oData->outputs[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->steps ) && is_array($oData->steps) ) { - foreach ($oData->steps as $key => $val ) { - $oData->steps[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->dynaforms ) && is_array($oData->dynaforms) ) { - foreach ($oData->dynaforms as $key => $val ) { - $oData->dynaforms[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->triggers ) && is_array($oData->triggers) ) { - foreach ($oData->triggers as $key => $val ) { - $oData->triggers[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->reportTables ) && is_array($oData->reportTables) ) { - foreach ($oData->reportTables as $key => $val ) { - $oData->reportTables[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->reportTablesVars ) && is_array($oData->reportTablesVars) ) { - foreach ($oData->reportTablesVars as $key => $val ) { - $oData->reportTablesVars[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->dbconnections ) && is_array($oData->dbconnections) ) { - foreach ($oData->dbconnections as $key => $val ) { - $oData->dbconnections[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ($oData->stepSupervisor as $key => $val ) { - $oData->stepSupervisor[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ($oData->objectPermissions as $key => $val ) { - $oData->objectPermissions[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseTracker ) && is_array($oData->caseTracker) ) { - foreach ($oData->caseTracker as $key => $val ) { - $oData->caseTracker[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ($oData->caseTrackerObject as $key => $val ) { - $oData->caseTrackerObject[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->stage ) && is_array($oData->stage) ) { - foreach ($oData->stage as $key => $val ) { - $oData->stage[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->subProcess ) && is_array($oData->subProcess) ) { - foreach ($oData->subProcess as $key => $val ) { - $oData->subProcess[$key]['PRO_PARENT'] = $sNewProUid; - } - } - - if ( isset($oData->event ) && is_array($oData->event) ) { - foreach ($oData->event as $key => $val ) { - $oData->event[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseScheduler ) && is_array($oData->caseScheduler) ) { - foreach ($oData->caseScheduler as $key => $val){ - $oData->caseScheduler[$key]['PRO_UID'] = $sNewProUid; - } - } - return true; - } - - /** - * change the GUID Parent for a serialized process, only in serialized data - * @param string $sProUid - * @return boolean - */ - function setProcessParent( &$oData, $sParentUid ) { - $oData->process['PRO_PARENT'] = $sParentUid; - $oData->process['PRO_CREATE_DATE'] = date ('Y-m-d H:i:s'); - $oData->process['PRO_UPDATE_DATE'] = date ('Y-m-d H:i:s'); - return true; - } - - /** - * change and Renew all Task GUID, because the process needs to have a new set of tasks - * @param string $oData - * @return boolean - */ - function renewAllTaskGuid ( &$oData ) { - $map = array (); - foreach ( $oData->tasks as $key => $val ) { - $newGuid = $this->getUnusedTaskGUID(); - $map[ $val['TAS_UID'] ] = $newGuid; - $oData->tasks[$key]['TAS_UID'] = $newGuid; - } - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ( $oData->routes as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->routes[$key]['TAS_UID'] = $newGuid; - if ( strlen ( $val['ROU_NEXT_TASK'] ) > 0 && $val['ROU_NEXT_TASK'] >0 ) { - $newGuid = $map[ $val['ROU_NEXT_TASK'] ]; - $oData->routes[$key]['ROU_NEXT_TASK'] = $newGuid; - } - } - } - - if ( isset($oData->steps) && is_array($oData->steps) ) { - foreach ( $oData->steps as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->steps[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->steptriggers ) && is_array($oData->steptriggers) ) { - foreach ( $oData->steptriggers as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->steptriggers[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->taskusers ) && is_array($oData->taskusers) ) { - foreach ( $oData->taskusers as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->taskusers[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->subProcess ) && is_array($oData->subProcess) ) { - foreach ( $oData->subProcess as $key => $val ) { - $newGuid = $map[ $val['TAS_PARENT'] ]; - $oData->subProcess[$key]['TAS_PARENT'] = $newGuid; - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->subProcess[$key]['TAS_UID'] = $newGuid; - } - } - } - - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->objectPermissions[$key]['TAS_UID'] = $newGuid; - } - } - } - - // New process bpmn - if ( isset($oData->event ) && is_array($oData->event) ) { - foreach ( $oData->event as $key => $val ) { - if (isset($val['EVN_TAS_UID_FROM']) && isset($map[ $val['EVN_TAS_UID_FROM'] ])) { - $newGuid = $map[ $val['EVN_TAS_UID_FROM'] ]; - $oData->event[$key]['EVN_TAS_UID_FROM'] = $newGuid; - } - } - } - - if ( isset($oData->caseScheduler ) && is_array($oData->caseScheduler) ) { - foreach ( $oData->caseScheduler as $key => $val ) { - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->caseScheduler[$key]['TAS_UID'] = $newGuid; - } - } - } - - } - - /** - * change and Renew all Dynaform GUID, because the process needs to have a new set of dynaforms - * @param string $oData - * @return boolean - */ - function renewAllDynaformGuid ( &$oData ) { - $map = array (); - foreach ( $oData->dynaforms as $key => $val ) { - $newGuid = $this->getUnusedDynaformGUID(); - $map[ $val['DYN_UID'] ] = $newGuid; - $oData->dynaforms[$key]['DYN_UID'] = $newGuid; - } - - if ( isset($oData->process['PRO_DYNAFORMS']) && !is_array($oData->process['PRO_DYNAFORMS'])) { - $oData->process['PRO_DYNAFORMS'] = @unserialize($oData->process['PRO_DYNAFORMS']); - } - - if (!isset($oData->process['PRO_DYNAFORMS']['PROCESS'])) { - $oData->process['PRO_DYNAFORMS']['PROCESS'] = ''; - } - - if ($oData->process['PRO_DYNAFORMS']['PROCESS'] != '') { - $oData->process['PRO_DYNAFORMS']['PROCESS'] = $map[$oData->process['PRO_DYNAFORMS']['PROCESS']]; - } - - foreach ( $oData->steps as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'DYNAFORM' ) { - if(isset($map[ $val['OP_OBJ_UID'] ])){ - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; - } - } - } - } - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - foreach ( $oData->dynaformFiles as $key => $val ) { - $newGuid = $map[ $key ]; - $oData->dynaformFiles[$key] = $newGuid; - } - } - if(isset($oData->gridFiles)){ - foreach ( $oData->gridFiles as $key => $val ) { - $newGuid = $map[ $key ]; - $oData->gridFiles[$key] = $newGuid; - } - } - if ( isset($oData->fieldCondition ) && is_array($oData->fieldCondition) ) { - foreach( $oData->fieldCondition as $key => $val ){ - $newGuid = $map[ $val['FCD_DYN_UID'] ]; - $oData->fieldCondition[$key]['FCD_DYN_UID'] = $newGuid; - } - } - - } - - /** - * get a Process with a search based in the process Uid - * @param $sProUid string process Uid - * @return $oProcess Process object - */ - function getProcessRow ($sProUid,$getAllLang=false ){ - $oProcess = new Process( ); - return $oProcess->Load( $sProUid, $getAllLang ); - } - - /** - * creates a process new process if a process exists with the same uid of the - * $row['PRO_UID'] parameter then deletes it from the database and creates - * a new one based on the $row parameter - * @param $row array parameter with the process data - * @return $oProcess Process object - */ - function createProcessRow ($row ){ - $oProcess = new Process( ); - if($oProcess->processExists ($row['PRO_UID'])) - { $oProcess->remove($row['PRO_UID']); - } - - return $oProcess->createRow($row); - } - - /** - * Update a Process register in DB, if the process doesn't exist with the same - * uid of the $row['PRO_UID'] parameter the function creates a new one based - * on the $row parameter data. - * @param $row array parameter with the process data - * @return $oProcess Process object - */ - function updateProcessRow ($row ){ - $oProcess = new Process( ); - if($oProcess->processExists ($row['PRO_UID'])) - $oProcess->update($row); - else - $oProcess->create($row); - } - - /** - * Gets the subprocess data from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aSubProcess array - */ - function getSubProcessRow ($sProUid){ - try { - $aSubProcess = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProUid); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aSubProcess[] = $aRow; - $oDataset->next(); - } - return $aSubProcess; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a case Tracker Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aCaseTracker array - */ - - function getCaseTrackerRow ($sProUid){ - try { - $aCaseTracker = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aCaseTracker[] = $aRow; - $oDataset->next(); - } - return $aCaseTracker; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a case TrackerObject Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aCaseTracker array - */ - function getCaseTrackerObjectRow ($sProUid){ - try { - $aCaseTrackerObject = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aCaseTrackerObject[] = $aRow; - $oDataset->next(); - } - return $aCaseTrackerObject; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a Stage Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aStage array - */ - function getStageRow ($sProUid){ - try { - $aStage = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StagePeer::PRO_UID, $sProUid); - $oDataset = StagePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oStage = new Stage(); - $aStage[] = $oStage->load($aRow['STG_UID']); - $oDataset->next(); - } - return $aStage; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets the Field Conditions from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aFieldCondition array - */ - - function getFieldCondition($sProUid) { - try { - $aFieldCondition = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oCriteria->addJoin (DynaformPeer::DYN_UID, FieldConditionPeer::FCD_DYN_UID ); - - $oDataset = FieldConditionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aFieldCondition[] = $aRow; - $oDataset->next(); - } - return $aFieldCondition; - } - catch (Exception $oError) { - throw($oError); - } - } - -/** - * Gets the Event rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aEvent array - */ - function getEventRow($sProUid) { - try { - $aEvent = array(); - $oCriteria = new Criteria('workflow'); - - $oCriteria->add(EventPeer::PRO_UID, $sProUid); - $oDataset = EventPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oEvent = new Event(); - $aEvent[] = $oEvent->load($aRow['EVN_UID']); - $oDataset->next(); - } - return $aEvent; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets the Cases Scheduler rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aCaseScheduler array - */ - function getCaseSchedulerRow($sProUid) { - try { - $aCaseScheduler = array(); - $oCriteria = new Criteria('workflow'); - - $oCriteria->add(CaseSchedulerPeer::PRO_UID, $sProUid); - $oDataset = CaseSchedulerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oCaseScheduler = new CaseScheduler(); - $aCaseScheduler[] = $oCaseScheduler->load($aRow['SCH_UID']); - $oDataset->next(); - } - return $aCaseScheduler; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets processCategory record, if the process had one - * @param $sProUid string for the process Uid - * @return $processCategory array - */ - public function getProcessCategoryRow($sProUid) - { - $process = ProcessPeer::retrieveByPK($sProUid); - - if ($process->getProCategory() == '') { - return null; - } - - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ProcessCategoryPeer::CATEGORY_UID, $process->getProCategory()); - $oDataset = ProcessCategoryPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - return $oDataset->getRow(); - } - - /** - * Get all Swimlanes Elements for any Process - * @param string $sProUid - * @return array - */ - public function getAllLanes($sProUid) { - try { - $aLanes = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProUid); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oSwim = new SwimlanesElements(); - $aLanes[] = $oSwim->Load($aRow['SWI_UID']); - $oDataset->next(); - } - return $aLanes; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Task Rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $oTask array - */ - function getTaskRows ($sProUid ){ - $oTask = new Tasks( ); - return $oTask->getAllTasks( $sProUid ); - } - - /** - * Create Task Rows from a $aTasks array data and returns those in an array. - * @param $aTasks array - * @return $oTask array - */ - function createTaskRows ($aTasks ){ - $oTask = new Tasks( ); - return $oTask->createTaskRows( $aTasks ); - } - - /** - * Update Task Rows from a $aTasks array data and returns those in an array. - * @param $aTasks array - * @return $oTask array - */ - function updateTaskRows ($aTasks ){ - $oTask = new Tasks( ); - return $oTask->updateTaskRows( $aTasks ); - } - - /** - * Gets all Route rows from a Process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $oTask Tasks array - */ - function getRouteRows ($sProUid ){ - $oTask = new Tasks( ); - return $oTask->getAllRoutes( $sProUid ); - } - - /** - * Create Route Rows from a $aRoutes array data and returns those in an array. - * @param $aRoutes array - * @return $oTask Tasks array - */ - function createRouteRows ($aRoutes ){ - $oTask = new Tasks( ); - return $oTask->createRouteRows( $aRoutes ); - } - - /** - * Update Route Rows from a $aRoutes array data and returns those in an array. - * @param $aRoutes array - * @return $oTask Tasks array - */ - function updateRouteRows ($aRoutes ){ - $oTask = new Tasks( ); - return $oTask->updateRouteRows( $aRoutes ); - } - - /** - * Get Lane Rows from a Process and returns those in an array. - * @param $sProUid string for the process Uid - * @return array - */ - function getLaneRows ($sProUid ){ - return $this->getAllLanes( $sProUid ); - } - - /** - * Get Gateway Rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $oTask array - */ - function getGatewayRows ($sProUid ){ - $oTask = new Tasks( ); - return $oTask->getAllGateways( $sProUid ); - } - - /** - * Create Gateway Rows from a $aGateways array data and returns those in an array. - * @param $aGateways array - * @return $oGateway array - */ - function createGatewayRows ($aGateways ){ - $oTask = new Tasks( ); - return $oTask->createGatewayRows( $aGateways ); - } - - /** - * Create Lane Rows from a $aLanes array data and returns those in an array. - * @param $aLanes array. - * @return void - */ - function createLaneRows ($aLanes ){ - foreach ( $aLanes as $key => $row ) { - $oLane = new SwimlanesElements(); - if($oLane->swimlanesElementsExists($row['SWI_UID'])) - $oLane->remove($row['SWI_UID']); - - $res = $oLane->create($row); - } - return; - } - - /** - * Create Sub Process rows from an array, removing those subprocesses with - * the same UID. - * @param $SubProcess array - * @return void. - */ - function createSubProcessRows ($SubProcess ){ - foreach ( $SubProcess as $key => $row ) { - $oSubProcess = new SubProcess(); - if($oSubProcess->subProcessExists ($row['SP_UID'])) - $oSubProcess->remove($row['SP_UID']); - - $res = $oSubProcess->create($row); - } - return; - } - - /** - * Create Case Tracker rows from an array, removing those Trackers with - * the same UID. - * @param $CaseTracker array. - * @return void - */ - function createCaseTrackerRows ($CaseTracker ){ - if ( is_array ( $CaseTracker) ) - foreach ( $CaseTracker as $key => $row ) { - $oCaseTracker = new CaseTracker(); - if($oCaseTracker->caseTrackerExists ($row['PRO_UID'])) - $oCaseTracker->remove($row['PRO_UID']); - $res = $oCaseTracker->create($row); - } - return; - } - - /** - * Create Case Tracker Objects rows from an array, removing those Objects - * with the same UID, and recreaiting those from the array data. - * @param $CaseTrackerObject array. - * @return void - */ - function createCaseTrackerObjectRows ($CaseTrackerObject ) { - foreach ( $CaseTrackerObject as $key => $row ) { - $oCaseTrackerObject = new CaseTrackerObject(); - if($oCaseTrackerObject->caseTrackerObjectExists ($row['CTO_UID'])) - $oCaseTrackerObject->remove($row['CTO_UID']); - $res = $oCaseTrackerObject->create($row); - } - return; - } - - /** - * Create Object Permissions rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $sProUid string for the process Uid. - * @return void - */ - function createObjectPermissionsRows ($ObjectPermissions ) { - foreach ( $ObjectPermissions as $key => $row ) { - $oObjectPermissions = new ObjectPermission(); - if($oObjectPermissions->Exists ($row['OP_UID'])) - $oObjectPermissions->remove($row['OP_UID']); - $res = $oObjectPermissions->create($row); - } - return; - } - - /** - * Create Stage rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $Stage array. - * @return void - */ - function createStageRows ($Stage ) { - foreach ( $Stage as $key => $row ) { - $oStage = new Stage(); - if($oStage->Exists ($row['STG_UID'])) - $oStage->remove($row['STG_UID']); - $res = $oStage->create($row); - } - return; - } - - /** - * Create Field Conditions from an array of Field Conditions and Dynaforms, - * removing those Objects with the same UID, and recreaiting the records - * from the arrays data. - * @param $aFieldCondition array. - * @param $aDynaform array. - * @return void - */ - function createFieldCondition($aFieldCondition, $aDynaform ){ - if ( is_array ( $aFieldCondition ) ) - foreach ( $aFieldCondition as $key => $row ) { - $oFieldCondition = new FieldCondition(); - if($oFieldCondition->fieldConditionExists ($row['FCD_UID'], $aDynaform) ) - $oFieldCondition->remove($row['FCD_UID']); - $res = $oFieldCondition->create($row); - } - return; - } - - /** - * Create Event rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $Event array. - * @return void - */ - function createEventRows ($Event ) { - foreach ( $Event as $key => $row ) { - $oEvent = new Event(); - if($oEvent->Exists ($row['EVN_UID'])) - $oEvent->remove($row['EVN_UID']); - - $res = $oEvent->create($row); - } - return; - } - - /** - * Create Case Scheduler Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $CaseScheduler array. - * @return void - */ - function createCaseSchedulerRows ($CaseScheduler ) { - foreach ( $CaseScheduler as $key => $row ) { - $oCaseScheduler = new CaseScheduler(); - if($oCaseScheduler->Exists($row['SCH_UID'])) - $oCaseScheduler->remove($row['SCH_UID']); - - $res = $oCaseScheduler->create($row); - } - return; - } - - /** - * Create ProcessCategory record - * @param $ProcessCategory array. - * @return void - */ - function createProcessCategoryRow ($row) - { - if ($row && is_array($row) && isset($row['CATEGORY_UID'])) { - $record = ProcessCategoryPeer::retrieveByPK($row['CATEGORY_UID']); - // create only if the category doesn't exists - if (!$record) { - $processCategory = new ProcessCategory(); - $processCategory->fromArray($row, BasePeer::TYPE_FIELDNAME); - $processCategory->save(); - } - } - } - - /** - * Gets Input Documents Rows from aProcess. - * @param $sProUid string. - * @return void - */ - function getInputRows ($sProUid ){ - try { - $aInput = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(InputdocumentPeer::PRO_UID, $sProUid); - $oDataset = InputdocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oInput = new Inputdocument(); - $aInput[] = $oInput->Load( $aRow['INP_DOC_UID'] ); - $oDataset->next(); - } - return $aInput; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Input Documents Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $aInput array. - * @return void - */ - function createInputRows ($aInput ){ - foreach ( $aInput as $key => $row ) { - $oInput = new Inputdocument(); - //unset ($row['TAS_UID']); - if($oInput->InputExists ($row['INP_DOC_UID'])) - $oInput->remove($row['INP_DOC_UID']); - - $res = $oInput->create($row); - } - return; - } - - /** - * change and Renew all Input GUID, because the process needs to have a new set of Inputs - * @param string $oData - * @return boolean - */ - function renewAllInputGuid ( &$oData ) { - $map = array (); - foreach ( $oData->inputs as $key => $val ) { - $newGuid = $this->getUnusedInputGUID(); - $map[ $val['INP_DOC_UID'] ] = $newGuid; - $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; - } - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_TYPE_OBJ'])){ - if ( $val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'INPUT_DOCUMENT' ) { - if(isset($map[ $val['OP_OBJ_UID'] ])){ - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + function getUnusedDynaformGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->dynaformExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Field Condition GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedFieldConditionGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->fieldsConditionsExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Event GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedEventGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->eventExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Case Scheduler GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedCaseSchedulerGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->caseSchedulerExists( $sNewUid )); + return $sNewUid; + } + + /** + * change the GUID for a serialized process + * + * @param string $sProUid + * @return boolean + */ + function setProcessGUID (&$oData, $sNewProUid) + { + $sProUid = $oData->process['PRO_UID']; + $oData->process['PRO_UID'] = $sNewProUid; + + if (isset( $oData->tasks ) && is_array( $oData->tasks )) { + foreach ($oData->tasks as $key => $val) { + $oData->tasks[$key]['PRO_UID'] = $sNewProUid; } } - } - } - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $oData->routes[$key]['PRO_UID'] = $sNewProUid; + } } - } - } - } - /** - * Gets the Output Documents Rows from a Process. - * @param $sProUid string. - * @return $aOutput array - */ - function getOutputRows ($sProUid ){ - try { - $aOutput = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(OutputdocumentPeer::PRO_UID, $sProUid); - $oDataset = OutputdocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oOutput = new Outputdocument(); - $aOutput[] = $oOutput->Load( $aRow['OUT_DOC_UID'] ); + if (isset( $oData->lanes ) && is_array( $oData->lanes )) { + foreach ($oData->lanes as $key => $val) { + $oData->lanes[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->inputs ) && is_array( $oData->inputs )) { + foreach ($oData->inputs as $key => $val) { + $oData->inputs[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->outputs ) && is_array( $oData->outputs )) { + foreach ($oData->outputs as $key => $val) { + $oData->outputs[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->steps ) && is_array( $oData->steps )) { + foreach ($oData->steps as $key => $val) { + $oData->steps[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->dynaforms ) && is_array( $oData->dynaforms )) { + foreach ($oData->dynaforms as $key => $val) { + $oData->dynaforms[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->triggers ) && is_array( $oData->triggers )) { + foreach ($oData->triggers as $key => $val) { + $oData->triggers[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->reportTables ) && is_array( $oData->reportTables )) { + foreach ($oData->reportTables as $key => $val) { + $oData->reportTables[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->reportTablesVars ) && is_array( $oData->reportTablesVars )) { + foreach ($oData->reportTablesVars as $key => $val) { + $oData->reportTablesVars[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->dbconnections ) && is_array( $oData->dbconnections )) { + foreach ($oData->dbconnections as $key => $val) { + $oData->dbconnections[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + $oData->stepSupervisor[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + $oData->objectPermissions[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseTracker ) && is_array( $oData->caseTracker )) { + foreach ($oData->caseTracker as $key => $val) { + $oData->caseTracker[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + $oData->caseTrackerObject[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->stage ) && is_array( $oData->stage )) { + foreach ($oData->stage as $key => $val) { + $oData->stage[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->subProcess ) && is_array( $oData->subProcess )) { + foreach ($oData->subProcess as $key => $val) { + $oData->subProcess[$key]['PRO_PARENT'] = $sNewProUid; + } + } + + if (isset( $oData->event ) && is_array( $oData->event )) { + foreach ($oData->event as $key => $val) { + $oData->event[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseScheduler ) && is_array( $oData->caseScheduler )) { + foreach ($oData->caseScheduler as $key => $val) { + $oData->caseScheduler[$key]['PRO_UID'] = $sNewProUid; + } + } + return true; + } + + /** + * change the GUID Parent for a serialized process, only in serialized data + * + * @param string $sProUid + * @return boolean + */ + function setProcessParent (&$oData, $sParentUid) + { + $oData->process['PRO_PARENT'] = $sParentUid; + $oData->process['PRO_CREATE_DATE'] = date( 'Y-m-d H:i:s' ); + $oData->process['PRO_UPDATE_DATE'] = date( 'Y-m-d H:i:s' ); + return true; + } + + /** + * change and Renew all Task GUID, because the process needs to have a new set of tasks + * + * @param string $oData + * @return boolean + */ + function renewAllTaskGuid (&$oData) + { + $map = array (); + foreach ($oData->tasks as $key => $val) { + $newGuid = $this->getUnusedTaskGUID(); + $map[$val['TAS_UID']] = $newGuid; + $oData->tasks[$key]['TAS_UID'] = $newGuid; + } + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->routes[$key]['TAS_UID'] = $newGuid; + if (strlen( $val['ROU_NEXT_TASK'] ) > 0 && $val['ROU_NEXT_TASK'] > 0) { + $newGuid = $map[$val['ROU_NEXT_TASK']]; + $oData->routes[$key]['ROU_NEXT_TASK'] = $newGuid; + } + } + } + + if (isset( $oData->steps ) && is_array( $oData->steps )) { + foreach ($oData->steps as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->steps[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->steptriggers ) && is_array( $oData->steptriggers )) { + foreach ($oData->steptriggers as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->steptriggers[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->taskusers ) && is_array( $oData->taskusers )) { + foreach ($oData->taskusers as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->taskusers[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->subProcess ) && is_array( $oData->subProcess )) { + foreach ($oData->subProcess as $key => $val) { + $newGuid = $map[$val['TAS_PARENT']]; + $oData->subProcess[$key]['TAS_PARENT'] = $newGuid; + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->subProcess[$key]['TAS_UID'] = $newGuid; + } + } + } + + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->objectPermissions[$key]['TAS_UID'] = $newGuid; + } + } + } + + // New process bpmn + if (isset( $oData->event ) && is_array( $oData->event )) { + foreach ($oData->event as $key => $val) { + if (isset( $val['EVN_TAS_UID_FROM'] ) && isset( $map[$val['EVN_TAS_UID_FROM']] )) { + $newGuid = $map[$val['EVN_TAS_UID_FROM']]; + $oData->event[$key]['EVN_TAS_UID_FROM'] = $newGuid; + } + } + } + + if (isset( $oData->caseScheduler ) && is_array( $oData->caseScheduler )) { + foreach ($oData->caseScheduler as $key => $val) { + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->caseScheduler[$key]['TAS_UID'] = $newGuid; + } + } + } + + } + + /** + * change and Renew all Dynaform GUID, because the process needs to have a new set of dynaforms + * + * @param string $oData + * @return boolean + */ + function renewAllDynaformGuid (&$oData) + { + $map = array (); + foreach ($oData->dynaforms as $key => $val) { + $newGuid = $this->getUnusedDynaformGUID(); + $map[$val['DYN_UID']] = $newGuid; + $oData->dynaforms[$key]['DYN_UID'] = $newGuid; + } + + if (isset( $oData->process['PRO_DYNAFORMS'] ) && ! is_array( $oData->process['PRO_DYNAFORMS'] )) { + $oData->process['PRO_DYNAFORMS'] = @unserialize( $oData->process['PRO_DYNAFORMS'] ); + } + + if (! isset( $oData->process['PRO_DYNAFORMS']['PROCESS'] )) { + $oData->process['PRO_DYNAFORMS']['PROCESS'] = ''; + } + + if ($oData->process['PRO_DYNAFORMS']['PROCESS'] != '') { + $oData->process['PRO_DYNAFORMS']['PROCESS'] = $map[$oData->process['PRO_DYNAFORMS']['PROCESS']]; + } + + foreach ($oData->steps as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'DYNAFORM') { + if (isset( $map[$val['OP_OBJ_UID']] )) { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + } + } + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + foreach ($oData->dynaformFiles as $key => $val) { + $newGuid = $map[$key]; + $oData->dynaformFiles[$key] = $newGuid; + } + } + if (isset( $oData->gridFiles )) { + foreach ($oData->gridFiles as $key => $val) { + $newGuid = $map[$key]; + $oData->gridFiles[$key] = $newGuid; + } + } + if (isset( $oData->fieldCondition ) && is_array( $oData->fieldCondition )) { + foreach ($oData->fieldCondition as $key => $val) { + $newGuid = $map[$val['FCD_DYN_UID']]; + $oData->fieldCondition[$key]['FCD_DYN_UID'] = $newGuid; + } + } + + } + + /** + * get a Process with a search based in the process Uid + * + * @param $sProUid string process Uid + * @return $oProcess Process object + */ + function getProcessRow ($sProUid, $getAllLang = false) + { + $oProcess = new Process(); + return $oProcess->Load( $sProUid, $getAllLang ); + } + + /** + * creates a process new process if a process exists with the same uid of the + * $row['PRO_UID'] parameter then deletes it from the database and creates + * a new one based on the $row parameter + * + * @param $row array parameter with the process data + * @return $oProcess Process object + */ + function createProcessRow ($row) + { + $oProcess = new Process(); + if ($oProcess->processExists( $row['PRO_UID'] )) { + $oProcess->remove( $row['PRO_UID'] ); + } + + return $oProcess->createRow( $row ); + } + + /** + * Update a Process register in DB, if the process doesn't exist with the same + * uid of the $row['PRO_UID'] parameter the function creates a new one based + * on the $row parameter data. + * + * @param $row array parameter with the process data + * @return $oProcess Process object + */ + function updateProcessRow ($row) + { + $oProcess = new Process(); + if ($oProcess->processExists( $row['PRO_UID'] )) + $oProcess->update( $row ); + else + $oProcess->create( $row ); + } + + /** + * Gets the subprocess data from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aSubProcess array + */ + function getSubProcessRow ($sProUid) + { + try { + $aSubProcess = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aSubProcess[] = $aRow; + $oDataset->next(); + } + return $aSubProcess; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a case Tracker Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseTracker array + */ + + function getCaseTrackerRow ($sProUid) + { + try { + $aCaseTracker = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aCaseTracker[] = $aRow; + $oDataset->next(); + } + return $aCaseTracker; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a case TrackerObject Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseTracker array + */ + function getCaseTrackerObjectRow ($sProUid) + { + try { + $aCaseTrackerObject = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aCaseTrackerObject[] = $aRow; + $oDataset->next(); + } + return $aCaseTrackerObject; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a Stage Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aStage array + */ + function getStageRow ($sProUid) + { + try { + $aStage = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StagePeer::PRO_UID, $sProUid ); + $oDataset = StagePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oStage = new Stage(); + $aStage[] = $oStage->load( $aRow['STG_UID'] ); + $oDataset->next(); + } + return $aStage; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Field Conditions from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aFieldCondition array + */ + + function getFieldCondition ($sProUid) + { + try { + $aFieldCondition = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oCriteria->addJoin( DynaformPeer::DYN_UID, FieldConditionPeer::FCD_DYN_UID ); + + $oDataset = FieldConditionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aFieldCondition[] = $aRow; + $oDataset->next(); + } + return $aFieldCondition; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Event rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aEvent array + */ + function getEventRow ($sProUid) + { + try { + $aEvent = array (); + $oCriteria = new Criteria( 'workflow' ); + + $oCriteria->add( EventPeer::PRO_UID, $sProUid ); + $oDataset = EventPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oEvent = new Event(); + $aEvent[] = $oEvent->load( $aRow['EVN_UID'] ); + $oDataset->next(); + } + return $aEvent; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Cases Scheduler rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseScheduler array + */ + function getCaseSchedulerRow ($sProUid) + { + try { + $aCaseScheduler = array (); + $oCriteria = new Criteria( 'workflow' ); + + $oCriteria->add( CaseSchedulerPeer::PRO_UID, $sProUid ); + $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oCaseScheduler = new CaseScheduler(); + $aCaseScheduler[] = $oCaseScheduler->load( $aRow['SCH_UID'] ); + $oDataset->next(); + } + return $aCaseScheduler; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets processCategory record, if the process had one + * + * @param $sProUid string for the process Uid + * @return $processCategory array + */ + public function getProcessCategoryRow ($sProUid) + { + $process = ProcessPeer::retrieveByPK( $sProUid ); + + if ($process->getProCategory() == '') { + return null; + } + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ProcessCategoryPeer::CATEGORY_UID, $process->getProCategory() ); + $oDataset = ProcessCategoryPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - return $aOutput; - } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Create Input Documents Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $aOutput array. - * @return void - */ - function createOutputRows ($aOutput ){ - foreach ( $aOutput as $key => $row ) { - $oOutput = new Outputdocument(); - //unset ($row['TAS_UID']); - if($oOutput->OutputExists ($row['OUT_DOC_UID'])) - $oOutput->remove($row['OUT_DOC_UID']); + return $oDataset->getRow(); + } - $res = $oOutput->create($row); + /** + * Get all Swimlanes Elements for any Process + * + * @param string $sProUid + * @return array + */ + public function getAllLanes ($sProUid) + { + try { + $aLanes = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProUid ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oSwim = new SwimlanesElements(); + $aLanes[] = $oSwim->Load( $aRow['SWI_UID'] ); + $oDataset->next(); + } + return $aLanes; + } catch (Exception $oError) { + throw ($oError); + } } - return; - } - /** - * change and Renew all Output GUID, because the process needs to have a new set of Outputs - * @param string $oData - * @return boolean - */ - function renewAllOutputGuid ( &$oData ) { - $map = array (); - foreach ( $oData->outputs as $key => $val ) { - $newGuid = $this->getUnusedOutputGUID(); - $map[ $val['OUT_DOC_UID'] ] = $newGuid; - $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; + /** + * Get Task Rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $oTask array + */ + function getTaskRows ($sProUid) + { + $oTask = new Tasks(); + return $oTask->getAllTasks( $sProUid ); } - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_TYPE_OBJ'])){ - if ( $val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; - } - } - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - /** - * change and Renew all Trigger GUID, because the process needs to have a new set of Triggers - * @param string $oData - * @return boolean - */ - function renewAllTriggerGuid ( &$oData ) { - $map = array (); - foreach ( $oData->triggers as $key => $val ) { - $newGuid = $this->getUnusedTriggerGUID(); - $map[ $val['TRI_UID'] ] = $newGuid; - $oData->triggers[$key]['TRI_UID'] = $newGuid; + /** + * Create Task Rows from a $aTasks array data and returns those in an array. + * + * @param $aTasks array + * @return $oTask array + */ + function createTaskRows ($aTasks) + { + $oTask = new Tasks(); + return $oTask->createTaskRows( $aTasks ); } - foreach ( $oData->steptriggers as $key => $val ) { - if (isset($map[ $val['TRI_UID'] ])) { - $newGuid = $map[ $val['TRI_UID'] ]; - $oData->steptriggers[$key]['TRI_UID'] = $newGuid; - } - else { - $oData->steptriggers[$key]['TRI_UID'] = $this->getUnusedTriggerGUID(); - } - } - } - /** - * Renew all the GUID's for Subprocesses - * @param $oData array. - * @return void - */ - function renewAllSubProcessGuid ( &$oData ) { - $map = array (); - foreach ( $oData->subProcess as $key => $val ) { - $newGuid = $this->getUnusedSubProcessGUID(); - $map[ $val['SP_UID'] ] = $newGuid; - $oData->subProcess[$key]['SP_UID'] = $newGuid; + /** + * Update Task Rows from a $aTasks array data and returns those in an array. + * + * @param $aTasks array + * @return $oTask array + */ + function updateTaskRows ($aTasks) + { + $oTask = new Tasks(); + return $oTask->updateTaskRows( $aTasks ); } - } - /** - * Renew all the GUID's for Case Tracker Objects - * @param $oData array. - * @return void - */ - function renewAllCaseTrackerObjectGuid ( &$oData ) { - $map = array (); - foreach ( $oData->caseTrackerObject as $key => $val ) { - $newGuid = $this->getUnusedCaseTrackerObjectGUID(); - $map[ $val['CTO_UID'] ] = $newGuid; - $oData->caseTrackerObject[$key]['CTO_UID'] = $newGuid; + /** + * Gets all Route rows from a Process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $oTask Tasks array + */ + function getRouteRows ($sProUid) + { + $oTask = new Tasks(); + return $oTask->getAllRoutes( $sProUid ); } - } - /** - * Renew all the GUID's for DB Sources - * @param $oData array. - * @return void - */ - function renewAllDBSourceGuid ( &$oData ) { - $map = array (); - $aSqlConnections = array(); - foreach ( $oData->dbconnections as $key => $val ) { - $newGuid = $val['DBS_UID']; ///-- $this->getUnusedDBSourceGUID(); - $map[ $val['DBS_UID'] ] = $newGuid; - $oData->dbconnections[$key]['DBS_UID'] = $newGuid; + /** + * Create Route Rows from a $aRoutes array data and returns those in an array. + * + * @param $aRoutes array + * @return $oTask Tasks array + */ + function createRouteRows ($aRoutes) + { + $oTask = new Tasks(); + return $oTask->createRouteRows( $aRoutes ); } - $oData->sqlConnections = $map; - } - /** - * Renew all the GUID's for Object Permissions - * @param $oData array. - * @return void - */ - function renewAllObjectPermissionGuid ( &$oData ) { - $map = array (); - foreach ( $oData->objectPermissions as $key => $val ) { - $newGuid = $this->getUnusedObjectPermissionGUID(); - $map[ $val['OP_UID'] ] = $newGuid; - $oData->objectPermissions[$key]['OP_UID'] = $newGuid; + /** + * Update Route Rows from a $aRoutes array data and returns those in an array. + * + * @param $aRoutes array + * @return $oTask Tasks array + */ + function updateRouteRows ($aRoutes) + { + $oTask = new Tasks(); + return $oTask->updateRouteRows( $aRoutes ); } - } - /** - * Renew all the GUID's for Routes Objects - * @param $oData array. - * @return void - */ - function renewAllRouteGuid ( &$oData ) { - $map = array (); - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ( $oData->routes as $key => $val ) { - $newGuid = $this->getUnusedRouteGUID(); - $map[ $val['ROU_UID'] ] = $newGuid; - $oData->routes[$key]['ROU_UID'] = $newGuid; - } + /** + * Get Lane Rows from a Process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return array + */ + function getLaneRows ($sProUid) + { + return $this->getAllLanes( $sProUid ); } - } - /** - * Renew all the GUID's for Stage Objects - * @param $oData array. - * @return void - */ - function renewAllStageGuid ( &$oData ) { - $map = array (); - foreach ( $oData->stage as $key => $val ) { - $newGuid = $this->getUnusedStageGUID(); - $map[ $val['STG_UID'] ] = $newGuid; - $oData->stage[$key]['STG_UID'] = $newGuid; + /** + * Get Gateway Rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $oTask array + */ + function getGatewayRows ($sProUid) + { + $oTask = new Tasks(); + return $oTask->getAllGateways( $sProUid ); } - foreach ( $oData->tasks as $key => $val ) { - if (isset($map[ $val['STG_UID'] ])) { - $newGuid = $map[ $val['STG_UID'] ]; - $oData->tasks[$key]['STG_UID'] = $newGuid; - } - } - } - /** - * Renew all the GUID's for Swimlanes Elements Objects - * @param $oData array. - * @return void - */ - function renewAllSwimlanesElementsGuid ( &$oData ) { - $map = array (); - foreach ( $oData->lanes as $key => $val ) { - $newGuid = $this->getUnusedSLGUID(); - $map[ $val['SWI_UID'] ] = $newGuid; - $oData->lanes[$key]['SWI_UID'] = $newGuid; + /** + * Create Gateway Rows from a $aGateways array data and returns those in an array. + * + * @param $aGateways array + * @return $oGateway array + */ + function createGatewayRows ($aGateways) + { + $oTask = new Tasks(); + return $oTask->createGatewayRows( $aGateways ); } - } - /** - * Renew the GUID's for all the Report Tables Objects - * @param $oData array. - * @return void - */ - function renewAllReportTableGuid ( &$oData ) { - $map = array (); - foreach ( $oData->reportTables as $key => $val ) { - $newGuid = $this->getUnusedRTGUID(); - $map[ $val['REP_TAB_UID'] ] = $newGuid; - $oData->reportTables[$key]['REP_TAB_UID'] = $newGuid; + /** + * Create Lane Rows from a $aLanes array data and returns those in an array. + * + * @param $aLanes array. + * @return void + */ + function createLaneRows ($aLanes) + { + foreach ($aLanes as $key => $row) { + $oLane = new SwimlanesElements(); + if ($oLane->swimlanesElementsExists( $row['SWI_UID'] )) + $oLane->remove( $row['SWI_UID'] ); + + $res = $oLane->create( $row ); + } + return; } - foreach ( $oData->reportTablesVars as $key => $val ) { - if(isset($map[ $val['REP_TAB_UID'] ])){ - /*TODO: Why this can be not defined?? The scenario was when + + /** + * Create Sub Process rows from an array, removing those subprocesses with + * the same UID. + * + * @param $SubProcess array + * @return void. + */ + function createSubProcessRows ($SubProcess) + { + foreach ($SubProcess as $key => $row) { + $oSubProcess = new SubProcess(); + if ($oSubProcess->subProcessExists( $row['SP_UID'] )) + $oSubProcess->remove( $row['SP_UID'] ); + + $res = $oSubProcess->create( $row ); + } + return; + } + + /** + * Create Case Tracker rows from an array, removing those Trackers with + * the same UID. + * + * @param $CaseTracker array. + * @return void + */ + function createCaseTrackerRows ($CaseTracker) + { + if (is_array( $CaseTracker )) + foreach ($CaseTracker as $key => $row) { + $oCaseTracker = new CaseTracker(); + if ($oCaseTracker->caseTrackerExists( $row['PRO_UID'] )) + $oCaseTracker->remove( $row['PRO_UID'] ); + $res = $oCaseTracker->create( $row ); + } + return; + } + + /** + * Create Case Tracker Objects rows from an array, removing those Objects + * with the same UID, and recreaiting those from the array data. + * + * @param $CaseTrackerObject array. + * @return void + */ + function createCaseTrackerObjectRows ($CaseTrackerObject) + { + foreach ($CaseTrackerObject as $key => $row) { + $oCaseTrackerObject = new CaseTrackerObject(); + if ($oCaseTrackerObject->caseTrackerObjectExists( $row['CTO_UID'] )) + $oCaseTrackerObject->remove( $row['CTO_UID'] ); + $res = $oCaseTrackerObject->create( $row ); + } + return; + } + + /** + * Create Object Permissions rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $sProUid string for the process Uid. + * @return void + */ + function createObjectPermissionsRows ($ObjectPermissions) + { + foreach ($ObjectPermissions as $key => $row) { + $oObjectPermissions = new ObjectPermission(); + if ($oObjectPermissions->Exists( $row['OP_UID'] )) + $oObjectPermissions->remove( $row['OP_UID'] ); + $res = $oObjectPermissions->create( $row ); + } + return; + } + + /** + * Create Stage rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $Stage array. + * @return void + */ + function createStageRows ($Stage) + { + foreach ($Stage as $key => $row) { + $oStage = new Stage(); + if ($oStage->Exists( $row['STG_UID'] )) + $oStage->remove( $row['STG_UID'] ); + $res = $oStage->create( $row ); + } + return; + } + + /** + * Create Field Conditions from an array of Field Conditions and Dynaforms, + * removing those Objects with the same UID, and recreaiting the records + * from the arrays data. + * + * @param $aFieldCondition array. + * @param $aDynaform array. + * @return void + */ + function createFieldCondition ($aFieldCondition, $aDynaform) + { + if (is_array( $aFieldCondition )) + foreach ($aFieldCondition as $key => $row) { + $oFieldCondition = new FieldCondition(); + if ($oFieldCondition->fieldConditionExists( $row['FCD_UID'], $aDynaform )) + $oFieldCondition->remove( $row['FCD_UID'] ); + $res = $oFieldCondition->create( $row ); + } + return; + } + + /** + * Create Event rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $Event array. + * @return void + */ + function createEventRows ($Event) + { + foreach ($Event as $key => $row) { + $oEvent = new Event(); + if ($oEvent->Exists( $row['EVN_UID'] )) + $oEvent->remove( $row['EVN_UID'] ); + + $res = $oEvent->create( $row ); + } + return; + } + + /** + * Create Case Scheduler Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $CaseScheduler array. + * @return void + */ + function createCaseSchedulerRows ($CaseScheduler) + { + foreach ($CaseScheduler as $key => $row) { + $oCaseScheduler = new CaseScheduler(); + if ($oCaseScheduler->Exists( $row['SCH_UID'] )) + $oCaseScheduler->remove( $row['SCH_UID'] ); + + $res = $oCaseScheduler->create( $row ); + } + return; + } + + /** + * Create ProcessCategory record + * + * @param $ProcessCategory array. + * @return void + */ + function createProcessCategoryRow ($row) + { + if ($row && is_array( $row ) && isset( $row['CATEGORY_UID'] )) { + $record = ProcessCategoryPeer::retrieveByPK( $row['CATEGORY_UID'] ); + // create only if the category doesn't exists + if (! $record) { + $processCategory = new ProcessCategory(); + $processCategory->fromArray( $row, BasePeer::TYPE_FIELDNAME ); + $processCategory->save(); + } + } + } + + /** + * Gets Input Documents Rows from aProcess. + * + * @param $sProUid string. + * @return void + */ + function getInputRows ($sProUid) + { + try { + $aInput = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( InputdocumentPeer::PRO_UID, $sProUid ); + $oDataset = InputdocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oInput = new Inputdocument(); + $aInput[] = $oInput->Load( $aRow['INP_DOC_UID'] ); + $oDataset->next(); + } + return $aInput; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Input Documents Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $aInput array. + * @return void + */ + function createInputRows ($aInput) + { + foreach ($aInput as $key => $row) { + $oInput = new Inputdocument(); + //unset ($row['TAS_UID']); + if ($oInput->InputExists( $row['INP_DOC_UID'] )) + $oInput->remove( $row['INP_DOC_UID'] ); + + $res = $oInput->create( $row ); + } + return; + } + + /** + * change and Renew all Input GUID, because the process needs to have a new set of Inputs + * + * @param string $oData + * @return boolean + */ + function renewAllInputGuid (&$oData) + { + $map = array (); + foreach ($oData->inputs as $key => $val) { + $newGuid = $this->getUnusedInputGUID(); + $map[$val['INP_DOC_UID']] = $newGuid; + $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; + } + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_TYPE_OBJ'] )) { + if ($val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'INPUT_DOCUMENT') { + if (isset( $map[$val['OP_OBJ_UID']] )) { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + } + } + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + } + + /** + * Gets the Output Documents Rows from a Process. + * + * @param $sProUid string. + * @return $aOutput array + */ + function getOutputRows ($sProUid) + { + try { + $aOutput = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( OutputdocumentPeer::PRO_UID, $sProUid ); + $oDataset = OutputdocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oOutput = new Outputdocument(); + $aOutput[] = $oOutput->Load( $aRow['OUT_DOC_UID'] ); + $oDataset->next(); + } + return $aOutput; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Input Documents Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $aOutput array. + * @return void + */ + function createOutputRows ($aOutput) + { + foreach ($aOutput as $key => $row) { + $oOutput = new Outputdocument(); + //unset ($row['TAS_UID']); + if ($oOutput->OutputExists( $row['OUT_DOC_UID'] )) + $oOutput->remove( $row['OUT_DOC_UID'] ); + + $res = $oOutput->create( $row ); + } + return; + } + + /** + * change and Renew all Output GUID, because the process needs to have a new set of Outputs + * + * @param string $oData + * @return boolean + */ + function renewAllOutputGuid (&$oData) + { + $map = array (); + foreach ($oData->outputs as $key => $val) { + $newGuid = $this->getUnusedOutputGUID(); + $map[$val['OUT_DOC_UID']] = $newGuid; + $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; + } + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_TYPE_OBJ'] )) { + if ($val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + + /** + * change and Renew all Trigger GUID, because the process needs to have a new set of Triggers + * + * @param string $oData + * @return boolean + */ + function renewAllTriggerGuid (&$oData) + { + $map = array (); + foreach ($oData->triggers as $key => $val) { + $newGuid = $this->getUnusedTriggerGUID(); + $map[$val['TRI_UID']] = $newGuid; + $oData->triggers[$key]['TRI_UID'] = $newGuid; + } + foreach ($oData->steptriggers as $key => $val) { + if (isset( $map[$val['TRI_UID']] )) { + $newGuid = $map[$val['TRI_UID']]; + $oData->steptriggers[$key]['TRI_UID'] = $newGuid; + } else { + $oData->steptriggers[$key]['TRI_UID'] = $this->getUnusedTriggerGUID(); + } + } + } + + /** + * Renew all the GUID's for Subprocesses + * + * @param $oData array. + * @return void + */ + function renewAllSubProcessGuid (&$oData) + { + $map = array (); + foreach ($oData->subProcess as $key => $val) { + $newGuid = $this->getUnusedSubProcessGUID(); + $map[$val['SP_UID']] = $newGuid; + $oData->subProcess[$key]['SP_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for Case Tracker Objects + * + * @param $oData array. + * @return void + */ + function renewAllCaseTrackerObjectGuid (&$oData) + { + $map = array (); + foreach ($oData->caseTrackerObject as $key => $val) { + $newGuid = $this->getUnusedCaseTrackerObjectGUID(); + $map[$val['CTO_UID']] = $newGuid; + $oData->caseTrackerObject[$key]['CTO_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for DB Sources + * + * @param $oData array. + * @return void + */ + function renewAllDBSourceGuid (&$oData) + { + $map = array (); + $aSqlConnections = array (); + foreach ($oData->dbconnections as $key => $val) { + $newGuid = $val['DBS_UID']; ///-- $this->getUnusedDBSourceGUID(); + $map[$val['DBS_UID']] = $newGuid; + $oData->dbconnections[$key]['DBS_UID'] = $newGuid; + } + $oData->sqlConnections = $map; + } + + /** + * Renew all the GUID's for Object Permissions + * + * @param $oData array. + * @return void + */ + function renewAllObjectPermissionGuid (&$oData) + { + $map = array (); + foreach ($oData->objectPermissions as $key => $val) { + $newGuid = $this->getUnusedObjectPermissionGUID(); + $map[$val['OP_UID']] = $newGuid; + $oData->objectPermissions[$key]['OP_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for Routes Objects + * + * @param $oData array. + * @return void + */ + function renewAllRouteGuid (&$oData) + { + $map = array (); + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $newGuid = $this->getUnusedRouteGUID(); + $map[$val['ROU_UID']] = $newGuid; + $oData->routes[$key]['ROU_UID'] = $newGuid; + } + } + } + + /** + * Renew all the GUID's for Stage Objects + * + * @param $oData array. + * @return void + */ + function renewAllStageGuid (&$oData) + { + $map = array (); + foreach ($oData->stage as $key => $val) { + $newGuid = $this->getUnusedStageGUID(); + $map[$val['STG_UID']] = $newGuid; + $oData->stage[$key]['STG_UID'] = $newGuid; + } + foreach ($oData->tasks as $key => $val) { + if (isset( $map[$val['STG_UID']] )) { + $newGuid = $map[$val['STG_UID']]; + $oData->tasks[$key]['STG_UID'] = $newGuid; + } + } + } + + /** + * Renew all the GUID's for Swimlanes Elements Objects + * + * @param $oData array. + * @return void + */ + function renewAllSwimlanesElementsGuid (&$oData) + { + $map = array (); + foreach ($oData->lanes as $key => $val) { + $newGuid = $this->getUnusedSLGUID(); + $map[$val['SWI_UID']] = $newGuid; + $oData->lanes[$key]['SWI_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all the Report Tables Objects + * + * @param $oData array. + * @return void + */ + function renewAllReportTableGuid (&$oData) + { + $map = array (); + foreach ($oData->reportTables as $key => $val) { + $newGuid = $this->getUnusedRTGUID(); + $map[$val['REP_TAB_UID']] = $newGuid; + $oData->reportTables[$key]['REP_TAB_UID'] = $newGuid; + } + foreach ($oData->reportTablesVars as $key => $val) { + if (isset( $map[$val['REP_TAB_UID']] )) { + /*TODO: Why this can be not defined?? The scenario was when * imported an existing process but as a new one */ - $newGuid = $map[ $val['REP_TAB_UID'] ]; - $oData->reportTablesVars[$key]['REP_TAB_UID'] = $newGuid; + $newGuid = $map[$val['REP_TAB_UID']]; + $oData->reportTablesVars[$key]['REP_TAB_UID'] = $newGuid; + } } } - } - /** - * Renew all the GUID's for All The Report Vars Objects - * @param $oData array. - * @return void - */ - function renewAllReportVarGuid ( &$oData ) { - $map = array (); - foreach ( $oData->reportTablesVars as $key => $val ) { - $newGuid = $this->getUnusedRTVGUID(); - $map[ $val['REP_VAR_UID'] ] = $newGuid; - $oData->reportTablesVars[$key]['REP_VAR_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Field Conditions Objects - * @param $oData array. - * @return void - */ - function renewAllFieldCondition ( &$oData ) { - $map = array (); - foreach ( $oData->fieldCondition as $key => $val ) { - $newGuid = $this->getUnusedFieldConditionGUID(); - $map[ $val['FCD_UID'] ] = $newGuid; - $oData->fieldCondition[$key]['FCD_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Events Objects - * @param $oData array. - * @return void - */ - function renewAllEvent( &$oData ) { - $map = array (); - foreach ( $oData->event as $key => $val ) { - $newGuid = $this->getUnusedEventGUID(); - $map[ $val['EVN_UID'] ] = $newGuid; - $oData->event[$key]['EVN_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all Case Scheduler Objects - * @param $oData array. - * @return void - */ - function renewAllCaseScheduler( &$oData ) { - $map = array (); - foreach ( $oData->caseScheduler as $key => $val ) { - $newGuid = $this->getUnusedCaseSchedulerGUID(); - $map[ $val['SCH_UID'] ] = $newGuid; - $oData->caseScheduler[$key]['SCH_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Uids for all the elements - * @param $oData array. - * @return void - */ - function renewAll( &$oData ) { - $this->renewAllTaskGuid ( $oData ); - $this->renewAllDynaformGuid ( $oData ); - $this->renewAllInputGuid ( $oData ); - $this->renewAllOutputGuid ( $oData ); - $this->renewAllStepGuid ( $oData ); - $this->renewAllTriggerGuid ( $oData ); - $this->renewAllSubProcessGuid ( $oData ); - $this->renewAllCaseTrackerObjectGuid ( $oData ); - $this->renewAllDBSourceGuid ( $oData ); - $this->renewAllObjectPermissionGuid ( $oData ); - $this->renewAllRouteGuid ( $oData ); - $this->renewAllStageGuid ( $oData ); - $this->renewAllSwimlanesElementsGuid ( $oData ); - $this->renewAllReportTableGuid ( $oData ); - $this->renewAllReportVarGuid ( $oData ); - $this->renewAllFieldCondition ( $oData ); - $this->renewAllEvent( $oData ); - $this->renewAllCaseScheduler( $oData ); - } - - /** - * Get Step Rows from a Process - * @param $sProUid array. - * @return array $aStep. - */ - function getStepRows ($sProUid ){ - try { - $aStep = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::PRO_UID, $sProUid); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oStep = new Step(); - $aStep[] = $oStep->Load( $aRow['STEP_UID'] ); - $oDataset->next(); - } - return $aStep; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Step Rows from a Process - * @param $aStep array. - * @return void. - */ - function createStepRows ($aStep ){ - foreach ( $aStep as $key => $row ) { - $oStep = new Step(); - if(isset($row['STEP_UID'])) { - if($oStep->StepExists ($row['STEP_UID'])) - $oStep->remove($row['STEP_UID']); - - $res = $oStep->create($row); - } - } - return; - } - - /** - * Create Step Supervisor Rows for a Process from an array of data - * @param $aStepSupervisor array. - * @return void. - */ - function createStepSupervisorRows($aStepSupervisor){ - foreach ($aStepSupervisor as $key => $row ) { - $oStepSupervisor = new StepSupervisor(); - if( $oStepSupervisor->Exists($row['STEP_UID']) ) { - $oStepSupervisor->remove($row['STEP_UID']); - } - $oStepSupervisor->create($row); - } - } #@!Neyek - - /** - * change and Renew all Step GUID, because the process needs to have a new set of Steps - * @param string $oData - * @return boolean - */ - function renewAllStepGuid ( &$oData ) { - $map = array (); - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_UID'])) { - $newGuid = $this->getUnusedStepGUID(); - $map[ $val['STEP_UID'] ] = $newGuid; - $oData->steps[$key]['STEP_UID'] = $newGuid; - } - } - foreach ( $oData->steptriggers as $key => $val ) { - if ( $val['STEP_UID'] > 0 ) { - if (isset($map[ $val['STEP_UID'] ])) { - $newGuid = $map[ $val['STEP_UID'] ]; - $oData->steptriggers[$key]['STEP_UID'] = $newGuid; - } - else { - $oData->steptriggers[$key]['STEP_UID'] = $this->getUnusedStepGUID(); - } - } - } - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_UID'] > 0 ) { - if (isset($map[ $val['STEP_UID'] ])) { - $newGuid = $map[ $val['STEP_UID'] ]; - $oData->stepSupervisor[$key]['STEP_UID'] = $newGuid; - } - else { - $oData->stepSupervisor[$key]['STEP_UID'] = $this->getUnusedStepGUID(); - } - } - } - } - - /** - * Get Dynaform Rows from a Process - * @param string $sProUid - * @return $aDynaform array - */ - function getDynaformRows ($sProUid ){ - try { - $aDynaform = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oDynaform = new Dynaform(); - $aDynaform[] = $oDynaform->Load( $aRow['DYN_UID'] ); - $oDataset->next(); - } - return $aDynaform; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Object Permission Rows from a Process - * @param string $sProUid - * @return $aDynaform array - */ - function getObjectPermissionRows ($sProUid ){ // by erik - try { - $oPermissions = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProUid); - $oCriteria->add(ObjectPermissionPeer::OP_USER_RELATION, 2); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $o = new ObjectPermission(); - $oPermissions[] = $o->Load( $aRow['OP_UID'] ); - $oDataset->next(); - } - return $oPermissions; - } - catch (Exception $oError) { - throw($oError); - } - }#@!neyek - - /** - * Create Dynaform Rows for a Process form an array - * @param array $aDynaform - * @return void - */ - function createDynaformRows ($aDynaform ){ - foreach ( $aDynaform as $key => $row ) { - $oDynaform = new Dynaform(); - //unset ($row['TAS_UID']); - if($oDynaform->exists($row['DYN_UID'])) - $oDynaform->remove($row['DYN_UID']); - - $res = $oDynaform->create($row); - } - return; - } -#@!neyek - - - /** - * Create Step Trigger Rows for a Process form an array - * @param array $aStepTrigger - * @return void - */ - function createStepTriggerRows ($aStepTrigger ){ - foreach ( $aStepTrigger as $key => $row ) { - $oStepTrigger = new StepTrigger(); - //unset ($row['TAS_UID']); - if($oStepTrigger->stepTriggerExists ($row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'])) - $oStepTrigger->remove($row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE']); - - $res = $oStepTrigger->createRow($row); - } - return; - } - - /** - * Get Step Trigger Rows for a Process form an array - * @param array $aTask - * @return array $aStepTrigger - */ - function getStepTriggerRows ($aTask ){ - try { - $aInTasks = array(); - foreach ( $aTask as $key => $val ) { - $aInTasks[] = $val['TAS_UID']; - } - - $aTrigger = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( StepTriggerPeer::TAS_UID, $aInTasks, Criteria::IN ); - $oDataset = StepTriggerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aStepTrigger = array(); - while ($aRow = $oDataset->getRow()) { - $aStepTrigger[] = $aRow; - $oDataset->next(); - } - return $aStepTrigger; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Step Trigger Rows for a Process form an array - * @param array $aTask - * @return array $aStepTrigger - */ - function getTriggerRows ($sProUid ){ - try { - $aTrigger = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( TriggersPeer::PRO_UID, $sProUid); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oTrigger = new Triggers(); - $aTrigger[] = $oTrigger->Load( $aRow['TRI_UID'] ); - $oDataset->next(); - } - return $aTrigger; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Step Trigger Rows for a Process form an array - * @param array $aTrigger - * @return void - */ - function createTriggerRows ($aTrigger ){ - foreach ( $aTrigger as $key => $row ) { - $oTrigger = new Triggers(); - //unset ($row['TAS_UID']); - if($oTrigger->TriggerExists($row['TRI_UID'])) - $oTrigger->remove($row['TRI_UID']); - - $res = $oTrigger->create($row); - } - return; - } - - /** - * Get Groupwf Rows for a Process form an array - * @param array $aGroups - * @return array $aGroupwf - */ - function getGroupwfRows ($aGroups ){ - try { - $aInGroups = array(); - foreach ( $aGroups as $key => $val ) { - $aInGroups[] = $val['USR_UID']; - } - - $aGroupwf = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( GroupwfPeer::GRP_UID, $aInGroups, Criteria::IN ); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oGroupwf = new Groupwf(); - $aGroupwf[] = $oGroupwf->Load( $aRow['GRP_UID'] ); - $oDataset->next(); - } - return $aGroupwf; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get DB Connections Rows for a Process - * @param array $sProUid - * @return array $aConnections - */ - function getDBConnectionsRows($sProUid) { - try { - $aConnections = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProUid); - $oDataset = DbSourcePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oConnection = new DbSource(); - $aConnections[] = $oConnection->Load($aRow['DBS_UID'], $aRow['PRO_UID']); - $oDataset->next(); - } - return $aConnections; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Step Supervisor Rows for a Process form an array - * @param array $sProUid - * @return array $aStepSup - */ - function getStepSupervisorRows($sProUid) - { - try { - $aConnections = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProUid); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aStepSup = array(); - while ($aRow = $oDataset->getRow()) { - $aStepSup[] = $aRow; - $oDataset->next(); - } - return $aStepSup; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Report Tables Rows for a Process form an array - * @param array $aTask - * @return array $aReps - */ - function getReportTablesRows($sProUid) - { - try { - $aReps = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProUid); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oRep = new ReportTable(); - $aReps[] = $oRep->load($aRow['REP_TAB_UID']); - $oDataset->next(); - } - return $aReps; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Report Tables Vars Rows for a Process - * @param string $sProUid - * @return array $aRepVars - */ - function getReportTablesVarsRows($sProUid) - { - try { - $aRepVars = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportVarPeer::PRO_UID, $sProUid); - $oDataset = ReportVarPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oRepVar = new ReportVar(); - $aRepVars[] = $oRepVar->load($aRow['REP_VAR_UID']); - $oDataset->next(); - } - return $aRepVars; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Task User Rows for a Process - * @param array $aTask - * @return array $aStepTrigger - */ - function getTaskUserRows ($aTask ){ - try { - $aInTasks = array(); - foreach ( $aTask as $key => $val ) { - $aInTasks[] = $val['TAS_UID']; - } - - $aTaskUser = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( TaskUserPeer::TAS_UID, $aInTasks, Criteria::IN ); - $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->clearSelectColumns(); - $oCriteria2->addSelectColumn ( 'COUNT(*)' ); - $oCriteria2->add( GroupwfPeer::GRP_UID, $aRow['USR_UID']); - $oCriteria2->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); - $oDataset2 = GroupwfPeer::doSelectRS($oCriteria2); - //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $bActiveGroup = $aRow2[0]; - if ( $bActiveGroup == 1 ) - $aTaskUser[] = $aRow; - $oDataset->next(); - } - return $aTaskUser; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Task User Rows from an array of data - * @param array $aTaskUser - * @return array $aStepTrigger - */ - function createTaskUserRows ($aTaskUser ){ - foreach ( $aTaskUser as $key => $row ) { - $oTaskUser = new TaskUser(); - if($oTaskUser->TaskUserExists ($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'])) - $oTaskUser->remove($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION']); - - $res = $oTaskUser->create($row); - } - return; - } - - /** - * Get Task User Rows from an array of data - * @param array $aTaskUser - * @return array $aStepTrigger - */ - function createGroupRow ($aGroupwf ) { - foreach ( $aGroupwf as $key => $row ) { - $oGroupwf = new Groupwf(); - if ( $oGroupwf->GroupwfExists ( $row['GRP_UID'] ) ) { - $oGroupwf->remove($row['GRP_UID']); - } - $res = $oGroupwf->create($row); - } - } - - /** - * Create DB Connections rows from an array of data - * @param array $aConnections - * @return void - */ - function createDBConnectionsRows ($aConnections ) { - foreach ( $aConnections as $sKey => $aRow ) { - $oConnection = new DbSource(); - if( $oConnection->Exists($aRow['DBS_UID'], $aRow['PRO_UID']) ) { - $oConnection->remove($aRow['DBS_UID'], $aRow['PRO_UID']); - } - $oConnection->create($aRow); - - // Update information in the table of contents - $oContent = new Content(); - $ConCategory = 'DBS_DESCRIPTION'; - $ConParent = ''; - $ConId = $aRow['DBS_UID']; - $ConLang = SYS_LANG; - if( $oContent->Exists($ConCategory, $ConParent, $ConId, $ConLang) ) { - $oContent->removeContent($ConCategory, $ConParent, $ConId); - } - $oContent->addContent($ConCategory, $ConParent, $ConId, $ConLang,""); - } - } #@!neyek - - /** - * Create Report Tables from an array of data - * @param array $aReportTables - * @param array $aReportTablesVars - * @return void - */ - function createReportTables($aReportTables, $aReportTablesVars) - { - $this->createReportTablesVars($aReportTablesVars); - $oReportTables = new ReportTables(); - foreach ( $aReportTables as $sKey => $aRow ) { - $bExists = true; - $sTable = $aRow['REP_TAB_NAME']; - $iCounter = 1; - while ($bExists) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::REP_TAB_NAME, $sTable); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $bExists = ($aRow2 = $oDataset->getRow()); - if ($bExists) { - $sTable = $aRow['REP_TAB_NAME'] . '_' . $iCounter; - $iCounter++; - } - else { - $aRow['REP_TAB_NAME'] = $sTable; - } - } - $aFields = $oReportTables->getTableVars($aRow['REP_TAB_UID'], true); - $oReportTables->createTable($aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields); - $oReportTables->populateTable($aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields, $aRow['PRO_UID'], $aRow['REP_TAB_GRID']); - $aReportTables[$sKey]['REP_TAB_NAME'] = $aRow['REP_TAB_NAME']; - $oRep = new ReportTable(); - if($oRep->reportTableExists ($aRow['REP_TAB_UID'])) - $oRep->remove($aRow['REP_TAB_UID']); - $oRep->create($aRow); - } - } #@!neyek - - /** - * Update Report Tables from an array of data - * @param array $aReportTables - * @param array $aReportTablesVars - * @return void - */ - function updateReportTables($aReportTables, $aReportTablesVars) - { - $this->cleanupReportTablesReferences($aReportTables); - $this->createReportTables($aReportTables, $aReportTablesVars); - } #@!neyek - - /** - * Create Report Tables Vars from an array of data - * @param array $aReportTablesVars - * @return void - */ - function createReportTablesVars($aReportTablesVars) - { - foreach ( $aReportTablesVars as $sKey => $aRow ) { - $oRep = new ReportVar(); - if($oRep->reportVarExists ($aRow['REP_VAR_UID'])) - $oRep->remove($aRow['REP_VAR_UID']); - - $oRep->create($aRow); - } - } #@!neyek - - /** - * Cleanup Report Tables References from an array of data - * @param array $aReportTables - * @return void - */ - function cleanupReportTablesReferences($aReportTables) - { - foreach ( $aReportTables as $sKey => $aRow ) { - $oReportTables = new ReportTables(); - $oReportTables->deleteReportTable($aRow['REP_TAB_UID']); - $oReportTables->deleteAllReportVars($aRow['REP_TAB_UID']); - $oReportTables->dropTable($aRow['REP_TAB_NAME']); - } - } #@!neyek - - /** - * change Status of any Process - * @param string $sProUid - * @return boolean - */ - function serializeProcess ( $sProUid = '') { - $oProcess = new Process( ); - $oData->process = $this->getProcessRow( $sProUid, false); - $oData->tasks = $this->getTaskRows( $sProUid ); - $oData->routes = $this->getRouteRows( $sProUid ); - $oData->lanes = $this->getLaneRows( $sProUid ); - $oData->gateways = $this->getGatewayRows( $sProUid ); - $oData->inputs = $this->getInputRows( $sProUid ); - $oData->outputs = $this->getOutputRows( $sProUid ); - $oData->dynaforms = $this->getDynaformRows ( $sProUid ); - $oData->steps = $this->getStepRows( $sProUid ); - $oData->triggers = $this->getTriggerRows( $sProUid ); - $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); - $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); - $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); - $oData->dbconnections = $this->getDBConnectionsRows($sProUid); - $oData->reportTables = $this->getReportTablesRows($sProUid); - $oData->reportTablesVars = $this->getReportTablesVarsRows($sProUid); - $oData->stepSupervisor = $this->getStepSupervisorRows($sProUid); - $oData->objectPermissions = $this->getObjectPermissionRows ($sProUid); - $oData->subProcess = $this->getSubProcessRow ($sProUid); - $oData->caseTracker = $this->getCaseTrackerRow ($sProUid); - $oData->caseTrackerObject = $this->getCaseTrackerObjectRow ($sProUid); - $oData->stage = $this->getStageRow ($sProUid); - $oData->fieldCondition = $this->getFieldCondition($sProUid); - $oData->event = $this->getEventRow ($sProUid); - $oData->caseScheduler = $this->getCaseSchedulerRow ($sProUid); - $oData->processCategory = $this->getProcessCategoryRow ($sProUid); - - //krumo ($oData);die; - //$oJSON = new Services_JSON(); - //krumo ( $oJSON->encode($oData) ); - //return $oJSON->encode($oData); - return serialize($oData); - } - - /** - * Save a Serialized Process from an object - * @param array $oData - * @return $result an array - */ - function saveSerializedProcess ( $oData ) { - //$oJSON = new Services_JSON(); - //$data = $oJSON->decode($oData); - //$sProUid = $data->process->PRO_UID; - $data = unserialize ($oData); - $sProUid = $data->process['PRO_UID']; - $path = PATH_DOCUMENT . 'output' . PATH_SEP; - - if ( !is_dir($path) ) { - G::verifyPath($path, true); - } - $proTitle = (substr(G::inflect($data->process['PRO_TITLE']), 0, 245)); - $proTitle = preg_replace("/[^A-Za-z0-9_]/", "", $proTitle); - //Calculating the maximum length of file name - $pathLength = strlen(PATH_DATA ."sites".PATH_SEP.SYS_SYS.PATH_SEP."files".PATH_SEP."output".PATH_SEP); - $length = strlen($proTitle) + $pathLength; - if ($length >= 250) { - $proTitle = myTruncate($proTitle, 250 - $pathLength, '_', ''); - } - $index = ''; - - $lastIndex = ''; - - do { - $filename = $path . $proTitle . $index . '.pm'; - $lastIndex = $index; - - if ( $index == '' ) - $index = 1; - else - $index ++; - } while ( file_exists ( $filename ) ); - - - $proTitle .= $lastIndex; - - $filenameOnly = $proTitle . '.pm'; - - $fp = fopen( $filename.'tpm', "wb"); - - $fsData = sprintf ( "%09d", strlen ( $oData) ); - $bytesSaved = fwrite( $fp, $fsData ); //writing the size of $oData - $bytesSaved += fwrite( $fp, $oData ); //writing the $oData - - foreach ($data->dynaforms as $key => $val ) { - $sFileName = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.xml'; - if ( file_exists ( $sFileName ) ) { - $xmlGuid = $val['DYN_UID']; - $fsXmlGuid = sprintf ( "%09d", strlen ( $xmlGuid ) ); - $bytesSaved += fwrite( $fp, $fsXmlGuid ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $xmlGuid ); //writing the xmlfile - - $xmlContent = file_get_contents ( $sFileName ); - $fsXmlContent = sprintf ( "%09d", strlen ( $xmlContent) ); - $bytesSaved += fwrite( $fp, $fsXmlContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $xmlContent ); //writing the xmlfile - } - - $sFileName2 = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.html'; - if ( file_exists ( $sFileName2 ) ) { - $htmlGuid = $val['DYN_UID']; - $fsHtmlGuid = sprintf ( "%09d", strlen ( $htmlGuid ) ); - $bytesSaved += fwrite( $fp, $fsHtmlGuid ); //writing size dynaform id - $bytesSaved += fwrite( $fp, $htmlGuid ); //writing dynaform id - - $htmlContent = file_get_contents ( $sFileName2 ); - $fsHtmlContent = sprintf ( "%09d", strlen ( $htmlContent ) ); - $bytesSaved += fwrite( $fp, $fsHtmlContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $htmlContent ); //writing the htmlfile - } - } - /** - * By - * here we should work for the new functionalities - * we have a many files for attach into this file + /** + * Renew all the GUID's for All The Report Vars Objects * - * here we go with the anothers files ;) + * @param $oData array. + * @return void */ - //before to do something we write a header into pm file for to do a differentiation between document types - - - //create the store object - //$file_objects = new ObjectCellection(); - - // for mailtemplates files - $MAILS_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'mailTemplates'.PATH_SEP.$data->process['PRO_UID']; - - $isMailTempSent = false; - $isPublicSent = false; - //if this process have any mailfile - if ( is_dir( $MAILS_ROOT_PATH ) ) { - - //get mail files list from this directory - $file_list = scandir($MAILS_ROOT_PATH); - - foreach ($file_list as $filename) { - // verify if this filename is a valid file, because it could be . or .. on *nix systems - if($filename != '.' && $filename != '..'){ - if (@is_readable($MAILS_ROOT_PATH.PATH_SEP.$filename)) { - $sFileName = $MAILS_ROOT_PATH . PATH_SEP . $filename; - if ( file_exists ( $sFileName ) ) { - if ( ! $isMailTempSent ) { - $bytesSaved += fwrite( $fp, 'MAILTEMPL'); - $isMailTempSent = true; - } - //$htmlGuid = $val['DYN_UID']; - $fsFileName = sprintf ( "%09d", strlen ( $filename ) ); - $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size - $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size - - $fileContent = file_get_contents ( $sFileName ); - $fsFileContent = sprintf ( "%09d", strlen ( $fileContent ) ); - $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile - } - + function renewAllReportVarGuid (&$oData) + { + $map = array (); + foreach ($oData->reportTablesVars as $key => $val) { + $newGuid = $this->getUnusedRTVGUID(); + $map[$val['REP_VAR_UID']] = $newGuid; + $oData->reportTablesVars[$key]['REP_VAR_UID'] = $newGuid; } - } } - } - - // for public files - $PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP.$data->process['PRO_UID']; - - //if this process have any mailfile - if ( is_dir( $PUBLIC_ROOT_PATH ) ) { - - //get mail files list from this directory - $file_list = scandir($PUBLIC_ROOT_PATH); - - foreach ($file_list as $filename) { - // verify if this filename is a valid file, because it could be . or .. on *nix systems - if($filename != '.' && $filename != '..'){ - if (@is_readable($PUBLIC_ROOT_PATH.PATH_SEP.$filename)) { - $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; - if ( file_exists ( $sFileName ) ) { - if ( ! $isPublicSent ) { - $bytesSaved += fwrite( $fp, 'PUBLIC '); - $isPublicSent = true; - } - //$htmlGuid = $val['DYN_UID']; - $fsFileName = sprintf ( "%09d", strlen ( $filename ) ); - $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size - $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size - - $fileContent = file_get_contents ( $sFileName ); - $fsFileContent = sprintf ( "%09d", strlen ( $fileContent ) ); - $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile - } + /** + * Renew the GUID's for all the Field Conditions Objects + * + * @param $oData array. + * @return void + */ + function renewAllFieldCondition (&$oData) + { + $map = array (); + foreach ($oData->fieldCondition as $key => $val) { + $newGuid = $this->getUnusedFieldConditionGUID(); + $map[$val['FCD_UID']] = $newGuid; + $oData->fieldCondition[$key]['FCD_UID'] = $newGuid; } - } } - } -/* + /** + * Renew the GUID's for all the Events Objects + * + * @param $oData array. + * @return void + */ + function renewAllEvent (&$oData) + { + $map = array (); + foreach ($oData->event as $key => $val) { + $newGuid = $this->getUnusedEventGUID(); + $map[$val['EVN_UID']] = $newGuid; + $oData->event[$key]['EVN_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all Case Scheduler Objects + * + * @param $oData array. + * @return void + */ + function renewAllCaseScheduler (&$oData) + { + $map = array (); + foreach ($oData->caseScheduler as $key => $val) { + $newGuid = $this->getUnusedCaseSchedulerGUID(); + $map[$val['SCH_UID']] = $newGuid; + $oData->caseScheduler[$key]['SCH_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all the Uids for all the elements + * + * @param $oData array. + * @return void + */ + function renewAll (&$oData) + { + $this->renewAllTaskGuid( $oData ); + $this->renewAllDynaformGuid( $oData ); + $this->renewAllInputGuid( $oData ); + $this->renewAllOutputGuid( $oData ); + $this->renewAllStepGuid( $oData ); + $this->renewAllTriggerGuid( $oData ); + $this->renewAllSubProcessGuid( $oData ); + $this->renewAllCaseTrackerObjectGuid( $oData ); + $this->renewAllDBSourceGuid( $oData ); + $this->renewAllObjectPermissionGuid( $oData ); + $this->renewAllRouteGuid( $oData ); + $this->renewAllStageGuid( $oData ); + $this->renewAllSwimlanesElementsGuid( $oData ); + $this->renewAllReportTableGuid( $oData ); + $this->renewAllReportVarGuid( $oData ); + $this->renewAllFieldCondition( $oData ); + $this->renewAllEvent( $oData ); + $this->renewAllCaseScheduler( $oData ); + } + + /** + * Get Step Rows from a Process + * + * @param $sProUid array. + * @return array $aStep. + */ + function getStepRows ($sProUid) + { + try { + $aStep = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::PRO_UID, $sProUid ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oStep = new Step(); + $aStep[] = $oStep->Load( $aRow['STEP_UID'] ); + $oDataset->next(); + } + return $aStep; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Step Rows from a Process + * + * @param $aStep array. + * @return void. + */ + function createStepRows ($aStep) + { + foreach ($aStep as $key => $row) { + $oStep = new Step(); + if (isset( $row['STEP_UID'] )) { + if ($oStep->StepExists( $row['STEP_UID'] )) + $oStep->remove( $row['STEP_UID'] ); + + $res = $oStep->create( $row ); + } + } + return; + } + + /** + * Create Step Supervisor Rows for a Process from an array of data + * + * @param $aStepSupervisor array. + * @return void. + */ + function createStepSupervisorRows ($aStepSupervisor) + { + foreach ($aStepSupervisor as $key => $row) { + $oStepSupervisor = new StepSupervisor(); + if ($oStepSupervisor->Exists( $row['STEP_UID'] )) { + $oStepSupervisor->remove( $row['STEP_UID'] ); + } + $oStepSupervisor->create( $row ); + } + } #@!Neyek + + + /** + * change and Renew all Step GUID, because the process needs to have a new set of Steps + * + * @param string $oData + * @return boolean + */ + function renewAllStepGuid (&$oData) + { + $map = array (); + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_UID'] )) { + $newGuid = $this->getUnusedStepGUID(); + $map[$val['STEP_UID']] = $newGuid; + $oData->steps[$key]['STEP_UID'] = $newGuid; + } + } + foreach ($oData->steptriggers as $key => $val) { + if ($val['STEP_UID'] > 0) { + if (isset( $map[$val['STEP_UID']] )) { + $newGuid = $map[$val['STEP_UID']]; + $oData->steptriggers[$key]['STEP_UID'] = $newGuid; + } else { + $oData->steptriggers[$key]['STEP_UID'] = $this->getUnusedStepGUID(); + } + } + } + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_UID'] > 0) { + if (isset( $map[$val['STEP_UID']] )) { + $newGuid = $map[$val['STEP_UID']]; + $oData->stepSupervisor[$key]['STEP_UID'] = $newGuid; + } else { + $oData->stepSupervisor[$key]['STEP_UID'] = $this->getUnusedStepGUID(); + } + } + } + } + + /** + * Get Dynaform Rows from a Process + * + * @param string $sProUid + * @return $aDynaform array + */ + function getDynaformRows ($sProUid) + { + try { + $aDynaform = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oDynaform = new Dynaform(); + $aDynaform[] = $oDynaform->Load( $aRow['DYN_UID'] ); + $oDataset->next(); + } + return $aDynaform; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Object Permission Rows from a Process + * + * @param string $sProUid + * @return $aDynaform array + */ + function getObjectPermissionRows ($sProUid) + { // by erik + try { + $oPermissions = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProUid ); + $oCriteria->add( ObjectPermissionPeer::OP_USER_RELATION, 2 ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $o = new ObjectPermission(); + $oPermissions[] = $o->Load( $aRow['OP_UID'] ); + $oDataset->next(); + } + return $oPermissions; + } catch (Exception $oError) { + throw ($oError); + } + } #@!neyek + + + /** + * Create Dynaform Rows for a Process form an array + * + * @param array $aDynaform + * @return void + */ + function createDynaformRows ($aDynaform) + { + foreach ($aDynaform as $key => $row) { + $oDynaform = new Dynaform(); + //unset ($row['TAS_UID']); + if ($oDynaform->exists( $row['DYN_UID'] )) + $oDynaform->remove( $row['DYN_UID'] ); + + $res = $oDynaform->create( $row ); + } + return; + } + #@!neyek + + + /** + * Create Step Trigger Rows for a Process form an array + * + * @param array $aStepTrigger + * @return void + */ + function createStepTriggerRows ($aStepTrigger) + { + foreach ($aStepTrigger as $key => $row) { + $oStepTrigger = new StepTrigger(); + //unset ($row['TAS_UID']); + if ($oStepTrigger->stepTriggerExists( $row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'] )) + $oStepTrigger->remove( $row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'] ); + + $res = $oStepTrigger->createRow( $row ); + } + return; + } + + /** + * Get Step Trigger Rows for a Process form an array + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getStepTriggerRows ($aTask) + { + try { + $aInTasks = array (); + foreach ($aTask as $key => $val) { + $aInTasks[] = $val['TAS_UID']; + } + + $aTrigger = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $aInTasks, Criteria::IN ); + $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aStepTrigger = array (); + while ($aRow = $oDataset->getRow()) { + $aStepTrigger[] = $aRow; + $oDataset->next(); + } + return $aStepTrigger; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Step Trigger Rows for a Process form an array + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getTriggerRows ($sProUid) + { + try { + $aTrigger = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProUid ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTrigger = new Triggers(); + $aTrigger[] = $oTrigger->Load( $aRow['TRI_UID'] ); + $oDataset->next(); + } + return $aTrigger; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Step Trigger Rows for a Process form an array + * + * @param array $aTrigger + * @return void + */ + function createTriggerRows ($aTrigger) + { + foreach ($aTrigger as $key => $row) { + $oTrigger = new Triggers(); + //unset ($row['TAS_UID']); + if ($oTrigger->TriggerExists( $row['TRI_UID'] )) + $oTrigger->remove( $row['TRI_UID'] ); + + $res = $oTrigger->create( $row ); + } + return; + } + + /** + * Get Groupwf Rows for a Process form an array + * + * @param array $aGroups + * @return array $aGroupwf + */ + function getGroupwfRows ($aGroups) + { + try { + $aInGroups = array (); + foreach ($aGroups as $key => $val) { + $aInGroups[] = $val['USR_UID']; + } + + $aGroupwf = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupwfPeer::GRP_UID, $aInGroups, Criteria::IN ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGroupwf = new Groupwf(); + $aGroupwf[] = $oGroupwf->Load( $aRow['GRP_UID'] ); + $oDataset->next(); + } + return $aGroupwf; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get DB Connections Rows for a Process + * + * @param array $sProUid + * @return array $aConnections + */ + function getDBConnectionsRows ($sProUid) + { + try { + $aConnections = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProUid ); + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oConnection = new DbSource(); + $aConnections[] = $oConnection->Load( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + $oDataset->next(); + } + return $aConnections; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Step Supervisor Rows for a Process form an array + * + * @param array $sProUid + * @return array $aStepSup + */ + function getStepSupervisorRows ($sProUid) + { + try { + $aConnections = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProUid ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aStepSup = array (); + while ($aRow = $oDataset->getRow()) { + $aStepSup[] = $aRow; + $oDataset->next(); + } + return $aStepSup; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Report Tables Rows for a Process form an array + * + * @param array $aTask + * @return array $aReps + */ + function getReportTablesRows ($sProUid) + { + try { + $aReps = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProUid ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRep = new ReportTable(); + $aReps[] = $oRep->load( $aRow['REP_TAB_UID'] ); + $oDataset->next(); + } + return $aReps; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Report Tables Vars Rows for a Process + * + * @param string $sProUid + * @return array $aRepVars + */ + function getReportTablesVarsRows ($sProUid) + { + try { + $aRepVars = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportVarPeer::PRO_UID, $sProUid ); + $oDataset = ReportVarPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRepVar = new ReportVar(); + $aRepVars[] = $oRepVar->load( $aRow['REP_VAR_UID'] ); + $oDataset->next(); + } + return $aRepVars; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Task User Rows for a Process + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getTaskUserRows ($aTask) + { + try { + $aInTasks = array (); + foreach ($aTask as $key => $val) { + $aInTasks[] = $val['TAS_UID']; + } + + $aTaskUser = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::TAS_UID, $aInTasks, Criteria::IN ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->clearSelectColumns(); + $oCriteria2->addSelectColumn( 'COUNT(*)' ); + $oCriteria2->add( GroupwfPeer::GRP_UID, $aRow['USR_UID'] ); + $oCriteria2->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oDataset2 = GroupwfPeer::doSelectRS( $oCriteria2 ); + //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $bActiveGroup = $aRow2[0]; + if ($bActiveGroup == 1) + $aTaskUser[] = $aRow; + $oDataset->next(); + } + return $aTaskUser; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Task User Rows from an array of data + * + * @param array $aTaskUser + * @return array $aStepTrigger + */ + function createTaskUserRows ($aTaskUser) + { + foreach ($aTaskUser as $key => $row) { + $oTaskUser = new TaskUser(); + if ($oTaskUser->TaskUserExists( $row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'] )) + $oTaskUser->remove( $row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'] ); + + $res = $oTaskUser->create( $row ); + } + return; + } + + /** + * Get Task User Rows from an array of data + * + * @param array $aTaskUser + * @return array $aStepTrigger + */ + function createGroupRow ($aGroupwf) + { + foreach ($aGroupwf as $key => $row) { + $oGroupwf = new Groupwf(); + if ($oGroupwf->GroupwfExists( $row['GRP_UID'] )) { + $oGroupwf->remove( $row['GRP_UID'] ); + } + $res = $oGroupwf->create( $row ); + } + } + + /** + * Create DB Connections rows from an array of data + * + * @param array $aConnections + * @return void + */ + function createDBConnectionsRows ($aConnections) + { + foreach ($aConnections as $sKey => $aRow) { + $oConnection = new DbSource(); + if ($oConnection->Exists( $aRow['DBS_UID'], $aRow['PRO_UID'] )) { + $oConnection->remove( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + } + $oConnection->create( $aRow ); + + // Update information in the table of contents + $oContent = new Content(); + $ConCategory = 'DBS_DESCRIPTION'; + $ConParent = ''; + $ConId = $aRow['DBS_UID']; + $ConLang = SYS_LANG; + if ($oContent->Exists( $ConCategory, $ConParent, $ConId, $ConLang )) { + $oContent->removeContent( $ConCategory, $ConParent, $ConId ); + } + $oContent->addContent( $ConCategory, $ConParent, $ConId, $ConLang, "" ); + } + } #@!neyek + + + /** + * Create Report Tables from an array of data + * + * @param array $aReportTables + * @param array $aReportTablesVars + * @return void + */ + function createReportTables ($aReportTables, $aReportTablesVars) + { + $this->createReportTablesVars( $aReportTablesVars ); + $oReportTables = new ReportTables(); + foreach ($aReportTables as $sKey => $aRow) { + $bExists = true; + $sTable = $aRow['REP_TAB_NAME']; + $iCounter = 1; + while ($bExists) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::REP_TAB_NAME, $sTable ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $bExists = ($aRow2 = $oDataset->getRow()); + if ($bExists) { + $sTable = $aRow['REP_TAB_NAME'] . '_' . $iCounter; + $iCounter ++; + } else { + $aRow['REP_TAB_NAME'] = $sTable; + } + } + $aFields = $oReportTables->getTableVars( $aRow['REP_TAB_UID'], true ); + $oReportTables->createTable( $aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields ); + $oReportTables->populateTable( $aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields, $aRow['PRO_UID'], $aRow['REP_TAB_GRID'] ); + $aReportTables[$sKey]['REP_TAB_NAME'] = $aRow['REP_TAB_NAME']; + $oRep = new ReportTable(); + if ($oRep->reportTableExists( $aRow['REP_TAB_UID'] )) + $oRep->remove( $aRow['REP_TAB_UID'] ); + $oRep->create( $aRow ); + } + } #@!neyek + + + /** + * Update Report Tables from an array of data + * + * @param array $aReportTables + * @param array $aReportTablesVars + * @return void + */ + function updateReportTables ($aReportTables, $aReportTablesVars) + { + $this->cleanupReportTablesReferences( $aReportTables ); + $this->createReportTables( $aReportTables, $aReportTablesVars ); + } #@!neyek + + + /** + * Create Report Tables Vars from an array of data + * + * @param array $aReportTablesVars + * @return void + */ + function createReportTablesVars ($aReportTablesVars) + { + foreach ($aReportTablesVars as $sKey => $aRow) { + $oRep = new ReportVar(); + if ($oRep->reportVarExists( $aRow['REP_VAR_UID'] )) + $oRep->remove( $aRow['REP_VAR_UID'] ); + + $oRep->create( $aRow ); + } + } #@!neyek + + + /** + * Cleanup Report Tables References from an array of data + * + * @param array $aReportTables + * @return void + */ + function cleanupReportTablesReferences ($aReportTables) + { + foreach ($aReportTables as $sKey => $aRow) { + $oReportTables = new ReportTables(); + $oReportTables->deleteReportTable( $aRow['REP_TAB_UID'] ); + $oReportTables->deleteAllReportVars( $aRow['REP_TAB_UID'] ); + $oReportTables->dropTable( $aRow['REP_TAB_NAME'] ); + } + } #@!neyek + + + /** + * change Status of any Process + * + * @param string $sProUid + * @return boolean + */ + function serializeProcess ($sProUid = '') + { + $oProcess = new Process(); + $oData->process = $this->getProcessRow( $sProUid, false ); + $oData->tasks = $this->getTaskRows( $sProUid ); + $oData->routes = $this->getRouteRows( $sProUid ); + $oData->lanes = $this->getLaneRows( $sProUid ); + $oData->gateways = $this->getGatewayRows( $sProUid ); + $oData->inputs = $this->getInputRows( $sProUid ); + $oData->outputs = $this->getOutputRows( $sProUid ); + $oData->dynaforms = $this->getDynaformRows( $sProUid ); + $oData->steps = $this->getStepRows( $sProUid ); + $oData->triggers = $this->getTriggerRows( $sProUid ); + $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); + $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); + $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); + $oData->dbconnections = $this->getDBConnectionsRows( $sProUid ); + $oData->reportTables = $this->getReportTablesRows( $sProUid ); + $oData->reportTablesVars = $this->getReportTablesVarsRows( $sProUid ); + $oData->stepSupervisor = $this->getStepSupervisorRows( $sProUid ); + $oData->objectPermissions = $this->getObjectPermissionRows( $sProUid ); + $oData->subProcess = $this->getSubProcessRow( $sProUid ); + $oData->caseTracker = $this->getCaseTrackerRow( $sProUid ); + $oData->caseTrackerObject = $this->getCaseTrackerObjectRow( $sProUid ); + $oData->stage = $this->getStageRow( $sProUid ); + $oData->fieldCondition = $this->getFieldCondition( $sProUid ); + $oData->event = $this->getEventRow( $sProUid ); + $oData->caseScheduler = $this->getCaseSchedulerRow( $sProUid ); + $oData->processCategory = $this->getProcessCategoryRow( $sProUid ); + + //krumo ($oData);die; + //$oJSON = new Services_JSON(); + //krumo ( $oJSON->encode($oData) ); + //return $oJSON->encode($oData); + return serialize( $oData ); + } + + /** + * Save a Serialized Process from an object + * + * @param array $oData + * @return $result an array + */ + function saveSerializedProcess ($oData) + { + //$oJSON = new Services_JSON(); + //$data = $oJSON->decode($oData); + //$sProUid = $data->process->PRO_UID; + $data = unserialize( $oData ); + $sProUid = $data->process['PRO_UID']; + $path = PATH_DOCUMENT . 'output' . PATH_SEP; + + if (! is_dir( $path )) { + G::verifyPath( $path, true ); + } + $proTitle = (substr( G::inflect( $data->process['PRO_TITLE'] ), 0, 245 )); + $proTitle = preg_replace( "/[^A-Za-z0-9_]/", "", $proTitle ); + //Calculating the maximum length of file name + $pathLength = strlen( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP ); + $length = strlen( $proTitle ) + $pathLength; + if ($length >= 250) { + $proTitle = myTruncate( $proTitle, 250 - $pathLength, '_', '' ); + } + $index = ''; + + $lastIndex = ''; + + do { + $filename = $path . $proTitle . $index . '.pm'; + $lastIndex = $index; + + if ($index == '') + $index = 1; + else + $index ++; + } while (file_exists( $filename )); + + $proTitle .= $lastIndex; + + $filenameOnly = $proTitle . '.pm'; + + $fp = fopen( $filename . 'tpm', "wb" ); + + $fsData = sprintf( "%09d", strlen( $oData ) ); + $bytesSaved = fwrite( $fp, $fsData ); //writing the size of $oData + $bytesSaved += fwrite( $fp, $oData ); //writing the $oData + + + foreach ($data->dynaforms as $key => $val) { + $sFileName = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.xml'; + if (file_exists( $sFileName )) { + $xmlGuid = $val['DYN_UID']; + $fsXmlGuid = sprintf( "%09d", strlen( $xmlGuid ) ); + $bytesSaved += fwrite( $fp, $fsXmlGuid ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $xmlGuid ); //writing the xmlfile + + + $xmlContent = file_get_contents( $sFileName ); + $fsXmlContent = sprintf( "%09d", strlen( $xmlContent ) ); + $bytesSaved += fwrite( $fp, $fsXmlContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $xmlContent ); //writing the xmlfile + } + + $sFileName2 = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.html'; + if (file_exists( $sFileName2 )) { + $htmlGuid = $val['DYN_UID']; + $fsHtmlGuid = sprintf( "%09d", strlen( $htmlGuid ) ); + $bytesSaved += fwrite( $fp, $fsHtmlGuid ); //writing size dynaform id + $bytesSaved += fwrite( $fp, $htmlGuid ); //writing dynaform id + + + $htmlContent = file_get_contents( $sFileName2 ); + $fsHtmlContent = sprintf( "%09d", strlen( $htmlContent ) ); + $bytesSaved += fwrite( $fp, $fsHtmlContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $htmlContent ); //writing the htmlfile + } + } + /** + * By + * here we should work for the new functionalities + * we have a many files for attach into this file + * + * here we go with the anothers files ;) + */ + //before to do something we write a header into pm file for to do a differentiation between document types + + + //create the store object + //$file_objects = new ObjectCellection(); + + + // for mailtemplates files + $MAILS_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'mailTemplates' . PATH_SEP . $data->process['PRO_UID']; + + $isMailTempSent = false; + $isPublicSent = false; + //if this process have any mailfile + if (is_dir( $MAILS_ROOT_PATH )) { + + //get mail files list from this directory + $file_list = scandir( $MAILS_ROOT_PATH ); + + foreach ($file_list as $filename) { + // verify if this filename is a valid file, because it could be . or .. on *nix systems + if ($filename != '.' && $filename != '..') { + if (@is_readable( $MAILS_ROOT_PATH . PATH_SEP . $filename )) { + $sFileName = $MAILS_ROOT_PATH . PATH_SEP . $filename; + if (file_exists( $sFileName )) { + if (! $isMailTempSent) { + $bytesSaved += fwrite( $fp, 'MAILTEMPL' ); + $isMailTempSent = true; + } + //$htmlGuid = $val['DYN_UID']; + $fsFileName = sprintf( "%09d", strlen( $filename ) ); + $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size + $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size + + + $fileContent = file_get_contents( $sFileName ); + $fsFileContent = sprintf( "%09d", strlen( $fileContent ) ); + $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile + } + + } + } + } + } + + // for public files + $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP . $data->process['PRO_UID']; + + //if this process have any mailfile + if (is_dir( $PUBLIC_ROOT_PATH )) { + + //get mail files list from this directory + $file_list = scandir( $PUBLIC_ROOT_PATH ); + + foreach ($file_list as $filename) { + // verify if this filename is a valid file, because it could be . or .. on *nix systems + if ($filename != '.' && $filename != '..') { + if (@is_readable( $PUBLIC_ROOT_PATH . PATH_SEP . $filename )) { + $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; + if (file_exists( $sFileName )) { + if (! $isPublicSent) { + $bytesSaved += fwrite( $fp, 'PUBLIC ' ); + $isPublicSent = true; + } + //$htmlGuid = $val['DYN_UID']; + $fsFileName = sprintf( "%09d", strlen( $filename ) ); + $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size + $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size + + + $fileContent = file_get_contents( $sFileName ); + $fsFileContent = sprintf( "%09d", strlen( $fileContent ) ); + $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile + } + + } + } + } + } + + /* // for public files $PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP.$data->process['PRO_UID']; @@ -2551,481 +2774,497 @@ class Processes { */ /* under here, I've not modified those lines */ - fclose ($fp); + fclose( $fp ); - //$bytesSaved = file_put_contents ( $filename , $oData ); - $filenameLink = 'processes_DownloadFile?p=' . $proTitle . '&r=' . rand(100,1000); - $result['PRO_UID'] = $data->process['PRO_UID']; - $result['PRO_TITLE'] = $data->process['PRO_TITLE']; - $result['PRO_DESCRIPTION'] = $data->process['PRO_DESCRIPTION']; - $result['SIZE'] = $bytesSaved; - $result['FILENAME'] = $filenameOnly; - $result['FILENAME_LINK'] = $filenameLink; - return $result; - } - - /** - * Get the process Data form a filename - * @param array $pmFilename - * @return void - */ - function getProcessData ( $pmFilename ) { - $oProcess = new Process(); - if (! file_exists($pmFilename) ) - throw ( new Exception ( 'Unable to read uploaded file, please check permissions. ')); - - if (! filesize($pmFilename) >= 9 ) - throw ( new Exception ( 'Uploaded file is corrupted, please check the file before continuing. ')); - clearstatcache(); - $fp = fopen( $pmFilename, "rb"); - $fsData = intval( fread ( $fp, 9)); //reading the size of $oData - $contents = ''; - $contents = @fread( $fp, $fsData ); //reading string $oData - - if ($contents != '') { - $oData = unserialize ($contents); - if ($oData === false) - throw new Exception("Process file is not valid"); - - foreach($oData->dynaforms as $key => $value) - { - if($value['DYN_TYPE']=='grid') - { $oData->gridFiles[$value['DYN_UID'] ] = $value['DYN_UID']; - } - } - - $oData->dynaformFiles = array(); - $sIdentifier = 0; - while ( !feof ( $fp ) && is_numeric ( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the block identifier - if ( is_numeric ( $sIdentifier ) ) { - $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename - if ( $fsXmlGuid > 0 ) - $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid - - $fsXmlContent = intval( fread ( $fp, 9)); //reading the size of $XmlContent - if ( $fsXmlContent > 0 ) { - $oData->dynaformFiles[$XmlGuid ] = $XmlGuid; - $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent - unset($XmlContent); - } - } - } + //$bytesSaved = file_put_contents ( $filename , $oData ); + $filenameLink = 'processes_DownloadFile?p=' . $proTitle . '&r=' . rand( 100, 1000 ); + $result['PRO_UID'] = $data->process['PRO_UID']; + $result['PRO_TITLE'] = $data->process['PRO_TITLE']; + $result['PRO_DESCRIPTION'] = $data->process['PRO_DESCRIPTION']; + $result['SIZE'] = $bytesSaved; + $result['FILENAME'] = $filenameOnly; + $result['FILENAME_LINK'] = $filenameLink; + return $result; } - else { - $oData = null; + + /** + * Get the process Data form a filename + * + * @param array $pmFilename + * @return void + */ + function getProcessData ($pmFilename) + { + $oProcess = new Process(); + if (! file_exists( $pmFilename )) + throw (new Exception( 'Unable to read uploaded file, please check permissions. ' )); + + if (! filesize( $pmFilename ) >= 9) + throw (new Exception( 'Uploaded file is corrupted, please check the file before continuing. ' )); + clearstatcache(); + $fp = fopen( $pmFilename, "rb" ); + $fsData = intval( fread( $fp, 9 ) ); //reading the size of $oData + $contents = ''; + $contents = @fread( $fp, $fsData ); //reading string $oData + + + if ($contents != '') { + $oData = unserialize( $contents ); + if ($oData === false) + throw new Exception( "Process file is not valid" ); + + foreach ($oData->dynaforms as $key => $value) { + if ($value['DYN_TYPE'] == 'grid') { + $oData->gridFiles[$value['DYN_UID']] = $value['DYN_UID']; + } + } + + $oData->dynaformFiles = array (); + $sIdentifier = 0; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the block identifier + if (is_numeric( $sIdentifier )) { + $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename + if ($fsXmlGuid > 0) + $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid + + + $fsXmlContent = intval( fread( $fp, 9 ) ); //reading the size of $XmlContent + if ($fsXmlContent > 0) { + $oData->dynaformFiles[$XmlGuid] = $XmlGuid; + $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent + unset( $XmlContent ); + } + } + } + } else { + $oData = null; + } + fclose( $fp ); + return $oData; } - fclose ( $fp); - return $oData; - } - // import process related functions + // import process related functions - /** - * function checkExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $existingGroupList array of existing groups or null - * @desc checkExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, that is the result $sFilteredGroups array. - */ - function checkExistingGroups( $sGroupList ){ - $aGroupwf = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE'); - $oCriteria->add( ContentPeer::CON_LANG, 'en'); - $oCriteria->addJoin (ContentPeer::CON_ID, GroupwfPeer::GRP_UID); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroupwf[] = $aRow; + + /** + * function checkExistingGroups + * checkExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, that is the result $sFilteredGroups array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $existingGroupList array of existing groups or null + */ + function checkExistingGroups ($sGroupList) + { + $aGroupwf = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_ID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, 'en' ); + $oCriteria->addJoin( ContentPeer::CON_ID, GroupwfPeer::GRP_UID ); + $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - //check if any group name exists in the dbase - if(is_array($sGroupList)){ - foreach ($aGroupwf as $groupBase){ - foreach ($sGroupList as $group){ - if($groupBase['CON_VALUE']==$group['GRP_TITLE']&&$groupBase['CON_ID']!=$group['GRP_UID']){ - $existingGroupList[]=$group; - } - } - } - } - //return $sGroupList; - if (isset($existingGroupList)) - return $existingGroupList; - else - return null; - - } - - /** - * function renameExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $renamedGroupList array of existing groups - * @desc renameExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then rename the file adding a number - * suffix to the title atribute of each element of the $renamedGroupList array. - */ - - function renameExistingGroups( $sGroupList ){ - $checkedGroup = $this->checkExistingGroups($sGroupList); - foreach ($sGroupList as $groupBase){ - foreach ($checkedGroup as $group){ - if($groupBase['GRP_TITLE']==$group['GRP_TITLE']){ - $index = substr($groupBase['GRP_TITLE'],-1,0); - if (is_int($index)){ - $index++; - } else { - $index=1; - } - $groupBase['GRP_TITLE'] = $groupBase['GRP_TITLE'].$index; - } - + while ($aRow = $oDataset->getRow()) { + $aGroupwf[] = $aRow; + $oDataset->next(); } - $renamedGroupList[] = $groupBase; - } - - if (isset($renamedGroupList)) - return $renamedGroupList; - else - return null; - - } - - /** - * function mergeExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $mergedGroupList array of existing groups - * @desc mergeExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then replaces the id of the elements in - * in the $mergedGroupList array. - */ - function mergeExistingGroups( $sGroupList){ - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE'); - $oCriteria->add( ContentPeer::CON_LANG, 'en'); - $oCriteria->addJoin (ContentPeer::CON_ID, GroupwfPeer::GRP_UID); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroupwf[] = $aRow; - $oDataset->next(); - } - //check if any group name exists in the dbase - foreach ($sGroupList as $group){ - $merged = false; - foreach ($aGroupwf as $groupBase){ - if($groupBase['CON_VALUE']==$group['GRP_TITLE']&&$groupBase['CON_ID']!=$group['GRP_UID']){ - $group['GRP_UID'] = $groupBase['CON_ID']; - $mergedGroupList[]=$group; - $merged = true; - } - } - // - if (!$merged){ - $mergedGroupList[]=$group; - } - } - - - if (isset($mergedGroupList)){ - return $mergedGroupList; - } - else{ - return null; - } - } - - /** - * function mergeExistingUsers - * @author gustavo cruz gustavo-at-colosa.com - * @param $sBaseGroupList array of a group list with the original group list - * @param $sGroupList array of a group list with the merged group list - * @param $sTaskUserList array of the task user list, it contents the link between - * the task and the group list - * @return $mergedTaskUserList array of the merged task user list - * @desc mergeExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then replaces the id of the elements in - * in the $mergedGroupList array. - */ - function mergeExistingUsers( $sBaseGroupList, $sGroupList, $sTaskUserList ){ - foreach ($sTaskUserList as $taskuser){ - $merged = false; - foreach ($sBaseGroupList as $groupBase){ - foreach ($sGroupList as $group){ - // check if the group has been merged - if($groupBase['GRP_TITLE']==$group['GRP_TITLE']&&$groupBase['GRP_UID']!=$group['GRP_UID']&&$groupBase['GRP_UID']==$taskuser['USR_UID']){ - // merging the user id to match the merged group - $taskuser['USR_UID']=$group['GRP_UID']; - $mergedTaskUserList[] = $taskuser; - $merged=true; + //check if any group name exists in the dbase + if (is_array( $sGroupList )) { + foreach ($aGroupwf as $groupBase) { + foreach ($sGroupList as $group) { + if ($groupBase['CON_VALUE'] == $group['GRP_TITLE'] && $groupBase['CON_ID'] != $group['GRP_UID']) { + $existingGroupList[] = $group; + } } } } - //if hasn't been merged set the default value - if(!$merged){ - $mergedTaskUserList[] = $taskuser; + //return $sGroupList; + if (isset( $existingGroupList )) + return $existingGroupList; + else + return null; + + } + + /** + * function renameExistingGroups + * renameExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then rename the file adding a number + * suffix to the title atribute of each element of the $renamedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $renamedGroupList array of existing groups + */ + + function renameExistingGroups ($sGroupList) + { + $checkedGroup = $this->checkExistingGroups( $sGroupList ); + foreach ($sGroupList as $groupBase) { + foreach ($checkedGroup as $group) { + if ($groupBase['GRP_TITLE'] == $group['GRP_TITLE']) { + $index = substr( $groupBase['GRP_TITLE'], - 1, 0 ); + if (is_int( $index )) { + $index ++; + } else { + $index = 1; + } + $groupBase['GRP_TITLE'] = $groupBase['GRP_TITLE'] . $index; + } + + } + $renamedGroupList[] = $groupBase; + } + + if (isset( $renamedGroupList )) + return $renamedGroupList; + else + return null; + + } + + /** + * function mergeExistingGroups + * mergeExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then replaces the id of the elements in + * in the $mergedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $mergedGroupList array of existing groups + */ + function mergeExistingGroups ($sGroupList) + { + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_ID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, 'en' ); + $oCriteria->addJoin( ContentPeer::CON_ID, GroupwfPeer::GRP_UID ); + $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aGroupwf[] = $aRow; + $oDataset->next(); + } + //check if any group name exists in the dbase + foreach ($sGroupList as $group) { + $merged = false; + foreach ($aGroupwf as $groupBase) { + if ($groupBase['CON_VALUE'] == $group['GRP_TITLE'] && $groupBase['CON_ID'] != $group['GRP_UID']) { + $group['GRP_UID'] = $groupBase['CON_ID']; + $mergedGroupList[] = $group; + $merged = true; + } + } + // + if (! $merged) { + $mergedGroupList[] = $group; + } + } + + if (isset( $mergedGroupList )) { + return $mergedGroupList; + } else { + return null; } } - if (isset($mergedTaskUserList)){ - return $mergedTaskUserList; - } - else{ - return null; - } - } - // end of import process related functions - - /** - * disable all previous process with the parent $sProUid - * @param $sProUid process uid - * @return void - */ - function disablePreviousProcesses( $sProUid ) { - //change status of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ProcessPeer::PRO_PARENT, $sProUid); - $oDataset = ProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $oProcess = new Process(); - while ($aRow = $oDataset->getRow()) { - $aRow['PRO_STATUS'] = 'DISABLED'; - $aRow['PRO_UPDATE_DATE'] = 'now'; - $oProcess->update ( $aRow); - $oDataset->next(); + /** + * function mergeExistingUsers + * mergeExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then replaces the id of the elements in + * in the $mergedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sBaseGroupList array of a group list with the original group list + * @param $sGroupList array of a group list with the merged group list + * @param $sTaskUserList array of the task user list, it contents the link between + * the task and the group list + * @return $mergedTaskUserList array of the merged task user list + */ + function mergeExistingUsers ($sBaseGroupList, $sGroupList, $sTaskUserList) + { + foreach ($sTaskUserList as $taskuser) { + $merged = false; + foreach ($sBaseGroupList as $groupBase) { + foreach ($sGroupList as $group) { + // check if the group has been merged + if ($groupBase['GRP_TITLE'] == $group['GRP_TITLE'] && $groupBase['GRP_UID'] != $group['GRP_UID'] && $groupBase['GRP_UID'] == $taskuser['USR_UID']) { + // merging the user id to match the merged group + $taskuser['USR_UID'] = $group['GRP_UID']; + $mergedTaskUserList[] = $taskuser; + $merged = true; + } + } + } + //if hasn't been merged set the default value + if (! $merged) { + $mergedTaskUserList[] = $taskuser; + } + } + if (isset( $mergedTaskUserList )) { + return $mergedTaskUserList; + } else { + return null; + } } - } + // end of import process related functions - /** - * create the files from a .pm file - * @param $oData process data - * @param $pmFilename process file name - * @return boolean true - */ - function createFiles ( $oData, $pmFilename ) { - if (! file_exists($pmFilename)) - throw ( new Exception ( 'Unable to read uploaded .pm file, please check permissions. ') ); - if (! filesize($pmFilename) >= 9 ) - throw ( new Exception ( 'Uploaded .pm file is corrupted, please check the file before continue. ')); + /** + * disable all previous process with the parent $sProUid + * + * @param $sProUid process uid + * @return void + */ + function disablePreviousProcesses ($sProUid) + { + //change status of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $oProcess = new Process(); + while ($aRow = $oDataset->getRow()) { + $aRow['PRO_STATUS'] = 'DISABLED'; + $aRow['PRO_UPDATE_DATE'] = 'now'; + $oProcess->update( $aRow ); + $oDataset->next(); + } + + } + + /** + * create the files from a . + * pm file + * + * @param $oData process data + * @param $pmFilename process file name + * @return boolean true + */ + function createFiles ($oData, $pmFilename) + { + if (! file_exists( $pmFilename )) + throw (new Exception( 'Unable to read uploaded .pm file, please check permissions. ' )); + + if (! filesize( $pmFilename ) >= 9) + throw (new Exception( 'Uploaded .pm file is corrupted, please check the file before continue. ' )); + + $fp = fopen( $pmFilename, "rb" ); + $fsData = intval( fread( $fp, 9 ) ); //reading the size of $oData + $contents = fread( $fp, $fsData ); //reading string $oData - $fp = fopen( $pmFilename, "rb"); - $fsData = intval( fread ( $fp, 9)); //reading the size of $oData - $contents = fread( $fp, $fsData ); //reading string $oData $path = PATH_DYNAFORM . $oData->process['PRO_UID'] . PATH_SEP; - if ( !is_dir($path) ) { - G::verifyPath($path, true); + if (! is_dir( $path )) { + G::verifyPath( $path, true ); } $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename - if ( $fsXmlGuid > 0 ) - $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid - $fsXmlContent = intval( fread ( $fp, 9)); //reading the size of $XmlContent - if ( $fsXmlContent > 0 ) { - $newXmlGuid = $oData->dynaformFiles[ $XmlGuid ]; - if(isset($oData->process['PRO_UID_OLD'])){ - $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename + if ($fsXmlGuid > 0) + $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid + $fsXmlContent = intval( fread( $fp, 9 ) ); //reading the size of $XmlContent + if ($fsXmlContent > 0) { + $newXmlGuid = $oData->dynaformFiles[$XmlGuid]; + if (isset( $oData->process['PRO_UID_OLD'] )) { + $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent - $XmlContent = str_replace($oData->process['PRO_UID_OLD'], $oData->process['PRO_UID'], $XmlContent); - $XmlContent = str_replace($XmlGuid, $newXmlGuid, $XmlContent); - //foreach - if (isset($oData->gridFiles)) { - if (is_array($oData->gridFiles)) { - foreach($oData->gridFiles as $key => $value) - { - $XmlContent = str_replace($key, $value, $XmlContent); - } + $XmlContent = str_replace( $oData->process['PRO_UID_OLD'], $oData->process['PRO_UID'], $XmlContent ); + $XmlContent = str_replace( $XmlGuid, $newXmlGuid, $XmlContent ); + + //foreach + if (isset( $oData->gridFiles )) { + if (is_array( $oData->gridFiles )) { + foreach ($oData->gridFiles as $key => $value) { + $XmlContent = str_replace( $key, $value, $XmlContent ); + } + } + } + + if (isset( $oData->sqlConnections )) { + foreach ($oData->sqlConnections as $key => $value) { + $XmlContent = str_replace( $key, $value, $XmlContent ); + } + + } + + #here we verify if is adynaform or a html + $aAux = explode( ' ', $XmlContent ); + $ext = (strpos( $aAux[0], 'sqlConnections)) { - foreach($oData->sqlConnections as $key => $value ){ - $XmlContent = str_replace($key, $value, $XmlContent); - } - - } - - #here we verify if is adynaform or a html - $aAux = explode(' ', $XmlContent); - $ext = (strpos($aAux[0], 'process['PRO_UID'] . PATH_SEP; + $pathPublic = PATH_DATA_SITE . 'public' . PATH_SEP . $oData->process['PRO_UID'] . PATH_SEP; $pathMailTem = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $oData->process['PRO_UID'] . PATH_SEP; - G::mk_dir ( $pathPublic ); - G::mk_dir ( $pathMailTem ); + G::mk_dir( $pathPublic ); + G::mk_dir( $pathMailTem ); - if ( $sIdentifier == 'MAILTEMPL' ) { - $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsFileName = intval( $sIdentifier ); //reading the size of $filename - if ( $fsFileName > 0 ) - $sFileName = fread( $fp, $fsFileName ); //reading filename string - $fsContent = function_exists('mb_strlen') ? mb_strlen(fread($fp, 9)) : strlen(fread($fp, 9)); //reading the size of $Content - if ( $fsContent > 0 ) { - $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent - $newFileName = $pathMailTem . $sFileName; - $bytesSaved = @file_put_contents ( $newFileName, $fileContent ); - if ( $bytesSaved != $fsContent ) - throw ( new Exception ('Error writing MailTemplate file in directory : ' . $pathMailTem ) ); - } + if ($sIdentifier == 'MAILTEMPL') { + $sIdentifier = 1; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsFileName = intval( $sIdentifier ); //reading the size of $filename + if ($fsFileName > 0) + $sFileName = fread( $fp, $fsFileName ); //reading filename string + $fsContent = function_exists( 'mb_strlen' ) ? mb_strlen( fread( $fp, 9 ) ) : strlen( fread( $fp, 9 ) ); //reading the size of $Content + if ($fsContent > 0) { + $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent + $newFileName = $pathMailTem . $sFileName; + $bytesSaved = @file_put_contents( $newFileName, $fileContent ); + if ($bytesSaved != $fsContent) + throw (new Exception( 'Error writing MailTemplate file in directory : ' . $pathMailTem )); + } + } } - } } - if ( trim($sIdentifier) == 'PUBLIC' ) { - $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsFileName = intval( $sIdentifier ); //reading the size of $filename - if ( $fsFileName > 0 ) - $sFileName = fread( $fp, $fsFileName ); //reading filename string - $fsContent = function_exists('mb_strlen') ? mb_strlen(fread($fp, 9)) : strlen(fread($fp, 9)); //reading the size of $Content - if ( $fsContent > 0 ) { - $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent - $newFileName = $pathPublic . $sFileName; - $bytesSaved = @file_put_contents ( $newFileName, $fileContent ); - if ( $bytesSaved != $fsContent ) - throw ( new Exception ('Error writing Public file in directory : ' . $pathPublic ) ); - } + if (trim( $sIdentifier ) == 'PUBLIC') { + $sIdentifier = 1; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsFileName = intval( $sIdentifier ); //reading the size of $filename + if ($fsFileName > 0) + $sFileName = fread( $fp, $fsFileName ); //reading filename string + $fsContent = function_exists( 'mb_strlen' ) ? mb_strlen( fread( $fp, 9 ) ) : strlen( fread( $fp, 9 ) ); //reading the size of $Content + if ($fsContent > 0) { + $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent + $newFileName = $pathPublic . $sFileName; + $bytesSaved = @file_put_contents( $newFileName, $fileContent ); + if ($bytesSaved != $fsContent) + throw (new Exception( 'Error writing Public file in directory : ' . $pathPublic )); + } + } } - } } - fclose ( $fp); + fclose( $fp ); return true; } + /** + * this function remove all Process except the PROCESS ROW + * + * @param string $sProUid + * @return boolean + */ + function removeProcessRows ($sProUid) + { + try { + //Instance all classes necesaries + $oProcess = new Process(); + $oDynaform = new Dynaform(); + $oInputDocument = new InputDocument(); + $oOutputDocument = new OutputDocument(); + $oTrigger = new Triggers(); + $oStepTrigger = new StepTrigger(); + $oRoute = new Route(); + $oStep = new Step(); + $oSubProcess = new SubProcess(); + $oCaseTracker = new CaseTracker(); + $oCaseTrackerObject = new CaseTrackerObject(); + $oObjectPermission = new ObjectPermission(); + $oSwimlaneElement = new SwimlanesElements(); + $oConnection = new DbSource(); + $oStage = new Stage(); + $oEvent = new Event(); + $oCaseScheduler = new CaseScheduler(); - /** - * this function remove all Process except the PROCESS ROW - * @param string $sProUid - * @return boolean - */ - function removeProcessRows ($sProUid ) { - try { - //Instance all classes necesaries - $oProcess = new Process(); - $oDynaform = new Dynaform(); - $oInputDocument = new InputDocument(); - $oOutputDocument = new OutputDocument(); - $oTrigger = new Triggers(); - $oStepTrigger = new StepTrigger(); - $oRoute = new Route(); - $oStep = new Step(); - $oSubProcess = new SubProcess(); - $oCaseTracker = new CaseTracker(); - $oCaseTrackerObject=new CaseTrackerObject(); - $oObjectPermission= new ObjectPermission(); - $oSwimlaneElement = new SwimlanesElements(); - $oConnection = new DbSource(); - $oStage = new Stage(); - $oEvent = new Event(); - $oCaseScheduler = new CaseScheduler(); + //Delete the tasks of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProUid ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $oTask = new Task(); + while ($aRow = $oDataset->getRow()) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $aRow['TAS_UID'] ); + StepTriggerPeer::doDelete( $oCriteria ); + if ($oTask->taskExists( $aRow['TAS_UID'] )) + $oTask->remove( $aRow['TAS_UID'] ); + $oDataset->next(); + } - //Delete the tasks of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskPeer::PRO_UID, $sProUid); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $oTask = new Task(); - while ($aRow = $oDataset->getRow()) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepTriggerPeer::TAS_UID, $aRow['TAS_UID']); - StepTriggerPeer::doDelete($oCriteria); - if ($oTask->taskExists($aRow['TAS_UID'])) - $oTask->remove($aRow['TAS_UID']); - $oDataset->next(); - } + //Delete the dynaforms of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '_tmp*'; + foreach (glob( $sWildcard ) as $fn) { + @unlink( $fn ); + } + $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '.*'; + foreach (glob( $sWildcard ) as $fn) { + @unlink( $fn ); + } + if ($oDynaform->dynaformExists( $aRow['DYN_UID'] )) + $oDynaform->remove( $aRow['DYN_UID'] ); + $oDataset->next(); + } - //Delete the dynaforms of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '_tmp*'; - foreach( glob($sWildcard) as $fn ) { - @unlink($fn); - } - $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '.*'; - foreach( glob($sWildcard) as $fn ) { - @unlink($fn); - } - if ($oDynaform->dynaformExists($aRow['DYN_UID'])) - $oDynaform->remove($aRow['DYN_UID']); - $oDataset->next(); - } + //Delete the input documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProUid ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oInputDocument->InputExists( $aRow['INP_DOC_UID'] )) + $oInputDocument->remove( $aRow['INP_DOC_UID'] ); + $oDataset->next(); + } - //Delete the input documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProUid); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oInputDocument->InputExists($aRow['INP_DOC_UID'])) - $oInputDocument->remove($aRow['INP_DOC_UID']); - $oDataset->next(); - } + //Delete the output documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProUid ); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oOutputDocument->OutputExists( $aRow['OUT_DOC_UID'] )) + $oOutputDocument->remove( $aRow['OUT_DOC_UID'] ); + $oDataset->next(); + } - //Delete the output documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProUid); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oOutputDocument->OutputExists($aRow['OUT_DOC_UID'])) - $oOutputDocument->remove($aRow['OUT_DOC_UID']); - $oDataset->next(); - } - - //Delete the steps - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::PRO_UID, $sProUid); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - //Delete the steptrigger of process - /*$oCriteria = new Criteria('workflow'); + //Delete the steps + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::PRO_UID, $sProUid ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //Delete the steptrigger of process + /*$oCriteria = new Criteria('workflow'); $oCriteria->add(StepTriggerPeer::STEP_UID, $aRow['STEP_UID']); $oDataseti = StepTriggerPeer::doSelectRS($oCriteria); $oDataseti->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -3035,191 +3274,193 @@ class Processes { $oStepTrigger->remove($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']); $oDataseti->next(); }*/ - $oStep->remove($aRow['STEP_UID']); - $oDataset->next(); - } + $oStep->remove( $aRow['STEP_UID'] ); + $oDataset->next(); + } - //Delete the StepSupervisor - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProUid); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oStep->StepExists($aRow['STEP_UID'])) - $oStep->remove($aRow['STEP_UID']); - $oDataset->next(); - } + //Delete the StepSupervisor + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProUid ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oStep->StepExists( $aRow['STEP_UID'] )) + $oStep->remove( $aRow['STEP_UID'] ); + $oDataset->next(); + } - //Delete the triggers of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TriggersPeer::PRO_UID, $sProUid); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oTrigger->TriggerExists($aRow['TRI_UID'])) - $oTrigger->remove($aRow['TRI_UID']); - $oDataset->next(); - } + //Delete the triggers of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProUid ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oTrigger->TriggerExists( $aRow['TRI_UID'] )) + $oTrigger->remove( $aRow['TRI_UID'] ); + $oDataset->next(); + } - //Delete the routes of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProUid); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oRoute->routeExists($aRow['ROU_UID'])) - $oRoute->remove($aRow['ROU_UID']); - $oDataset->next(); - } + //Delete the routes of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProUid ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oRoute->routeExists( $aRow['ROU_UID'] )) + $oRoute->remove( $aRow['ROU_UID'] ); + $oDataset->next(); + } - //Delete the swimlanes elements of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProUid); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oSwimlaneElement->swimlanesElementsExists($aRow['SWI_UID'])) - $oSwimlaneElement->remove($aRow['SWI_UID']); - $oDataset->next(); - } + //Delete the swimlanes elements of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProUid ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oSwimlaneElement->swimlanesElementsExists( $aRow['SWI_UID'] )) + $oSwimlaneElement->remove( $aRow['SWI_UID'] ); + $oDataset->next(); + } - //Delete the DB connections of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProUid); - $oDataset = DbSourcePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oConnection->Exists($aRow['DBS_UID'], $aRow['PRO_UID'])) - $oConnection->remove($aRow['DBS_UID'], $aRow['PRO_UID']); - $oDataset->next(); - } + //Delete the DB connections of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProUid ); + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oConnection->Exists( $aRow['DBS_UID'], $aRow['PRO_UID'] )) + $oConnection->remove( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + $oDataset->next(); + } - //Delete the sub process of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProUid); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oSubProcess->subProcessExists($aRow['SP_UID'])) - $oSubProcess->remove($aRow['SP_UID']); - $oDataset->next(); - } + //Delete the sub process of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oSubProcess->subProcessExists( $aRow['SP_UID'] )) + $oSubProcess->remove( $aRow['SP_UID'] ); + $oDataset->next(); + } - //Delete the caseTracker of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseTracker->caseTrackerExists ($aRow['PRO_UID'])) - $oCaseTracker->remove($aRow['PRO_UID']); - $oDataset->next(); - } + //Delete the caseTracker of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseTracker->caseTrackerExists( $aRow['PRO_UID'] )) + $oCaseTracker->remove( $aRow['PRO_UID'] ); + $oDataset->next(); + } - //Delete the caseTrackerObject of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseTrackerObject->caseTrackerObjectExists ($aRow['CTO_UID'])) { - $oCaseTrackerObject->remove($aRow['CTO_UID']); - } - $oDataset->next(); - } + //Delete the caseTrackerObject of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseTrackerObject->caseTrackerObjectExists( $aRow['CTO_UID'] )) { + $oCaseTrackerObject->remove( $aRow['CTO_UID'] ); + } + $oDataset->next(); + } - //Delete the ObjectPermission of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProUid); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oObjectPermission->Exists ($aRow['OP_UID'])) { - $oObjectPermission->remove($aRow['OP_UID']); + //Delete the ObjectPermission of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProUid ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oObjectPermission->Exists( $aRow['OP_UID'] )) { + $oObjectPermission->remove( $aRow['OP_UID'] ); + } + $oDataset->next(); + } + + //Delete the Stage of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StagePeer::PRO_UID, $sProUid ); + $oDataset = StagePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oStage->Exists( $aRow['STG_UID'] )) + $oStage->remove( $aRow['STG_UID'] ); + $oDataset->next(); + } + + //Delete the Event of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( EventPeer::PRO_UID, $sProUid ); + $oDataset = EventPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oEvent->Exists( $aRow['EVN_UID'] )) + $oEvent->remove( $aRow['EVN_UID'] ); + $oDataset->next(); + if ($oEvent->existsByTaskUidFrom( $aRow['TAS_UID'] )) { + $aRowEvent = $oEvent->getRowByTaskUidFrom( $aRow['TAS_UID'] ); + $oEvent->remove( $aRowEvent['EVN_UID'] ); + } + $oDataset->next(); + } + + //Delete the CaseScheduler of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseSchedulerPeer::PRO_UID, $sProUid ); + $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseScheduler->Exists( $aRow['SCH_UID'] )) + $oCaseScheduler->remove( $aRow['SCH_UID'] ); + $oDataset->next(); + } + + return true; + } catch (Exception $oError) { + throw ($oError); } - $oDataset->next(); } - //Delete the Stage of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StagePeer::PRO_UID, $sProUid); - $oDataset = StagePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oStage->Exists ($aRow['STG_UID'])) - $oStage->remove($aRow['STG_UID']); - $oDataset->next(); - } + /** + * this function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + function createProcessFromData ($oData, $pmFilename) + { + $this->removeProcessRows( $oData->process['PRO_UID'] ); - //Delete the Event of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(EventPeer::PRO_UID, $sProUid); - $oDataset = EventPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oEvent->Exists ($aRow['EVN_UID'])) - $oEvent->remove($aRow['EVN_UID']); - $oDataset->next(); - if($oEvent->existsByTaskUidFrom($aRow['TAS_UID'])) { - $aRowEvent = $oEvent->getRowByTaskUidFrom($aRow['TAS_UID']); - $oEvent->remove($aRowEvent['EVN_UID']); - } - $oDataset->next(); - } + // (*) Creating process dependencies + // creating the process category + $this->createProcessCategoryRow( isset( $oData->processCategory ) ? $oData->processCategory : null ); - //Delete the CaseScheduler of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseSchedulerPeer::PRO_UID, $sProUid); - $oDataset = CaseSchedulerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseScheduler->Exists ($aRow['SCH_UID'])) - $oCaseScheduler->remove($aRow['SCH_UID']); - $oDataset->next(); - } + // create the process + $this->createProcessRow( $oData->process ); - return true; - } - catch ( Exception $oError) { - throw($oError); - } - } + $this->createTaskRows( $oData->tasks ); + //it was commented becuase it seems to be working fine + //$this->createEventRows(isset($oData->event) ? $oData->event : array()); - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function createProcessFromData ($oData, $pmFilename ) { - $this->removeProcessRows ($oData->process['PRO_UID'] ); - // (*) Creating process dependencies - // creating the process category - $this->createProcessCategoryRow(isset($oData->processCategory) ? $oData->processCategory : null); + $aRoutesUID = $this->createRouteRows( $oData->routes ); + $this->createLaneRows( $oData->lanes ); - // create the process - $this->createProcessRow($oData->process); - - $this->createTaskRows($oData->tasks); - //it was commented becuase it seems to be working fine - //$this->createEventRows(isset($oData->event) ? $oData->event : array()); - - $aRoutesUID = $this->createRouteRows($oData->routes); - $this->createLaneRows($oData->lanes); - - /*if(!isset($oData->gateways)){ + /*if(!isset($oData->gateways)){ //Adding gateway information while importing processes from older version //Making compatible with old export process $oRoutes = $oData->routes; @@ -3242,291 +3483,314 @@ class Processes { } else*/ - if(isset($oData->gateways)) - $this->createGatewayRows($oData->gateways); + if (isset( $oData->gateways )) + $this->createGatewayRows( $oData->gateways ); - $this->createDynaformRows($oData->dynaforms); - $this->createInputRows($oData->inputs); - $this->createOutputRows($oData->outputs); - $this->createStepRows($oData->steps); - $this->createStepSupervisorRows(isset($oData->stepSupervisor) ? $oData->stepSupervisor : array()); - $this->createTriggerRows($oData->triggers); - $this->createStepTriggerRows($oData->steptriggers); - $this->createTaskUserRows($oData->taskusers); - $this->createGroupRow($oData->groupwfs); - $this->createDBConnectionsRows(isset($oData->dbconnections) ? $oData->dbconnections : array()); - $this->createReportTables(isset($oData->reportTables) ? $oData->reportTables : array(), isset($oData->reportTablesVars) ? $oData->reportTablesVars : array()); - $this->createSubProcessRows(isset($oData->subProcess) ? $oData->subProcess : array()); - $this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array()); - $this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array()); - $this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array()); - $this->createStageRows(isset($oData->stage) ? $oData->stage : array()); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( isset( $oData->stepSupervisor ) ? $oData->stepSupervisor : array () ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( isset( $oData->dbconnections ) ? $oData->dbconnections : array () ); + $this->createReportTables( isset( $oData->reportTables ) ? $oData->reportTables : array (), isset( $oData->reportTablesVars ) ? $oData->reportTablesVars : array () ); + $this->createSubProcessRows( isset( $oData->subProcess ) ? $oData->subProcess : array () ); + $this->createCaseTrackerRows( isset( $oData->caseTracker ) ? $oData->caseTracker : array () ); + $this->createCaseTrackerObjectRows( isset( $oData->caseTrackerObject ) ? $oData->caseTrackerObject : array () ); + $this->createObjectPermissionsRows( isset( $oData->objectPermissions ) ? $oData->objectPermissions : array () ); + $this->createStageRows( isset( $oData->stage ) ? $oData->stage : array () ); - $this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms); + $this->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms ); - // Create before to createRouteRows for avoid duplicates - $this->createEventRows(isset($oData->event) ? $oData->event : array()); + // Create before to createRouteRows for avoid duplicates + $this->createEventRows( isset( $oData->event ) ? $oData->event : array () ); - $this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array()); + $this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () ); - // and finally create the files, dynaforms (xml and html), emailTemplates and Public files - $this->createFiles($oData, $pmFilename); - } - - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function updateProcessFromData ($oData, $pmFilename ) { - $this->updateProcessRow ($oData->process ); - $this->removeProcessRows ($oData->process['PRO_UID'] ); - $this->createTaskRows ($oData->tasks ); - $this->createRouteRows ($oData->routes ); - $this->createLaneRows ($oData->lanes ); - $this->createDynaformRows ($oData->dynaforms ); - $this->createInputRows ($oData->inputs ); - $this->createOutputRows ($oData->outputs ); - $this->createStepRows ($oData->steps ); - $this->createStepSupervisorRows($oData->stepSupervisor); - $this->createTriggerRows ($oData->triggers); - $this->createStepTriggerRows ($oData->steptriggers); - $this->createTaskUserRows ($oData->taskusers); - $this->createGroupRow ($oData->groupwfs ); - $this->createDBConnectionsRows($oData->dbconnections); - $this->updateReportTables($oData->reportTables, $oData->reportTablesVars); - $this->createFiles ( $oData, $pmFilename ); - $this->createSubProcessRows( $oData->subProcess ); - $this->createCaseTrackerRows( $oData->caseTracker); - $this->createCaseTrackerObjectRows( $oData->caseTrackerObject); - $this->createObjectPermissionsRows( $oData->objectPermissions); - $this->createStageRows( $oData->stage); - $this->createFieldCondition($oData->fieldCondition, $oData->dynaforms); - $this->createEventRows( $oData->event); - $this->createCaseSchedulerRows( $oData->caseScheduler ); - $this->createProcessCategoryRow(isset($oData->processCategory) ? $oData->processCategory : null); - - } - -/** - * get the starting task for a user but from a Tasks object - * @param $sProUid process uid - * @param $sUserUid user uid - * @return an array of tasks - */ - function getStartingTaskForUser ($sProUid, $sUsrUid ){ - $oTask = new Tasks( ); - - return $oTask->getStartingTaskForUser( $sProUid, $sUsrUid ); - } - - /************************************************* - functions to enable open ProcessMaker Library - *************************************************/ - /** - * Open a WebService connection - * @param $user username for pm - * @param $pass password for the user - * @return 1 integer. - */ - function ws_open ( $user, $pass ) { - global $sessionId; - global $client; - $endpoint = PML_WSDL_URL; - $sessionId = ''; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } + // and finally create the files, dynaforms (xml and html), emailTemplates and Public files + $this->createFiles( $oData, $pmFilename ); } - $client = new SoapClient($endpoint, $proxy); - $params = array('userid'=>$user, 'password'=>$pass ); - $result = $client->__SoapCall('login', array($params)); - if ( $result->status_code == 0 ) { - $sessionId = $result->message; - return 1; + /** + * this function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + function updateProcessFromData ($oData, $pmFilename) + { + $this->updateProcessRow( $oData->process ); + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $this->createTaskRows( $oData->tasks ); + $this->createRouteRows( $oData->routes ); + $this->createLaneRows( $oData->lanes ); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( $oData->stepSupervisor ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( $oData->dbconnections ); + $this->updateReportTables( $oData->reportTables, $oData->reportTablesVars ); + $this->createFiles( $oData, $pmFilename ); + $this->createSubProcessRows( $oData->subProcess ); + $this->createCaseTrackerRows( $oData->caseTracker ); + $this->createCaseTrackerObjectRows( $oData->caseTrackerObject ); + $this->createObjectPermissionsRows( $oData->objectPermissions ); + $this->createStageRows( $oData->stage ); + $this->createFieldCondition( $oData->fieldCondition, $oData->dynaforms ); + $this->createEventRows( $oData->event ); + $this->createCaseSchedulerRows( $oData->caseScheduler ); + $this->createProcessCategoryRow( isset( $oData->processCategory ) ? $oData->processCategory : null ); + } - throw ( new Exception ( $result->message ) ); - return 1; - } - /** - * Open a WebService public connection - * @param $user username for pm - * @param $pass password for the user - * @return 1 integer. - */ - function ws_open_public ( ) { + /** + * get the starting task for a user but from a Tasks object + * + * @param $sProUid process uid + * @param $sUserUid user uid + * @return an array of tasks + */ + function getStartingTaskForUser ($sProUid, $sUsrUid) + { + $oTask = new Tasks(); - global $sessionId; - global $client; - $endpoint = PML_WSDL_URL; - $sessionId = ''; - ini_set("soap.wsdl_cache_enabled", "0"); // enabling WSDL cache - try { - $proxy = array(); + return $oTask->getStartingTaskForUser( $sProUid, $sUsrUid ); + } + + /** + * *********************************************** + * functions to enable open ProcessMaker Library + * *********************************************** + */ + /** + * Open a WebService connection + * + * @param $user username for pm + * @param $pass password for the user + * @return 1 integer. + */ + function ws_open ($user, $pass) + { + global $sessionId; + global $client; + $endpoint = PML_WSDL_URL; + $sessionId = ''; + $proxy = array (); $sysConf = System::getSystemConfiguration(); if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } } - $client = @new SoapClient($endpoint, $proxy); - } catch (Exception $e) { - throw ( new Exception ( $e->getMessage() ) ); + $client = new SoapClient( $endpoint, $proxy ); + + $params = array ('userid' => $user,'password' => $pass + ); + $result = $client->__SoapCall( 'login', array ($params + ) ); + if ($result->status_code == 0) { + $sessionId = $result->message; + return 1; + } + throw (new Exception( $result->message )); + return 1; } - - return 1; - } - - /** - * Consume the processList WebService - * @return $result process list. - */ - function ws_processList ( ){ - global $sessionId; - global $client; - - $endpoint = PML_WSDL_URL; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } - } - $client = new SoapClient($endpoint, $proxy); - - $sessionId = ''; - $params = array('sessionId'=>$sessionId ); - $result = $client->__SoapCall('processList', array($params)); - if ( $result->status_code == 0 ) { - return $result; - } - throw ( new Exception ( $result->message ) ); - } - - /** - * download a File - * @param $file file to download - * @param $local_path path of the file - * @param $newfilename - * @return $errorMsg process list. - */ - function downloadFile ($file, $local_path, $newfilename) { - $err_msg = ''; - $out = fopen($local_path . $newfilename, 'wb'); - if ($out == FALSE){ - throw ( new Exception ("File $newfilename not opened") ); - } - - if (!function_exists('curl_init')){ - G::SendTemporalMessage ('ID_CURLFUN_ISUNDEFINED', "warning",'LABEL','','100%',''); - G::header('location: ../processes/processes_Library'); - die(); - } - $ch = curl_init(); - - curl_setopt($ch, CURLOPT_FILE, $out); - curl_setopt($ch, CURLOPT_HEADER, 0); - curl_setopt($ch, CURLOPT_URL, $file); - - curl_exec($ch); - $errorMsg = curl_error ( $ch); - fclose ( $out ); - - curl_close($ch); - return $errorMsg; - - }//end function - - /** - * get the process Data from a process - * @param $proId process Uid - * @return $result - */ - function ws_processGetData ( $proId ){ - global $sessionId; - global $client; - - $endpoint = PML_WSDL_URL; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } - } - $client = new SoapClient($endpoint, $proxy); - - $sessionId = ''; - $params = array('sessionId'=>$sessionId , 'processId'=> $proId); - $result = $client->__SoapCall('processGetData', array($params)); - if ( $result->status_code == 0 ) { - return $result; - } - throw ( new Exception ( $result->message ) ); - } - - /** - * parse an array of Items - * @param $proId process Uid - * @return $result - */ - function parseItemArray( $array ) { - if (!isset ($array->item) && !is_array($array) ) { - return null; - } - - $result = array(); - if ( isset ( $array->item ) ) { - foreach ($array->item as $key => $value) { - $result[$value->key] = $value->value; - } - } - else { - foreach ($array as $key => $value) { - $result[$value->key] = $value->value; - } - } - return $result; - } - - public function getProcessFiles($proUid, $type) + /** + * Open a WebService public connection + * + * @param $user username for pm + * @param $pass password for the user + * @return 1 integer. + */ + function ws_open_public () { - $filesList = array(); + + global $sessionId; + global $client; + $endpoint = PML_WSDL_URL; + $sessionId = ''; + ini_set( "soap.wsdl_cache_enabled", "0" ); // enabling WSDL cache + try { + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = @new SoapClient( $endpoint, $proxy ); + } catch (Exception $e) { + throw (new Exception( $e->getMessage() )); + } + + return 1; + } + + /** + * Consume the processList WebService + * + * @return $result process list. + */ + function ws_processList () + { + global $sessionId; + global $client; + + $endpoint = PML_WSDL_URL; + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = new SoapClient( $endpoint, $proxy ); + + $sessionId = ''; + $params = array ('sessionId' => $sessionId + ); + $result = $client->__SoapCall( 'processList', array ($params + ) ); + if ($result->status_code == 0) { + return $result; + } + throw (new Exception( $result->message )); + } + + /** + * download a File + * + * @param $file file to download + * @param $local_path path of the file + * @param $newfilename + * @return $errorMsg process list. + */ + function downloadFile ($file, $local_path, $newfilename) + { + $err_msg = ''; + $out = fopen( $local_path . $newfilename, 'wb' ); + if ($out == FALSE) { + throw (new Exception( "File $newfilename not opened" )); + } + + if (! function_exists( 'curl_init' )) { + G::SendTemporalMessage( 'ID_CURLFUN_ISUNDEFINED', "warning", 'LABEL', '', '100%', '' ); + G::header( 'location: ../processes/processes_Library' ); + die(); + } + $ch = curl_init(); + + curl_setopt( $ch, CURLOPT_FILE, $out ); + curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt( $ch, CURLOPT_URL, $file ); + + curl_exec( $ch ); + $errorMsg = curl_error( $ch ); + fclose( $out ); + + curl_close( $ch ); + return $errorMsg; + + } //end function + + + /** + * get the process Data from a process + * + * @param $proId process Uid + * @return $result + */ + function ws_processGetData ($proId) + { + global $sessionId; + global $client; + + $endpoint = PML_WSDL_URL; + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = new SoapClient( $endpoint, $proxy ); + + $sessionId = ''; + $params = array ('sessionId' => $sessionId,'processId' => $proId + ); + $result = $client->__SoapCall( 'processGetData', array ($params + ) ); + if ($result->status_code == 0) { + return $result; + } + throw (new Exception( $result->message )); + } + + /** + * parse an array of Items + * + * @param $proId process Uid + * @return $result + */ + function parseItemArray ($array) + { + if (! isset( $array->item ) && ! is_array( $array )) { + return null; + } + + $result = array (); + if (isset( $array->item )) { + foreach ($array->item as $key => $value) { + $result[$value->key] = $value->value; + } + } else { + foreach ($array as $key => $value) { + $result[$value->key] = $value->value; + } + } + return $result; + } + + public function getProcessFiles ($proUid, $type) + { + $filesList = array (); switch ($type) { case "mail": @@ -3537,114 +3801,127 @@ class Processes { $basePath = PATH_DATA_PUBLIC; break; default: - throw new Exception("Unknow Process Files Type \"$type\"."); + throw new Exception( "Unknow Process Files Type \"$type\"." ); break; } $dir = $basePath . $proUid . PATH_SEP; - G::verifyPath($dir, true); //Create if it does not exist + G::verifyPath( $dir, true ); //Create if it does not exist + //Creating the default template (if not exists) - if (!file_exists($dir . "alert_message.html")) { - @copy(PATH_TPL . "mails" . PATH_SEP . "alert_message.html", $dir . "alert_message.html"); + if (! file_exists( $dir . "alert_message.html" )) { + @copy( PATH_TPL . "mails" . PATH_SEP . "alert_message.html", $dir . "alert_message.html" ); } - if (!file_exists($dir . "unassignedMessage.html")) { - @copy(PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . "unassignedMessage.html"); + if (! file_exists( $dir . "unassignedMessage.html" )) { + @copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . "unassignedMessage.html" ); } - $files = glob($dir . "*.*"); + $files = glob( $dir . "*.*" ); foreach ($files as $file) { - $fileName = basename($file); + $fileName = basename( $file ); if ($fileName != "alert_message.html" && $fileName != "unassignedMessage.html") { - $filesList[] = array("filepath" => $file, "filename" => $fileName); + $filesList[] = array ("filepath" => $file,"filename" => $fileName + ); } } return $filesList; } -}//end class processes +} //end class processes + /** * Object Document class + * * @package workflow.engine.ProcessMaker */ -class ObjectDocument{ - public $type; - public $name; - public $data; - public $origin; +class ObjectDocument +{ + public $type; + public $name; + public $data; + public $origin; - /** - * Constructor - */ - function __construct(){ - $this->type = ''; - $this->name = ''; - $this->data = ''; - $this->origin = ''; + /** + * Constructor + */ + function __construct () + { + $this->type = ''; + $this->name = ''; + $this->data = ''; + $this->origin = ''; } } /** * ObjectDocument Collection + * * @package workflow.engine.ProcessMaker */ -class ObjectCellection{ - public $num; - public $swapc; - public $objects; +class ObjectCellection +{ + public $num; + public $swapc; + public $objects; - /** - * Constructor - */ - function __construct (){ - $this->objects = Array(); - $this->num = 0; - $this->swapc = $this->num; - array_push($this->objects, 'void'); + /** + * Constructor + */ + function __construct () + { + $this->objects = Array (); + $this->num = 0; + $this->swapc = $this->num; + array_push( $this->objects, 'void' ); } - /** - * add in the collecetion a new object Document - * @param $name name object document - * @param $type type object document - * @param $data data object document - * @param $origin origin object document - * @return void - */ - function add($name, $type, $data, $origin){ - $o = new ObjectDocument(); - $o->name = $name; - $o->type = $type; - $o->data = $data; - $o->origin = $origin; + /** + * add in the collecetion a new object Document + * + * @param $name name object document + * @param $type type object document + * @param $data data object document + * @param $origin origin object document + * @return void + */ + function add ($name, $type, $data, $origin) + { + $o = new ObjectDocument(); + $o->name = $name; + $o->type = $type; + $o->data = $data; + $o->origin = $origin; - $this->num++; - array_push($this->objects, $o); - $this->swapc = $this->num; + $this->num ++; + array_push( $this->objects, $o ); + $this->swapc = $this->num; } - /** - * get the collection of ObjectDocument - * @param $name name object document - * @param $type type object document - * @param $data data object document - * @param $origin origin object document - * @return void - */ - function get(){ - if($this->swapc > 0) { - $e = $this->objects[$this->swapc]; - $this->swapc--; - return $e; + /** + * get the collection of ObjectDocument + * + * @param $name name object document + * @param $type type object document + * @param $data data object document + * @param $origin origin object document + * @return void + */ + function get () + { + if ($this->swapc > 0) { + $e = $this->objects[$this->swapc]; + $this->swapc --; + return $e; } else { - $this->swapc = $this->num; - return false; + $this->swapc = $this->num; + return false; + } } - } } diff --git a/workflow/engine/classes/class.propelTable.php b/workflow/engine/classes/class.propelTable.php index c04251513..db491b6ed 100755 --- a/workflow/engine/classes/class.propelTable.php +++ b/workflow/engine/classes/class.propelTable.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - G::LoadClass('filterForm'); - G::LoadClass('xmlMenu'); - G::LoadClass("BasePeer" ); - G::LoadClass("ArrayPeer" ); +G::LoadClass( 'filterForm' ); +G::LoadClass( 'xmlMenu' ); +G::LoadClass( "BasePeer" ); +G::LoadClass( "ArrayPeer" ); /** * Class pagedTable - * @author David S. Callizaya S. * + * + * @author David S. Callizaya S. * * @access public * @package workflow.gulliver.system - * dependencies TemplatePower Form XmlForm + * dependencies TemplatePower Form XmlForm */ class propelTable { - var $xmlFormFile; - var $currentPage; - var $orderBy = ''; - var $filter = array(); - var $filterType = array(); - var $searchBy = ''; - var $fastSearch=''; - var $order = ''; - var $template='templates/paged-table.html'; - var $tpl; - var $style = array(); - var $rowsPerPage=25; - var $ownerPage; - var $popupPage; - var $popupSubmit; - var $popupWidth=450; - var $popupHeight=200; - var $ajaxServer; - var $fields; - var $query; - var $totPages; - var $totRows; + var $xmlFormFile; + var $currentPage; + var $orderBy = ''; + var $filter = array (); + var $filterType = array (); + var $searchBy = ''; + var $fastSearch = ''; + var $order = ''; + var $template = 'templates/paged-table.html'; + var $tpl; + var $style = array (); + var $rowsPerPage = 25; + var $ownerPage; + var $popupPage; + var $popupSubmit; + var $popupWidth = 450; + var $popupHeight = 200; + var $ajaxServer; + var $fields; + var $query; + var $totPages; + var $totRows; - //SQL QUERIES - var $criteria; - var $sql=''; - var $sqlWhere=''; - var $sqlGroupBy=''; - var $sqlSelect='SELECT 1'; - var $sqlDelete=''; - var $sqlInsert=''; - var $sqlUpdate=''; - var $fieldDataList=''; + //SQL QUERIES + var $criteria; + var $sql = ''; + var $sqlWhere = ''; + var $sqlGroupBy = ''; + var $sqlSelect = 'SELECT 1'; + var $sqlDelete = ''; + var $sqlInsert = ''; + var $sqlUpdate = ''; + var $fieldDataList = ''; - //Configuration - var $xmlPopup=''; - var $addRow=false; - var $deleteRow=false; - var $editRow=false; - var $notFields=' title button linknew begingrid2 endgrid2 '; // These are not considered to build the sql queries (update,insert,delete) + //Configuration + var $xmlPopup = ''; + var $addRow = false; + var $deleteRow = false; + var $editRow = false; + var $notFields = ' title button linknew begingrid2 endgrid2 '; // These are not considered to build the sql queries (update,insert,delete) - //JavaScript Object attributes - var $onUpdateField=""; - var $onDeleteField=""; - var $afterDeleteField=""; - var $onInsertField=""; - //New gulliver - var $xmlForm; - var $menu=''; - var $filterForm=''; - var $filterForm_Id=''; - var $name='pagedTable'; - var $id='A1'; - var $disableFooter = false; + //JavaScript Object attributes + var $onUpdateField = ""; + var $onDeleteField = ""; + var $afterDeleteField = ""; + var $onInsertField = ""; + + //New gulliver + var $xmlForm; + var $menu = ''; + var $filterForm = ''; + var $filterForm_Id = ''; + var $name = 'pagedTable'; + var $id = 'A1'; + var $disableFooter = false; //This attribute is used to set STYLES to groups of TD, using the field type "cellMark" (see XmlForm_Field_cellMark) - var $tdStyle=''; - var $tdClass=''; - //Config Save definition - var $__Configuration='orderBy,filter,fastSearch,style/*/showInTable';//order,rowsPerPage,disableFooter'; + var $tdStyle = ''; + var $tdClass = ''; + //Config Save definition + var $__Configuration = 'orderBy,filter,fastSearch,style/*/showInTable'; //order,rowsPerPage,disableFooter'; - //Variable for MasterDetail feature - var $masterdetail=''; - var $title; - /** - * Function prepareQuery - * @author David S. Callizaya S. - * @access public - * @param string $limitPage - * @return string - */ - function prepareQuery( $limitPage = false ) - { - // process the QuickSearch string and add the fields and expression needed to run the search - if ( $this->searchBy !== '' ) { - $aSB = explode('|', $this->searchBy); //fields are separated by pipes - //subfilter - $subFilter=''; - foreach($aSB as $sBy) { - $subFilter .= ($subFilter !== '') ? ' OR ' : ''; - //TODO: Get DATABASE type from Criteria, I think sql delimeter is needed too - $subFilter .= $sBy . ' LIKE "%'. - G::sqlEscape($this->fastSearch ).'%"'; - } - if ($subFilter !=='' ) { - //Get the first defined table in Criteria. - $aCurrentTables = $this->criteria->getTables(); - if ( isset($aCurrentTables[0])) { - $this->criteria->add ( $aCurrentTables[0] . ".*", '('. $subFilter. ')' , Criteria::CUSTOM ); + //Variable for MasterDetail feature + var $masterdetail = ''; + var $title; + + /** + * Function prepareQuery + * + * @author David S. Callizaya S. + * @access public + * @param string $limitPage + * @return string + */ + function prepareQuery ($limitPage = false) + { + // process the QuickSearch string and add the fields and expression needed to run the search + if ($this->searchBy !== '') { + $aSB = explode( '|', $this->searchBy ); //fields are separated by pipes + //subfilter + $subFilter = ''; + foreach ($aSB as $sBy) { + $subFilter .= ($subFilter !== '') ? ' OR ' : ''; + //TODO: Get DATABASE type from Criteria, I think sql delimeter is needed too + $subFilter .= $sBy . ' LIKE "%' . G::sqlEscape( $this->fastSearch ) . '%"'; + } + if ($subFilter !== '') { + //Get the first defined table in Criteria. + $aCurrentTables = $this->criteria->getTables(); + if (isset( $aCurrentTables[0] )) { + $this->criteria->add( $aCurrentTables[0] . ".*", '(' . $subFilter . ')', Criteria::CUSTOM ); + } + } } - } + + //Merge sort array defined by USER with the array defined by SQL + parse_str( $this->order, $orderFields ); + parse_str( $this->orderBy, $orderFields2 ); + //User sort is more important (first in merge). + $orderFields3 = array_merge( $orderFields2, $orderFields ); + //User sort is overwrites XMLs definition. + $orderFields = array_merge( $orderFields3, $orderFields2 ); + //Order (BY SQL DEFINITION AND USER'S DEFINITION) + $this->aOrder = array (); + $order = ''; + foreach ($orderFields as $field => $fieldOrder) { + $field = G::getUIDName( $field, '' ); + $fieldOrder = strtoupper( $fieldOrder ); + if ($fieldOrder === 'A') + $fieldOrder = 'ASC'; + if ($fieldOrder === 'D') + $fieldOrder = 'DESC'; + switch ($fieldOrder) { + case 'ASC': + case 'DESC': + if ($order !== '') + $order .= ', '; + $order .= $field . ' ' . $fieldOrder; + $this->aOrder[$field] = $fieldOrder; + } + } + //master detail :O + if (count( $this->masterdetail ) > 0) { + $this->criteria->clearOrderByColumns(); + foreach ($this->masterdetail as $idMasterDetail => $fieldMasterDetail) { + $this->criteria->addAscendingOrderByColumn( $fieldMasterDetail ); + } + } + if (! empty( $this->aOrder )) { + if (count( $this->masterdetail ) <= 0) { + $this->criteria->clearOrderByColumns(); + } + foreach ($this->aOrder as $field => $ascending) { + if ($ascending == 'ASC') + $this->criteria->addAscendingOrderByColumn( $field ); + else + $this->criteria->addDescendingOrderByColumn( $field ); + } + } + /** + * Add limits + */ + $this->criteria->setLimit( 0 ); + $this->criteria->setOffset( 0 ); + if ($this->criteria->getDbName() == 'dbarray') { + $this->totRows = ArrayBasePeer::doCount( $this->criteria ); + } else { + $this->totRows = GulliverBasePeer::doCount( $this->criteria ); + } + $this->totPages = ceil( $this->totRows / $this->rowsPerPage ); + if ($limitPage) { + $this->criteria->setLimit( $this->rowsPerPage ); + $this->criteria->setOffset( ($this->currentPage - 1) * $this->rowsPerPage ); + } + return; } - //Merge sort array defined by USER with the array defined by SQL - parse_str($this->order, $orderFields); - parse_str($this->orderBy, $orderFields2); - //User sort is more important (first in merge). - $orderFields3 = array_merge($orderFields2, $orderFields); - //User sort is overwrites XMLs definition. - $orderFields = array_merge($orderFields3, $orderFields2); - //Order (BY SQL DEFINITION AND USER'S DEFINITION) - $this->aOrder = array(); - $order=''; - foreach ($orderFields as $field => $fieldOrder) { - $field = G::getUIDName($field,''); - $fieldOrder = strtoupper($fieldOrder); - if ($fieldOrder==='A') - $fieldOrder = 'ASC'; - if ($fieldOrder==='D') - $fieldOrder = 'DESC'; - switch ( $fieldOrder ) { - case 'ASC': - case 'DESC': - if ( $order !== '' ) - $order.=', '; - $order .= $field . ' '. $fieldOrder; - $this->aOrder[$field] = $fieldOrder; - } - } - //master detail :O - if(count($this->masterdetail) > 0){ - $this->criteria->clearOrderByColumns(); - foreach($this->masterdetail as $idMasterDetail => $fieldMasterDetail){ - $this->criteria->addAscendingOrderByColumn( $fieldMasterDetail ); - } - } - if (!empty($this->aOrder)) { - if(count($this->masterdetail) <= 0) { - $this->criteria->clearOrderByColumns(); - } - foreach ($this->aOrder as $field => $ascending ) { - if ( $ascending == 'ASC' ) - $this->criteria->addAscendingOrderByColumn ( $field ); + /** + * Function setupFromXmlform + * + * @author David S. Callizaya S. + * editedby Hugo Loza + * @access public + * @param eter string xmlForm + * @return string + */ + function setupFromXmlform ($xmlForm) + { + $this->xmlForm = $xmlForm; + //Config + $this->name = $xmlForm->name; + $this->id = $xmlForm->id; + //$this->sqlConnection=((isset($this->xmlForm->sqlConnection))?$this->xmlForm->sqlConnection:''); + if (isset( $_GET['page'] )) + $this->currentPage = $_GET['page']; else - $this->criteria->addDescendingOrderByColumn( $field ); - } - } - /** Add limits */ - $this->criteria->setLimit( 0 ); - $this->criteria->setOffset( 0 ); - if ( $this->criteria->getDbName() == 'dbarray' ) { - $this->totRows = ArrayBasePeer::doCount( $this->criteria ); - } - else { - $this->totRows = GulliverBasePeer::doCount( $this->criteria ); - } - $this->totPages = ceil( $this->totRows / $this->rowsPerPage); - if ( $limitPage ) { - $this->criteria->setLimit ( $this->rowsPerPage ); - $this->criteria->setOffset( ($this->currentPage-1) * $this->rowsPerPage ); - } - return; - } - - /** - * Function setupFromXmlform - * - * @author David S. Callizaya S. - * editedby Hugo Loza - * @access public - * @parameter string xmlForm - * @return string - */ - function setupFromXmlform($xmlForm) - { - $this->xmlForm = $xmlForm; - //Config - $this->name = $xmlForm->name; - $this->id = $xmlForm->id; - //$this->sqlConnection=((isset($this->xmlForm->sqlConnection))?$this->xmlForm->sqlConnection:''); - if ( isset($_GET['page'])) - $this->currentPage = $_GET['page']; else $this->currentPage = 1; - if ( isset($_GET['order'])) - $this->orderBy = urldecode($_GET['order']); else $this->orderBy = ""; - if ( isset($_GET['filter'])) - $this->filter = urldecode($_GET['filter']); else $this->filter = ""; - if ($xmlForm->ajaxServer != '') { - $this->ajaxServer = G::encryptLink( $xmlForm->ajaxServer ); - } - else { - $this->ajaxServer = G::encryptLink( '../gulliver/propelTableAjax' ); - } - $this->ownerPage = G::encryptLink( SYS_CURRENT_URI ); - // Config attributes from XMLFORM file - $myAttributes = get_class_vars(get_class($this)); - foreach ($this->xmlForm->xmlform->tree->attribute as $atrib => $value) - if (array_key_exists( $atrib, $myAttributes)) { - eval('settype($value, gettype($this->' . $atrib.'));'); - if ($value !== '') - eval( '$this->' . $atrib . '=$value;'); - } - if($this->masterdetail!=""){ - $this->masterdetail=explode(",",$this->masterdetail); - foreach($this->masterdetail as $keyMasterDetail => $valueMasterDetail){ - $this->masterdetail[$keyMasterDetail]=trim($valueMasterDetail); - } - } - else{ - $this->masterdetail=array(); - } - //Prepare the fields - $this->style=array();$this->gridWidth="";$this->gridFields=""; - $this->fieldsType=array(); - foreach ($this->xmlForm->fields as $f => $v) { - $r=$f; - $this->fields[$r]['Name'] =$this->xmlForm->fields[$f]->name; - $this->fields[$r]['Type'] =$this->xmlForm->fields[$f]->type; - if (isset($this->xmlForm->fields[$f]->size)) - $this->fields[$r]['Size'] = $this->xmlForm->fields[$f]->size; - $this->fields[$r]['Label']=$this->xmlForm->fields[$f]->label; - } - //Set the default settings - $this->defaultStyle(); - //continue with the setup - $this->gridWidth=''; $this->gridFields=''; - foreach($this->xmlForm->fields as $f => $v){ - $r=$f; - //Parse the column properties - foreach ($this->xmlForm->fields[$f] as $attribute => $value){ - if (!is_object($value)) { - $this->style[$r][$attribute] = $value; + $this->currentPage = 1; + if (isset( $_GET['order'] )) + $this->orderBy = urldecode( $_GET['order'] ); + else + $this->orderBy = ""; + if (isset( $_GET['filter'] )) + $this->filter = urldecode( $_GET['filter'] ); + else + $this->filter = ""; + if ($xmlForm->ajaxServer != '') { + $this->ajaxServer = G::encryptLink( $xmlForm->ajaxServer ); + } else { + $this->ajaxServer = G::encryptLink( '../gulliver/propelTableAjax' ); } - } - //Needed for javascript - //only the visible columns's width and name are stored - if ($this->style[$r]['showInTable']!='0'){ - $this->gridWidth.=','.$this->style[$r]['colWidth']; - $this->gridFields.=',"form['.$this->fields[$r]['Name'].']"'; - } + $this->ownerPage = G::encryptLink( SYS_CURRENT_URI ); + // Config attributes from XMLFORM file + $myAttributes = get_class_vars( get_class( $this ) ); + foreach ($this->xmlForm->xmlform->tree->attribute as $atrib => $value) + if (array_key_exists( $atrib, $myAttributes )) { + eval( 'settype($value, gettype($this->' . $atrib . '));' ); + if ($value !== '') + eval( '$this->' . $atrib . '=$value;' ); + } + if ($this->masterdetail != "") { + $this->masterdetail = explode( ",", $this->masterdetail ); + foreach ($this->masterdetail as $keyMasterDetail => $valueMasterDetail) { + $this->masterdetail[$keyMasterDetail] = trim( $valueMasterDetail ); + } + } else { + $this->masterdetail = array (); + } + //Prepare the fields + $this->style = array (); + $this->gridWidth = ""; + $this->gridFields = ""; + $this->fieldsType = array (); + foreach ($this->xmlForm->fields as $f => $v) { + $r = $f; + $this->fields[$r]['Name'] = $this->xmlForm->fields[$f]->name; + $this->fields[$r]['Type'] = $this->xmlForm->fields[$f]->type; + if (isset( $this->xmlForm->fields[$f]->size )) + $this->fields[$r]['Size'] = $this->xmlForm->fields[$f]->size; + $this->fields[$r]['Label'] = $this->xmlForm->fields[$f]->label; + } + //Set the default settings + $this->defaultStyle(); + //continue with the setup + $this->gridWidth = ''; + $this->gridFields = ''; + foreach ($this->xmlForm->fields as $f => $v) { + $r = $f; + //Parse the column properties + foreach ($this->xmlForm->fields[$f] as $attribute => $value) { + if (! is_object( $value )) { + $this->style[$r][$attribute] = $value; + } + } + //Needed for javascript + //only the visible columns's width and name are stored + if ($this->style[$r]['showInTable'] != '0') { + $this->gridWidth .= ',' . $this->style[$r]['colWidth']; + $this->gridFields .= ',"form[' . $this->fields[$r]['Name'] . ']"'; + } + } + $totalWidth = 0; + foreach ($this->fields as $r => $rval) + if ($this->style[$r]['showInTable'] != '0') + $totalWidth += $this->style[$r]['colWidth']; + $this->totalWidth = $totalWidth; } - $totalWidth=0; - foreach($this->fields as $r => $rval) - if ($this->style[$r]['showInTable']!='0') - $totalWidth += $this->style[$r]['colWidth']; - $this->totalWidth = $totalWidth; - } - - /** - * Function count - * @author David S. Callizaya S. - * @access public - * @return string - */ - function count() - { - $this->prepareQuery(); - return $this->totRows; - } - - /** - * Function renderTitle - * @author David S. Callizaya S. - * @access public - * @return string - */ - function renderTitle() - { - //fix the bug about showing hidden fields in propel table. - foreach($this->fields as $r => $rval) { - if ( $this->style[$r]['type'] == 'hidden') $this->style[$r]['showInTable'] = '0'; + + /** + * Function count + * + * @author David S. Callizaya S. + * @access public + * @return string + */ + function count () + { + $this->prepareQuery(); + return $this->totRows; } - //Render headers - $this->colCount=0; - $this->shownFields='['; - foreach($this->fields as $r => $rval) - if (($this->style[$r]['showInTable'] != '0' )&&(!(in_array($this->fields[$r]['Name'],$this->masterdetail)))){ - //if (($this->style[$r]['showInTable'] != '0' )) - $this->tpl->newBlock( "headers" ); - $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='ASC'))?'DESC':'ASC'); - $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='DESC'))?'':$sortOrder); - $this->style[$r]['href'] = $this->ownerPage . '?order=' . - ( $sortOrder !=='' ? ( G::createUID('',$this->fields[$r]['Name'] ) . '=' . $sortOrder):'') - . '&page=' . $this->currentPage; - $this->style[$r]['onsort'] = $this->id . '.doSort("'.G::createUID('',$this->fields[$r]['Name']).'" , "' . $sortOrder.'");return false;'; - if (isset($this->style[$r]['href'])) - $this->tpl->assign( "href" , $this->style[$r]['href']); - if (isset($this->style[$r]['onsort'])) - $this->tpl->assign( "onsort" , htmlentities( $this->style[$r]['onsort'] , ENT_QUOTES, 'UTF-8' ) ); - - /* BUG 8080 - erik: don't setup onclick on page table header, doesn't have sense and causing problems - if (isset($this->style[$r]['onclick'])) + + /** + * Function renderTitle + * + * @author David S. Callizaya S. + * @access public + * @return string + */ + function renderTitle () + { + //fix the bug about showing hidden fields in propel table. + foreach ($this->fields as $r => $rval) { + if ($this->style[$r]['type'] == 'hidden') + $this->style[$r]['showInTable'] = '0'; + } + //Render headers + $this->colCount = 0; + $this->shownFields = '['; + foreach ($this->fields as $r => $rval) + if (($this->style[$r]['showInTable'] != '0') && (! (in_array( $this->fields[$r]['Name'], $this->masterdetail )))) { + //if (($this->style[$r]['showInTable'] != '0' )) + $this->tpl->newBlock( "headers" ); + $sortOrder = (((isset( $this->aOrder[$this->fields[$r]['Name']] )) && ($this->aOrder[$this->fields[$r]['Name']] === 'ASC')) ? 'DESC' : 'ASC'); + $sortOrder = (((isset( $this->aOrder[$this->fields[$r]['Name']] )) && ($this->aOrder[$this->fields[$r]['Name']] === 'DESC')) ? '' : $sortOrder); + $this->style[$r]['href'] = $this->ownerPage . '?order=' . ($sortOrder !== '' ? (G::createUID( '', $this->fields[$r]['Name'] ) . '=' . $sortOrder) : '') . '&page=' . $this->currentPage; + $this->style[$r]['onsort'] = $this->id . '.doSort("' . G::createUID( '', $this->fields[$r]['Name'] ) . '" , "' . $sortOrder . '");return false;'; + if (isset( $this->style[$r]['href'] )) + $this->tpl->assign( "href", $this->style[$r]['href'] ); + if (isset( $this->style[$r]['onsort'] )) + $this->tpl->assign( "onsort", htmlentities( $this->style[$r]['onsort'], ENT_QUOTES, 'UTF-8' ) ); + + /* BUG 8080 - erik: don't setup onclick on page table header, doesn't have sense and causing problems + if (isset($this->style[$r]['onclick'])) $this->tpl->assign( "onclick" , htmlentities( $this->style[$r]['onclick'] , ENT_QUOTES, 'UTF-8' ) ); */ - - if (isset($this->style[$r]['colWidth'])) - $this->tpl->assign( "width" , $this->style[$r]['colWidth'] ); - if (isset($this->style[$r]['colWidth'])) - $this->tpl->assign( "widthPercent" , ($this->style[$r]['colWidth']*100 / $this->totalWidth) . "%" ); - //Hook for special skin with RTL languajes - if( defined('SYS_LANG_DIRECTION') && SYS_LANG_DIRECTION == 'R') { - $this->style[$r]['titleAlign'] = 'right'; - } - if (isset($this->style[$r]['titleAlign'])) - $this->tpl->assign( "align" , 'text-align:'.$this->style[$r]['titleAlign'].';'); - if ($this->style[$r]['titleVisibility']!='0') { - $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='ASC'))?'':''); - $sortOrder = (((isset($this->aOrder[$this->fields[$r]['Name']])) && ($this->aOrder[$this->fields[$r]['Name']]==='DESC'))?'':$sortOrder); - $this->tpl->assign( "header" , $this->fields[$r]['Label'] . $sortOrder ); - $this->tpl->assign('displaySeparator', - (($this->colCount==0)||(!isset($this->fields[$r]['Label']))||($this->fields[$r]['Label']===''))?'display:none;':''); - } else { - $this->tpl->assign('displaySeparator','display:none;'); - } - $this->colCount+=2; - $this->shownFields.=($this->shownFields!=='[')?',':''; - $this->shownFields.='"'.$r.'"'; - } - $this->shownFields.=']'; - } - /** - * Function renderField - * @author David S. Callizaya S. - * @access public - * @parameter string row - * @parameter string r - * @parameter string result - * @return string - */ - function renderField( $row, $r, $result) - { - global $G_DATE_FORMAT; - //to do: special content?? - //$result['row__'] = $row; //Special content: - $styleData = $this->style[$r]; - $fielDataName = $styleData['data']; - $fieldClassName = isset( $styleData['colClassName']) && ($styleData['colClassName']) ? $styleData['colClassName'] : $this->tdClass; - if ( $fielDataName != '' ) - $value = ((isset($result[ $fielDataName ])) ? $result[ $fielDataName ] : '' ); - else - $value = $this->fields[$r]['Label']; - $this->tpl->newBlock( "field" ); - $this->tpl->assign('width', $this->style[$r]['colWidth']); - $classAttr = ( trim($fieldClassName) != '' ) ? " class=\"$fieldClassName\"" : ''; - $this->tpl->assign('classAttr', $classAttr ); - //to do: style is needed or not? - //$this->tpl->assign('style', $this->tdStyle); - $alignAttr = ( isset($this->style[$r]['align']) && strlen($this->style[$r]['align']>0) ) ? " align=\"" . $this->style[$r]['align'] . "\"" : ''; - $this->tpl->assign( "alignAttr" , $alignAttr); - $fieldName = $this->fields[$r]['Name']; - $fieldClass = get_class( $this->xmlForm->fields[ $fieldName ] ); - /*** BEGIN : Reeplace of @@, @%,... in field's attributes like onclick, link, */ - if (isset($this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link)) { - $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->link - = G::replaceDataField($this->style[$r]['link'],$result); - } - if (isset($this->xmlForm->fields[ $fieldName ]->value)) { - $this->xmlForm->fields[ $fieldName ]->value = G::replaceDataField($styleData['value'],$result); - } - /*** END : Reeplace of @@, @%,... */ - /*** Rendering of the field */ - $this->xmlForm->fields[ $fieldName ]->mode = 'view'; - $this->xmlForm->setDefaultValues(); - $this->xmlForm->setValues( $result ); - //var_dump($fieldName, $fieldClass );echo '

'; - if ( array_search( 'renderTable', get_class_methods( $fieldClass ) )!== FALSE ) { - $htmlField = $this->xmlForm->fields[ $fieldName ]->renderTable( $value, $this->xmlForm, true ); - if(is_object($value)){ - $value = ''; - } - // checking if the value variable is a html field, a html tag content can't contain   as white spaces - $testValue = preg_match( "/(.*)<\/a>/i", $htmlField, $value); - $this->tpl->assign( "value" , $htmlField ); - if ($testValue>0 && (isset($value[1]) && strlen(trim($value[1])) == 0 )) { - if ((trim($value[0])) == '') - $this->tpl->assign( "value" , " " ); - // $this->tpl->assign( "value" , (preg_match('^[[:space:]]^', $value) && (substr($fieldName,0,3)!="PRO"))? str_ireplace(" "," ",$htmlField):$htmlField ); - } else { - $this->tpl->assign( "value" , $htmlField ); - } - - /* $testValue = preg_match( "/<\/?\w+((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/i", $value, $matches ); */ -// if (empty($matches)){ -// $this->tpl->assign( "value" , (preg_match('^[[:space:]]^', $value) && (substr($fieldName,0,3)!="PRO"))? str_ireplace(" "," ",$htmlField):$htmlField ); -// } else { -// $this->tpl->assign( "value" , $htmlField ); -// } - } - return $this->fields[$r]['Type']; - } - - /** - * Function defaultStyle - * @author David S. Callizaya S. - * @access public - * @return string - */ - function defaultStyle() - { - foreach($this->fields as $r => $rval) { - $this->style[$r]=array( 'showInTable' => '1', - 'titleVisibility' => '1', - 'colWidth' => '150', - 'onclick' => '', - 'event' => '' ); - //Some widths - if (!(strpos(' date linknew ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) - $this->style[$r]['colWidth']='70'; - //Data source: - if (!(strpos(' title button linknew image-text jslink ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) - $this->style[$r]['data']=''; //If the control is a link it shows the label - else - $this->style[$r]['data']=$this->fields[$r]['Name']; //ELSE: The data value for that field - //Hidden fields - if (!isset($this->style[$r]['showInTable'])) { - if (!(strpos(' title button endgrid2 submit password ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)){ - $this->style[$r]['showInTable']='0'; - } - else{ - $this->style[$r]['showInTable']='1'; - } - } - //Hidden titles - if (!(strpos(' linknew button endgrid2 ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) { - $this->style[$r]['titleVisibility']='0'; - } - //Align titles - $this->style[$r]['titleAlign']='center'; - //Align fields - if (defined('SYS_LANG_DIRECTION') && SYS_LANG_DIRECTION == 'R') - $this->style[$r]['align']='right'; - else - $this->style[$r]['align']='left'; - if (!(strpos(' linknew date ', ' ' . $this->fields[$r]['Type']. ' ')===FALSE)) { - $this->style[$r]['align']='center'; - } - } - // Adjust the columns width to prevent overflow the page width - //Render headers - $totalWidth=0; - foreach($this->fields as $r => $rval) - if ($this->style[$r]['showInTable']!='0') - $totalWidth += $this->style[$r]['colWidth']; - $this->totalWidth = $totalWidth; - $maxWidth=1800; - $proportion=$totalWidth/$maxWidth; - if ($proportion>1) - $this->totalWidth = 1800; - if ($proportion>1) - foreach($this->fields as $r => $rval) - if ($this->style[$r]['showInTable']!='0') - $this->style[$r]['colWidth']=$this->style[$r]['colWidth']/$proportion; - } - - /** - * Function renderTable - * @author David S. Callizaya S. - * @parameter $block : = 'content'(Prints contentBlock only) - * @access public - * @return string - */ - function renderTable( $block = '', $fields = '' ) - { - //Render Title - $thereisnotitle=true; - foreach($this->fields as $r => $rval) - if ($this->fields[$r]['Type']==='title'){ - $this->title = $this->fields[$r]['Label']; - unset($this->fields[$r]); - $thereisnotitle=false; - } - if ($thereisnotitle){ - $this->title = ''; - } - $oHeadPublisher =& headPublisher::getSingleton(); - $oHeadPublisher->addInstanceModule('leimnud', 'panel'); - $time_start = microtime(true); - $this->prepareQuery( true ); - $time_end = microtime(true); $time = $time_end - $time_start; - // verify if there are templates folders registered, template and method folders are the same - $folderTemplate = explode ( '/',$this->template ); - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - if ( $oPluginRegistry->isRegisteredFolder( $folderTemplate[0] ) ) - $templateFile = PATH_PLUGINS . $this->template. '.html'; - else - $templateFile = PATH_TPL . $this->template. '.html'; - // Prepare the template - $this->tpl = new TemplatePower( $templateFile ); - $this->tpl->prepare(); - if(is_array($fields)) { - foreach ( $fields as $key =>$val ) { - $this->tpl->assignGlobal( $key , $val ); //Changed to Global by JHL on Dec 14,2009.. then thes fields are available for all Blocks - } - } - /********** HEAD BLOCK ***************/ - if (($block ==='') || ($block==='head')) { - $this->tpl->newBlock('headBlock'); - $this->tpl->assign( 'pagedTable_Id' , $this->id ); - $this->tpl->assign( 'pagedTable_Name' , $this->name ); - $this->tpl->assign( 'pagedTable_Height' , $this->xmlForm->height ); - $this->tpl->assign( "title", $this->title); - if (file_exists($this->xmlForm->home . $this->filterForm . '.xml')) { - $filterForm = new filterForm( $this->filterForm , $this->xmlForm->home ); - if ($this->menu==='') - $this->menu= 'gulliver/pagedTable_Options'; - } - if (file_exists($this->xmlForm->home . $this->menu . '.xml')) { - $menu = new xmlMenu( $this->menu , $this->xmlForm->home ); - $this->tpl->newBlock('headerBlock'); - $template = PATH_CORE . 'templates' . PATH_SEP . $menu->type . '.html'; - $menu->setValues($this->xmlForm->values); - $menu->setValues(array( 'PAGED_TABLE_ID' => $this->id )); - if (isset($filterForm->name)) { - $menu->setValues(array('SEARCH_FILTER_FORM' => $filterForm->name)); - } - $this->tpl->assign( 'content' , $menu->render( $template , $scriptCode ) ); - $oHeadPublisher->addScriptFile( $menu->scriptURL ); - $oHeadPublisher->addScriptCode( $scriptCode ); - } - if (file_exists($this->xmlForm->home . $this->filterForm . '.xml')) { - $this->tpl->newBlock('headerBlock'); - $this->filterForm_Id = $filterForm->id; - $filterForm->type = 'filterform'; - $filterForm->ajaxServer = '../gulliver/defaultAjax'; - $template = PATH_CORE . 'templates/' . $filterForm->type . '.html'; - $filterForm->setValues($this->xmlForm->values); - $filterForm->setValues(array('PAGED_TABLE_ID' => $this->id )); - $filterForm->setValues(array( 'PAGED_TABLE_FAST_SEARCH' => $this->fastSearch )); - $this->tpl->assign( 'content' , $filterForm->render( $template , $scriptCode ) ); - $oHeadPublisher->addScriptFile( $filterForm->scriptURL ); - $oHeadPublisher->addScriptCode( $scriptCode ); - if (isset($_SESSION)) - $_SESSION[$filterForm->id]=$filterForm->values; - } - + if (isset( $this->style[$r]['colWidth'] )) + $this->tpl->assign( "width", $this->style[$r]['colWidth'] ); + if (isset( $this->style[$r]['colWidth'] )) + $this->tpl->assign( "widthPercent", ($this->style[$r]['colWidth'] * 100 / $this->totalWidth) . "%" ); + //Hook for special skin with RTL languajes + if (defined( 'SYS_LANG_DIRECTION' ) && SYS_LANG_DIRECTION == 'R') { + $this->style[$r]['titleAlign'] = 'right'; + } + if (isset( $this->style[$r]['titleAlign'] )) + $this->tpl->assign( "align", 'text-align:' . $this->style[$r]['titleAlign'] . ';' ); + if ($this->style[$r]['titleVisibility'] != '0') { + $sortOrder = (((isset( $this->aOrder[$this->fields[$r]['Name']] )) && ($this->aOrder[$this->fields[$r]['Name']] === 'ASC')) ? '' : ''); + $sortOrder = (((isset( $this->aOrder[$this->fields[$r]['Name']] )) && ($this->aOrder[$this->fields[$r]['Name']] === 'DESC')) ? '' : $sortOrder); + $this->tpl->assign( "header", $this->fields[$r]['Label'] . $sortOrder ); + $this->tpl->assign( 'displaySeparator', (($this->colCount == 0) || (! isset( $this->fields[$r]['Label'] )) || ($this->fields[$r]['Label'] === '')) ? 'display:none;' : '' ); + } else { + $this->tpl->assign( 'displaySeparator', 'display:none;' ); + } + $this->colCount += 2; + $this->shownFields .= ($this->shownFields !== '[') ? ',' : ''; + $this->shownFields .= '"' . $r . '"'; + } + $this->shownFields .= ']'; } - /********** CONTENT BLOCK ***************/ - if (($block ==='') || ($block==='content')) { - $this->tpl->newBlock('contentBlock'); - $this->tpl->assign('gridWidth','=['. substr($this->gridWidth,1) .']'); - $this->tpl->assign('fieldNames','=['. substr($this->gridFields,1) .']'); - $this->tpl->assign('ajaxUri','="'. addslashes($this->ajaxServer) . '"'); - $this->tpl->assign('currentUri','="'. addslashes($this->ownerPage) . '"'); - $this->tpl->assign('currentOrder','="'. addslashes($this->orderBy) . '"'); - $this->tpl->assign('currentPage','='. $this->currentPage ); - $this->tpl->assign('currentFilter','="' . '"'); - $this->tpl->assign('totalRows','=' . $this->totRows ); - $this->tpl->assign('rowsPerPage','='.$this->rowsPerPage); - $this->tpl->assign('popupPage','="'. addslashes($this->popupPage) . '"'); - $this->tpl->assign('popupWidth','='.$this->popupWidth); - $this->tpl->assign('popupHeight','='.$this->popupHeight); - $this->tpl->assign('pagedTable_Id', $this->id ); - $this->tpl->assign('pagedTable_Name', $this->name ); - $this->tpl->assign("pagedTable_JS" , "{$this->id}.element=document.getElementById('pagedtable[{$this->id}]');"); - $this->renderTitle(); - //Render rows - if ( $this->criteria->getDbName() == 'dbarray' ) { - $rs = ArrayBasePeer::doSelectRs ( $this->criteria); - } - else { - $rs = GulliverBasePeer::doSelectRs ( $this->criteria); - } - $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); - /* + /** + * Function renderField + * + * @author David S. Callizaya S. + * @access public + * @param eter string row + * @param eter string r + * @param eter string result + * @return string + */ + function renderField ($row, $r, $result) + { + global $G_DATE_FORMAT; + //to do: special content?? + //$result['row__'] = $row; //Special content: + $styleData = $this->style[$r]; + $fielDataName = $styleData['data']; + $fieldClassName = isset( $styleData['colClassName'] ) && ($styleData['colClassName']) ? $styleData['colClassName'] : $this->tdClass; + if ($fielDataName != '') + $value = ((isset( $result[$fielDataName] )) ? $result[$fielDataName] : ''); + else + $value = $this->fields[$r]['Label']; + $this->tpl->newBlock( "field" ); + $this->tpl->assign( 'width', $this->style[$r]['colWidth'] ); + $classAttr = (trim( $fieldClassName ) != '') ? " class=\"$fieldClassName\"" : ''; + $this->tpl->assign( 'classAttr', $classAttr ); + //to do: style is needed or not? + //$this->tpl->assign('style', $this->tdStyle); + $alignAttr = (isset( $this->style[$r]['align'] ) && strlen( $this->style[$r]['align'] > 0 )) ? " align=\"" . $this->style[$r]['align'] . "\"" : ''; + $this->tpl->assign( "alignAttr", $alignAttr ); + $fieldName = $this->fields[$r]['Name']; + $fieldClass = get_class( $this->xmlForm->fields[$fieldName] ); + /** + * * BEGIN : Reeplace of @@, @%,... + * in field's attributes like onclick, link, + */ + if (isset( $this->xmlForm->fields[$this->fields[$r]['Name']]->link )) { + $this->xmlForm->fields[$this->fields[$r]['Name']]->link = G::replaceDataField( $this->style[$r]['link'], $result ); + } + if (isset( $this->xmlForm->fields[$fieldName]->value )) { + $this->xmlForm->fields[$fieldName]->value = G::replaceDataField( $styleData['value'], $result ); + } + /** + * * END : Reeplace of @@, @%,... + */ + /** + * * Rendering of the field + */ + $this->xmlForm->fields[$fieldName]->mode = 'view'; + $this->xmlForm->setDefaultValues(); + $this->xmlForm->setValues( $result ); + //var_dump($fieldName, $fieldClass );echo '

'; + if (array_search( 'renderTable', get_class_methods( $fieldClass ) ) !== FALSE) { + $htmlField = $this->xmlForm->fields[$fieldName]->renderTable( $value, $this->xmlForm, true ); + if (is_object( $value )) { + $value = ''; + } + // checking if the value variable is a html field, a html tag content can't contain   as white spaces + $testValue = preg_match( "/
(.*)<\/a>/i", $htmlField, $value ); + $this->tpl->assign( "value", $htmlField ); + if ($testValue > 0 && (isset( $value[1] ) && strlen( trim( $value[1] ) ) == 0)) { + if ((trim( $value[0] )) == '') + $this->tpl->assign( "value", " " ); + // $this->tpl->assign( "value" , (preg_match('^[[:space:]]^', $value) && (substr($fieldName,0,3)!="PRO"))? str_ireplace(" "," ",$htmlField):$htmlField ); + } else { + $this->tpl->assign( "value", $htmlField ); + } + + /* $testValue = preg_match( "/<\/?\w+((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/i", $value, $matches ); */ + // if (empty($matches)){ + // $this->tpl->assign( "value" , (preg_match('^[[:space:]]^', $value) && (substr($fieldName,0,3)!="PRO"))? str_ireplace(" "," ",$htmlField):$htmlField ); + // } else { + // $this->tpl->assign( "value" , $htmlField ); + // } + } + return $this->fields[$r]['Type']; + } + + /** + * Function defaultStyle + * + * @author David S. Callizaya S. + * @access public + * @return string + */ + function defaultStyle () + { + foreach ($this->fields as $r => $rval) { + $this->style[$r] = array ('showInTable' => '1','titleVisibility' => '1','colWidth' => '150','onclick' => '','event' => '' + ); + //Some widths + if (! (strpos( ' date linknew ', ' ' . $this->fields[$r]['Type'] . ' ' ) === FALSE)) + $this->style[$r]['colWidth'] = '70'; + //Data source: + if (! (strpos( ' title button linknew image-text jslink ', ' ' . $this->fields[$r]['Type'] . ' ' ) === FALSE)) + $this->style[$r]['data'] = ''; //If the control is a link it shows the label + else + $this->style[$r]['data'] = $this->fields[$r]['Name']; //ELSE: The data value for that field + //Hidden fields + if (! isset( $this->style[$r]['showInTable'] )) { + if (! (strpos( ' title button endgrid2 submit password ', ' ' . $this->fields[$r]['Type'] . ' ' ) === FALSE)) { + $this->style[$r]['showInTable'] = '0'; + } else { + $this->style[$r]['showInTable'] = '1'; + } + } + //Hidden titles + if (! (strpos( ' linknew button endgrid2 ', ' ' . $this->fields[$r]['Type'] . ' ' ) === FALSE)) { + $this->style[$r]['titleVisibility'] = '0'; + } + //Align titles + $this->style[$r]['titleAlign'] = 'center'; + //Align fields + if (defined( 'SYS_LANG_DIRECTION' ) && SYS_LANG_DIRECTION == 'R') + $this->style[$r]['align'] = 'right'; + else + $this->style[$r]['align'] = 'left'; + if (! (strpos( ' linknew date ', ' ' . $this->fields[$r]['Type'] . ' ' ) === FALSE)) { + $this->style[$r]['align'] = 'center'; + } + } + // Adjust the columns width to prevent overflow the page width + //Render headers + $totalWidth = 0; + foreach ($this->fields as $r => $rval) + if ($this->style[$r]['showInTable'] != '0') + $totalWidth += $this->style[$r]['colWidth']; + $this->totalWidth = $totalWidth; + $maxWidth = 1800; + $proportion = $totalWidth / $maxWidth; + if ($proportion > 1) + $this->totalWidth = 1800; + if ($proportion > 1) + foreach ($this->fields as $r => $rval) + if ($this->style[$r]['showInTable'] != '0') + $this->style[$r]['colWidth'] = $this->style[$r]['colWidth'] / $proportion; + } + + /** + * Function renderTable + * + * @author David S. Callizaya S. + * @param eter $block : = 'content'(Prints contentBlock only) + * @access public + * @return string + */ + function renderTable ($block = '', $fields = '') + { + //Render Title + $thereisnotitle = true; + foreach ($this->fields as $r => $rval) + if ($this->fields[$r]['Type'] === 'title') { + $this->title = $this->fields[$r]['Label']; + unset( $this->fields[$r] ); + $thereisnotitle = false; + } + if ($thereisnotitle) { + $this->title = ''; + } + $oHeadPublisher = & headPublisher::getSingleton(); + $oHeadPublisher->addInstanceModule( 'leimnud', 'panel' ); + $time_start = microtime( true ); + $this->prepareQuery( true ); + $time_end = microtime( true ); + $time = $time_end - $time_start; + // verify if there are templates folders registered, template and method folders are the same + $folderTemplate = explode( '/', $this->template ); + $oPluginRegistry = & PMPluginRegistry::getSingleton(); + if ($oPluginRegistry->isRegisteredFolder( $folderTemplate[0] )) + $templateFile = PATH_PLUGINS . $this->template . '.html'; + else + $templateFile = PATH_TPL . $this->template . '.html'; + // Prepare the template + $this->tpl = new TemplatePower( $templateFile ); + $this->tpl->prepare(); + if (is_array( $fields )) { + foreach ($fields as $key => $val) { + $this->tpl->assignGlobal( $key, $val ); //Changed to Global by JHL on Dec 14,2009.. then thes fields are available for all Blocks + } + } + /** + * ******** HEAD BLOCK ************** + */ + if (($block === '') || ($block === 'head')) { + $this->tpl->newBlock( 'headBlock' ); + $this->tpl->assign( 'pagedTable_Id', $this->id ); + $this->tpl->assign( 'pagedTable_Name', $this->name ); + $this->tpl->assign( 'pagedTable_Height', $this->xmlForm->height ); + $this->tpl->assign( "title", $this->title ); + if (file_exists( $this->xmlForm->home . $this->filterForm . '.xml' )) { + $filterForm = new filterForm( $this->filterForm, $this->xmlForm->home ); + if ($this->menu === '') + $this->menu = 'gulliver/pagedTable_Options'; + } + if (file_exists( $this->xmlForm->home . $this->menu . '.xml' )) { + $menu = new xmlMenu( $this->menu, $this->xmlForm->home ); + $this->tpl->newBlock( 'headerBlock' ); + $template = PATH_CORE . 'templates' . PATH_SEP . $menu->type . '.html'; + $menu->setValues( $this->xmlForm->values ); + $menu->setValues( array ('PAGED_TABLE_ID' => $this->id + ) ); + if (isset( $filterForm->name )) { + $menu->setValues( array ('SEARCH_FILTER_FORM' => $filterForm->name + ) ); + } + $this->tpl->assign( 'content', $menu->render( $template, $scriptCode ) ); + $oHeadPublisher->addScriptFile( $menu->scriptURL ); + $oHeadPublisher->addScriptCode( $scriptCode ); + } + if (file_exists( $this->xmlForm->home . $this->filterForm . '.xml' )) { + $this->tpl->newBlock( 'headerBlock' ); + $this->filterForm_Id = $filterForm->id; + $filterForm->type = 'filterform'; + $filterForm->ajaxServer = '../gulliver/defaultAjax'; + $template = PATH_CORE . 'templates/' . $filterForm->type . '.html'; + $filterForm->setValues( $this->xmlForm->values ); + $filterForm->setValues( array ('PAGED_TABLE_ID' => $this->id + ) ); + $filterForm->setValues( array ('PAGED_TABLE_FAST_SEARCH' => $this->fastSearch + ) ); + $this->tpl->assign( 'content', $filterForm->render( $template, $scriptCode ) ); + $oHeadPublisher->addScriptFile( $filterForm->scriptURL ); + $oHeadPublisher->addScriptCode( $scriptCode ); + if (isset( $_SESSION )) + $_SESSION[$filterForm->id] = $filterForm->values; + } + + } + + /** + * ******** CONTENT BLOCK ************** + */ + if (($block === '') || ($block === 'content')) { + $this->tpl->newBlock( 'contentBlock' ); + $this->tpl->assign( 'gridWidth', '=[' . substr( $this->gridWidth, 1 ) . ']' ); + $this->tpl->assign( 'fieldNames', '=[' . substr( $this->gridFields, 1 ) . ']' ); + $this->tpl->assign( 'ajaxUri', '="' . addslashes( $this->ajaxServer ) . '"' ); + $this->tpl->assign( 'currentUri', '="' . addslashes( $this->ownerPage ) . '"' ); + $this->tpl->assign( 'currentOrder', '="' . addslashes( $this->orderBy ) . '"' ); + $this->tpl->assign( 'currentPage', '=' . $this->currentPage ); + $this->tpl->assign( 'currentFilter', '="' . '"' ); + $this->tpl->assign( 'totalRows', '=' . $this->totRows ); + $this->tpl->assign( 'rowsPerPage', '=' . $this->rowsPerPage ); + $this->tpl->assign( 'popupPage', '="' . addslashes( $this->popupPage ) . '"' ); + $this->tpl->assign( 'popupWidth', '=' . $this->popupWidth ); + $this->tpl->assign( 'popupHeight', '=' . $this->popupHeight ); + $this->tpl->assign( 'pagedTable_Id', $this->id ); + $this->tpl->assign( 'pagedTable_Name', $this->name ); + $this->tpl->assign( "pagedTable_JS", "{$this->id}.element=document.getElementById('pagedtable[{$this->id}]');" ); + $this->renderTitle(); + //Render rows + if ($this->criteria->getDbName() == 'dbarray') { + $rs = ArrayBasePeer::doSelectRs( $this->criteria ); + } else { + $rs = GulliverBasePeer::doSelectRs( $this->criteria ); + } + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + /* print "
"; $rs->next(); $row = $rs->getRow(); @@ -606,154 +631,153 @@ class propelTable $row = $rs->getRow(); } print "
"; die;*/ - $gridRows=0; - $rs->next(); - //Initialize the array of breakFields for Master Detail View - foreach($this->masterdetail as $keyMasterDetail => $fieldMasterDetail){ - $breakField[$fieldMasterDetail]="novaluehere"; - } - $breakFieldKeys=array_flip($this->masterdetail); - for($j=0;$j< $rs->getRecordCount() ;$j++) { - $result = $rs->getRow(); - $rs->next(); - $gridRows++; - $this->tpl->newBlock( "row" ); - $this->tpl->assign( "class" , "Row".(($j%2)+1)); - $this->tdStyle=''; - $this->tdClass=''; - //Start Master Detail: This enable the MasterDEtail view. By JHL November 2008 - if(count($this->masterdetail)>0){ - //TODO: Validate if there is a Field that doesn't exist - //TODO: Style - //TODO: Improve Collapse function.... - foreach($this->masterdetail as $keyMasterDetail => $fieldMasterDetail){ - if($breakField[$fieldMasterDetail]!=$result[$fieldMasterDetail]){ - $this->tpl->newBlock( "rowMaster" ); - $this->tpl->newBlock( "fieldMaster" ); - $this->tpl->assign( "alignAttr" , " colspan=".(count($this->fields)*2)); - $this->tpl->assign( "value" ,$this->fields[$fieldMasterDetail]['Label']==""?"": $this->fields[$fieldMasterDetail]['Label'].": ".$this->xmlForm->fields[ $fieldMasterDetail ]->renderTable( $result[$fieldMasterDetail], $this->xmlForm, true )); - $breakField[$fieldMasterDetail]=$result[$fieldMasterDetail]; - for($i=$breakFieldKeys[$fieldMasterDetail]+1;$imasterdetail[$i]]="novaluehere"; - } - $rowName=array(); - foreach($breakField as $key => $value){ - if($value!="novaluehere"){ - $rowName[$key]=$key."_".$value; - } - } - $this->tpl->assign( "masterRowName" , implode(",",$rowName)); - $this->tpl->assign( 'pagedTable_Name' , $this->name ); - $many=""; - $this->tpl->assign( "value1" ,str_pad($many, count($rowName)-1 , "-") ); - $this->tpl->gotoblock("rowMaster"); - $this->tpl->assign( "masterRowName" , "_MD_".implode(",",$rowName)); - $this->tpl->assign( "masterRowClass" , $keyMasterDetail==0?"masterDetailMain":"masterDetailOther"); + $gridRows = 0; + $rs->next(); + //Initialize the array of breakFields for Master Detail View + foreach ($this->masterdetail as $keyMasterDetail => $fieldMasterDetail) { + $breakField[$fieldMasterDetail] = "novaluehere"; } - } - $this->tpl->gotoblock("row"); - if ( !isset($rowName) ) $rowName = array(); - $this->tpl->assign( "rowName" , implode(",",$rowName)); - } - //End Master Detail: This enable the MasterDEtail view - //Merge $result with $xmlForm values (for default valuesSettings) - if ( is_array ( $this->xmlForm->values ) ) - $result = array_merge($this->xmlForm->values, $result); - foreach($this->fields as $r => $rval){ - if (strcasecmp($this->fields[$r]['Type'],'cellMark')==0){ - $result1 = $result; - $result1['row__'] = $j+1; - $result1 = array_merge($this->xmlForm->values, $result1); - $this->xmlForm->setDefaultValues(); - $this->xmlForm->setValues( $result1 ); - $this->tdStyle = $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->tdStyle( $result1 , $this->xmlForm ); - $this->tdClass = $this->xmlForm->fields[ $this->fields[$r]['Name'] ]->tdClass( $result1 , $this->xmlForm ); - } - elseif ($this->style[$r]['showInTable'] != '0' ){ - if (($this->style[$r]['showInTable'] != '0' )&&(!(in_array($this->fields[$r]['Name'],$this->masterdetail)))) - $this->renderField($j+1,$r,$result); - } - } - } - $this->tpl->assign('_ROOT.gridRows','='. $gridRows); //number of rows in the current page - $this->tpl->newBlock('rowTag'); - $this->tpl->assign('rowId','insertAtLast'); - if( $this->currentPage > 1 ) { - $firstUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=1'; - $firstAjax = $this->id . ".doGoToPage(1);return false;"; - $prevpage = $this->currentPage - 1; - $prevUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $prevpage; - $prevAjax = $this->id . ".doGoToPage(".$prevpage.");return false;"; - $first = "
     "; - $prev = "     "; - } - else{ - $first = "     "; - $prev = "     "; - } - if( $this->currentPage < $this->totPages ) { - $lastUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $this->totPages; - $lastAjax = $this->id . ".doGoToPage(" .$this->totPages.");return false;"; - $nextpage = $this->currentPage + 1; - $nextUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $nextpage; - $nextAjax = $this->id . ".doGoToPage(" .$nextpage.");return false;"; - $next = "     "; - $last = "     "; - } - else{ - $next = "     "; - $last = "     "; - } - $pagesEnum=''; - for ($r=1;$r<=$this->totPages;$r++) - if (($r>=($this->currentPage-5))&&($r<=($this->currentPage+5))){ - $pageAjax = $this->id . ".doGoToPage(" .$r.");return false;"; - if ($r!=$this->currentPage) - $pagesEnum.=" ownerPage . '?order=' . $this->orderBy . '&page=' . $r , ENT_QUOTES , 'utf-8' ) . "\" onclick=\"".$pageAjax."\">".$r.""; - else - $pagesEnum.=" ".$r.""; - } - if ($this->totRows === 0) { - $this->tpl->newBlock( 'norecords' ); - $this->tpl->assign( "columnCount", $this->colCount); - $noRecordsFound='ID_NO_RECORDS_FOUND'; - if (G::LoadTranslation($noRecordsFound)) $noRecordsFound = G::LoadTranslation($noRecordsFound); - $this->tpl->assign( "noRecordsFound", $noRecordsFound); - } - if (!$this->disableFooter) { - $this->tpl->newBlock( "bottomFooter" ); - $this->tpl->assign( "columnCount", $this->colCount); - $this->tpl->assign( "pagedTableId" , $this->id ); - if (($this->totRows !== 0)) { - if ($this->totPages>1){ - $this->tpl->assign( "first" , $first ); - $this->tpl->assign( "prev" , $prev ); - $this->tpl->assign( "next" , $next ); - $this->tpl->assign( "last" , $last ); - } - $this->tpl->assign( "currentPage" , $this->currentPage ); - $this->tpl->assign( "totalPages" , $this->totPages ); - $firstRow = ($this->currentPage-1) * $this->rowsPerPage+1; - $lastRow = $firstRow+$rs->getRecordCount()-1; - $this->tpl->assign( "firstRow" , $firstRow ); - $this->tpl->assign( "lastRow" , $lastRow ); - $this->tpl->assign( "totalRows" , $this->totRows ); - } else { - $this->tpl->assign( "indexStyle", 'visibility:hidden;'); - } - if ($this->searchBy) { - $this->tpl->assign( "fastSearchValue" , $this->fastSearch ); - } else { - $this->tpl->assign( "fastSearchStyle" , 'visibility:hidden;' ); - } - if ($this->addRow) - if($this->sqlInsert!='') - $this->tpl->assign( "insert" , ''./*G::LoadXml('labels','ID_ADD_NEW')*/ 'ID_ADD_NEW' .'' ); - $this->tpl->assign("pagesEnum", $pagesEnum); - } -?> + $breakFieldKeys = array_flip( $this->masterdetail ); + for ($j = 0; $j < $rs->getRecordCount(); $j ++) { + $result = $rs->getRow(); + $rs->next(); + $gridRows ++; + $this->tpl->newBlock( "row" ); + $this->tpl->assign( "class", "Row" . (($j % 2) + 1) ); + $this->tdStyle = ''; + $this->tdClass = ''; + //Start Master Detail: This enable the MasterDEtail view. By JHL November 2008 + if (count( $this->masterdetail ) > 0) { + //TODO: Validate if there is a Field that doesn't exist + //TODO: Style + //TODO: Improve Collapse function.... + foreach ($this->masterdetail as $keyMasterDetail => $fieldMasterDetail) { + if ($breakField[$fieldMasterDetail] != $result[$fieldMasterDetail]) { + $this->tpl->newBlock( "rowMaster" ); + $this->tpl->newBlock( "fieldMaster" ); + $this->tpl->assign( "alignAttr", " colspan=" . (count( $this->fields ) * 2) ); + $this->tpl->assign( "value", $this->fields[$fieldMasterDetail]['Label'] == "" ? "" : $this->fields[$fieldMasterDetail]['Label'] . ": " . $this->xmlForm->fields[$fieldMasterDetail]->renderTable( $result[$fieldMasterDetail], $this->xmlForm, true ) ); + $breakField[$fieldMasterDetail] = $result[$fieldMasterDetail]; + for ($i = $breakFieldKeys[$fieldMasterDetail] + 1; $i < count( $breakField ); $i ++) { + $breakField[$this->masterdetail[$i]] = "novaluehere"; + } + $rowName = array (); + foreach ($breakField as $key => $value) { + if ($value != "novaluehere") { + $rowName[$key] = $key . "_" . $value; + } + } + $this->tpl->assign( "masterRowName", implode( ",", $rowName ) ); + $this->tpl->assign( 'pagedTable_Name', $this->name ); + $many = ""; + $this->tpl->assign( "value1", str_pad( $many, count( $rowName ) - 1, "-" ) ); + $this->tpl->gotoblock( "rowMaster" ); + $this->tpl->assign( "masterRowName", "_MD_" . implode( ",", $rowName ) ); + $this->tpl->assign( "masterRowClass", $keyMasterDetail == 0 ? "masterDetailMain" : "masterDetailOther" ); + } + } + $this->tpl->gotoblock( "row" ); + if (! isset( $rowName )) + $rowName = array (); + $this->tpl->assign( "rowName", implode( ",", $rowName ) ); + } + //End Master Detail: This enable the MasterDEtail view + //Merge $result with $xmlForm values (for default valuesSettings) + if (is_array( $this->xmlForm->values )) + $result = array_merge( $this->xmlForm->values, $result ); + foreach ($this->fields as $r => $rval) { + if (strcasecmp( $this->fields[$r]['Type'], 'cellMark' ) == 0) { + $result1 = $result; + $result1['row__'] = $j + 1; + $result1 = array_merge( $this->xmlForm->values, $result1 ); + $this->xmlForm->setDefaultValues(); + $this->xmlForm->setValues( $result1 ); + $this->tdStyle = $this->xmlForm->fields[$this->fields[$r]['Name']]->tdStyle( $result1, $this->xmlForm ); + $this->tdClass = $this->xmlForm->fields[$this->fields[$r]['Name']]->tdClass( $result1, $this->xmlForm ); + } elseif ($this->style[$r]['showInTable'] != '0') { + if (($this->style[$r]['showInTable'] != '0') && (! (in_array( $this->fields[$r]['Name'], $this->masterdetail )))) + $this->renderField( $j + 1, $r, $result ); + } + } + } + $this->tpl->assign( '_ROOT.gridRows', '=' . $gridRows ); //number of rows in the current page + $this->tpl->newBlock( 'rowTag' ); + $this->tpl->assign( 'rowId', 'insertAtLast' ); + if ($this->currentPage > 1) { + $firstUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=1'; + $firstAjax = $this->id . ".doGoToPage(1);return false;"; + $prevpage = $this->currentPage - 1; + $prevUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $prevpage; + $prevAjax = $this->id . ".doGoToPage(" . $prevpage . ");return false;"; + $first = "     "; + $prev = "     "; + } else { + $first = "     "; + $prev = "     "; + } + if ($this->currentPage < $this->totPages) { + $lastUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $this->totPages; + $lastAjax = $this->id . ".doGoToPage(" . $this->totPages . ");return false;"; + $nextpage = $this->currentPage + 1; + $nextUrl = $this->ownerPage . '?order=' . $this->orderBy . '&page=' . $nextpage; + $nextAjax = $this->id . ".doGoToPage(" . $nextpage . ");return false;"; + $next = "     "; + $last = "     "; + } else { + $next = "     "; + $last = "     "; + } + $pagesEnum = ''; + for ($r = 1; $r <= $this->totPages; $r ++) + if (($r >= ($this->currentPage - 5)) && ($r <= ($this->currentPage + 5))) { + $pageAjax = $this->id . ".doGoToPage(" . $r . ");return false;"; + if ($r != $this->currentPage) + $pagesEnum .= " ownerPage . '?order=' . $this->orderBy . '&page=' . $r, ENT_QUOTES, 'utf-8' ) . "\" onclick=\"" . $pageAjax . "\">" . $r . ""; + else + $pagesEnum .= " " . $r . ""; + } + if ($this->totRows === 0) { + $this->tpl->newBlock( 'norecords' ); + $this->tpl->assign( "columnCount", $this->colCount ); + $noRecordsFound = 'ID_NO_RECORDS_FOUND'; + if (G::LoadTranslation( $noRecordsFound )) + $noRecordsFound = G::LoadTranslation( $noRecordsFound ); + $this->tpl->assign( "noRecordsFound", $noRecordsFound ); + } + if (! $this->disableFooter) { + $this->tpl->newBlock( "bottomFooter" ); + $this->tpl->assign( "columnCount", $this->colCount ); + $this->tpl->assign( "pagedTableId", $this->id ); + if (($this->totRows !== 0)) { + if ($this->totPages > 1) { + $this->tpl->assign( "first", $first ); + $this->tpl->assign( "prev", $prev ); + $this->tpl->assign( "next", $next ); + $this->tpl->assign( "last", $last ); + } + $this->tpl->assign( "currentPage", $this->currentPage ); + $this->tpl->assign( "totalPages", $this->totPages ); + $firstRow = ($this->currentPage - 1) * $this->rowsPerPage + 1; + $lastRow = $firstRow + $rs->getRecordCount() - 1; + $this->tpl->assign( "firstRow", $firstRow ); + $this->tpl->assign( "lastRow", $lastRow ); + $this->tpl->assign( "totalRows", $this->totRows ); + } else { + $this->tpl->assign( "indexStyle", 'visibility:hidden;' ); + } + if ($this->searchBy) { + $this->tpl->assign( "fastSearchValue", $this->fastSearch ); + } else { + $this->tpl->assign( "fastSearchStyle", 'visibility:hidden;' ); + } + if ($this->addRow) + if ($this->sqlInsert != '') + $this->tpl->assign( "insert", ''./*G::LoadXml('labels','ID_ADD_NEW')*/ 'ID_ADD_NEW' . '' ); + $this->tpl->assign( "pagesEnum", $pagesEnum ); + } + ?> - tpl->newBlock( "closeBlock" ); + } + //By JHL + //Put the content of the table in a variable to be used for other puposes + //Like rendering as PDF + global $_TABLE_CONTENT_; + $_TABLE_CONTENT_ = $this->tpl->getOutputContent(); + $this->tpl->printToScreen(); + unset( $this->tpl ); + //unset($this->dbc); + //unset($this->ses); + $_SESSION['pagedTable[' . $this->id . ']'] = serialize( $this ); + $this->fastSearch = ''; + return; } - /********** CLOSE BLOCK ***************/ - if (($block ==='') || ($block==='close')) { - $this->tpl->newBlock( "closeBlock" ); + + /** + * Function printForm + * + * @param string $filename + * @param array $data + * @return void + */ + function printForm ($filename, $data = array()) + { + global $G_PUBLISH; + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', $filename, '', $data, $this->popupSubmit ); + G::RenderPage( "publish", "blank" ); } - //By JHL - //Put the content of the table in a variable to be used for other puposes - //Like rendering as PDF - global $_TABLE_CONTENT_; - $_TABLE_CONTENT_=$this->tpl->getOutputContent(); - $this->tpl->printToScreen(); - unset($this->tpl); - //unset($this->dbc); - //unset($this->ses); - $_SESSION['pagedTable['.$this->id.']']= serialize($this); - $this->fastSearch = ''; - return; - } - /** - * Function printForm - * @param string $filename - * @param array $data - * @return void - */ - function printForm($filename,$data=array()) - { global $G_PUBLISH; - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent('xmlform', 'xmlform', $filename, '', $data , $this->popupSubmit); - G::RenderPage( "publish" , "blank" ); - } } \ No newline at end of file diff --git a/workflow/engine/classes/class.replacementLogo.php b/workflow/engine/classes/class.replacementLogo.php index ffd1ec036..fae2c5bf0 100755 --- a/workflow/engine/classes/class.replacementLogo.php +++ b/workflow/engine/classes/class.replacementLogo.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ /** + * * @package workflow.engine.classes */ -class replacementLogo { - - //var $dir=''; - /** - * This function is the constructor of the replacementLogo class - * param - * @return void - */ - function replacementLogo() { - - } - - /** - * This function upload a file - * - * - * @name upLoadFile - * - * @param string $dirUpload - * @param string $namefile - * @param string $typefile - * @param string $errorfile - * @param string $tpnfile - * @param string $formf - * @return string - */ - function upLoadFile($dirUpload, $namefile, $typefile, $errorfile, $tpnfile, $formf) { - - //we are cheking the extension for file - $aExt = explode ( ".", $namefile ); - $infoupload = ''; //|| ($formf["type"]['uploadfile'] == "application/octet-stream")image/png - if (($typefile == "image/jpeg") || ($typefile == "image/png")) { - if ($errorfile > 0) { - $infoupload = "Return Code: " . $errorfile . "
"; - } else { - if (file_exists ( $dirUpload . $namefile )) { - $infoupload = $namefile . " already exist. "; - } else { - move_uploaded_file ( $tpnfile, $dirUpload . $namefile ); - $infoupload = "Stored in: " . $dirUpload . $namefile; - } - } - } else { - $infoupload = "- " . $typefile . " Invalid file your file should be jpeg"; +class replacementLogo +{ + + //var $dir=''; + /** + * This function is the constructor of the replacementLogo class + * param + * + * @return void + */ + public function replacementLogo () + { + } - return $infoupload; - } - - /** - * This function gets the logos' names - * - * - * @name getNameLogo - * - * param - * @return array - */ - function getNameLogo($usrUid) { - - require_once 'classes/model/Configuration.php'; - $oCriteria = new Criteria ( 'workflow' ); - $oCriteria->addSelectColumn ( ConfigurationPeer::CFG_VALUE ); - $oCriteria->add ( ConfigurationPeer::CFG_UID, 'USER_LOGO_REPLACEMENT' ); - $oDataset = ConfigurationPeer::doSelectRS ( $oCriteria ); - $oDataset->next (); - $aRow = $oDataset->getRow (); - if (isset ( $aRow [0] )) - $ainfoLogo = @unserialize ( $aRow [0] ); - else - $ainfoLogo = NULL; - - return ($ainfoLogo); - } -} // end class + /** + * This function upload a file + * + * + * @name upLoadFile + * + * @param string $dirUpload + * @param string $namefile + * @param string $typefile + * @param string $errorfile + * @param string $tpnfile + * @param string $formf + * @return string + */ + public function upLoadFile ($dirUpload, $namefile, $typefile, $errorfile, $tpnfile, $formf) + { + + //we are cheking the extension for file + $aExt = explode( ".", $namefile ); + $infoupload = ''; //|| ($formf["type"]['uploadfile'] == "application/octet-stream")image/png + if (($typefile == "image/jpeg") || ($typefile == "image/png")) { + if ($errorfile > 0) { + $infoupload = "Return Code: " . $errorfile . "
"; + } else { + if (file_exists( $dirUpload . $namefile )) { + $infoupload = $namefile . " already exist. "; + } else { + move_uploaded_file( $tpnfile, $dirUpload . $namefile ); + $infoupload = "Stored in: " . $dirUpload . $namefile; + } + } + } else { + $infoupload = "- " . $typefile . " Invalid file your file should be jpeg"; + } + return $infoupload; + } + + /** + * This function gets the logos' names + * + * + * @name getNameLogo + * + * param + * @return array + */ + public function getNameLogo ($usrUid) + { + + require_once 'classes/model/Configuration.php'; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ConfigurationPeer::CFG_VALUE ); + $oCriteria->add( ConfigurationPeer::CFG_UID, 'USER_LOGO_REPLACEMENT' ); + $oDataset = ConfigurationPeer::doSelectRS( $oCriteria ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if (isset( $aRow[0] )) { + $ainfoLogo = @unserialize( $aRow[0] ); + } else { + $ainfoLogo = null; + } + return ($ainfoLogo); + } +} diff --git a/workflow/engine/classes/class.report.php b/workflow/engine/classes/class.report.php index 39ce53d59..e17fc0063 100755 --- a/workflow/engine/classes/class.report.php +++ b/workflow/engine/classes/class.report.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - /** * Report - Report class + * * @package workflow.engine.ProcessMaker * @author Everth S. Berrios Morales * @copyright 2008 COLOSA */ -class Report { - - /** - * This function does a sql statment to a report - * - * - * @name generatedReport1 - * - * param - * @return object - */ - function generatedReport1() - { - $this->reportsPatch(); +class Report +{ - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("TOTALDUR", "SUM(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("PROMEDIO", "AVG(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn('PRO_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAlias("C1", 'CONTENT'); - $proTitleConds = array(); - $proTitleConds[] = array( AppDelegationPeer::PRO_UID , 'C1.CON_ID' ); - $proTitleConds[] = array( 'C1.CON_CATEGORY' , $del . 'PRO_TITLE' . $del ); - $proTitleConds[] = array( 'C1.CON_LANG' , $del . SYS_LANG . $del ); - $oCriteria->addJoinMC($proTitleConds , Criteria::LEFT_JOIN); - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addGroupByColumn('C1.CON_VALUE'); - - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aProcess[] = array('PRO_UID' => 'char', - 'PRO_TITLE' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float'); - while ($aRow = $oDataset->getRow()) + /** + * This function does a sql statment to a report + * + * + * @name generatedReport1 + * + * param + * @return object + */ + public function generatedReport1 () { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); + $this->reportsPatch(); - $aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], - 'PRO_TITLE' => $aRow['PRO_TITLE'], - 'CANTCASES' => ApplicationPeer::doCount($oCriteria), - 'MIN' => number_format($aRow['MIN'], 2), - 'MAX' => number_format($aRow['MAX'], 2), - 'TOTALDUR' => number_format($aRow['TOTALDUR'], 2), - 'PROMEDIO' => number_format($aRow['PROMEDIO'], 2)); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "TOTALDUR", "SUM(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "PROMEDIO", "AVG(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( 'PRO_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $proTitleConds = array (); + $proTitleConds[] = array (AppDelegationPeer::PRO_UID,'C1.CON_ID' + ); + $proTitleConds[] = array ('C1.CON_CATEGORY',$del . 'PRO_TITLE' . $del + ); + $proTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proTitleConds, Criteria::LEFT_JOIN ); + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( 'C1.CON_VALUE' ); + + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } + $aProcess[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); + while ($aRow = $oDataset->getRow()) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); - global $_DBArray; - $_DBArray['reports'] = $aProcess; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + $aProcess[] = array ('PRO_UID' => $aRow['PRO_UID'],'PRO_TITLE' => $aRow['PRO_TITLE'],'CANTCASES' => ApplicationPeer::doCount( $oCriteria ),'MIN' => number_format( $aRow['MIN'], 2 ),'MAX' => number_format( $aRow['MAX'], 2 ),'TOTALDUR' => number_format( $aRow['TOTALDUR'], 2 ),'PROMEDIO' => number_format( $aRow['PROMEDIO'], 2 ) + ); + $oDataset->next(); + } - return $oCriteria; - } + global $_DBArray; + $_DBArray['reports'] = $aProcess; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - /** - * This function does a sql statment to a report wiht a condition - * or maybe when you're looking for some specials cases - * - * @name generatedReport1_filter - * - * @param string $from - * @param string $to - * @param string $startedby - * @return object - */ - function generatedReport1_filter($from, $to, $startedby) - { - $this->reportsPatch(); + return $oCriteria; + } - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("TOTALDUR", "SUM(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("PROMEDIO", "AVG(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn('PRO_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAlias("C1", 'CONTENT'); - $proTitleConds = array(); - $proTitleConds[] = array( AppDelegationPeer::PRO_UID , 'C1.CON_ID' ); - $proTitleConds[] = array( 'C1.CON_CATEGORY' , $del . 'PRO_TITLE' . $del ); - $proTitleConds[] = array( 'C1.CON_LANG' , $del . SYS_LANG . $del ); - $oCriteria->addJoinMC($proTitleConds , Criteria::LEFT_JOIN); - $oCriteria->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - //$oCriteria->add(AppDelegationPeer::DEL_DURATION, $from, Criteria::GREATER_EQUAL); - //$oCriteria->add(AppDelegationPeer::DEL_DURATION, $to, Criteria::LESS_EQUAL); - //$aAux1 = explode('-', $from); date('Y-m-d H:i:s', mktime(0, 0, 0, $aAux1[1], $aAux1[2], $aAux1[0])) - $oCriteria->add($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $from.' 00:00:00', Criteria::GREATER_EQUAL)->addAnd($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $to.' 23:59:59', Criteria::LESS_EQUAL))); + /** + * This function does a sql statment to a report wiht a condition + * or maybe when you're looking for some specials cases + * + * @name generatedReport1_filter + * + * @param string $from + * @param string $to + * @param string $startedby + * @return object + */ + public function generatedReport1_filter ($from, $to, $startedby) + { + $this->reportsPatch(); - if($startedby!='') $oCriteria->add(ApplicationPeer::APP_INIT_USER, $startedby); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "TOTALDUR", "SUM(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "PROMEDIO", "AVG(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( 'PRO_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $proTitleConds = array (); + $proTitleConds[] = array (AppDelegationPeer::PRO_UID,'C1.CON_ID' + ); + $proTitleConds[] = array ('C1.CON_CATEGORY',$del . 'PRO_TITLE' . $del + ); + $proTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proTitleConds, Criteria::LEFT_JOIN ); + $oCriteria->addJoin( AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + //$oCriteria->add(AppDelegationPeer::DEL_DURATION, $from, Criteria::GREATER_EQUAL); + //$oCriteria->add(AppDelegationPeer::DEL_DURATION, $to, Criteria::LESS_EQUAL); + //$aAux1 = explode('-', $from); date('Y-m-d H:i:s', mktime(0, 0, 0, $aAux1[1], $aAux1[2], $aAux1[0])) + $oCriteria->add( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $from . ' 00:00:00', Criteria::GREATER_EQUAL )->addAnd( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $to . ' 23:59:59', Criteria::LESS_EQUAL ) ) ); - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addGroupByColumn('C1.CON_VALUE'); + if ($startedby != '') + $oCriteria->add( ApplicationPeer::APP_INIT_USER, $startedby ); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( 'C1.CON_VALUE' ); - $aProcess[] = array('PRO_UID' => 'char', - 'PRO_TITLE' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float'); - while ($aRow = $oDataset->getRow()) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - if($startedby!='') $oCriteria->add(ApplicationPeer::APP_INIT_USER, $startedby); - - $aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], - 'PRO_TITLE' => $aRow['PRO_TITLE'], - 'CANTCASES' => ApplicationPeer::doCount($oCriteria), - 'MIN' => number_format($aRow['MIN'],2), - 'MAX' => number_format($aRow['MAX'],2), - 'TOTALDUR' => number_format($aRow['TOTALDUR'],2), - 'PROMEDIO' => number_format($aRow['PROMEDIO'],2)); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - global $_DBArray; - $_DBArray['reports'] = $aProcess; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + $aProcess[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); + while ($aRow = $oDataset->getRow()) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + if ($startedby != '') + $oCriteria->add( ApplicationPeer::APP_INIT_USER, $startedby ); - return $oCriteria; - } + $aProcess[] = array ('PRO_UID' => $aRow['PRO_UID'],'PRO_TITLE' => $aRow['PRO_TITLE'],'CANTCASES' => ApplicationPeer::doCount( $oCriteria ),'MIN' => number_format( $aRow['MIN'], 2 ),'MAX' => number_format( $aRow['MAX'], 2 ),'TOTALDUR' => number_format( $aRow['TOTALDUR'], 2 ),'PROMEDIO' => number_format( $aRow['PROMEDIO'], 2 ) + ); + $oDataset->next(); + } - /** - * This function gets info about a report - * - * - * @name descriptionReport1 - * - * @param string $PRO_UID - * @return object - */ - function descriptionReport1($PRO_UID) - { $this->reportsPatch(); + global $_DBArray; + $_DBArray['reports'] = $aProcess; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Task.php'; - require_once 'classes/model/Content.php'; + return $oCriteria; + } - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("TOTALDUR", "SUM(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("PROMEDIO", "AVG(".AppDelegationPeer::DEL_DURATION.")"); + /** + * This function gets info about a report + * + * + * @name descriptionReport1 + * + * @param string $PRO_UID + * @return object + */ + public function descriptionReport1 ($PRO_UID) + { + $this->reportsPatch(); - $oCriteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Task.php'; + require_once 'classes/model/Content.php'; - $oCriteria->addAsColumn('TAS_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias("C", 'CONTENT'); + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "TOTALDUR", "SUM(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "PROMEDIO", "AVG(" . AppDelegationPeer::DEL_DURATION . ")" ); - $proContentConds = array(); - $proContentConds[] = array(AppDelegationPeer::TAS_UID, 'C.CON_ID'); - $proContentConds[] = array('C.CON_CATEGORY', $del . 'TAS_TITLE' . $del); - $proContentConds[] = array('C.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($proContentConds, Criteria::LEFT_JOIN); + $oCriteria->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); - $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID); + $oCriteria->addAsColumn( 'TAS_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( "C", 'CONTENT' ); - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addGroupByColumn('C.CON_VALUE'); + $proContentConds = array (); + $proContentConds[] = array (AppDelegationPeer::TAS_UID,'C.CON_ID' + ); + $proContentConds[] = array ('C.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $proContentConds[] = array ('C.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proContentConds, Criteria::LEFT_JOIN ); + $oCriteria->add( AppDelegationPeer::PRO_UID, $PRO_UID ); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( 'C.CON_VALUE' ); - $aProcess[] = array('TAS_TITLE' => 'char', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float'); - while ($aRow = $oDataset->getRow()) { - $aProcess[] = array('TAS_TITLE' => $aRow['TAS_TITLE'], - 'MIN' => number_format($aRow['MIN'],2), - 'MAX' => number_format($aRow['MAX'],2), - 'TOTALDUR' => number_format($aRow['TOTALDUR'],2), - 'PROMEDIO' => number_format($aRow['PROMEDIO'],2)); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - global $_DBArray; - $_DBArray['reports'] = $aProcess; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + $aProcess[] = array ('TAS_TITLE' => 'char','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); + while ($aRow = $oDataset->getRow()) { + $aProcess[] = array ('TAS_TITLE' => $aRow['TAS_TITLE'],'MIN' => number_format( $aRow['MIN'], 2 ),'MAX' => number_format( $aRow['MAX'], 2 ),'TOTALDUR' => number_format( $aRow['TOTALDUR'], 2 ),'PROMEDIO' => number_format( $aRow['PROMEDIO'], 2 ) + ); + $oDataset->next(); + } - return $oCriteria; - } + global $_DBArray; + $_DBArray['reports'] = $aProcess; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - /** - * This function generates a other kind of report - * - * - * @name generatedReport2 - * - * param - * @return object - */ - function generatedReport2() - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn('PRO_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAlias("C1", 'CONTENT'); - $proTitleConds = array(); - $proTitleConds[] = array( AppDelegationPeer::PRO_UID , 'C1.CON_ID' ); - $proTitleConds[] = array( 'C1.CON_CATEGORY' , $del . 'PRO_TITLE' . $del ); - $proTitleConds[] = array( 'C1.CON_LANG' , $del . SYS_LANG . $del ); - $oCriteria->addJoinMC($proTitleConds , Criteria::LEFT_JOIN); - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); + return $oCriteria; + } - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + /** + * This function generates a other kind of report + * + * + * @name generatedReport2 + * + * param + * @return object + */ + public function generatedReport2 () + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( 'PRO_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $proTitleConds = array (); + $proTitleConds[] = array (AppDelegationPeer::PRO_UID,'C1.CON_ID' + ); + $proTitleConds[] = array ('C1.CON_CATEGORY',$del . 'PRO_TITLE' . $del + ); + $proTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proTitleConds, Criteria::LEFT_JOIN ); + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); - $month = date( 'Y-m-d' , mktime(0, 0, 0, date("m")-1 , date("d"), date("Y")) ); - $lastmonth = date( 'Y-m-d' , mktime(0, 0, 0, date("m")-2 , date("d"), date("Y")) ); - - $day = mktime(0, 0, 0, date("m") , date("d")-1, date("Y")); - $lastday = mktime(0, 0, 0, date("m") , date("d")-2, date("Y")); - - $aProcess[] = array('PRO_UID' => 'char', - 'PRO_TITLE' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'CASELASTMONTH' => 'integer', - 'CASELASTDAY' => 'integer' - ); - - while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant = $aRow2['CANTCASES']; - - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $lastmonth, Criteria::GREATER_EQUAL); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $month, Criteria::LESS_EQUAL); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant1 = $aRow2['CANTCASES']; - - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $lastday, Criteria::GREATER_EQUAL); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $day, Criteria::LESS_EQUAL); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant2 = $aRow2['CANTCASES']; - - $aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], - 'PRO_TITLE' => $aRow['PRO_TITLE'], - 'CANTCASES' => $cant, - 'MIN' => number_format($aRow['MIN'],2), - 'MAX' => number_format($aRow['MAX'],2), - 'CASELASTMONTH' => number_format($cant1,2), - 'CASELASTDAY' => number_format($cant2,2) - ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - global $_DBArray; - $_DBArray['reports'] = $aProcess; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); - return $oCriteria; - } + $month = date( 'Y-m-d', mktime( 0, 0, 0, date( "m" ) - 1, date( "d" ), date( "Y" ) ) ); + $lastmonth = date( 'Y-m-d', mktime( 0, 0, 0, date( "m" ) - 2, date( "d" ), date( "Y" ) ) ); - /** - * This function generates the description about a report - * - * - * @name reports_Description_filter - * - * @param string $from - * @param string $to - * @param string $startedby - * @param string $PRO_UID - * @return object - */ - function reports_Description_filter($from, $to, $startedby, $PRO_UID) - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Task.php'; - require_once 'classes/model/Content.php'; - require_once 'classes/model/Users.php'; + $day = mktime( 0, 0, 0, date( "m" ), date( "d" ) - 1, date( "Y" ) ); + $lastday = mktime( 0, 0, 0, date( "m" ), date( "d" ) - 2, date( "Y" ) ); - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("TOTALDUR", "SUM(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("PROMEDIO", "AVG(".AppDelegationPeer::DEL_DURATION.")"); + $aProcess[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','CASELASTMONTH' => 'integer','CASELASTDAY' => 'integer' + ); - $oCriteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + while ($aRow = $oDataset->getRow()) { + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant = $aRow2['CANTCASES']; - $oCriteria->addAsColumn('TAS_TITLE', 'C.CON_VALUE'); - $oCriteria->addAlias("C", 'CONTENT'); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $lastmonth, Criteria::GREATER_EQUAL ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $month, Criteria::LESS_EQUAL ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant1 = $aRow2['CANTCASES']; - $proContentConds = array(); - $proContentConds[] = array(AppDelegationPeer::TAS_UID, 'C.CON_ID'); - $proContentConds[] = array('C.CON_CATEGORY', $del . 'TAS_TITLE' . $del); - $proContentConds[] = array('C.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($proContentConds, Criteria::LEFT_JOIN); + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $lastday, Criteria::GREATER_EQUAL ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $day, Criteria::LESS_EQUAL ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant2 = $aRow2['CANTCASES']; - $oCriteria->add($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $from.' 00:00:00', Criteria::GREATER_EQUAL)->addAnd($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $to.' 23:59:59', Criteria::LESS_EQUAL))); + $aProcess[] = array ('PRO_UID' => $aRow['PRO_UID'],'PRO_TITLE' => $aRow['PRO_TITLE'],'CANTCASES' => $cant,'MIN' => number_format( $aRow['MIN'], 2 ),'MAX' => number_format( $aRow['MAX'], 2 ),'CASELASTMONTH' => number_format( $cant1, 2 ),'CASELASTDAY' => number_format( $cant2, 2 ) + ); + $oDataset->next(); + } - if($startedby!='') $oCriteria->add(AppDelegationPeer::USR_UID, $startedby); + global $_DBArray; + $_DBArray['reports'] = $aProcess; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); + return $oCriteria; + } - $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID); + /** + * This function generates the description about a report + * + * + * @name reports_Description_filter + * + * @param string $from + * @param string $to + * @param string $startedby + * @param string $PRO_UID + * @return object + */ + public function reports_Description_filter ($from, $to, $startedby, $PRO_UID) + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Task.php'; + require_once 'classes/model/Content.php'; + require_once 'classes/model/Users.php'; - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addGroupByColumn('C.CON_VALUE'); + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "TOTALDUR", "SUM(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "PROMEDIO", "AVG(" . AppDelegationPeer::DEL_DURATION . ")" ); - return $oCriteria; - } + $oCriteria->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); - /** - * This function looks for an special case it has a condition - * - * - * @name generatedReport2_filter - * - * @param string $from - * @param string $to - * @param string $startedby - * @return object - */ - function generatedReport2_filter($from, $to, $startedby) - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Users.php'; + $oCriteria->addAsColumn( 'TAS_TITLE', 'C.CON_VALUE' ); + $oCriteria->addAlias( "C", 'CONTENT' ); - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addAsColumn("MIN", "MIN(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn("MAX", "MAX(".AppDelegationPeer::DEL_DURATION.")"); - $oCriteria->addAsColumn('PRO_TITLE', 'C1.CON_VALUE' ); - $oCriteria->addAlias("C1", 'CONTENT'); - $proTitleConds = array(); - $proTitleConds[] = array( AppDelegationPeer::PRO_UID , 'C1.CON_ID' ); - $proTitleConds[] = array( 'C1.CON_CATEGORY' , $del . 'PRO_TITLE' . $del ); - $proTitleConds[] = array( 'C1.CON_LANG' , $del . SYS_LANG . $del ); - $oCriteria->addJoinMC($proTitleConds , Criteria::LEFT_JOIN); - $oCriteria->addGroupByColumn(AppDelegationPeer::PRO_UID); - $oCriteria->addGroupByColumn('C1.CON_VALUE'); - - $oCriteria->add($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $from.' 00:00:00', Criteria::GREATER_EQUAL)->addAnd($oCriteria->getNewCriterion(AppDelegationPeer::DEL_INIT_DATE, $to.' 23:59:59', Criteria::LESS_EQUAL))); + $proContentConds = array (); + $proContentConds[] = array (AppDelegationPeer::TAS_UID,'C.CON_ID' + ); + $proContentConds[] = array ('C.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $proContentConds[] = array ('C.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proContentConds, Criteria::LEFT_JOIN ); - if($startedby!='') $oCriteria->add(AppDelegationPeer::USR_UID, $startedby); + $oCriteria->add( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $from . ' 00:00:00', Criteria::GREATER_EQUAL )->addAnd( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $to . ' 23:59:59', Criteria::LESS_EQUAL ) ) ); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); + if ($startedby != '') + $oCriteria->add( AppDelegationPeer::USR_UID, $startedby ); - $month = date( 'Y-m-d' , mktime(0, 0, 0, date("m")-1 , date("d"), date("Y")) ); - $lastmonth = date( 'Y-m-d' , mktime(0, 0, 0, date("m")-2 , date("d"), date("Y")) ); - $day = mktime(0, 0, 0, date("m") , date("d")-1, date("Y")); - $lastday = mktime(0, 0, 0, date("m") , date("d")-2, date("Y")); - $aProcess[] = array('PRO_UID' => 'char', - 'PRO_TITLE' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'CASELASTMONTH' => 'integer', - 'CASELASTDAY' => 'integer' - ); + $oCriteria->add( AppDelegationPeer::PRO_UID, $PRO_UID ); - while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - if($startedby!='') $oCriteria2->add(ApplicationPeer::APP_INIT_USER, $startedby); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant = $aRow2['CANTCASES']; + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( 'C.CON_VALUE' ); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $lastmonth, Criteria::GREATER_EQUAL); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $month, Criteria::LESS_EQUAL); - if($startedby!='') $oCriteria2->add(ApplicationPeer::APP_INIT_USER, $startedby); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant1 = $aRow2['CANTCASES']; + return $oCriteria; + } - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria2->addAsColumn("CANTCASES", "COUNT(*)"); - $oCriteria2->add(ApplicationPeer::PRO_UID, $aRow['PRO_UID']); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $lastday, Criteria::GREATER_EQUAL); - $oCriteria2->add(ApplicationPeer::APP_INIT_DATE, $day, Criteria::LESS_EQUAL); - if($startedby!='') $oCriteria2->add(ApplicationPeer::APP_INIT_USER, $startedby); - $oCriteria2->addGroupByColumn(ApplicationPeer::PRO_UID); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $cant2 = $aRow2['CANTCASES']; + /** + * This function looks for an special case it has a condition + * + * + * @name generatedReport2_filter + * + * @param string $from + * @param string $to + * @param string $startedby + * @return object + */ + public function generatedReport2_filter ($from, $to, $startedby) + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Users.php'; - /*$aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addAsColumn( "MIN", "MIN(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( "MAX", "MAX(" . AppDelegationPeer::DEL_DURATION . ")" ); + $oCriteria->addAsColumn( 'PRO_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $proTitleConds = array (); + $proTitleConds[] = array (AppDelegationPeer::PRO_UID,'C1.CON_ID' + ); + $proTitleConds[] = array ('C1.CON_CATEGORY',$del . 'PRO_TITLE' . $del + ); + $proTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $proTitleConds, Criteria::LEFT_JOIN ); + $oCriteria->addGroupByColumn( AppDelegationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( 'C1.CON_VALUE' ); + + $oCriteria->add( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $from . ' 00:00:00', Criteria::GREATER_EQUAL )->addAnd( $oCriteria->getNewCriterion( AppDelegationPeer::DEL_INIT_DATE, $to . ' 23:59:59', Criteria::LESS_EQUAL ) ) ); + + if ($startedby != '') + $oCriteria->add( AppDelegationPeer::USR_UID, $startedby ); + + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + + $month = date( 'Y-m-d', mktime( 0, 0, 0, date( "m" ) - 1, date( "d" ), date( "Y" ) ) ); + $lastmonth = date( 'Y-m-d', mktime( 0, 0, 0, date( "m" ) - 2, date( "d" ), date( "Y" ) ) ); + $day = mktime( 0, 0, 0, date( "m" ), date( "d" ) - 1, date( "Y" ) ); + $lastday = mktime( 0, 0, 0, date( "m" ), date( "d" ) - 2, date( "Y" ) ); + $aProcess[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','CASELASTMONTH' => 'integer','CASELASTDAY' => 'integer' + ); + + while ($aRow = $oDataset->getRow()) { + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + if ($startedby != '') + $oCriteria2->add( ApplicationPeer::APP_INIT_USER, $startedby ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant = $aRow2['CANTCASES']; + + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $lastmonth, Criteria::GREATER_EQUAL ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $month, Criteria::LESS_EQUAL ); + if ($startedby != '') + $oCriteria2->add( ApplicationPeer::APP_INIT_USER, $startedby ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant1 = $aRow2['CANTCASES']; + + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria2->addAsColumn( "CANTCASES", "COUNT(*)" ); + $oCriteria2->add( ApplicationPeer::PRO_UID, $aRow['PRO_UID'] ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $lastday, Criteria::GREATER_EQUAL ); + $oCriteria2->add( ApplicationPeer::APP_INIT_DATE, $day, Criteria::LESS_EQUAL ); + if ($startedby != '') + $oCriteria2->add( ApplicationPeer::APP_INIT_USER, $startedby ); + $oCriteria2->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria2 ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $cant2 = $aRow2['CANTCASES']; + + /*$aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], 'PRO_TITLE' => $aRow['PRO_TITLE'], 'CANTCASES' => $cant, 'CASELASTMONTH' => $cant1, 'CASELASTDAY' => $cant2 );*/ - $aProcess[] = array('PRO_UID' => $aRow['PRO_UID'], - 'PRO_TITLE' => $aRow['PRO_TITLE'], - 'CANTCASES' => $cant, - 'MIN' => number_format($aRow['MIN'],2), - 'MAX' => number_format($aRow['MAX'],2), - 'CASELASTMONTH' => number_format($cant1,2), - 'CASELASTDAY' => number_format($cant2,2) - ); - $oDataset->next(); - } + $aProcess[] = array ('PRO_UID' => $aRow['PRO_UID'],'PRO_TITLE' => $aRow['PRO_TITLE'],'CANTCASES' => $cant,'MIN' => number_format( $aRow['MIN'], 2 ),'MAX' => number_format( $aRow['MAX'], 2 ),'CASELASTMONTH' => number_format( $cant1, 2 ),'CASELASTDAY' => number_format( $cant2, 2 ) + ); + $oDataset->next(); + } - global $_DBArray; - $_DBArray['reports'] = $aProcess; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); - return $oCriteria; - } + global $_DBArray; + $_DBArray['reports'] = $aProcess; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); + return $oCriteria; + } - /** - * This function looks for an special case it has a condition - * - * - * @name generatedReport2_filter - * - * @param string $from - * @param string $to - * @param string $startedby - * @return object - */ - function generatedReport3() - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $sql = "SELECT CONCAT(SUBSTRING(AD.DEL_INIT_DATE,6,2),'-', SUBSTRING(AD.DEL_INIT_DATE,1,4)) AS FECHA, + /** + * This function looks for an special case it has a condition + * + * + * @name generatedReport2_filter + * + * @param string $from + * @param string $to + * @param string $startedby + * @return object + */ + public function generatedReport3 () + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $sql = "SELECT CONCAT(SUBSTRING(AD.DEL_INIT_DATE,6,2),'-', SUBSTRING(AD.DEL_INIT_DATE,1,4)) AS FECHA, COUNT(DISTINCT(AD.APP_UID)) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -558,73 +535,58 @@ class Report { WHERE AD.APP_UID<>'' AND P.PRO_STATUS<>'DISABLED' GROUP BY FECHA"; - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); - $ROW[] = array('FECHA' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $ROW[] = array ('FECHA' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('FECHA' => $rs->getString('FECHA'), - 'CANTCASES'=> $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('FECHA' => $rs->getString( 'FECHA' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; + return $oCriteria; - } - - /** - * This function looks for an special case it has a condition - * - * - * @name generatedReport3_filter - * - * @param string $process - * @param string $task - * @return object - */ - function generatedReport3_filter($process, $task) - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - if($process=='') - { $var=" WHERE P.PRO_STATUS<>'DISABLED'"; } - else + + /** + * This function looks for an special case it has a condition + * + * + * @name generatedReport3_filter + * + * @param string $process + * @param string $task + * @return object + */ + public function generatedReport3_filter ($process, $task) { - if($task=='') - { - $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE P.PRO_STATUS<>'DISABLED' AND AD.PRO_UID='".$process."'"; - } - else - { $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE P.PRO_STATUS<>'DISABLED' AND AD.PRO_UID='".$process."' AND AD.TAS_UID='".$task."' "; - } - } - $sql = "SELECT CONCAT(SUBSTRING(AD.DEL_INIT_DATE,6,2),'-', SUBSTRING(AD.DEL_INIT_DATE,1,4)) AS FECHA, + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + if ($process == '') { + $var = " WHERE P.PRO_STATUS<>'DISABLED'"; + } else { + if ($task == '') { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE P.PRO_STATUS<>'DISABLED' AND AD.PRO_UID='" . $process . "'"; + } else { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE P.PRO_STATUS<>'DISABLED' AND AD.PRO_UID='" . $process . "' AND AD.TAS_UID='" . $task . "' "; + } + } + $sql = "SELECT CONCAT(SUBSTRING(AD.DEL_INIT_DATE,6,2),'-', SUBSTRING(AD.DEL_INIT_DATE,1,4)) AS FECHA, COUNT(DISTINCT(AD.APP_UID)) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -632,60 +594,49 @@ class Report { AVG(AD.DEL_DURATION) AS PROMEDIO FROM APP_DELEGATION AS AD LEFT JOIN PROCESS AS P ON (P.PRO_UID = AD.PRO_UID) - ".$var." + " . $var . " GROUP BY FECHA"; - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); - $ROW[] = array('FECHA' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); + $ROW[] = array ('FECHA' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('FECHA' => $rs->getString('FECHA'), - 'CANTCASES' => $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('FECHA' => $rs->getString( 'FECHA' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; - } + return $oCriteria; + } - /** - * This function generates a report - * - * - * @name generatedReport4 - * - * param - * @return object - */ - function generatedReport4() - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Process.php'; - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, + /** + * This function generates a report + * + * + * @name generatedReport4 + * + * param + * @return object + */ + public function generatedReport4 () + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Process.php'; + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -696,78 +647,62 @@ class Report { LEFT JOIN USERS AS U ON(U.USR_UID = A.APP_INIT_USER) WHERE A.APP_UID<>'' GROUP BY USER"; - // AND P.PRO_STATUS<>'DISABLED' that hapens when it is created to new version it exists at the moment to import - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + // AND P.PRO_STATUS<>'DISABLED' that hapens when it is created to new version it exists at the moment to import + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); - $ROW[] = array('USER' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $ROW[] = array ('USER' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('USER' => $rs->getString('USER'), - 'CANTCASES'=> $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('USER' => $rs->getString( 'USER' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; + return $oCriteria; - } - - /** - * This function generates a filter to report 4 - * - * - * @name generatedReport4_filter - * - * @param string process - * @param string task - * @return object - */ - function generatedReport4_filter($process, $task) - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Process.php'; - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - if($process=='') - { - $var=" "; } - else + + /** + * This function generates a filter to report 4 + * + * + * @name generatedReport4_filter + * + * @param string process + * @param string task + * @return object + */ + public function generatedReport4_filter ($process, $task) { - if($task=='') - { - $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE AD.PRO_UID='".$process."'"; - } - else - { $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE AD.PRO_UID='".$process."' AND AD.TAS_UID='".$task."' "; - } - } + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Process.php'; + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + if ($process == '') { + $var = " "; + } else { + if ($task == '') { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE AD.PRO_UID='" . $process . "'"; + } else { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE AD.PRO_UID='" . $process . "' AND AD.TAS_UID='" . $task . "' "; + } + } - $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, + $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -776,62 +711,51 @@ class Report { FROM APPLICATION AS A LEFT JOIN APP_DELEGATION AS AD ON(A.APP_UID = AD.APP_UID AND AD.DEL_INDEX=1) LEFT JOIN USERS AS U ON(U.USR_UID = A.APP_INIT_USER) - ".$var." + " . $var . " GROUP BY USER"; - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); - $ROW[] = array('USER' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $ROW[] = array ('USER' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('USER' => $rs->getString('USER'), - 'CANTCASES' => $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('USER' => $rs->getString( 'USER' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; - } + return $oCriteria; + } - /** - * This function generates a Report - * - * - * @name generatedReport4_filter - * - * @param string process - * @param string task - * @return object - */ - function generatedReport5() - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Process.php'; - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, + /** + * This function generates a Report + * + * + * @name generatedReport4_filter + * + * @param string process + * @param string task + * @return object + */ + public function generatedReport5 () + { + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Process.php'; + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -843,75 +767,60 @@ class Report { WHERE AD.APP_UID<>'' AND AD.DEL_FINISH_DATE IS NULL GROUP BY USER"; - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); - $ROW[] = array('USER' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $ROW[] = array ('USER' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('USER' => $rs->getString('USER'), - 'CANTCASES'=> $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('USER' => $rs->getString( 'USER' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; + return $oCriteria; - } - - /** - * This function generates a filter to report 5 - * - * - * @name generatedReport5_filter - * - * @param string process - * @param string task - * @return object - */ - function generatedReport5_filter($process, $task) - { - $this->reportsPatch(); - require_once 'classes/model/AppDelegation.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Process.php'; - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - if($process=='') - { $var=" WHERE AD.DEL_FINISH_DATE IS NULL"; } - else + + /** + * This function generates a filter to report 5 + * + * + * @name generatedReport5_filter + * + * @param string process + * @param string task + * @return object + */ + public function generatedReport5_filter ($process, $task) { - if($task=='') - { - $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE AD.PRO_UID='".$process."' AND AD.DEL_FINISH_DATE IS NULL"; - } - else - { $var=" LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) - WHERE AD.PRO_UID='".$process."' AND AD.TAS_UID='".$task."' "; - } - } - $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, + $this->reportsPatch(); + require_once 'classes/model/AppDelegation.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Process.php'; + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + if ($process == '') { + $var = " WHERE AD.DEL_FINISH_DATE IS NULL"; + } else { + if ($task == '') { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE AD.PRO_UID='" . $process . "' AND AD.DEL_FINISH_DATE IS NULL"; + } else { + $var = " LEFT JOIN TASK AS T ON (AD.TAS_UID = T.TAS_UID) + WHERE AD.PRO_UID='" . $process . "' AND AD.TAS_UID='" . $task . "' "; + } + } + $sql = "SELECT CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER, COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, @@ -920,107 +829,96 @@ class Report { FROM APP_DELEGATION AS AD LEFT JOIN PROCESS AS P ON (P.PRO_UID = AD.PRO_UID) LEFT JOIN USERS AS U ON(U.USR_UID = AD.USR_UID) - ".$var." + " . $var . " GROUP BY USER"; - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + $con = Propel::getConnection( "workflow" ); + $stmt = $con->prepareStatement( $sql ); + $rs = $stmt->executeQuery(); - $ROW[] = array('USER' => 'char', - 'CANTCASES' => 'integer', - 'MIN' => 'float', - 'MAX' => 'float', - 'TOTALDUR' => 'float', - 'PROMEDIO' => 'float' - ); + $ROW[] = array ('USER' => 'char','CANTCASES' => 'integer','MIN' => 'float','MAX' => 'float','TOTALDUR' => 'float','PROMEDIO' => 'float' + ); - while($rs->next()) - { - $ROW[] = array('USER' => $rs->getString('USER'), - 'CANTCASES' => $rs->getString('CANTCASES'), - 'MIN' => number_format($rs->getString('MIN'),2), - 'MAX' => number_format($rs->getString('MAX'),2), - 'TOTALDUR' => number_format($rs->getString('TOTALDUR'),2), - 'PROMEDIO' => number_format($rs->getString('PROMEDIO'),2) - ); - } + while ($rs->next()) { + $ROW[] = array ('USER' => $rs->getString( 'USER' ),'CANTCASES' => $rs->getString( 'CANTCASES' ),'MIN' => number_format( $rs->getString( 'MIN' ), 2 ),'MAX' => number_format( $rs->getString( 'MAX' ), 2 ),'TOTALDUR' => number_format( $rs->getString( 'TOTALDUR' ), 2 ),'PROMEDIO' => number_format( $rs->getString( 'PROMEDIO' ), 2 ) + ); + } - global $_DBArray; - $_DBArray['reports'] = $ROW; - $_SESSION['_DBArray'] = $_DBArray; - G::LoadClass('ArrayPeer'); - $oCriteria = new Criteria('dbarray'); - $oCriteria->setDBArrayTable('reports'); + global $_DBArray; + $_DBArray['reports'] = $ROW; + $_SESSION['_DBArray'] = $_DBArray; + G::LoadClass( 'ArrayPeer' ); + $oCriteria = new Criteria( 'dbarray' ); + $oCriteria->setDBArrayTable( 'reports' ); - return $oCriteria; - } - - /** - * This function returns an array, it has the reports' names - * - * - * @name getAvailableReports - * - * param - * @return array - */ - function getAvailableReports() - { - return array('ID_REPORT1', 'ID_REPORT2', 'ID_REPORT3', 'ID_REPORT4', 'ID_REPORT5'); - } - - /** - * Patch for reports by The Answer (17-10-2k8) - * - * - * @name reportsPatch - * - * param - * @return void - */ - - function reportsPatch() - { - require_once 'classes/model/AppDelegation.php'; - - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DURATION); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oAppDelegation = new AppDelegation(); - - $aData['APP_UID']=$aRow['APP_UID']; - $aData['DEL_INDEX']=$aRow['DEL_INDEX']; - $aData['DEL_DELEGATE_DATE']=$aRow['DEL_DELEGATE_DATE']; - - if($aRow['DEL_INIT_DATE']==NULL) - $aData['DEL_INIT_DATE']=$aRow['DEL_DELEGATE_DATE']; - else - $aData['DEL_INIT_DATE']=$aRow['DEL_INIT_DATE']; - - //$aData['DEL_FINISH_DATE']=$aRow['DEL_FINISH_DATE']; - if($aRow['DEL_DURATION']!=0) - { - G::LoadClass('dates'); - $oDates = new dates(); - $aData['DEL_DURATION']= $oDates->calculateDuration($aData['DEL_INIT_DATE'], $aRow['DEL_FINISH_DATE'], null, null, $aRow['TAS_UID']); + return $oCriteria; } - $oAppDelegation->update($aData); + /** + * This function returns an array, it has the reports' names + * + * + * @name getAvailableReports + * + * param + * @return array + */ + public function getAvailableReports () + { + return array ('ID_REPORT1','ID_REPORT2','ID_REPORT3','ID_REPORT4','ID_REPORT5' + ); + } - $oDataset->next(); - } - return; - } + /** + * Patch for reports by The Answer (17-10-2k8) + * + * + * @name reportsPatch + * + * param + * @return void + */ + + public function reportsPatch () + { + require_once 'classes/model/AppDelegation.php'; + + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_DELEGATE_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INIT_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_DURATION ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oAppDelegation = new AppDelegation(); + + $aData['APP_UID'] = $aRow['APP_UID']; + $aData['DEL_INDEX'] = $aRow['DEL_INDEX']; + $aData['DEL_DELEGATE_DATE'] = $aRow['DEL_DELEGATE_DATE']; + + if ($aRow['DEL_INIT_DATE'] == NULL) + $aData['DEL_INIT_DATE'] = $aRow['DEL_DELEGATE_DATE']; + else + $aData['DEL_INIT_DATE'] = $aRow['DEL_INIT_DATE']; + + //$aData['DEL_FINISH_DATE']=$aRow['DEL_FINISH_DATE']; + if ($aRow['DEL_DURATION'] != 0) { + G::LoadClass( 'dates' ); + $oDates = new dates(); + $aData['DEL_DURATION'] = $oDates->calculateDuration( $aData['DEL_INIT_DATE'], $aRow['DEL_FINISH_DATE'], null, null, $aRow['TAS_UID'] ); + } + + $oAppDelegation->update( $aData ); + + $oDataset->next(); + } + return; + } }// end Report class \ No newline at end of file diff --git a/workflow/engine/classes/class.reportTables.php b/workflow/engine/classes/class.reportTables.php index a751f19c8..70ab7b461 100755 --- a/workflow/engine/classes/class.reportTables.php +++ b/workflow/engine/classes/class.reportTables.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ -G::LoadClass('case'); +G::LoadClass( 'case' ); /** * ReportTables - Report tables class + * * @package workflow.engine.ProcessMaker * @author Julio Cesar Laura Avenda�o * @copyright 2007 COLOSA @@ -35,798 +37,789 @@ G::LoadClass('case'); class ReportTables { - private $aDef = array('mysql' => array('number' => 'DOUBLE', - 'char' => 'VARCHAR(255)', - 'text' => 'TEXT', - 'date' => 'DATETIME'), - 'pgsql' => array('number' => 'DOUBLE', - 'char' => 'VARCHAR(255)', - 'text' => 'TEXT', - 'date' => 'DATETIME'), - 'mssql' => array('number' => 'FLOAT', - 'char' => 'NVARCHAR(255)', - 'text' => 'TEXT', - 'date' => 'CHAR(19)') /* Changed DATETIME CHAR(19) for compatibility issues. */ + private $aDef = array ('mysql' => array ('number' => 'DOUBLE','char' => 'VARCHAR(255)','text' => 'TEXT','date' => 'DATETIME' + ),'pgsql' => array ('number' => 'DOUBLE','char' => 'VARCHAR(255)','text' => 'TEXT','date' => 'DATETIME' + ),'mssql' => array ('number' => 'FLOAT','char' => 'NVARCHAR(255)','text' => 'TEXT','date' => 'CHAR(19)' + ) /* Changed DATETIME CHAR(19) for compatibility issues. */ ); - //private $sPrefix = 'REP_'; - private $sPrefix = ''; - - /** - * Function deleteAllReportVars - * This function delete all reports - * @access public - * @param string $$sRepTabUid - * @return void - */ - public function deleteAllReportVars($sRepTabUid = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportVarPeer::REP_TAB_UID, $sRepTabUid); - ReportVarPeer::doDelete($oCriteria); - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function prepareQuery - * This function removes the table - * @access public - * @param string $sTableName Table name - * @param string $sConnection Conexion - * @return void - */ - public function dropTable($sTableName, $sConnection = 'report') - { - $sTableName = $this->sPrefix . $sTableName; - //we have to do the propel connection - $PropelDatabase=$this->chooseDB($sConnection); - $con = Propel::getConnection($PropelDatabase); - $stmt = $con->createStatement(); - try { - switch (DB_ADAPTER) { - case 'mysql': - $rs = $stmt->executeQuery( 'DROP TABLE IF EXISTS `' . $sTableName . '`'); - break; - case 'mssql': - $rs = $stmt->executeQuery( "IF OBJECT_ID (N'" . $sTableName . "', N'U') IS NOT NULL - DROP TABLE [" . $sTableName . "]"); - break; - } - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function createTable - * This Function creates the table - * @access public - * @param string $sTableName Table name - * @param string $sConnection Connection name - * @param string $sType - * @param array $aFields - * @param string $bDefaultFields - * @return void - */ - public function createTable($sTableName, $sConnection = 'report', $sType = 'NORMAL', $aFields = array(), $bDefaultFields = true) - { - $sTableName = $this->sPrefix . $sTableName; - //we have to do the propel connection - $PropelDatabase=$this->chooseDB($sConnection); - $con = Propel::getConnection($PropelDatabase); - $stmt = $con->createStatement(); - try { - switch (DB_ADAPTER) { - case 'mysql': - $sQuery = 'CREATE TABLE IF NOT EXISTS `' . $sTableName . '` ('; - if ($bDefaultFields) { - $sQuery .= "`APP_UID` VARCHAR(32) NOT NULL DEFAULT '',`APP_NUMBER` INT NOT NULL,"; - if ($sType == 'GRID') { - $sQuery .= "`ROW` INT NOT NULL,"; - } - } - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NOT NULL DEFAULT '0',"; - break; - case 'char': - $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NOT NULL DEFAULT '',"; - break; - case 'text': - $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " ,"; - break; - case 'date': - $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NULL,"; - break; - } - } - if ($bDefaultFields) { - $sQuery .= 'PRIMARY KEY (APP_UID' . ($sType == 'GRID' ? ',ROW' : '') . ')) '; - } - $sQuery .= ' DEFAULT CHARSET=utf8;'; - $rs = $stmt->executeQuery( $sQuery ); - break; + //private $sPrefix = 'REP_'; + private $sPrefix = ''; - case 'mssql': - $sQuery = 'CREATE TABLE [' . $sTableName . '] ('; - if ($bDefaultFields) { - $sQuery .= "[APP_UID] VARCHAR(32) NOT NULL DEFAULT '', [APP_NUMBER] INT NOT NULL,"; - if ($sType == 'GRID') { - $sQuery .= "[ROW] INT NOT NULL,"; - } - } - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '0',"; - break; - case 'char': - $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '',"; - break; - case 'text': - $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '',"; - break; - case 'date': - $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NULL,"; - break; - } - } - if ($bDefaultFields) { - $sQuery .= 'PRIMARY KEY (APP_UID' . ($sType == 'GRID' ? ',ROW' : '') . ')) '; - } - else { - $sQuery .= ' '; - } - - $rs = $stmt->executeQuery( $sQuery ); - break; - - } + /** + * Function deleteAllReportVars + * This function delete all reports + * + * @access public + * @param string $$sRepTabUid + * @return void + */ + public function deleteAllReportVars ($sRepTabUid = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportVarPeer::REP_TAB_UID, $sRepTabUid ); + ReportVarPeer::doDelete( $oCriteria ); + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function populateTable - * This Function fills the table - * @access public - * @param string $sTableName Table name - * @param string $sConnection Connection name - * @param string $sType - * @param array $aFields - * @param string $sProcessUid - * @param string $sGrid - * @return void - */ - public function populateTable($sTableName, $sConnection = 'report', $sType = 'NORMAL', $aFields = array(), $sProcessUid = '', $sGrid = '') - { - $sTableName = $this->sPrefix . $sTableName; - //we have to do the propel connection - $PropelDatabase=$this->chooseDB($sConnection); - $con = Propel::getConnection($PropelDatabase); - $stmt = $con->createStatement(); - if ($sType == 'GRID') { - $aAux = explode('-', $sGrid); - $sGrid = $aAux[0]; - } - try { - switch (DB_ADAPTER) { - case 'mysql': - //select cases for this Process, ordered by APP_NUMBER - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUid); - $oCriteria->addAscendingOrderByColumn(ApplicationPeer::APP_NUMBER); - $oDataset = ApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aData = unserialize($aRow['APP_DATA']); - //delete previous record from this report table ( previous records in case this is a grid ) - $deleteSql = 'DELETE FROM `' . $sTableName . "` WHERE APP_UID = '" . $aRow['APP_UID'] . "'"; - $rsDel = $stmt->executeQuery( $deleteSql ); - if ($sType == 'NORMAL') { - $sQuery = 'INSERT INTO `' . $sTableName . '` ('; - $sQuery .= '`APP_UID`,`APP_NUMBER`'; - foreach ($aFields as $aField) { - $sQuery .= ',`' . $aField['sFieldName'] . '`'; - } - $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int)$aRow['APP_NUMBER']; - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aData[$aField['sFieldName']]) ? (float)str_replace(',', '', $aData[$aField['sFieldName']]) : '0'); + + /** + * Function prepareQuery + * This function removes the table + * + * @access public + * @param string $sTableName Table name + * @param string $sConnection Conexion + * @return void + */ + public function dropTable ($sTableName, $sConnection = 'report') + { + $sTableName = $this->sPrefix . $sTableName; + //we have to do the propel connection + $PropelDatabase = $this->chooseDB( $sConnection ); + $con = Propel::getConnection( $PropelDatabase ); + $stmt = $con->createStatement(); + try { + switch (DB_ADAPTER) { + case 'mysql': + $rs = $stmt->executeQuery( 'DROP TABLE IF EXISTS `' . $sTableName . '`' ); break; - case 'char': - case 'text': - if (!isset($aData[$aField['sFieldName']])) { - $aData[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aData[$aField['sFieldName']]) ? mysql_real_escape_string($aData[$aField['sFieldName']]) : '') . "'"; + case 'mssql': + $rs = $stmt->executeQuery( "IF OBJECT_ID (N'" . $sTableName . "', N'U') IS NOT NULL + DROP TABLE [" . $sTableName . "]" ); break; - case 'date': - $value = (isset($aData[$aField['sFieldName']]) && trim($aData[$aField['sFieldName']])) != '' ? "'" . $aData[$aField['sFieldName']] . "'" : 'NULL'; - $sQuery .= "," . $value; - break; - } - } - $sQuery .= ')'; - $rs = $stmt->executeQuery( $sQuery ); } - else { - if (isset($aData[$sGrid])) { - foreach ($aData[$sGrid] as $iRow => $aGridRow) { - $sQuery = 'INSERT INTO `' . $sTableName . '` ('; - $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; - foreach ($aFields as $aField) { - $sQuery .= ',`' . $aField['sFieldName'] . '`'; - } - $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int)$aRow['APP_NUMBER'] . ',' . $iRow; - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aGridRow[$aField['sFieldName']]) ? (float)str_replace(',', '', $aGridRow[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aGridRow[$aField['sFieldName']])) { - $aGridRow[$aField['sFieldName']] = ''; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Function createTable + * This Function creates the table + * + * @access public + * @param string $sTableName Table name + * @param string $sConnection Connection name + * @param string $sType + * @param array $aFields + * @param string $bDefaultFields + * @return void + */ + public function createTable ($sTableName, $sConnection = 'report', $sType = 'NORMAL', $aFields = array(), $bDefaultFields = true) + { + $sTableName = $this->sPrefix . $sTableName; + //we have to do the propel connection + $PropelDatabase = $this->chooseDB( $sConnection ); + $con = Propel::getConnection( $PropelDatabase ); + $stmt = $con->createStatement(); + try { + switch (DB_ADAPTER) { + case 'mysql': + $sQuery = 'CREATE TABLE IF NOT EXISTS `' . $sTableName . '` ('; + if ($bDefaultFields) { + $sQuery .= "`APP_UID` VARCHAR(32) NOT NULL DEFAULT '',`APP_NUMBER` INT NOT NULL,"; + if ($sType == 'GRID') { + $sQuery .= "`ROW` INT NOT NULL,"; } - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? mysql_real_escape_string($aGridRow[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $value = (isset($aGridRow[$aField['sFieldName']]) && trim($aGridRow[$aField['sFieldName']])) != '' ? "'" . $aGridRow[$aField['sFieldName']] . "'" : 'NULL'; - $sQuery .= "," . $value; - break; } - } - $sQuery .= ')'; - $rs = $stmt->executeQuery( $sQuery ); - } - } - } - $oDataset->next(); - } - break; - - /** - * For SQLServer code - */ - case 'mssql': - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUid); - $oCriteria->addAscendingOrderByColumn(ApplicationPeer::APP_NUMBER); - $oDataset = ApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aData = unserialize($aRow['APP_DATA']); - mysql_query('DELETE FROM [' . $sTableName . "] WHERE APP_UID = '" . $aRow['APP_UID'] . "'"); - if ($sType == 'NORMAL') { - $sQuery = 'INSERT INTO [' . $sTableName . '] ('; - $sQuery .= '[APP_UID],[APP_NUMBER]'; - foreach ($aFields as $aField) { - $sQuery .= ',[' . $aField['sFieldName'] . ']'; - } - $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int)$aRow['APP_NUMBER']; - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aData[$aField['sFieldName']]) ? (float)str_replace(',', '', $aData[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aData[$aField['sFieldName']])) { - $aData[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aData[$aField['sFieldName']]) ? mysql_real_escape_string($aData[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $sQuery .= ",'" . (isset($aData[$aField['sFieldName']]) ? $aData[$aField['sFieldName']] : '') . "'"; - break; - } - } - $sQuery .= ')'; - $rs = $stmt->executeQuery( $sQuery ); - } - else { - if (isset($aData[$sGrid])) { - foreach ($aData[$sGrid] as $iRow => $aGridRow) { - $sQuery = 'INSERT INTO [' . $sTableName . '] ('; - $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; foreach ($aFields as $aField) { - $sQuery .= ',[' . $aField['sFieldName'] . ']'; + switch ($aField['sType']) { + case 'number': + $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NOT NULL DEFAULT '0',"; + break; + case 'char': + $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NOT NULL DEFAULT '',"; + break; + case 'text': + $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " ,"; + break; + case 'date': + $sQuery .= '`' . $aField['sFieldName'] . '` ' . $this->aDef['mysql'][$aField['sType']] . " NULL,"; + break; + } } - $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int)$aRow['APP_NUMBER'] . ',' . $iRow; - foreach ($aFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aGridRow[$aField['sFieldName']]) ? (float)str_replace(',', '', $aGridRow[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aGridRow[$aField['sFieldName']])) { - $aGridRow[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? mysql_real_escape_string($aGridRow[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? $aGridRow[$aField['sFieldName']] : '') . "'"; - break; - } + if ($bDefaultFields) { + $sQuery .= 'PRIMARY KEY (APP_UID' . ($sType == 'GRID' ? ',ROW' : '') . ')) '; } - $sQuery .= ')'; + $sQuery .= ' DEFAULT CHARSET=utf8;'; $rs = $stmt->executeQuery( $sQuery ); - } - } - } - $oDataset->next(); - } - break; - - } - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function getTableVars - * @access public - * @param string $sRepTabUid - * @param boolean $bWhitType - * @return void - */ - public function getTableVars($sRepTabUid, $bWhitType = false) - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportVarPeer::REP_TAB_UID, $sRepTabUid); - $oDataset = ReportVarPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aVars = array(); - $aImportedVars = array();//This array will help to control if the variable already exist - while ($aRow = $oDataset->getRow()) { - if ($bWhitType) { - if (!in_array($aRow['REP_VAR_NAME'], $aImportedVars)) { - $aImportedVars[]=$aRow['REP_VAR_NAME']; - $aVars[] = array('sFieldName' => $aRow['REP_VAR_NAME'], 'sType' => $aRow['REP_VAR_TYPE']); - } - }else { - $aVars[] = $aRow['REP_VAR_NAME']; - } - $oDataset->next(); - } - return $aVars; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function deleteReportTable - * This Function deletes report table - * @access public - * @param string $sRepTabUid - * @return void - */ - public function deleteReportTable($sRepTabUid) - { - try { - $oReportTable = new ReportTable(); - $aFields = $oReportTable->load($sRepTabUid); - if(!(empty($aFields))){ - $this->dropTable($aFields['REP_TAB_NAME'], $aFields['REP_TAB_CONNECTION']); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportVarPeer::REP_TAB_UID, $sRepTabUid); - $oDataset = ReportVarPeer::doDelete($oCriteria); - $oReportTable->remove($sRepTabUid); - } - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function getSplitDate - * This function gets the split date - * @access public - * @param date $date - * @param string $mask - * @return array - */ - function getSplitDate($date, $mask) - { - $sw1 = false; - for($i=0; $i<3; $i++){ - $item = substr($mask, $i*2, 1); - switch($item){ - case 'Y': - switch($i){ - case 0: - $d1 = substr($date, 0, 4); - break; - case 1: - $d1 = substr($date, 3, 4); - break; - case 2: - $d1 = substr($date, 6, 4); - break; - } - $sw1 = true; - break; - case 'y': - switch($i){ - case 0: - $d1 = substr($date, 0, 2); - break; - case 1: - $d1 = substr($date, 3, 2); - break; - case 2: - $d1 = substr($date, 6, 2); - break; - } - break; - case 'm': - switch($i){ - case 0: - $d2 = substr($date, 0, 2); - break; - case 1: - $d2 = ($sw1)? substr($date, 5, 2): substr($date, 3, 2); - break; - case 2: - $d2 = ($sw1)? substr($date, 8, 2): substr($date, 5, 2); - break; - } - break; - case 'd': - switch($i){ - case 0: - $d3 = substr($date, 0, 2); - break; - case 1: - $d3 = ($sw1)? substr($date, 5, 2): substr($date, 3, 2); - break; - case 2: - $d3 = ($sw1)? substr($date, 8, 2): substr($date, 5, 2); - break; - } - break; - } - } - return Array(isset($d1)?$d1:'', isset($d2)?$d2:'', isset($d3)?$d3:''); - } - - /** - * Function getFormatDate - * This function returns the date formated - * @access public - * @param date $sDate - * @param date $sMask - * @return date - */ - function getFormatDate($sDate, $sMask) - { - //print $sDate." *** ". $sMask."
"; - $dateTime = explode(" ",$sDate); //To accept the Hour part - $aDate = explode ( '-', str_replace("/", "-", $dateTime[0]) ); - $bResult = true; - foreach($aDate as $sDate){ - if( !is_numeric($sDate) ){ - $bResult = false; - break; - } - } - if( $sMask != '' ){ - $aDate = $this->getSplitDate($dateTime[0], $sMask); - $aDate[0] = ($aDate[0] == '')? date('Y'): $aDate[0]; - $aDate[1] = ($aDate[1] == '')? date('m'): $aDate[1]; - $aDate[2] = ($aDate[2] == '')? date('d'): $aDate[2]; - if( checkdate($aDate[1], $aDate[2], $aDate[0]) ){ - } else { - return false; - } - } - $sDateC=''; - for($i=0;$i< count($aDate);$i++){ - $sDateC.= (($i==0)?"":"-") .$aDate[$i]; - } - return ($sDateC); - } - - /** - * Function updateTables - * This function updated the Report Tables - * @access public - * @param string $sProcessUid - * @param string $sApplicationUid - * @param string $iApplicationNumber - * @param string $aFields - * @return void - */ - public function updateTables($sProcessUid, $sApplicationUid, $iApplicationNumber, $aFields) - { - try { - //get all Active Report Tables - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProcessUid); - $oCriteria->add(ReportTablePeer::REP_TAB_STATUS, 'ACTIVE'); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aVars = array(); - while ($aRow = $oDataset->getRow()) { - $aRow['REP_TAB_NAME'] = $this->sPrefix . $aRow['REP_TAB_NAME']; - $PropelDatabase=$this->chooseDB($aRow['REP_TAB_CONNECTION']); - $con = Propel::getConnection($PropelDatabase); - $stmt = $con->createStatement(); - switch (DB_ADAPTER) { + break; - case 'mysql': - $aTableFields = $this->getTableVars($aRow['REP_TAB_UID'], true); - if ($aRow['REP_TAB_TYPE'] == 'NORMAL') { - $sqlExists = "SELECT * FROM `" . $aRow['REP_TAB_NAME'] . "` WHERE APP_UID = '" . $sApplicationUid . "'"; - $rsExists = $stmt->executeQuery( $sqlExists, ResultSet::FETCHMODE_ASSOC); - $rsExists->next(); - $aRow2 = $rsExists->getRow(); - - if ( is_array( $aRow2) ) { - $sQuery = 'UPDATE `' . $aRow['REP_TAB_NAME'] . '` SET '; - foreach ($aTableFields as $aField) { - $sQuery .= '`' . $aField['sFieldName'] . '` = '; - switch ($aField['sType']) { - case 'number': - $sQuery .= (isset($aFields[$aField['sFieldName']]) ? (float)str_replace(',', '', $aFields[$aField['sFieldName']]) : '0') . ','; - break; - case 'char': - case 'text': - if (!isset($aFields[$aField['sFieldName']])) { - $aFields[$aField['sFieldName']] = ''; - } - $sQuery .= "'" . (isset($aFields[$aField['sFieldName']]) ? mysql_real_escape_string($aFields[$aField['sFieldName']]) : '') . "',"; - break; - case 'date': - $mysqlDate = (isset($aFields[$aField['sFieldName']]) ? $aFields[$aField['sFieldName']] : '') ; - if ($mysqlDate!='') { - $mysqlDate = str_replace('/', '-', $mysqlDate); - $mysqlDate = date( 'Y-m-d', strtotime($mysqlDate) ); - } - $value = trim($mysqlDate) != '' ? "'".$mysqlDate."'" : 'NULL'; - $sQuery .= $value . ","; - break; - } - } - $sQuery = substr($sQuery, 0, -1); - $sQuery .= " WHERE APP_UID = '" . $sApplicationUid . "'"; - } - else { - $sQuery = 'INSERT INTO `' . $aRow['REP_TAB_NAME'] . '` ('; - $sQuery .= '`APP_UID`,`APP_NUMBER`'; - foreach ($aTableFields as $aField) { - $sQuery .= ',`' . $aField['sFieldName'] . '`'; - } - $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int)$iApplicationNumber; - foreach ($aTableFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aFields[$aField['sFieldName']]) ? (float)str_replace(',', '', $aFields[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aFields[$aField['sFieldName']])) { - $aFields[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aFields[$aField['sFieldName']]) ? mysql_real_escape_string($aFields[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $mysqlDate = ( isset($aFields[$aField['sFieldName']]) ? $aFields[$aField['sFieldName']] : '' ); - if ($mysqlDate!='') { - $mysqlDate = str_replace( '/', '-', $mysqlDate ); - $mysqlDate = date( 'Y-m-d', strtotime($mysqlDate) ); - } - $value = trim($mysqlDate) != '' ? "'".$mysqlDate."'" : 'NULL'; - $sQuery .= "," . $value; - break; - } - } - $sQuery .= ')'; - } - $rs = $stmt->executeQuery( $sQuery ); - } - else { - //remove old rows from database - $sqlDelete = 'DELETE FROM `' . $aRow['REP_TAB_NAME'] . "` WHERE APP_UID = '" . $sApplicationUid . "'"; - $rsDelete = $stmt->executeQuery( $sqlDelete ); - - $aAux = explode('-', $aRow['REP_TAB_GRID']); - if (isset($aFields[$aAux[0]])) { - foreach ($aFields[$aAux[0]] as $iRow => $aGridRow) { - $sQuery = 'INSERT INTO `' . $aRow['REP_TAB_NAME'] . '` ('; - $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; - foreach ($aTableFields as $aField) { - $sQuery .= ',`' . $aField['sFieldName'] . '`'; - } - $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int)$iApplicationNumber . ',' . $iRow; - foreach ($aTableFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aGridRow[$aField['sFieldName']]) ? (float)str_replace(',', '', $aGridRow[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aGridRow[$aField['sFieldName']])) { - $aGridRow[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? mysql_real_escape_string($aGridRow[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? $aGridRow[$aField['sFieldName']] : '') . "'"; - break; - } - } - $sQuery .= ')'; - $rs =$stmt->executeQuery( $sQuery ); - } - } - } - break; - - /** - * For SQLServer code - */ - case 'mssql': - $aTableFields = $this->getTableVars($aRow['REP_TAB_UID'], true); - if ($aRow['REP_TAB_TYPE'] == 'NORMAL') { - $oDataset2 = mssql_query("SELECT * FROM [" . $aRow['REP_TAB_NAME'] . "] WHERE APP_UID = '" . $sApplicationUid . "'"); - if ($aRow2 = mssql_fetch_row($oDataset2)) { - $sQuery = 'UPDATE [' . $aRow['REP_TAB_NAME'] . '] SET '; - foreach ($aTableFields as $aField) { - $sQuery .= '[' . $aField['sFieldName'] . '] = '; - switch ($aField['sType']) { - case 'number': - $sQuery .= (isset($aFields[$aField['sFieldName']]) ? (float)str_replace(',', '', $aFields[$aField['sFieldName']]) : '0') . ','; - break; - case 'char': - case 'text': - if (!isset($aFields[$aField['sFieldName']])) { - $aFields[$aField['sFieldName']] = ''; - } - $sQuery .= "'" . (isset($aFields[$aField['sFieldName']]) ? mysql_real_escape_string($aFields[$aField['sFieldName']]) : '') . "',"; - break; - case 'date': - $sQuery .= "'" . (isset($aFields[$aField['sFieldName']]) ? $aFields[$aField['sFieldName']] : '') . "',"; - break; - } - } - $sQuery = substr($sQuery, 0, -1); - $sQuery .= " WHERE APP_UID = '" . $sApplicationUid . "'"; - } - else { - $sQuery = 'INSERT INTO [' . $aRow['REP_TAB_NAME'] . '] ('; - $sQuery .= '[APP_UID],[APP_NUMBER]'; - foreach ($aTableFields as $aField) { - $sQuery .= ',[' . $aField['sFieldName'] . ']'; - } - $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int)$iApplicationNumber; - foreach ($aTableFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aFields[$aField['sFieldName']]) ? (float)str_replace(',', '', $aFields[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aFields[$aField['sFieldName']])) { - $aFields[$aField['sFieldName']] = ''; - } - $sQuery .= ",'" . (isset($aFields[$aField['sFieldName']]) ? mysql_real_escape_string($aFields[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $sQuery .= ",'" . (isset($aFields[$aField['sFieldName']]) ? $aFields[$aField['sFieldName']] : '') . "'"; - break; - } - } - $sQuery .= ')'; - } - $rs = $stmt->executeQuery( $sQuery ); - } - else { - mysql_query('DELETE FROM [' . $aRow['REP_TAB_NAME'] . "] WHERE APP_UID = '" . $sApplicationUid . "'"); - $aAux = explode('-', $aRow['REP_TAB_GRID']); - if (isset($aFields[$aAux[0]])) { - foreach ($aFields[$aAux[0]] as $iRow => $aGridRow) { - $sQuery = 'INSERT INTO [' . $aRow['REP_TAB_NAME'] . '] ('; - $sQuery .= '[APP_UID],[APP_NUMBER],[ROW]'; - foreach ($aTableFields as $aField) { - $sQuery .= ',[' . $aField['sFieldName'] . ']'; - } - $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int)$iApplicationNumber . ',' . $iRow; - foreach ($aTableFields as $aField) { - switch ($aField['sType']) { - case 'number': - $sQuery .= ',' . (isset($aGridRow[$aField['sFieldName']]) ? (float)str_replace(',', '', $aGridRow[$aField['sFieldName']]) : '0'); - break; - case 'char': - case 'text': - if (!isset($aGridRow[$aField['sFieldName']])) { - $aGridRow[$aField['sFieldName']] = ''; + case 'mssql': + $sQuery = 'CREATE TABLE [' . $sTableName . '] ('; + if ($bDefaultFields) { + $sQuery .= "[APP_UID] VARCHAR(32) NOT NULL DEFAULT '', [APP_NUMBER] INT NOT NULL,"; + if ($sType == 'GRID') { + $sQuery .= "[ROW] INT NOT NULL,"; } - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? mysql_real_escape_string($aGridRow[$aField['sFieldName']]) : '') . "'"; - break; - case 'date': - $sQuery .= ",'" . (isset($aGridRow[$aField['sFieldName']]) ? $aGridRow[$aField['sFieldName']] : '') . "'"; - break; } - } - $sQuery .= ')'; - $rs =$stmt->executeQuery( $sQuery ); - } - } + foreach ($aFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '0',"; + break; + case 'char': + $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '',"; + break; + case 'text': + $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NOT NULL DEFAULT '',"; + break; + case 'date': + $sQuery .= '[' . $aField['sFieldName'] . '] ' . $this->aDef['mssql'][$aField['sType']] . " NULL,"; + break; + } + } + if ($bDefaultFields) { + $sQuery .= 'PRIMARY KEY (APP_UID' . ($sType == 'GRID' ? ',ROW' : '') . ')) '; + } else { + $sQuery .= ' '; + } + + $rs = $stmt->executeQuery( $sQuery ); + break; + } - break; - - } - $oDataset->next(); + } catch (Exception $oError) { + throw ($oError); + } } - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Function tableExist - * Check if table exists - * @access public - * @return boolean - */ - function tableExist() - { - /* + + /** + * Function populateTable + * This Function fills the table + * + * @access public + * @param string $sTableName Table name + * @param string $sConnection Connection name + * @param string $sType + * @param array $aFields + * @param string $sProcessUid + * @param string $sGrid + * @return void + */ + public function populateTable ($sTableName, $sConnection = 'report', $sType = 'NORMAL', $aFields = array(), $sProcessUid = '', $sGrid = '') + { + $sTableName = $this->sPrefix . $sTableName; + //we have to do the propel connection + $PropelDatabase = $this->chooseDB( $sConnection ); + $con = Propel::getConnection( $PropelDatabase ); + $stmt = $con->createStatement(); + if ($sType == 'GRID') { + $aAux = explode( '-', $sGrid ); + $sGrid = $aAux[0]; + } + try { + switch (DB_ADAPTER) { + case 'mysql': + //select cases for this Process, ordered by APP_NUMBER + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ApplicationPeer::PRO_UID, $sProcessUid ); + $oCriteria->addAscendingOrderByColumn( ApplicationPeer::APP_NUMBER ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aData = unserialize( $aRow['APP_DATA'] ); + //delete previous record from this report table ( previous records in case this is a grid ) + $deleteSql = 'DELETE FROM `' . $sTableName . "` WHERE APP_UID = '" . $aRow['APP_UID'] . "'"; + $rsDel = $stmt->executeQuery( $deleteSql ); + if ($sType == 'NORMAL') { + $sQuery = 'INSERT INTO `' . $sTableName . '` ('; + $sQuery .= '`APP_UID`,`APP_NUMBER`'; + foreach ($aFields as $aField) { + $sQuery .= ',`' . $aField['sFieldName'] . '`'; + } + $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int) $aRow['APP_NUMBER']; + foreach ($aFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aData[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aData[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aData[$aField['sFieldName']] )) { + $aData[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aData[$aField['sFieldName']] ) ? mysql_real_escape_string( $aData[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $value = (isset( $aData[$aField['sFieldName']] ) && trim( $aData[$aField['sFieldName']] )) != '' ? "'" . $aData[$aField['sFieldName']] . "'" : 'NULL'; + $sQuery .= "," . $value; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } else { + if (isset( $aData[$sGrid] )) { + foreach ($aData[$sGrid] as $iRow => $aGridRow) { + $sQuery = 'INSERT INTO `' . $sTableName . '` ('; + $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; + foreach ($aFields as $aField) { + $sQuery .= ',`' . $aField['sFieldName'] . '`'; + } + $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int) $aRow['APP_NUMBER'] . ',' . $iRow; + foreach ($aFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aGridRow[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aGridRow[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aGridRow[$aField['sFieldName']] )) { + $aGridRow[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? mysql_real_escape_string( $aGridRow[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $value = (isset( $aGridRow[$aField['sFieldName']] ) && trim( $aGridRow[$aField['sFieldName']] )) != '' ? "'" . $aGridRow[$aField['sFieldName']] . "'" : 'NULL'; + $sQuery .= "," . $value; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } + } + } + $oDataset->next(); + } + break; + + /** + * For SQLServer code + */ + case 'mssql': + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ApplicationPeer::PRO_UID, $sProcessUid ); + $oCriteria->addAscendingOrderByColumn( ApplicationPeer::APP_NUMBER ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aData = unserialize( $aRow['APP_DATA'] ); + mysql_query( 'DELETE FROM [' . $sTableName . "] WHERE APP_UID = '" . $aRow['APP_UID'] . "'" ); + if ($sType == 'NORMAL') { + $sQuery = 'INSERT INTO [' . $sTableName . '] ('; + $sQuery .= '[APP_UID],[APP_NUMBER]'; + foreach ($aFields as $aField) { + $sQuery .= ',[' . $aField['sFieldName'] . ']'; + } + $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int) $aRow['APP_NUMBER']; + foreach ($aFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aData[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aData[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aData[$aField['sFieldName']] )) { + $aData[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aData[$aField['sFieldName']] ) ? mysql_real_escape_string( $aData[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $sQuery .= ",'" . (isset( $aData[$aField['sFieldName']] ) ? $aData[$aField['sFieldName']] : '') . "'"; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } else { + if (isset( $aData[$sGrid] )) { + foreach ($aData[$sGrid] as $iRow => $aGridRow) { + $sQuery = 'INSERT INTO [' . $sTableName . '] ('; + $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; + foreach ($aFields as $aField) { + $sQuery .= ',[' . $aField['sFieldName'] . ']'; + } + $sQuery .= ") VALUES ('" . $aRow['APP_UID'] . "'," . (int) $aRow['APP_NUMBER'] . ',' . $iRow; + foreach ($aFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aGridRow[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aGridRow[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aGridRow[$aField['sFieldName']] )) { + $aGridRow[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? mysql_real_escape_string( $aGridRow[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? $aGridRow[$aField['sFieldName']] : '') . "'"; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } + } + } + $oDataset->next(); + } + break; + + } + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Function getTableVars + * + * @access public + * @param string $sRepTabUid + * @param boolean $bWhitType + * @return void + */ + public function getTableVars ($sRepTabUid, $bWhitType = false) + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportVarPeer::REP_TAB_UID, $sRepTabUid ); + $oDataset = ReportVarPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aVars = array (); + $aImportedVars = array (); //This array will help to control if the variable already exist + while ($aRow = $oDataset->getRow()) { + if ($bWhitType) { + if (! in_array( $aRow['REP_VAR_NAME'], $aImportedVars )) { + $aImportedVars[] = $aRow['REP_VAR_NAME']; + $aVars[] = array ('sFieldName' => $aRow['REP_VAR_NAME'],'sType' => $aRow['REP_VAR_TYPE'] + ); + } + } else { + $aVars[] = $aRow['REP_VAR_NAME']; + } + $oDataset->next(); + } + return $aVars; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Function deleteReportTable + * This Function deletes report table + * + * @access public + * @param string $sRepTabUid + * @return void + */ + public function deleteReportTable ($sRepTabUid) + { + try { + $oReportTable = new ReportTable(); + $aFields = $oReportTable->load( $sRepTabUid ); + if (! (empty( $aFields ))) { + $this->dropTable( $aFields['REP_TAB_NAME'], $aFields['REP_TAB_CONNECTION'] ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportVarPeer::REP_TAB_UID, $sRepTabUid ); + $oDataset = ReportVarPeer::doDelete( $oCriteria ); + $oReportTable->remove( $sRepTabUid ); + } + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Function getSplitDate + * This function gets the split date + * + * @access public + * @param date $date + * @param string $mask + * @return array + */ + public function getSplitDate ($date, $mask) + { + $sw1 = false; + for ($i = 0; $i < 3; $i ++) { + $item = substr( $mask, $i * 2, 1 ); + switch ($item) { + case 'Y': + switch ($i) { + case 0: + $d1 = substr( $date, 0, 4 ); + break; + case 1: + $d1 = substr( $date, 3, 4 ); + break; + case 2: + $d1 = substr( $date, 6, 4 ); + break; + } + $sw1 = true; + break; + case 'y': + switch ($i) { + case 0: + $d1 = substr( $date, 0, 2 ); + break; + case 1: + $d1 = substr( $date, 3, 2 ); + break; + case 2: + $d1 = substr( $date, 6, 2 ); + break; + } + break; + case 'm': + switch ($i) { + case 0: + $d2 = substr( $date, 0, 2 ); + break; + case 1: + $d2 = ($sw1) ? substr( $date, 5, 2 ) : substr( $date, 3, 2 ); + break; + case 2: + $d2 = ($sw1) ? substr( $date, 8, 2 ) : substr( $date, 5, 2 ); + break; + } + break; + case 'd': + switch ($i) { + case 0: + $d3 = substr( $date, 0, 2 ); + break; + case 1: + $d3 = ($sw1) ? substr( $date, 5, 2 ) : substr( $date, 3, 2 ); + break; + case 2: + $d3 = ($sw1) ? substr( $date, 8, 2 ) : substr( $date, 5, 2 ); + break; + } + break; + } + } + return Array (isset( $d1 ) ? $d1 : '',isset( $d2 ) ? $d2 : '',isset( $d3 ) ? $d3 : '' + ); + } + + /** + * Function getFormatDate + * This function returns the date formated + * + * @access public + * @param date $sDate + * @param date $sMask + * @return date + */ + public function getFormatDate ($sDate, $sMask) + { + //print $sDate." *** ". $sMask."
"; + $dateTime = explode( " ", $sDate ); //To accept the Hour part + $aDate = explode( '-', str_replace( "/", "-", $dateTime[0] ) ); + $bResult = true; + foreach ($aDate as $sDate) { + if (! is_numeric( $sDate )) { + $bResult = false; + break; + } + } + if ($sMask != '') { + $aDate = $this->getSplitDate( $dateTime[0], $sMask ); + $aDate[0] = ($aDate[0] == '') ? date( 'Y' ) : $aDate[0]; + $aDate[1] = ($aDate[1] == '') ? date( 'm' ) : $aDate[1]; + $aDate[2] = ($aDate[2] == '') ? date( 'd' ) : $aDate[2]; + if (checkdate( $aDate[1], $aDate[2], $aDate[0] )) { + } else { + return false; + } + } + $sDateC = ''; + for ($i = 0; $i < count( $aDate ); $i ++) { + $sDateC .= (($i == 0) ? "" : "-") . $aDate[$i]; + } + return ($sDateC); + } + + /** + * Function updateTables + * This function updated the Report Tables + * + * @access public + * @param string $sProcessUid + * @param string $sApplicationUid + * @param string $iApplicationNumber + * @param string $aFields + * @return void + */ + public function updateTables ($sProcessUid, $sApplicationUid, $iApplicationNumber, $aFields) + { + try { + //get all Active Report Tables + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUid ); + $oCriteria->add( ReportTablePeer::REP_TAB_STATUS, 'ACTIVE' ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aVars = array (); + while ($aRow = $oDataset->getRow()) { + $aRow['REP_TAB_NAME'] = $this->sPrefix . $aRow['REP_TAB_NAME']; + $PropelDatabase = $this->chooseDB( $aRow['REP_TAB_CONNECTION'] ); + $con = Propel::getConnection( $PropelDatabase ); + $stmt = $con->createStatement(); + switch (DB_ADAPTER) { + + case 'mysql': + $aTableFields = $this->getTableVars( $aRow['REP_TAB_UID'], true ); + if ($aRow['REP_TAB_TYPE'] == 'NORMAL') { + $sqlExists = "SELECT * FROM `" . $aRow['REP_TAB_NAME'] . "` WHERE APP_UID = '" . $sApplicationUid . "'"; + $rsExists = $stmt->executeQuery( $sqlExists, ResultSet::FETCHMODE_ASSOC ); + $rsExists->next(); + $aRow2 = $rsExists->getRow(); + + if (is_array( $aRow2 )) { + $sQuery = 'UPDATE `' . $aRow['REP_TAB_NAME'] . '` SET '; + foreach ($aTableFields as $aField) { + $sQuery .= '`' . $aField['sFieldName'] . '` = '; + switch ($aField['sType']) { + case 'number': + $sQuery .= (isset( $aFields[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aFields[$aField['sFieldName']] ) : '0') . ','; + break; + case 'char': + case 'text': + if (! isset( $aFields[$aField['sFieldName']] )) { + $aFields[$aField['sFieldName']] = ''; + } + $sQuery .= "'" . (isset( $aFields[$aField['sFieldName']] ) ? mysql_real_escape_string( $aFields[$aField['sFieldName']] ) : '') . "',"; + break; + case 'date': + $mysqlDate = (isset( $aFields[$aField['sFieldName']] ) ? $aFields[$aField['sFieldName']] : ''); + if ($mysqlDate != '') { + $mysqlDate = str_replace( '/', '-', $mysqlDate ); + $mysqlDate = date( 'Y-m-d', strtotime( $mysqlDate ) ); + } + $value = trim( $mysqlDate ) != '' ? "'" . $mysqlDate . "'" : 'NULL'; + $sQuery .= $value . ","; + break; + } + } + $sQuery = substr( $sQuery, 0, - 1 ); + $sQuery .= " WHERE APP_UID = '" . $sApplicationUid . "'"; + } else { + $sQuery = 'INSERT INTO `' . $aRow['REP_TAB_NAME'] . '` ('; + $sQuery .= '`APP_UID`,`APP_NUMBER`'; + foreach ($aTableFields as $aField) { + $sQuery .= ',`' . $aField['sFieldName'] . '`'; + } + $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int) $iApplicationNumber; + foreach ($aTableFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aFields[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aFields[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aFields[$aField['sFieldName']] )) { + $aFields[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aFields[$aField['sFieldName']] ) ? mysql_real_escape_string( $aFields[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $mysqlDate = (isset( $aFields[$aField['sFieldName']] ) ? $aFields[$aField['sFieldName']] : ''); + if ($mysqlDate != '') { + $mysqlDate = str_replace( '/', '-', $mysqlDate ); + $mysqlDate = date( 'Y-m-d', strtotime( $mysqlDate ) ); + } + $value = trim( $mysqlDate ) != '' ? "'" . $mysqlDate . "'" : 'NULL'; + $sQuery .= "," . $value; + break; + } + } + $sQuery .= ')'; + } + $rs = $stmt->executeQuery( $sQuery ); + } else { + //remove old rows from database + $sqlDelete = 'DELETE FROM `' . $aRow['REP_TAB_NAME'] . "` WHERE APP_UID = '" . $sApplicationUid . "'"; + $rsDelete = $stmt->executeQuery( $sqlDelete ); + + $aAux = explode( '-', $aRow['REP_TAB_GRID'] ); + if (isset( $aFields[$aAux[0]] )) { + foreach ($aFields[$aAux[0]] as $iRow => $aGridRow) { + $sQuery = 'INSERT INTO `' . $aRow['REP_TAB_NAME'] . '` ('; + $sQuery .= '`APP_UID`,`APP_NUMBER`,`ROW`'; + foreach ($aTableFields as $aField) { + $sQuery .= ',`' . $aField['sFieldName'] . '`'; + } + $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int) $iApplicationNumber . ',' . $iRow; + foreach ($aTableFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aGridRow[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aGridRow[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aGridRow[$aField['sFieldName']] )) { + $aGridRow[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? mysql_real_escape_string( $aGridRow[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? $aGridRow[$aField['sFieldName']] : '') . "'"; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } + } + } + break; + + /** + * For SQLServer code + */ + case 'mssql': + $aTableFields = $this->getTableVars( $aRow['REP_TAB_UID'], true ); + if ($aRow['REP_TAB_TYPE'] == 'NORMAL') { + $oDataset2 = mssql_query( "SELECT * FROM [" . $aRow['REP_TAB_NAME'] . "] WHERE APP_UID = '" . $sApplicationUid . "'" ); + if ($aRow2 = mssql_fetch_row( $oDataset2 )) { + $sQuery = 'UPDATE [' . $aRow['REP_TAB_NAME'] . '] SET '; + foreach ($aTableFields as $aField) { + $sQuery .= '[' . $aField['sFieldName'] . '] = '; + switch ($aField['sType']) { + case 'number': + $sQuery .= (isset( $aFields[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aFields[$aField['sFieldName']] ) : '0') . ','; + break; + case 'char': + case 'text': + if (! isset( $aFields[$aField['sFieldName']] )) { + $aFields[$aField['sFieldName']] = ''; + } + $sQuery .= "'" . (isset( $aFields[$aField['sFieldName']] ) ? mysql_real_escape_string( $aFields[$aField['sFieldName']] ) : '') . "',"; + break; + case 'date': + $sQuery .= "'" . (isset( $aFields[$aField['sFieldName']] ) ? $aFields[$aField['sFieldName']] : '') . "',"; + break; + } + } + $sQuery = substr( $sQuery, 0, - 1 ); + $sQuery .= " WHERE APP_UID = '" . $sApplicationUid . "'"; + } else { + $sQuery = 'INSERT INTO [' . $aRow['REP_TAB_NAME'] . '] ('; + $sQuery .= '[APP_UID],[APP_NUMBER]'; + foreach ($aTableFields as $aField) { + $sQuery .= ',[' . $aField['sFieldName'] . ']'; + } + $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int) $iApplicationNumber; + foreach ($aTableFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aFields[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aFields[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aFields[$aField['sFieldName']] )) { + $aFields[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aFields[$aField['sFieldName']] ) ? mysql_real_escape_string( $aFields[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $sQuery .= ",'" . (isset( $aFields[$aField['sFieldName']] ) ? $aFields[$aField['sFieldName']] : '') . "'"; + break; + } + } + $sQuery .= ')'; + } + $rs = $stmt->executeQuery( $sQuery ); + } else { + mysql_query( 'DELETE FROM [' . $aRow['REP_TAB_NAME'] . "] WHERE APP_UID = '" . $sApplicationUid . "'" ); + $aAux = explode( '-', $aRow['REP_TAB_GRID'] ); + if (isset( $aFields[$aAux[0]] )) { + foreach ($aFields[$aAux[0]] as $iRow => $aGridRow) { + $sQuery = 'INSERT INTO [' . $aRow['REP_TAB_NAME'] . '] ('; + $sQuery .= '[APP_UID],[APP_NUMBER],[ROW]'; + foreach ($aTableFields as $aField) { + $sQuery .= ',[' . $aField['sFieldName'] . ']'; + } + $sQuery .= ") VALUES ('" . $sApplicationUid . "'," . (int) $iApplicationNumber . ',' . $iRow; + foreach ($aTableFields as $aField) { + switch ($aField['sType']) { + case 'number': + $sQuery .= ',' . (isset( $aGridRow[$aField['sFieldName']] ) ? (float) str_replace( ',', '', $aGridRow[$aField['sFieldName']] ) : '0'); + break; + case 'char': + case 'text': + if (! isset( $aGridRow[$aField['sFieldName']] )) { + $aGridRow[$aField['sFieldName']] = ''; + } + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? mysql_real_escape_string( $aGridRow[$aField['sFieldName']] ) : '') . "'"; + break; + case 'date': + $sQuery .= ",'" . (isset( $aGridRow[$aField['sFieldName']] ) ? $aGridRow[$aField['sFieldName']] : '') . "'"; + break; + } + } + $sQuery .= ')'; + $rs = $stmt->executeQuery( $sQuery ); + } + } + } + break; + + } + $oDataset->next(); + } + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Function tableExist + * Check if table exists + * + * @access public + * @return boolean + */ + public function tableExist () + { + /* $bExists = true; $oConnection = mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_select_db(DB_NAME); $oDataset = mysql_query('SELECT COUNT(*) FROM REPORT_TABLE') || ($bExists = false); return $bExists; */ - $bExists = true; - $sDataBase = 'database_' . strtolower(DB_ADAPTER); - if(G::LoadSystemExist($sDataBase)){ - G::LoadSystem($sDataBase); - $oDataBase = new database(); - $bExists = $oDataBase->reportTableExist(); + $bExists = true; + $sDataBase = 'database_' . strtolower( DB_ADAPTER ); + if (G::LoadSystemExist( $sDataBase )) { + G::LoadSystem( $sDataBase ); + $oDataBase = new database(); + $bExists = $oDataBase->reportTableExist(); + } + return $bExists; + } + + /** + * Function chooseDB + * Choose the database to connect + * + * @access public + * @param string $TabConnectionk + * @return string + */ + public function chooseDB ($TabConnectionk) + { + $repTabConnection = trim( strtoupper( $TabConnectionk ) ); + $PropelDatabase = 'rp'; + if ($repTabConnection == '' || $repTabConnection == 'REPORT') + $PropelDatabase = 'rp'; + if ($repTabConnection == 'RBAC') + $PropelDatabase = 'rbac'; + if ($repTabConnection == 'WF') + $PropelDatabase = 'workflow'; + return ($PropelDatabase); } - return $bExists; - } - - /** - * Function chooseDB - * Choose the database to connect - * @access public - * @param string $TabConnectionk - * @return string - */ - function chooseDB($TabConnectionk) - { - $repTabConnection = trim( strtoupper( $TabConnectionk ) ); - $PropelDatabase = 'rp'; - if ( $repTabConnection == '' || $repTabConnection == 'REPORT' ) - $PropelDatabase = 'rp'; - if ( $repTabConnection == 'RBAC' ) - $PropelDatabase = 'rbac'; - if ( $repTabConnection == 'WF' ) - $PropelDatabase = 'workflow'; - return ($PropelDatabase); - } } diff --git a/workflow/engine/classes/class.searchIndex.php b/workflow/engine/classes/class.searchIndex.php index 26888f28c..16815c66d 100644 --- a/workflow/engine/classes/class.searchIndex.php +++ b/workflow/engine/classes/class.searchIndex.php @@ -1,6 +1,6 @@ solrIsEnabled = $registry->isRegistered('solrEnabled') && - // $registry->get('solrEnabled') == 1; - // $this->solrHost = - // $registry->isRegistered('solrHost')?$registry->get('solrHost'):""; - // } - // else{ - // //use the parameters to initialize class - $this->_solrIsEnabled = $solrIsEnabled; - $this->_solrHost = $solrHost; - // } - } - /** - * Verify if the Solr service is available - * @gearman = false - * @rest = false - * @background = false - * - * no input parameters @param[in] - * - * @param - * [out] bool true if index service is enabled false in other case - */ - public function isEnabled() - { - // require_once (ROOT_PATH . - // '/businessLogic/modules/SearchIndexAccess/Solr.php'); - require_once ('class.solr.php'); - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - return $solr->isEnabled (); - } - - /** - * Get the list of facets in base to the specified query and filter - * @gearman = true - * @rest = false - * @background = false - * - * @param - * [in] Entity_FacetRequest facetRequestEntity Facet request entity - * @param - * [out] array FacetGroup - */ - public function getFacetsList($facetRequestEntity) - { - require_once ('class.solr.php'); - // require_once (ROOT_PATH . - // '/businessLogic/modules/SearchIndexAccess/Solr.php'); - require_once ('entities/FacetGroup.php'); - require_once ('entities/FacetItem.php'); - require_once ('entities/SelectedFacetGroupItem.php'); - require_once ('entities/FacetResult.php'); - - /** - * *************************************************************** - */ - // get array of selected facet groups - $facetRequestEntity->selectedFacetsString = str_replace (',,', ',', $facetRequestEntity->selectedFacetsString); - // remove descriptions of selected facet groups - - $aGroups = explode (',', $facetRequestEntity->selectedFacetsString); - - $aGroups = array_filter ($aGroups); // remove empty items - - $aSelectedFacetGroups = array (); - foreach ($aGroups as $i => $value) { - $gi = explode (':::', $value); - $gr = explode ('::', $gi [0]); - $it = explode ('::', $gi [1]); - - // create string for remove condition - $count = 0; - $removeCondition = str_replace ($value . ',', '', $facetRequestEntity->selectedFacetsString, $count); - if ($count == 0) { - $removeCondition = str_replace ($value, '', $facetRequestEntity->selectedFacetsString, $count); - } - $selectedFacetGroupData = array ( - 'selectedFacetGroupName' => $gr [0], - 'selectedFacetGroupPrintName' => $gr [1], - 'selectedFacetItemName' => $it [0], - 'selectedFacetItemPrintName' => $it [1], - 'selectedFacetRemoveCondition' => $removeCondition - ); - - $aSelectedFacetGroups [] = Entity_SelectedFacetGroupItem::createForRequest ($selectedFacetGroupData); - } - - /** - * *************************************************************** - */ - // convert request to index request - // create filters - $filters = array (); - if (! empty ($aSelectedFacetGroups)) { - // exclude facetFields and facetDates included in filter from the next - // list of facets - foreach ($aSelectedFacetGroups as $value) { - $facetRequestEntity->facetFields = array_diff ($facetRequestEntity->facetFields, array ( - $value->selectedFacetGroupName - )); - $facetRequestEntity->facetDates = array_diff ($facetRequestEntity->facetDates, array ( - $value->selectedFacetGroupName - )); - } - - // $facetFields = array_diff($facetFields, - // $facetInterfaceRequestEntity->selectedFacetGroups); - // $facetDates = array_diff($facetDates, - // $facetInterfaceRequestEntity->selectedFacetGroups); - foreach ($aSelectedFacetGroups as $group) { - $filters [] = $group->selectedFacetGroupName . ':' . urlencode ($group->selectedFacetItemName); - } - } - $facetRequestEntity->filters = $filters; - - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // create list of facets - $facetsList = $solr->getFacetsList ($facetRequestEntity); - - $numFound = $facetsList->response->numFound; - - $facetCounts = $facetsList->facet_counts; - - $facetGroups = array (); - // convert facet fields result to objects - /** - * ********************************************************************* - */ - // include facet field results - $facetFieldsResult = $facetsList->facet_counts->facet_fields; - if (! empty ($facetFieldsResult)) { - foreach ($facetFieldsResult as $facetGroup => $facetvalues) { - if (count ($facetvalues) > 0) // if the group have facets included - { - $data = array ( - 'facetGroupName' => $facetGroup - ); - $data ['facetGroupPrintName'] = $facetGroup; - $data ['facetGroupType'] = 'field'; - $facetItems = array (); - for ($i = 0; $i < count ($facetvalues); $i += 2) { - $dataItem = array (); - $dataItem ['facetName'] = $facetvalues [$i]; - $dataItem ['facetPrintName'] = $facetvalues [$i]; - $dataItem ['facetCount'] = $facetvalues [$i + 1]; - $dataItem ['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty ($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data ['facetGroupName'] . '::' . $data ['facetGroupPrintName'] . ':::' . $dataItem ['facetName'] . '::' . $dataItem ['facetPrintName']; - $newFacetItem = Entity_FacetItem::createForInsert ($dataItem); - $facetItems [] = $newFacetItem; - } - $data ['facetItems'] = $facetItems; - $newFacetGroup = Entity_FacetGroup::createForInsert ($data); - - $facetGroups [] = $newFacetGroup; - } - } - } - /** - * ********************************************************************* - */ - // include facet date ranges results - $facetDatesResult = $facetsList->facet_counts->facet_dates; - if (! empty ($facetDatesResult)) { - foreach ($facetDatesResult as $facetGroup => $facetvalues) { - if (count ((array)$facetvalues) > 3) // if the group have any facets included - // besides start, end and gap - { - $data = array ( - 'facetGroupName' => $facetGroup - ); - $data ['facetGroupPrintName'] = $facetGroup; - $data ['facetGroupType'] = 'daterange'; - $facetItems = array (); - $facetvalueskeys = array_keys ((array)$facetvalues); - foreach ($facetvalueskeys as $i => $k) { - if ($k != 'gap' && $k != 'start' && $k != 'end') { - $dataItem = array (); - if ($i < count ($facetvalueskeys) - 4) { - - $dataItem ['facetName'] = '[' . $k . '%20TO%20' . $facetvalueskeys [$i + 1] . ']'; - $dataItem ['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalueskeys [$i + 1] . ']'; - } - else { - // the last group - $dataItem ['facetName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']'; - $dataItem ['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']'; - } - - $dataItem ['facetCount'] = $facetvalues->$k; - $dataItem ['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty ($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data ['facetGroupName'] . '::' . $data ['facetGroupPrintName'] . ':::' . $dataItem ['facetName'] . '::' . $dataItem ['facetPrintName']; - $newFacetItem = Entity_FacetItem::createForInsert ($dataItem); - $facetItems [] = $newFacetItem; - } - } - - $data ['facetItems'] = $facetItems; - $newFacetGroup = Entity_FacetGroup::createForInsert ($data); - - $facetGroups [] = $newFacetGroup; - } - } - } - // TODO:convert facet queries - // ----- - /** - * *************************************************************** - */ - // Create a filter string used in the filter of results of a datatable - $filterText = ''; // the list of selected filters used for filtering result, - // send in ajax - foreach ($aSelectedFacetGroups as $selectedFacetGroup) { - $filterText .= $selectedFacetGroup->selectedFacetGroupName . ':' . urlencode ($selectedFacetGroup->selectedFacetItemName) . ','; - } - $filterText = substr_replace ($filterText, '', - 1); - // $filterText = ($filterText == '')?'':'&filterText='.$filterText; - - /** - * *************************************************************** - */ - // Create result - $dataFacetResult = array ( - 'aFacetGroups' => $facetGroups, - 'aSelectedFacetGroups' => $aSelectedFacetGroups, - 'sFilterText' => $filterText - ); - $facetResult = Entity_FacetResult::createForRequest ($dataFacetResult); - - return $facetResult; - } - - /** - * Get the total number of documents in search server - * @param string $workspace - * @return integer number of documents - * - */ - public function getNumberDocuments($workspace) - { - require_once ('class.solr.php'); - // require_once (ROOT_PATH . - // '/businessLogic/modules/SearchIndexAccess/Solr.php'); - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // create list of facets - $numberDocuments = $solr->getNumberDocuments ($workspace); - - return $numberDocuments; - } - - /** - * Update document Index - * @param SolrUpdateDocumentEntity $solrUpdateDocumentEntity - */ - public function updateIndexDocument($solrUpdateDocumentEntity) - { - G::LoadClass ('solr'); - - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // create list of facets - $solr->updateDocument ($solrUpdateDocumentEntity); - } - - /** - * Delete document from index - * @param string $workspace - * @param string $idQuery - */ - public function deleteDocumentFromIndex($workspace, $idQuery) - { - G::LoadClass ('solr'); - - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // create list of facets - $solr->deleteDocument ($workspace, $idQuery); - } - - /** - * Commit index changes - * @param string $workspace - */ - public function commitIndexChanges($workspace) - { - G::LoadClass ('solr'); - - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // commit - $solr->commitChanges ($workspace); - } - - /** - * Optimize index changes - * @param string $workspace - */ - public function optimizeIndexChanges($workspace) - { - G::LoadClass ('solr'); - - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // commit - $solr->optimizeChanges ($workspace); - } - - /** - * Call Solr server to return the list of paginated pages. - * @param FacetRequest $solrRequestData - * @return Entity_SolrQueryResult - */ - public function getDataTablePaginatedList($solrRequestData) - { - require_once ('class.solr.php'); - require_once ('entities/SolrRequestData.php'); - require_once ('entities/SolrQueryResult.php'); - - // prepare the list of sorted columns - // verify if the data of sorting is available - if (isset ($solrRequestData->sortCols [0])) { - for ($i = 0; $i < $solrRequestData->numSortingCols; $i ++) { - // verify if column is sortable - if ($solrRequestData->includeCols [$solrRequestData->sortCols [$i]] != '' && $solrRequestData->sortableCols [$i] == "true") { - // change sorting column index to column names - $solrRequestData->sortCols [$i] = $solrRequestData->includeCols [$solrRequestData->sortCols [$i]]; - // define the direction of the sorting columns - $solrRequestData->sortDir [$i] = $solrRequestData->sortDir [$i]; - } - } - } - // remove placeholder fields - // the placeholder doesn't affect the the solr's response - // $solrRequestData->includeCols = array_diff($solrRequestData->includeCols, - // array('')); - - // execute query - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - $solrPaginatedResult = $solr->executeQuery ($solrRequestData); - - // get total number of documents in index - $numTotalDocs = $solr->getNumberDocuments ($solrRequestData->workspace); - - // create the Datatable response of the query - $numFound = $solrPaginatedResult->response->numFound; - - $docs = $solrPaginatedResult->response->docs; - // print_r($docs); - // insert list of names in docs result - $data = array ( - "sEcho" => '', // must be completed in response - "iTotalRecords" => intval ($numTotalDocs), // we must get the - // total number of - // documents - "iTotalDisplayRecords" => $numFound, - "aaData" => array () - ); - // copy result document or add placeholders to result - foreach ($docs as $i => $doc) { - $data ['aaData'] [$i] = array (); - foreach ($solrRequestData->includeCols as $columnName) { - if ($columnName == '') { - $data ['aaData'] [$i] [] = ''; // placeholder - } - else { - if (isset ($doc->$columnName)) { - $data ['aaData'] [$i] [] = $doc->$columnName; - } - else { - $data ['aaData'] [$i] [] = ''; - } - } - } - } - - $solrQueryResponse = Entity_SolrQueryResult::createForRequest ($data); - // - - return $solrQueryResponse; - } - - /** - * Return the list of stored fields in the index. - * @param string $workspace - * @return array of index fields - */ - public function getIndexFields($workspace) - { - require_once ('class.solr.php'); + private $_solrIsEnabled = false; + private $_solrHost = ""; - $solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); - - // print "SearchIndex!!!!"; - // create list of facets - $solrFieldsData = $solr->getListIndexedStoredFields ($workspace); - // copy list of arrays - $listFields = array (); - foreach ($solrFieldsData->fields as $key => $fieldData) { - if (array_key_exists ('dynamicBase', $fieldData)) { - $originalFieldName = substr ($key, 0, - strlen ($fieldData->dynamicBase) + 1); - // $listFields[strtolower($originalFieldName)] = $key; //in case of case insentive strings - // Maintain case sensitive variable names - $listFields [$originalFieldName] = $key; - } - else { - // $listFields[strtolower($key)] = $key; - // Maintain case sensitive variable names - $listFields [$key] = $key; - } + public function __construct ($solrIsEnabled = false, $solrHost = "") + { + // check if Zend Library is available + // if(class_exists("Zend_Registry")){ + // $registry = Zend_Registry::getInstance(); + // //check if configuration is enabled + // $this->solrIsEnabled = $registry->isRegistered('solrEnabled') && + // $registry->get('solrEnabled') == 1; + // $this->solrHost = + // $registry->isRegistered('solrHost')?$registry->get('solrHost'):""; + // } + // else{ + // //use the parameters to initialize class + $this->_solrIsEnabled = $solrIsEnabled; + $this->_solrHost = $solrHost; + // } + } + + /** + * Verify if the Solr service is available + * @gearman = false + * @rest = false + * @background = false + * + * no input parameters @param[in] + * + * @param [out] bool true if index service is enabled false in other case + */ + public function isEnabled () + { + // require_once (ROOT_PATH . + // '/businessLogic/modules/SearchIndexAccess/Solr.php'); + require_once ('class.solr.php'); + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + return $solr->isEnabled(); + } + + /** + * Get the list of facets in base to the specified query and filter + * @gearman = true + * @rest = false + * @background = false + * + * @param [in] Entity_FacetRequest facetRequestEntity Facet request entity + * @param [out] array FacetGroup + */ + public function getFacetsList ($facetRequestEntity) + { + require_once ('class.solr.php'); + // require_once (ROOT_PATH . + // '/businessLogic/modules/SearchIndexAccess/Solr.php'); + require_once ('entities/FacetGroup.php'); + require_once ('entities/FacetItem.php'); + require_once ('entities/SelectedFacetGroupItem.php'); + require_once ('entities/FacetResult.php'); + + /** + * *************************************************************** + */ + // get array of selected facet groups + $facetRequestEntity->selectedFacetsString = str_replace( ',,', ',', $facetRequestEntity->selectedFacetsString ); + // remove descriptions of selected facet groups + + + $aGroups = explode( ',', $facetRequestEntity->selectedFacetsString ); + + $aGroups = array_filter( $aGroups ); // remove empty items + + + $aSelectedFacetGroups = array (); + foreach ($aGroups as $i => $value) { + $gi = explode( ':::', $value ); + $gr = explode( '::', $gi[0] ); + $it = explode( '::', $gi[1] ); + + // create string for remove condition + $count = 0; + $removeCondition = str_replace( $value . ',', '', $facetRequestEntity->selectedFacetsString, $count ); + if ($count == 0) { + $removeCondition = str_replace( $value, '', $facetRequestEntity->selectedFacetsString, $count ); + } + $selectedFacetGroupData = array ('selectedFacetGroupName' => $gr[0],'selectedFacetGroupPrintName' => $gr[1],'selectedFacetItemName' => $it[0],'selectedFacetItemPrintName' => $it[1],'selectedFacetRemoveCondition' => $removeCondition + ); + + $aSelectedFacetGroups[] = Entity_SelectedFacetGroupItem::createForRequest( $selectedFacetGroupData ); + } + + /** + * *************************************************************** + */ + // convert request to index request + // create filters + $filters = array (); + if (! empty( $aSelectedFacetGroups )) { + // exclude facetFields and facetDates included in filter from the next + // list of facets + foreach ($aSelectedFacetGroups as $value) { + $facetRequestEntity->facetFields = array_diff( $facetRequestEntity->facetFields, array ($value->selectedFacetGroupName + ) ); + $facetRequestEntity->facetDates = array_diff( $facetRequestEntity->facetDates, array ($value->selectedFacetGroupName + ) ); + } + + // $facetFields = array_diff($facetFields, + // $facetInterfaceRequestEntity->selectedFacetGroups); + // $facetDates = array_diff($facetDates, + // $facetInterfaceRequestEntity->selectedFacetGroups); + foreach ($aSelectedFacetGroups as $group) { + $filters[] = $group->selectedFacetGroupName . ':' . urlencode( $group->selectedFacetItemName ); + } + } + $facetRequestEntity->filters = $filters; + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // create list of facets + $facetsList = $solr->getFacetsList( $facetRequestEntity ); + + $numFound = $facetsList->response->numFound; + + $facetCounts = $facetsList->facet_counts; + + $facetGroups = array (); + // convert facet fields result to objects + /** + * ********************************************************************* + */ + // include facet field results + $facetFieldsResult = $facetsList->facet_counts->facet_fields; + if (! empty( $facetFieldsResult )) { + foreach ($facetFieldsResult as $facetGroup => $facetvalues) { + if (count( $facetvalues ) > 0) // if the group have facets included +{ + $data = array ('facetGroupName' => $facetGroup + ); + $data['facetGroupPrintName'] = $facetGroup; + $data['facetGroupType'] = 'field'; + $facetItems = array (); + for ($i = 0; $i < count( $facetvalues ); $i += 2) { + $dataItem = array (); + $dataItem['facetName'] = $facetvalues[$i]; + $dataItem['facetPrintName'] = $facetvalues[$i]; + $dataItem['facetCount'] = $facetvalues[$i + 1]; + $dataItem['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty( $facetRequestEntity->selectedFacetsString ) ? '' : ',') . $data['facetGroupName'] . '::' . $data['facetGroupPrintName'] . ':::' . $dataItem['facetName'] . '::' . $dataItem['facetPrintName']; + $newFacetItem = Entity_FacetItem::createForInsert( $dataItem ); + $facetItems[] = $newFacetItem; + } + $data['facetItems'] = $facetItems; + $newFacetGroup = Entity_FacetGroup::createForInsert( $data ); + + $facetGroups[] = $newFacetGroup; + } + } + } + /** + * ********************************************************************* + */ + // include facet date ranges results + $facetDatesResult = $facetsList->facet_counts->facet_dates; + if (! empty( $facetDatesResult )) { + foreach ($facetDatesResult as $facetGroup => $facetvalues) { + if (count( (array) $facetvalues ) > 3) // if the group have any facets included + // besides start, end and gap + { + $data = array ('facetGroupName' => $facetGroup + ); + $data['facetGroupPrintName'] = $facetGroup; + $data['facetGroupType'] = 'daterange'; + $facetItems = array (); + $facetvalueskeys = array_keys( (array) $facetvalues ); + foreach ($facetvalueskeys as $i => $k) { + if ($k != 'gap' && $k != 'start' && $k != 'end') { + $dataItem = array (); + if ($i < count( $facetvalueskeys ) - 4) { + + $dataItem['facetName'] = '[' . $k . '%20TO%20' . $facetvalueskeys[$i + 1] . ']'; + $dataItem['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalueskeys[$i + 1] . ']'; + } else { + // the last group + $dataItem['facetName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']'; + $dataItem['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']'; + } + + $dataItem['facetCount'] = $facetvalues->$k; + $dataItem['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty( $facetRequestEntity->selectedFacetsString ) ? '' : ',') . $data['facetGroupName'] . '::' . $data['facetGroupPrintName'] . ':::' . $dataItem['facetName'] . '::' . $dataItem['facetPrintName']; + $newFacetItem = Entity_FacetItem::createForInsert( $dataItem ); + $facetItems[] = $newFacetItem; + } + } + + $data['facetItems'] = $facetItems; + $newFacetGroup = Entity_FacetGroup::createForInsert( $data ); + + $facetGroups[] = $newFacetGroup; + } + } + } + // TODO:convert facet queries + // ----- + /** + * *************************************************************** + */ + // Create a filter string used in the filter of results of a datatable + $filterText = ''; // the list of selected filters used for filtering result, + // send in ajax + foreach ($aSelectedFacetGroups as $selectedFacetGroup) { + $filterText .= $selectedFacetGroup->selectedFacetGroupName . ':' . urlencode( $selectedFacetGroup->selectedFacetItemName ) . ','; + } + $filterText = substr_replace( $filterText, '', - 1 ); + // $filterText = ($filterText == '')?'':'&filterText='.$filterText; + + + /** + * *************************************************************** + */ + // Create result + $dataFacetResult = array ('aFacetGroups' => $facetGroups,'aSelectedFacetGroups' => $aSelectedFacetGroups,'sFilterText' => $filterText + ); + $facetResult = Entity_FacetResult::createForRequest( $dataFacetResult ); + + return $facetResult; + } + + /** + * Get the total number of documents in search server + * + * @param string $workspace + * @return integer number of documents + * + */ + public function getNumberDocuments ($workspace) + { + require_once ('class.solr.php'); + // require_once (ROOT_PATH . + // '/businessLogic/modules/SearchIndexAccess/Solr.php'); + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // create list of facets + $numberDocuments = $solr->getNumberDocuments( $workspace ); + + return $numberDocuments; + } + + /** + * Update document Index + * + * @param SolrUpdateDocumentEntity $solrUpdateDocumentEntity + */ + public function updateIndexDocument ($solrUpdateDocumentEntity) + { + G::LoadClass( 'solr' ); + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // create list of facets + $solr->updateDocument( $solrUpdateDocumentEntity ); + } + + /** + * Delete document from index + * + * @param string $workspace + * @param string $idQuery + */ + public function deleteDocumentFromIndex ($workspace, $idQuery) + { + G::LoadClass( 'solr' ); + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // create list of facets + $solr->deleteDocument( $workspace, $idQuery ); + } + + /** + * Commit index changes + * + * @param string $workspace + */ + public function commitIndexChanges ($workspace) + { + G::LoadClass( 'solr' ); + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // commit + $solr->commitChanges( $workspace ); + } + + /** + * Optimize index changes + * + * @param string $workspace + */ + public function optimizeIndexChanges ($workspace) + { + G::LoadClass( 'solr' ); + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // commit + $solr->optimizeChanges( $workspace ); + } + + /** + * Call Solr server to return the list of paginated pages. + * + * @param FacetRequest $solrRequestData + * @return Entity_SolrQueryResult + */ + public function getDataTablePaginatedList ($solrRequestData) + { + require_once ('class.solr.php'); + require_once ('entities/SolrRequestData.php'); + require_once ('entities/SolrQueryResult.php'); + + // prepare the list of sorted columns + // verify if the data of sorting is available + if (isset( $solrRequestData->sortCols[0] )) { + for ($i = 0; $i < $solrRequestData->numSortingCols; $i ++) { + // verify if column is sortable + if ($solrRequestData->includeCols[$solrRequestData->sortCols[$i]] != '' && $solrRequestData->sortableCols[$i] == "true") { + // change sorting column index to column names + $solrRequestData->sortCols[$i] = $solrRequestData->includeCols[$solrRequestData->sortCols[$i]]; + // define the direction of the sorting columns + $solrRequestData->sortDir[$i] = $solrRequestData->sortDir[$i]; + } + } + } + // remove placeholder fields + // the placeholder doesn't affect the the solr's response + // $solrRequestData->includeCols = array_diff($solrRequestData->includeCols, + // array('')); + + + // execute query + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + $solrPaginatedResult = $solr->executeQuery( $solrRequestData ); + + // get total number of documents in index + $numTotalDocs = $solr->getNumberDocuments( $solrRequestData->workspace ); + + // create the Datatable response of the query + $numFound = $solrPaginatedResult->response->numFound; + + $docs = $solrPaginatedResult->response->docs; + // print_r($docs); + // insert list of names in docs result + $data = array ("sEcho" => '', // must be completed in response +"iTotalRecords" => intval( $numTotalDocs ), // we must get the + // total number of + // documents + "iTotalDisplayRecords" => $numFound,"aaData" => array () + ); + // copy result document or add placeholders to result + foreach ($docs as $i => $doc) { + $data['aaData'][$i] = array (); + foreach ($solrRequestData->includeCols as $columnName) { + if ($columnName == '') { + $data['aaData'][$i][] = ''; // placeholder + } else { + if (isset( $doc->$columnName )) { + $data['aaData'][$i][] = $doc->$columnName; + } else { + $data['aaData'][$i][] = ''; + } + } + } + } + + $solrQueryResponse = Entity_SolrQueryResult::createForRequest( $data ); + // + + + return $solrQueryResponse; + } + + /** + * Return the list of stored fields in the index. + * + * @param string $workspace + * @return array of index fields + */ + public function getIndexFields ($workspace) + { + require_once ('class.solr.php'); + + $solr = new BpmnEngine_SearchIndexAccess_Solr( $this->_solrIsEnabled, $this->_solrHost ); + + // print "SearchIndex!!!!"; + // create list of facets + $solrFieldsData = $solr->getListIndexedStoredFields( $workspace ); + // copy list of arrays + $listFields = array (); + foreach ($solrFieldsData->fields as $key => $fieldData) { + if (array_key_exists( 'dynamicBase', $fieldData )) { + $originalFieldName = substr( $key, 0, - strlen( $fieldData->dynamicBase ) + 1 ); + // $listFields[strtolower($originalFieldName)] = $key; //in case of case insentive strings + // Maintain case sensitive variable names + $listFields[$originalFieldName] = $key; + } else { + // $listFields[strtolower($key)] = $key; + // Maintain case sensitive variable names + $listFields[$key] = $key; + } + } + + return $listFields; } - - return $listFields; - } } \ No newline at end of file diff --git a/workflow/engine/classes/class.serverConfiguration.php b/workflow/engine/classes/class.serverConfiguration.php index d1e2a2926..399ca25eb 100755 --- a/workflow/engine/classes/class.serverConfiguration.php +++ b/workflow/engine/classes/class.serverConfiguration.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -25,392 +27,442 @@ /** * ServerConfiguration - serverConf class + * * @author Hugo Loza * @copyright 2010 COLOSA * @license GNU Affero General Public License * @package workflow.engine.ProcessMaker */ -class serverConf { - private $_aProperties = array (); - private $_aHeartbeatConfig = array (); - private $_aWSapces = array (); - private $aWSinfo = array (); - private $pluginsA = array (); - private $errors = array (); - private static $instance = NULL; - private $haveSetupData = false; - private $beatType = 'starting'; - private $ip; - private $index = 0; - private $os; - private $webserver; - private $host; - private $php; - private $mysql; - private $pmVersion; - private $pmProduct = 'PMCE'; - private $nextBeatDate; - public $logins; - private $lanDirection; - private $lanLanguage; - public $workspaces = array(); - public $rtlLang = array('ar','iw','fa'); - public $filePath = ''; +class serverConf +{ + private $_aProperties = array (); + private $_aHeartbeatConfig = array (); + private $_aWSapces = array (); + private $aWSinfo = array (); + private $pluginsA = array (); + private $errors = array (); + private static $instance = NULL; + private $haveSetupData = false; + private $beatType = 'starting'; + private $ip; + private $index = 0; + private $os; + private $webserver; + private $host; + private $php; + private $mysql; + private $pmVersion; + private $pmProduct = 'PMCE'; + private $nextBeatDate; + public $logins; + private $lanDirection; + private $lanLanguage; + public $workspaces = array (); + public $rtlLang = array ('ar','iw','fa' + ); + public $filePath = ''; - - public function __construct() { - if (defined('PATH_DATA')) { - $this->filePath = PATH_DATA . 'srvConf.singleton'; - } - } - - /** - * This function is instancing to this object - * param - * @return object - */ - function &getSingleton() { - if (self::$instance == NULL) { - self::$instance = new serverConf ( ); - if ((file_exists ( self::$instance->filePath ))&&(filesize(self::$instance->filePath)>0)){ - self::$instance->unSerializeInstance ( file_get_contents ( self::$instance->filePath ) ); - } - } - return self::$instance; - } - - /** - * This function generates a storable representation of this obejct - * param - * @return void - */ - function serializeInstance() { - return serialize ( self::$instance ); - } - - /** - * This function takes a single serialized object and converts it back a object - * @param string $serialized - * @return void - */ - function unSerializeInstance($serialized) { - if (self::$instance == NULL) { - self::$instance = new serverConf ( ); - } - - if($instance = @unserialize ( $serialized )){ - self::$instance = $instance; - } - } - - /** - * This will save the object in the specified file (defined as a property of this class) - * param - * @return void - */ - - function saveSingleton() { - if (defined('PATH_DATA')) { - $this->filePath = PATH_DATA . 'srvConf.singleton'; - $size = file_put_contents ( $this->filePath, $this->serializeInstance () ); - } - } - - /** - * With this is possible to save a property that will be saved in the properties - * array of this class. - * @param string $propertyName - * @param string $propertyValue - */ - function setProperty($propertyName, $propertyValue) { - $this->_aProperties [$propertyName] = $propertyValue; - $this->saveSingleton (); - } - - /** - * To unset a defined property. If it doesn't exist then it does nothing. - * @param string $propertyName - * @return void - */ - function unsetProperty($propertyName) { - if (isset ( $this->_aProperties [$propertyName] )) { - unset ( $this->_aProperties [$propertyName] ); - $this->saveSingleton (); - } - } - - /** - * Returns the value of a defined property. If it doesn't exist then returns null - * @param string $propertyName - * @return string/null - */ - function getProperty($propertyName) { - if (isset ( $this->_aProperties [$propertyName] )) { - return $this->_aProperties [$propertyName]; - } - else { - return null; - } - } - - /** - * Used to have a record of succesful logins to the system (total and by WS) - * param - * @return void - */ - function sucessfulLogin() { - $this->logins ++; - if ( isset ($this->workspaces[SYS_SYS]) && isset ($this->workspaces[SYS_SYS]['WSP_LOGINS']) ) - $this->workspaces[SYS_SYS]['WSP_LOGINS'] ++; - - if ( isset ($this->workspaces[SYS_SYS]) && !isset ($this->workspaces[SYS_SYS]['WSP_LOGINS']) ) - $this->workspaces[SYS_SYS]['WSP_LOGINS'] = 1; - - $this->saveSingleton (); - } - - function setWsInfo($wsname,$info){ - $this->aWSinfo[$wsname]=$info; - } - - /** - * This will togle the status of a workspace (enabled,disabled) - * @param string $wsName - * @return void - */ - function changeStatusWS($wsName) { - - if (isset ( $this->_aWSapces [$wsName] )) { //Enable WS - unset ( $this->_aWSapces [$wsName] ); - } - else { - $this->_aWSapces [$wsName] = 'disabled'; - } - $this->saveSingleton (); - } - - /** - * Return the status of a WS. If is disabled will return 1 otherwise 0 - * @param $wsname - * @return boolean - */ - function isWSDisabled($wsName) { - return isset ( $this->_aWSapces [$wsName] ); - } - - /** - * Check only if the server address or server name has changed, - * to send another beat in next minute. - * param - * @return boolean - */ - function checkIfHostNameHasChanged() { - //removed the PM_VERSION control, because when an upgrade is done, the haveSetupData has to be changed. - if ($this->ip != getenv ( 'SERVER_ADDR' )) - return false; - - if ($this->host != getenv ( 'SERVER_NAME' )) - return false; - - return $this->haveSetupData; - } - - - /** - * Will return a list of all WS in this system and their related information. - * @uses getWSList - * param - * @return array - */ - function getWSList() { - $dir = PATH_DB; - $wsArray = array (); - if (file_exists ( $dir )) { - if ($handle = opendir ( $dir )) { - while ( false !== ($file = readdir ( $handle )) ) { - if (($file != ".") && ($file != "..")) { - if (file_exists ( PATH_DB . $file . '/db.php' )) { //print $file."/db.php
"; - $statusl = ($this->isWSDisabled ( $file )) ? 'DISABLED' : 'ENABLED'; - if(isset($this->aWSinfo[$file])){ - $wsInfo = $this->aWSinfo[$file]; - }else{ - $wsInfo ['num_processes'] = "not gathered yet"; - $wsInfo ['num_cases'] = "not gathered yet";; - $wsInfo ['num_users'] = "not gathered yet"; - } - $wsArray [$file] = array ('WSP_ID' => $file, 'WSP_NAME' => $file, 'WSP_STATUS' => $statusl, 'WSP_PROCESS_COUNT' => $wsInfo ['num_processes'], 'WSP_CASES_COUNT' => $wsInfo ['num_cases'], 'WSP_USERS_COUNT' => isset($wsInfo ['num_users'])?$wsInfo ['num_users']:"" ); - if (isset ( $this->workspaces [$file] ['WSP_LOGINS'] )) - $wsArray [$file] ['WSP_LOGINS'] = $this->workspaces [$file] ['WSP_LOGINS']; - - } - } + public function __construct () + { + if (defined( 'PATH_DATA' )) { + $this->filePath = PATH_DATA . 'srvConf.singleton'; } - closedir ( $handle ); - } } - return $wsArray; - } - /** - * Will return all the information of a WS. - * - Status - * - # of cases - * - # of processes - * - # of users - * @param string $wsName - * @return array - */ - function getWorkspaceInfo($wsName) { - $aResult = Array ('num_processes' => '0', 'num_cases' => '0' ); - $result = array(); - require_once 'classes/model/Process.php'; - require_once 'classes/model/Application.php'; - require_once 'classes/model/Users.php'; - - $Criteria = new Criteria('workflow'); - $Criteria->add (ProcessPeer::PRO_STATUS, 'ACTIVE' , CRITERIA::EQUAL ); - $aResult['num_processes'] = ProcessPeer::doCount($Criteria); - - $Criteria = new Criteria('workflow'); - $Criteria->add (ApplicationPeer::APP_STATUS, 'COMPLETED' , CRITERIA::NOT_EQUAL ); - $aResult['num_cases'] = ApplicationPeer::doCount($Criteria); - - $Criteria = new Criteria('workflow'); - $Criteria->add (UsersPeer::USR_STATUS, array('DELETED','DISABLED') , CRITERIA::NOT_IN ); - $aResult['num_users'] = UsersPeer::doCount($Criteria); - return $aResult; - } - - /** - * Will list the plugins of the system - * param - * @return array - */ - function getPluginsList() { - return $this->pluginsA; - } - - /*** - * Register a PLugin - */ - function addPlugin($workspace,$info){ - $this->pluginsA[$workspace]=$info; - } - - function getDBVersion(){ - $sMySQLVersion = '?????'; - if (defined ( "DB_HOST" )) { - G::LoadClass ( 'net' ); - G::LoadClass ( 'dbConnections' ); - $dbNetView = new NET ( DB_HOST ); - $dbNetView->loginDbServer ( DB_USER, DB_PASS ); - - $dbConns = new dbConnections ( '' ); - $availdb = ''; - foreach ( $dbConns->getDbServicesAvailables () as $key => $val ) { - if ($availdb != '') - $availdb .= ', '; - $availdb .= $val ['name']; - } - - try { - $sMySQLVersion = $dbNetView->getDbServerVersion ( 'mysql' ); - } - catch ( Exception $oException ) { - $sMySQLVersion = '?????'; - } + /** + * This function is instancing to this object + * param + * + * @return object + */ + function &getSingleton () + { + if (self::$instance == NULL) { + self::$instance = new serverConf(); + if ((file_exists( self::$instance->filePath )) && (filesize( self::$instance->filePath ) > 0)) { + self::$instance->unSerializeInstance( file_get_contents( self::$instance->filePath ) ); + } + } + return self::$instance; } - return $sMySQLVersion; - } - /** - * Will reset all the logins' count - * param - * @return void - */ - function resetLogins() { - $this->logins = 0; - if(is_array($this->workspaces)){ - foreach ( $this->workspaces as $wsName => $wsinfo ) { - $this->workspaces [$wsName] ['WSP_LOGINS'] = 0; + /** + * This function generates a storable representation of this obejct + * param + * + * @return void + */ + function serializeInstance () + { + return serialize( self::$instance ); } - } - } + /** + * This function takes a single serialized object and converts it back a object + * + * @param string $serialized + * @return void + */ + function unSerializeInstance ($serialized) + { + if (self::$instance == NULL) { + self::$instance = new serverConf(); + } - /** - * Get the value of language direction property - * @param void - * @return string - */ - function getLanDirection() { - if (!isset($this->lanDirection) ) { - $this->lanDirection = 'L'; - } - if( defined('SYS_LANG') ) { - //if we already have the landirection for this language, just return from serverConf - if ( $this->lanLanguage == SYS_LANG ) - return $this->lanDirection; + if ($instance = @unserialize( $serialized )) { + self::$instance = $instance; + } + } - //if not , we need to query Database, in order to get the direction - $this->lanDirection = 'L'; //default value; - $this->lanLanguage = SYS_LANG; - require_once 'classes/model/Language.php'; - $oLang = new Language(); - try{ - $aLang = $oLang->load(SYS_LANG); - if( isset($aLang['LAN_DIRECTION']) ){ - $this->lanDirection = strtoupper($aLang['LAN_DIRECTION']); + /** + * This will save the object in the specified file (defined as a property of this class) + * param + * + * @return void + */ + + function saveSingleton () + { + if (defined( 'PATH_DATA' )) { + $this->filePath = PATH_DATA . 'srvConf.singleton'; + $size = file_put_contents( $this->filePath, $this->serializeInstance() ); + } + } + + /** + * With this is possible to save a property that will be saved in the properties + * array of this class. + * + * @param string $propertyName + * @param string $propertyValue + */ + function setProperty ($propertyName, $propertyValue) + { + $this->_aProperties[$propertyName] = $propertyValue; + $this->saveSingleton(); + } + + /** + * To unset a defined property. + * If it doesn't exist then it does nothing. + * + * @param string $propertyName + * @return void + */ + function unsetProperty ($propertyName) + { + if (isset( $this->_aProperties[$propertyName] )) { + unset( $this->_aProperties[$propertyName] ); + $this->saveSingleton(); + } + } + + /** + * Returns the value of a defined property. + * If it doesn't exist then returns null + * + * @param string $propertyName + * @return string/null + */ + function getProperty ($propertyName) + { + if (isset( $this->_aProperties[$propertyName] )) { + return $this->_aProperties[$propertyName]; + } else { + return null; + } + } + + /** + * Used to have a record of succesful logins to the system (total and by WS) + * param + * + * @return void + */ + function sucessfulLogin () + { + $this->logins ++; + if (isset( $this->workspaces[SYS_SYS] ) && isset( $this->workspaces[SYS_SYS]['WSP_LOGINS'] )) + $this->workspaces[SYS_SYS]['WSP_LOGINS'] ++; + + if (isset( $this->workspaces[SYS_SYS] ) && ! isset( $this->workspaces[SYS_SYS]['WSP_LOGINS'] )) + $this->workspaces[SYS_SYS]['WSP_LOGINS'] = 1; + + $this->saveSingleton(); + } + + function setWsInfo ($wsname, $info) + { + $this->aWSinfo[$wsname] = $info; + } + + /** + * This will togle the status of a workspace (enabled,disabled) + * + * @param string $wsName + * @return void + */ + function changeStatusWS ($wsName) + { + + if (isset( $this->_aWSapces[$wsName] )) { //Enable WS + unset( $this->_aWSapces[$wsName] ); + } else { + $this->_aWSapces[$wsName] = 'disabled'; } $this->saveSingleton(); - } - catch(Exception $e){ - $this->lanDirection = 'L'; - } } - return $this->lanDirection; - } -/** - * With this is possible to save a property that will be saved in the properties - * array of this class. - * @param string $propertyName - * @param string $propertyValue - * @param string $workspace - */ - function setHeartbeatProperty($propertyName, $propertyValue, $workspace) { - $this->_aHeartbeatConfig [$workspace][$propertyName] = $propertyValue; - $this->saveSingleton (); - } - /** - * To unset a defined property. If it doesn't exist then it does nothing. - * @param string $propertyName - * @param string $workspace - * @return void - */ - function unsetHeartbeatProperty($propertyName,$workspace) { - if (isset ( $this->_aHeartbeatConfig [$workspace][$propertyName] )) - unset ( $this->_aHeartbeatConfig [$workspace][$propertyName] ); - $this->saveSingleton (); - } - - /** - * Returns the value of a defined property. If it doesn't exist then returns null - * @param string $propertyName - * @return string/null - */ - function getHeartbeatProperty($propertyName, $workspace) { - if (isset ( $this->_aHeartbeatConfig [$workspace][$propertyName] )) { - return $this->_aHeartbeatConfig [$workspace][$propertyName]; - } else { - return null; + /** + * Return the status of a WS. + * If is disabled will return 1 otherwise 0 + * + * @param $wsname + * @return boolean + */ + function isWSDisabled ($wsName) + { + return isset( $this->_aWSapces[$wsName] ); } - } - function isRtl ($lang = SYS_LANG) { - $lang = substr($lang, 0, 2); - return in_array($lang, $this->rtlLang); - } + /** + * Check only if the server address or server name has changed, + * to send another beat in next minute. + * param + * + * @return boolean + */ + function checkIfHostNameHasChanged () + { + //removed the PM_VERSION control, because when an upgrade is done, the haveSetupData has to be changed. + if ($this->ip != getenv( 'SERVER_ADDR' )) + return false; + if ($this->host != getenv( 'SERVER_NAME' )) + return false; + + return $this->haveSetupData; + } + + /** + * Will return a list of all WS in this system and their related information. + * + * @uses getWSList + * param + * @return array + */ + function getWSList () + { + $dir = PATH_DB; + $wsArray = array (); + if (file_exists( $dir )) { + if ($handle = opendir( $dir )) { + while (false !== ($file = readdir( $handle ))) { + if (($file != ".") && ($file != "..")) { + if (file_exists( PATH_DB . $file . '/db.php' )) { //print $file."/db.php
"; + $statusl = ($this->isWSDisabled( $file )) ? 'DISABLED' : 'ENABLED'; + if (isset( $this->aWSinfo[$file] )) { + $wsInfo = $this->aWSinfo[$file]; + } else { + $wsInfo['num_processes'] = "not gathered yet"; + $wsInfo['num_cases'] = "not gathered yet"; + ; + $wsInfo['num_users'] = "not gathered yet"; + } + $wsArray[$file] = array ('WSP_ID' => $file,'WSP_NAME' => $file,'WSP_STATUS' => $statusl,'WSP_PROCESS_COUNT' => $wsInfo['num_processes'],'WSP_CASES_COUNT' => $wsInfo['num_cases'],'WSP_USERS_COUNT' => isset( $wsInfo['num_users'] ) ? $wsInfo['num_users'] : "" + ); + if (isset( $this->workspaces[$file]['WSP_LOGINS'] )) + $wsArray[$file]['WSP_LOGINS'] = $this->workspaces[$file]['WSP_LOGINS']; + + } + } + } + closedir( $handle ); + } + } + return $wsArray; + + } + + /** + * Will return all the information of a WS. + * - Status + * - # of cases + * - # of processes + * - # of users + * + * @param string $wsName + * @return array + */ + function getWorkspaceInfo ($wsName) + { + $aResult = Array ('num_processes' => '0','num_cases' => '0' + ); + $result = array (); + require_once 'classes/model/Process.php'; + require_once 'classes/model/Application.php'; + require_once 'classes/model/Users.php'; + + $Criteria = new Criteria( 'workflow' ); + $Criteria->add( ProcessPeer::PRO_STATUS, 'ACTIVE', CRITERIA::EQUAL ); + $aResult['num_processes'] = ProcessPeer::doCount( $Criteria ); + + $Criteria = new Criteria( 'workflow' ); + $Criteria->add( ApplicationPeer::APP_STATUS, 'COMPLETED', CRITERIA::NOT_EQUAL ); + $aResult['num_cases'] = ApplicationPeer::doCount( $Criteria ); + + $Criteria = new Criteria( 'workflow' ); + $Criteria->add( UsersPeer::USR_STATUS, array ('DELETED','DISABLED' + ), CRITERIA::NOT_IN ); + $aResult['num_users'] = UsersPeer::doCount( $Criteria ); + return $aResult; + } + + /** + * Will list the plugins of the system + * param + * + * @return array + */ + function getPluginsList () + { + return $this->pluginsA; + } + + /** + * * + * Register a PLugin + */ + function addPlugin ($workspace, $info) + { + $this->pluginsA[$workspace] = $info; + } + + function getDBVersion () + { + $sMySQLVersion = '?????'; + if (defined( "DB_HOST" )) { + G::LoadClass( 'net' ); + G::LoadClass( 'dbConnections' ); + $dbNetView = new NET( DB_HOST ); + $dbNetView->loginDbServer( DB_USER, DB_PASS ); + + $dbConns = new dbConnections( '' ); + $availdb = ''; + foreach ($dbConns->getDbServicesAvailables() as $key => $val) { + if ($availdb != '') + $availdb .= ', '; + $availdb .= $val['name']; + } + + try { + $sMySQLVersion = $dbNetView->getDbServerVersion( 'mysql' ); + } catch (Exception $oException) { + $sMySQLVersion = '?????'; + } + } + return $sMySQLVersion; + } + + /** + * Will reset all the logins' count + * param + * + * @return void + */ + function resetLogins () + { + $this->logins = 0; + if (is_array( $this->workspaces )) { + foreach ($this->workspaces as $wsName => $wsinfo) { + $this->workspaces[$wsName]['WSP_LOGINS'] = 0; + } + } + } + + /** + * Get the value of language direction property + * + * @param void + * @return string + */ + function getLanDirection () + { + if (! isset( $this->lanDirection )) { + $this->lanDirection = 'L'; + } + if (defined( 'SYS_LANG' )) { + //if we already have the landirection for this language, just return from serverConf + if ($this->lanLanguage == SYS_LANG) + return $this->lanDirection; + + //if not , we need to query Database, in order to get the direction + $this->lanDirection = 'L'; //default value; + $this->lanLanguage = SYS_LANG; + require_once 'classes/model/Language.php'; + $oLang = new Language(); + try { + $aLang = $oLang->load( SYS_LANG ); + if (isset( $aLang['LAN_DIRECTION'] )) { + $this->lanDirection = strtoupper( $aLang['LAN_DIRECTION'] ); + } + $this->saveSingleton(); + } catch (Exception $e) { + $this->lanDirection = 'L'; + } + } + return $this->lanDirection; + } + + /** + * With this is possible to save a property that will be saved in the properties + * array of this class. + * + * @param string $propertyName + * @param string $propertyValue + * @param string $workspace + */ + function setHeartbeatProperty ($propertyName, $propertyValue, $workspace) + { + $this->_aHeartbeatConfig[$workspace][$propertyName] = $propertyValue; + $this->saveSingleton(); + } + + /** + * To unset a defined property. + * If it doesn't exist then it does nothing. + * + * @param string $propertyName + * @param string $workspace + * @return void + */ + function unsetHeartbeatProperty ($propertyName, $workspace) + { + if (isset( $this->_aHeartbeatConfig[$workspace][$propertyName] )) + unset( $this->_aHeartbeatConfig[$workspace][$propertyName] ); + $this->saveSingleton(); + } + + /** + * Returns the value of a defined property. + * If it doesn't exist then returns null + * + * @param string $propertyName + * @return string/null + */ + function getHeartbeatProperty ($propertyName, $workspace) + { + if (isset( $this->_aHeartbeatConfig[$workspace][$propertyName] )) { + return $this->_aHeartbeatConfig[$workspace][$propertyName]; + } else { + return null; + } + } + + function isRtl ($lang = SYS_LANG) + { + $lang = substr( $lang, 0, 2 ); + return in_array( $lang, $this->rtlLang ); + } } \ No newline at end of file diff --git a/workflow/engine/classes/class.sessions.php b/workflow/engine/classes/class.sessions.php index 283ea6164..e4912f36b 100755 --- a/workflow/engine/classes/class.sessions.php +++ b/workflow/engine/classes/class.sessions.php @@ -1,11 +1,12 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * along with this program. If not, see . + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * + * */ require_once 'classes/model/Session.php'; + /** * Sessions - Sessions class + * * @package workflow.engine.ProcessMaker * @author Everth S. Berrios Morales * @copyright 2008 COLOSA */ -class Sessions { - - protected $tmpfile; - private $sessionId; - private $globals; - - /** - * This function is the constructor of the Sessions class - * @param string $sSessionId - * @return void - */ - public function __construct($sSessionId=NULL){ - $this->sessionId = $sSessionId; - } - - /** - * This function gets the user session - * - * - * @name getSessionUser - * - * @param string sSessionId - * @return array - */ - public function getSessionUser($sSessionId=NULL) - { - try - { - if($sSessionId != NULL){ - $this->sessionId = $sSessionId; - } else if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); - } - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(SessionPeer::USR_UID); - $oCriteria->addSelectColumn(SessionPeer::SES_STATUS); - $oCriteria->addSelectColumn(SessionPeer::SES_DUE_DATE); - $oCriteria->add(SessionPeer::SES_UID, $this->sessionId); - - $oDataset = SessionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( !is_array($aRow) ){ - $this->deleteTmpfile(); - } - return $aRow; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * This function checks the user session - * - * - * @name verifySession - * - * @param string sSessionId - * @return array - */ - public function verifySession($sSessionId=NULL) - { - try - { - if($sSessionId != NULL){ - $this->sessionId = $sSessionId; - } else if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); - } - - $date=date('Y-m-d H:i:s'); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(SessionPeer::USR_UID); - $oCriteria->addSelectColumn(SessionPeer::SES_STATUS); - $oCriteria->addSelectColumn(SessionPeer::SES_DUE_DATE); - $oCriteria->add(SessionPeer::SES_UID, $this->sessionId); - $oCriteria->add(SessionPeer::SES_STATUS, 'ACTIVE'); - $oCriteria->add(SessionPeer::SES_DUE_DATE, $date, Criteria::GREATER_EQUAL); - - $oDataset = SessionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); +class Sessions +{ - if( !is_array($aRow) ){ - $this->deleteTmpfile(); - } - - return $aRow; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * This function registers into globals variables - * - * - * @name registerGlobal - * - * @param string $name - * @param string $value - * @return void - */ - public function registerGlobal($name, $value) - { - $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; - - if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); - } - - $tmpfile_content = ''; - if( is_file($this->tmpfile) && trim(file_get_contents($this->tmpfile)) != '' ) { - $tmpfile_content = file_get_contents($this->tmpfile); - } - - //getting the global array - if( $tmpfile_content != ''){ - $this->globals = unserialize($tmpfile_content); - } else { - $this->globals = Array(); - } - - //registering the new global variable - $this->globals[$name] = $value; - - //saving the global array - $tmpfile_content = serialize($this->globals); - file_put_contents($this->tmpfile, $tmpfile_content); - - } - - /** - * This function gets a global variable - * - * - * @name getGlobal - * - * @param string $name - * @return string - */ - public function getGlobal($name) - { - $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; - - if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); - } - - $tmpfile_content = ''; - if( is_file($this->tmpfile) && trim(file_get_contents($this->tmpfile)) != '' ) { - $tmpfile_content = file_get_contents($this->tmpfile); - } - - //getting the global array - if( $tmpfile_content != ''){ - $this->globals = unserialize($tmpfile_content); - } else { - $this->globals = Array(); - } - - //getting the new global variable - if( isset($this->globals[$name]) ){ - return $this->globals[$name]; - } else { - return ''; - } - } - - /** - * This function gets all globals variables - * - * - * @name getGlobals - * - * @param string $name - * @return array - */ - public function getGlobals() - { - $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; - - if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); - } - - $tmpfile_content = ''; - if( is_file($this->tmpfile) && trim(file_get_contents($this->tmpfile)) != '' ) { - $tmpfile_content = file_get_contents($this->tmpfile); - } - - //getting the global array - if( $tmpfile_content != ''){ - $this->globals = unserialize($tmpfile_content); - } else { - $this->globals = Array(); - } - return $this->globals; - } - - /** - * This function removes a temporal file - * - * - * @name deleteTmpfile - * - * param - * @return void - */ - private function deleteTmpfile(){ - if($this->sessionId == NULL){ - throw new Exception('session id was not set.'); + protected $tmpfile; + private $sessionId; + private $globals; + + /** + * This function is the constructor of the Sessions class + * + * @param string $sSessionId + * @return void + */ + public function __construct ($sSessionId = NULL) + { + $this->sessionId = $sSessionId; } - $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; - @unlink($this->tmpfile); - } - + + /** + * This function gets the user session + * + * + * @name getSessionUser + * + * @param string sSessionId + * @return array + */ + public function getSessionUser ($sSessionId = NULL) + { + try { + if ($sSessionId != NULL) { + $this->sessionId = $sSessionId; + } else if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( SessionPeer::USR_UID ); + $oCriteria->addSelectColumn( SessionPeer::SES_STATUS ); + $oCriteria->addSelectColumn( SessionPeer::SES_DUE_DATE ); + $oCriteria->add( SessionPeer::SES_UID, $this->sessionId ); + + $oDataset = SessionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (! is_array( $aRow )) { + $this->deleteTmpfile(); + } + return $aRow; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * This function checks the user session + * + * + * @name verifySession + * + * @param string sSessionId + * @return array + */ + public function verifySession ($sSessionId = NULL) + { + try { + if ($sSessionId != NULL) { + $this->sessionId = $sSessionId; + } else if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + + $date = date( 'Y-m-d H:i:s' ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( SessionPeer::USR_UID ); + $oCriteria->addSelectColumn( SessionPeer::SES_STATUS ); + $oCriteria->addSelectColumn( SessionPeer::SES_DUE_DATE ); + $oCriteria->add( SessionPeer::SES_UID, $this->sessionId ); + $oCriteria->add( SessionPeer::SES_STATUS, 'ACTIVE' ); + $oCriteria->add( SessionPeer::SES_DUE_DATE, $date, Criteria::GREATER_EQUAL ); + + $oDataset = SessionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + if (! is_array( $aRow )) { + $this->deleteTmpfile(); + } + + return $aRow; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * This function registers into globals variables + * + * + * @name registerGlobal + * + * @param string $name + * @param string $value + * @return void + */ + public function registerGlobal ($name, $value) + { + $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; + + if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + + $tmpfile_content = ''; + if (is_file( $this->tmpfile ) && trim( file_get_contents( $this->tmpfile ) ) != '') { + $tmpfile_content = file_get_contents( $this->tmpfile ); + } + + //getting the global array + if ($tmpfile_content != '') { + $this->globals = unserialize( $tmpfile_content ); + } else { + $this->globals = Array (); + } + + //registering the new global variable + $this->globals[$name] = $value; + + //saving the global array + $tmpfile_content = serialize( $this->globals ); + file_put_contents( $this->tmpfile, $tmpfile_content ); + + } + + /** + * This function gets a global variable + * + * + * @name getGlobal + * + * @param string $name + * @return string + */ + public function getGlobal ($name) + { + $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; + + if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + + $tmpfile_content = ''; + if (is_file( $this->tmpfile ) && trim( file_get_contents( $this->tmpfile ) ) != '') { + $tmpfile_content = file_get_contents( $this->tmpfile ); + } + + //getting the global array + if ($tmpfile_content != '') { + $this->globals = unserialize( $tmpfile_content ); + } else { + $this->globals = Array (); + } + + //getting the new global variable + if (isset( $this->globals[$name] )) { + return $this->globals[$name]; + } else { + return ''; + } + } + + /** + * This function gets all globals variables + * + * + * @name getGlobals + * + * @param string $name + * @return array + */ + public function getGlobals () + { + $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; + + if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + + $tmpfile_content = ''; + if (is_file( $this->tmpfile ) && trim( file_get_contents( $this->tmpfile ) ) != '') { + $tmpfile_content = file_get_contents( $this->tmpfile ); + } + + //getting the global array + if ($tmpfile_content != '') { + $this->globals = unserialize( $tmpfile_content ); + } else { + $this->globals = Array (); + } + return $this->globals; + } + + /** + * This function removes a temporal file + * + * + * @name deleteTmpfile + * + * param + * @return void + */ + private function deleteTmpfile () + { + if ($this->sessionId == NULL) { + throw new Exception( 'session id was not set.' ); + } + $this->tmpfile = G::sys_get_temp_dir() . PATH_SEP . "pm-rg-{$this->sessionId}"; + @unlink( $this->tmpfile ); + } + } diff --git a/workflow/engine/classes/class.solr.php b/workflow/engine/classes/class.solr.php index 52061bad4..6aa025006 100644 --- a/workflow/engine/classes/class.solr.php +++ b/workflow/engine/classes/class.solr.php @@ -1,6 +1,6 @@ _solrIsEnabled = $solrIsEnabled; - $this->_solrHost = $solrHost; - } - - /** - * Verify if the Solr service is available - * @gearman = false - * @rest = false - * @background = false - * - * @return bool - */ - public function isEnabled() - { - // verify solr server response - - return $this->_solrIsEnabled; - } - - /** - * Returns the total number of indexed documents - * @gearman = false - * @rest = false - * @background = false - * - * @param - * workspace: workspace name - * @return total - */ - public function getNumberDocuments($workspace) - { - if (! $this->_solrIsEnabled) - return; - // get configuration information in base to workspace parameter - - // get total number of documents in registry - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/select/?q=*:*"; - $solrIntruct .= self::SOLR_VERSION; - $solrIntruct .= "&start=0&rows=0&echoParams=none&wt=json"; - - $handlerTotal = curl_init ($solrIntruct); - curl_setopt ($handlerTotal, CURLOPT_RETURNTRANSFER, true); - - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handlerTotal, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handlerTotal, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handlerTotal, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handlerTotal, CURLOPT_HTTPHEADER, array('Expect:')); + public function __construct ($solrIsEnabled = false, $solrHost = "") + { + // use the parameters to initialize class + $this->_solrIsEnabled = $solrIsEnabled; + $this->_solrHost = $solrHost; } - $responseTotal = curl_exec ($handlerTotal); - curl_close ($handlerTotal); + /** + * Verify if the Solr service is available + * @gearman = false + * @rest = false + * @background = false + * + * @return bool + */ + public function isEnabled () + { + // verify solr server response - // verify the result of solr - $responseSolrTotal = G::json_decode ($responseTotal); - if ($responseSolrTotal->responseHeader->status != 0) { - throw new Exception ("Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - $numTotalDocs = $responseSolrTotal->response->numFound; - return $numTotalDocs; - } - /** - * Execute a query in base to Requested data - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function executeQuery($solrRequestData) - { - if (! $this->_solrIsEnabled) - return; - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $workspace = $solrRequestData->workspace; - - // format request - $query = empty ($solrRequestData->searchText) ? '*:*' : $solrRequestData->searchText; - $query = rawurlencode ($query); - $start = '&start=' . $solrRequestData->startAfter; - $rows = '&rows=' . $solrRequestData->pageSize; - $fieldList = ''; - $cols = $solrRequestData->includeCols; - if (! empty ($cols)) { - $fieldList = "&fl=" . implode (",", $cols); - } - $sort = ''; - if ($solrRequestData->numSortingCols > 0) { - $sort = '&sort='; - for ($i = 0; $i < $solrRequestData->numSortingCols; $i ++) { - $sort .= $solrRequestData->sortCols [$i] . "%20" . $solrRequestData->sortDir [$i] . ","; - } - - $sort = substr_replace ($sort, "", - 1); - } - $resultFormat = empty ($solrRequestData->resultFormat) ? '' : '&wt=' . $solrRequestData->resultFormat; - $filters = ''; - $aFilters = explode (',', $solrRequestData->filterText); - foreach ($aFilters as $value) { - $filters .= '&fq=' . urlencode ($value); + return $this->_solrIsEnabled; } - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/select/?q=$query"; - $solrIntruct .= "&echoParams=none"; - $solrIntruct .= self::SOLR_VERSION; - $solrIntruct .= $start; - $solrIntruct .= $rows; - $solrIntruct .= $fieldList; - $solrIntruct .= $sort; - $solrIntruct .= $filters; - $solrIntruct .= $resultFormat; - // send query - // search the cases in base to datatable parameters - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); + /** + * Returns the total number of indexed documents + * @gearman = false + * @rest = false + * @background = false + * + * @param workspace: workspace name + * @return total + */ + public function getNumberDocuments ($workspace) + { + if (! $this->_solrIsEnabled) + return; + // get configuration information in base to workspace parameter - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + + // get total number of documents in registry + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/select/?q=*:*"; + $solrIntruct .= self::SOLR_VERSION; + $solrIntruct .= "&start=0&rows=0&echoParams=none&wt=json"; + + $handlerTotal = curl_init( $solrIntruct ); + curl_setopt( $handlerTotal, CURLOPT_RETURNTRANSFER, true ); + + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handlerTotal, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handlerTotal, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handlerTotal, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handlerTotal, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } + + $responseTotal = curl_exec( $handlerTotal ); + curl_close( $handlerTotal ); + + // verify the result of solr + $responseSolrTotal = G::json_decode( $responseTotal ); + if ($responseSolrTotal->responseHeader->status != 0) { + throw new Exception( "Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } + $numTotalDocs = $responseSolrTotal->response->numFound; + return $numTotalDocs; } - $response = curl_exec ($handler); - curl_close ($handler); + /** + * Execute a query in base to Requested data + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function executeQuery ($solrRequestData) + { + if (! $this->_solrIsEnabled) + return; + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $workspace = $solrRequestData->workspace; - // decode - $responseSolr = G::json_decode ($response); - if ($responseSolr->responseHeader->status != 0) { - throw new Exception ("Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n"); + // format request + $query = empty( $solrRequestData->searchText ) ? '*:*' : $solrRequestData->searchText; + $query = rawurlencode( $query ); + $start = '&start=' . $solrRequestData->startAfter; + $rows = '&rows=' . $solrRequestData->pageSize; + $fieldList = ''; + $cols = $solrRequestData->includeCols; + if (! empty( $cols )) { + $fieldList = "&fl=" . implode( ",", $cols ); + } + $sort = ''; + if ($solrRequestData->numSortingCols > 0) { + $sort = '&sort='; + for ($i = 0; $i < $solrRequestData->numSortingCols; $i ++) { + $sort .= $solrRequestData->sortCols[$i] . "%20" . $solrRequestData->sortDir[$i] . ","; + } + + $sort = substr_replace( $sort, "", - 1 ); + } + $resultFormat = empty( $solrRequestData->resultFormat ) ? '' : '&wt=' . $solrRequestData->resultFormat; + $filters = ''; + $aFilters = explode( ',', $solrRequestData->filterText ); + foreach ($aFilters as $value) { + $filters .= '&fq=' . urlencode( $value ); + } + + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/select/?q=$query"; + $solrIntruct .= "&echoParams=none"; + $solrIntruct .= self::SOLR_VERSION; + $solrIntruct .= $start; + $solrIntruct .= $rows; + $solrIntruct .= $fieldList; + $solrIntruct .= $sort; + $solrIntruct .= $filters; + $solrIntruct .= $resultFormat; + // send query + // search the cases in base to datatable parameters + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } + + $response = curl_exec( $handler ); + curl_close( $handler ); + + // decode + $responseSolr = G::json_decode( $response ); + if ($responseSolr->responseHeader->status != 0) { + throw new Exception( "Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } + + return $responseSolr; } - return $responseSolr; - } + /** + * Insert or Update document index + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function updateDocument ($solrUpdateDocument) + { + if (! $this->_solrIsEnabled) + return; + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $solrUpdateDocument->workspace; + $solrIntruct .= "/update"; - /** - * Insert or Update document index - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function updateDocument($solrUpdateDocument) - { - if (! $this->_solrIsEnabled) - return; - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $solrUpdateDocument->workspace; - $solrIntruct .= "/update"; + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, $solrUpdateDocument->document ); // data - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, $solrUpdateDocument->document); // data - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } + + $response = curl_exec( $handler ); + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); - curl_close ($handler); + /** + * Commit the changes since the last commit + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function commitChanges ($workspace) + { + if (! $this->_solrIsEnabled) + return; + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/update"; - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - } + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, "" ); // data - /** - * Commit the changes since the last commit - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function commitChanges($workspace) - { - if (! $this->_solrIsEnabled) - return; - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/update"; - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, ""); // data + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + $response = curl_exec( $handler ); + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); - curl_close ($handler); + /** + * Rollback the changes since the last commit + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function rollbackChanges ($workspace) + { + if (! $this->_solrIsEnabled) + return; - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - } + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/update"; - /** - * Rollback the changes since the last commit - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function rollbackChanges($workspace) - { - if (! $this->_solrIsEnabled) - return; + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, "" ); // data - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/update"; - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, ""); // data + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + $response = curl_exec( $handler ); + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); - curl_close ($handler); + /** + * Optimize Solr index + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function optimizeChanges ($workspace) + { + if (! $this->_solrIsEnabled) + return; - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - } + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/update"; - /** - * Optimize Solr index - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function optimizeChanges($workspace) - { - if (! $this->_solrIsEnabled) - return; + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, "" ); // data - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/update"; - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, ""); // data + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + $response = curl_exec( $handler ); + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); - curl_close ($handler); + /** + * Return the list of the stored fields in Solr + * + * @param string $workspace Solr instance name + * @throws Exception + * @return void mixed of field names + */ + public function getListIndexedStoredFields ($workspace) + { + if (! $this->_solrIsEnabled) + return; - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - } + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/admin/luke?numTerms=0&wt=json"; - /** - * Return the list of the stored fields in Solr - * - * @param string $workspace - * Solr instance name - * @throws Exception - * @return void mixed of field names - */ - public function getListIndexedStoredFields($workspace) - { - if (! $this->_solrIsEnabled) - return; + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/admin/luke?numTerms=0&wt=json"; + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + $response = curl_exec( $handler ); + curl_close( $handler ); + // decode + $responseSolr = G::json_decode( $response ); + if ($responseSolr->responseHeader->status != 0) { + throw new Exception( "Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } + return $responseSolr; } - $response = curl_exec ($handler); - curl_close ($handler); - // decode - $responseSolr = G::json_decode ($response); - if ($responseSolr->responseHeader->status != 0) { - throw new Exception ("Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - return $responseSolr; - } + /** + * Delete all documents from index + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function deleteAllDocuments ($workspace) + { + if (! $this->_solrIsEnabled) + return; + // $registry = Zend_Registry::getInstance(); - /** - * Delete all documents from index - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function deleteAllDocuments($workspace) - { - if (! $this->_solrIsEnabled) - return; - // $registry = Zend_Registry::getInstance(); - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/update"; + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/update"; - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, "*:*"); // data + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, "*:*" ); // data - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } + + $response = curl_exec( $handler ); + + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); + /** + * Delete specified documents from index + * @gearman = false + * @rest = false + * @background = false + * + * @return solr response + */ + public function deleteDocument ($workspace, $idQuery) + { + if (! $this->_solrIsEnabled) + return; + // $registry = Zend_Registry::getInstance(); - curl_close ($handler); - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n"); - } - } + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/"; + $solrIntruct .= $workspace; + $solrIntruct .= "/update"; - /** - * Delete specified documents from index - * @gearman = false - * @rest = false - * @background = false - * - * @return solr response - */ - public function deleteDocument($workspace, $idQuery) - { - if (! $this->_solrIsEnabled) - return; - // $registry = Zend_Registry::getInstance(); + $handler = curl_init( $solrIntruct ); + curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Content-type:application/xml' + ) ); // -H + curl_setopt( $handler, CURLOPT_BINARYTRANSFER, TRUE ); // --data-binary + curl_setopt( $handler, CURLOPT_POSTFIELDS, "" . $idQuery . "" ); // data - $solrIntruct = ''; - // get configuration information in base to workspace parameter - $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/"; - $solrIntruct .= $workspace; - $solrIntruct .= "/update"; - $handler = curl_init ($solrIntruct); - curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($handler, CURLOPT_HTTPHEADER, array ( - 'Content-type:application/xml' - )); // -H - curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary - curl_setopt ($handler, CURLOPT_POSTFIELDS, "" . $idQuery . ""); // data + //Apply proxy settings + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') ); + if ($sysConf['proxy_port'] != '') { + curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] ); + } + if ($sysConf['proxy_user'] != '') { + curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') ); + } + curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:' + ) ); + } - //Apply proxy settings - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '')); - if ($sysConf['proxy_port'] != '') { - curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']); - } - if ($sysConf['proxy_user'] != '') { - curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '')); - } - curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:')); + $response = curl_exec( $handler ); + + curl_close( $handler ); + + $swOk = strpos( $response, '0' ); + if (! $swOk) { + throw new Exception( "Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n" ); + } } - $response = curl_exec ($handler); + /** + * Execute a query in base to Request data + * + * @param Entity_FacetRequest $facetRequestEntity + * @return solr response: list of facets array + */ + public function getFacetsList ($facetRequest) + { + if (! $this->_solrIsEnabled) + return; - curl_close ($handler); + $solrIntruct = ''; + // get configuration information in base to workspace parameter + $workspace = $facetRequest->workspace; - $swOk = strpos ($response, '0'); - if (! $swOk) { - throw new Exception ("Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n"); + // format request + $query = empty( $facetRequest->searchText ) ? '*:*' : $facetRequest->searchText; + $query = rawurlencode( $query ); + $start = '&start=0'; + $rows = '&rows=0'; + $facets = '&facet=on&facet.mincount=1&facet.limit=20'; // enable facet and + // only return facets + // with minimun one + // instance + foreach ($facetRequest->facetFields as $value) { + $facets .= '&facet.field=' . $value; + } + foreach ($facetRequest->facetQueries as $value) { + $facets .= '&facet.query=' . $value; + } + if (! empty( $facetRequest->facetDates )) { + foreach ($facetRequest->facetDates as $value) { + $facets .= '&facet.date=' . $value; + } + $facets .= '&facet.date.start=' . $facetRequest->facetDatesStart; + $facets .= '&facet.date.end=' . $facetRequest->facetDatesEnd; + $facets .= '&facet.date.gap=' . $facetRequest->facetDateGap; + } + $filters = ''; + foreach ($facetRequest->filters as $value) { + $filters .= '&fq=' . $value; + } + // echo "
";
+
+
+        $resultFormat = '&wt=json';
+
+        $solrIntruct = (substr( $this->_solrHost, - 1 ) == "/") ? $this->_solrHost : $this->_solrHost . "/";
+        $solrIntruct .= $workspace;
+        $solrIntruct .= "/select/?q=$query";
+        $solrIntruct .= "&echoParams=none";
+        $solrIntruct .= self::SOLR_VERSION;
+        $solrIntruct .= $start;
+        $solrIntruct .= $rows;
+        $solrIntruct .= $facets;
+        $solrIntruct .= $filters;
+        $solrIntruct .= $resultFormat;
+
+        // send query
+        // search the cases in base to datatable parameters
+        $handler = curl_init( $solrIntruct );
+        curl_setopt( $handler, CURLOPT_RETURNTRANSFER, true );
+
+        //Apply proxy settings
+        $sysConf = System::getSystemConfiguration();
+        if ($sysConf['proxy_host'] != '') {
+            curl_setopt( $handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : '') );
+            if ($sysConf['proxy_port'] != '') {
+                curl_setopt( $handler, CURLOPT_PROXYPORT, $sysConf['proxy_port'] );
+            }
+            if ($sysConf['proxy_user'] != '') {
+                curl_setopt( $handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : '') );
+            }
+            curl_setopt( $handler, CURLOPT_HTTPHEADER, array ('Expect:'
+            ) );
+        }
+
+        $response = curl_exec( $handler );
+        curl_close( $handler );
+
+        // decode
+        $responseSolr = G::json_decode( $response );
+        if ($responseSolr->responseHeader->status != 0) {
+            throw new Exception( "Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n" );
+        }
+
+        return $responseSolr;
     }
-  }
-
-  /**
-   * Execute a query in base to Request data
-   *
-   * @param Entity_FacetRequest $facetRequestEntity
-   * @return solr response: list of facets array
-   */
-  public function getFacetsList($facetRequest)
-  {
-    if (! $this->_solrIsEnabled)
-      return;
-
-    $solrIntruct = '';
-    // get configuration information in base to workspace parameter
-    $workspace = $facetRequest->workspace;
-
-    // format request
-    $query = empty ($facetRequest->searchText) ? '*:*' : $facetRequest->searchText;
-    $query = rawurlencode ($query);
-    $start = '&start=0';
-    $rows = '&rows=0';
-    $facets = '&facet=on&facet.mincount=1&facet.limit=20'; // enable facet and
-                                                           // only return facets
-                                                           // with minimun one
-                                                           // instance
-    foreach ($facetRequest->facetFields as $value) {
-      $facets .= '&facet.field=' . $value;
-    }
-    foreach ($facetRequest->facetQueries as $value) {
-      $facets .= '&facet.query=' . $value;
-    }
-    if (! empty ($facetRequest->facetDates)) {
-      foreach ($facetRequest->facetDates as $value) {
-        $facets .= '&facet.date=' . $value;
-      }
-      $facets .= '&facet.date.start=' . $facetRequest->facetDatesStart;
-      $facets .= '&facet.date.end=' . $facetRequest->facetDatesEnd;
-      $facets .= '&facet.date.gap=' . $facetRequest->facetDateGap;
-    }
-    $filters = '';
-    foreach ($facetRequest->filters as $value) {
-      $filters .= '&fq=' . $value;
-    }
-    // echo "
";
-
-    $resultFormat = '&wt=json';
-
-    $solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
-    $solrIntruct .= $workspace;
-    $solrIntruct .= "/select/?q=$query";
-    $solrIntruct .= "&echoParams=none";
-    $solrIntruct .= self::SOLR_VERSION;
-    $solrIntruct .= $start;
-    $solrIntruct .= $rows;
-    $solrIntruct .= $facets;
-    $solrIntruct .= $filters;
-    $solrIntruct .= $resultFormat;
-
-    // send query
-    // search the cases in base to datatable parameters
-    $handler = curl_init ($solrIntruct);
-    curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
-
-    //Apply proxy settings
-    $sysConf = System::getSystemConfiguration();
-    if ($sysConf['proxy_host'] != '') {
-      curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
-      if ($sysConf['proxy_port'] != '') {
-        curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
-      }
-      if ($sysConf['proxy_user'] != '') {
-        curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
-      }
-      curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
-    }
-
-    $response = curl_exec ($handler);
-    curl_close ($handler);
-
-    // decode
-    $responseSolr = G::json_decode ($response);
-    if ($responseSolr->responseHeader->status != 0) {
-      throw new Exception ("Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n");
-    }
-
-    return $responseSolr;
-  }
 }
diff --git a/workflow/engine/classes/class.spool.php b/workflow/engine/classes/class.spool.php
index c145addff..497728e6d 100755
--- a/workflow/engine/classes/class.spool.php
+++ b/workflow/engine/classes/class.spool.php
@@ -1,6 +1,7 @@
 .
+ * along with this program. If not, see .
  *
  * For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
  * Coral Gables, FL, 33134, USA, or email info@colosa.com.
@@ -26,6 +27,7 @@
 
 /**
  * spoolRun - brief send email from the spool database, and see if we have all the addresses we send to.
+ *
  * @author Ian K Armstrong 
  * @copyright Copyright (c) 2007, Ian K Armstrong
  * @license http://www.opensource.org/licenses/gpl-3.0.html GNU Public License
@@ -36,7 +38,7 @@
  * LOG FIXES
  * =========
  *
- * 24-03-2010   Erik A.O. 
+ * 24-03-2010 Erik A.O. 
  * class: the $ExceptionCode and $aWarnings class attributes were added
  * function handleFrom(): Validations for invalid data for {$this->fileData['from_email']} were added
  * function resendEmails(): handler for warnings was added and fixes
@@ -46,472 +48,492 @@
 
 require_once ('classes/model/AppMessage.php');
 
- /**
-  * @package workflow.engine.ProcessMaker
-  */
+/**
+ *
+ * @package workflow.engine.ProcessMaker
+ */
+
+class spoolRun
+{
+    public $config;
+    private $fileData;
+    private $spool_id;
+    public $status;
+    public $error;
+
+    private $ExceptionCode = Array (); //Array to define the Expetion codes
+    private $aWarnings = Array (); //Array to store the warning that were throws by the class
 
 
-class spoolRun {
-  public  $config;
-  private $fileData;
-  private $spool_id;
-  public  $status;
-  public  $error;
+    private $longMailEreg;
+    private $mailEreg;
 
-  private $ExceptionCode = Array (); //Array to define the Expetion codes
-  private $aWarnings = Array (); //Array to store the warning that were throws by the class
+    /**
+     * Class constructor - iniatilize default values
+     *
+     * @param none
+     * @return none
+     */
+    public function __construct ()
+    {
+        $this->config = array ();
+        $this->fileData = array ();
+        $this->spool_id = '';
+        $this->status = 'pending';
+        $this->error = '';
 
-  private $longMailEreg;
-  private $mailEreg;
+        $this->ExceptionCode['FATAL'] = 1;
+        $this->ExceptionCode['WARNING'] = 2;
+        $this->ExceptionCode['NOTICE'] = 3;
 
+        $this->longMailEreg = '/(.*)(<([\w\-\.]+@[\w\-_\.]+\.\w{2,3})+>)/';
+        $this->mailEreg = '/^([\w\-_\.]+@[\w\-_\.]+\.\w{2,3}+)$/';
+    }
 
-  /**
-   * Class constructor - iniatilize default values
-   * @param none
-   * @return none
-   */
-  function __construct() {
-    $this->config = array ();
-    $this->fileData = array ();
-    $this->spool_id = '';
-    $this->status = 'pending';
-    $this->error = '';
+    /**
+     * get all files into spool in a list
+     *
+     * @param none
+     * @return none
+     */
+    public function getSpoolFilesList ()
+    {
+        $sql = "SELECT * FROM APP_MESSAGE WHERE APP_MSG_STATUS ='pending'";
 
-    $this->ExceptionCode['FATAL']   = 1;
-    $this->ExceptionCode['WARNING'] = 2;
-    $this->ExceptionCode['NOTICE']  = 3;
+        $con = Propel::getConnection( "workflow" );
+        $stmt = $con->prepareStatement( $sql );
+        $rs = $stmt->executeQuery();
 
-    $this->longMailEreg = '/(.*)(<([\w\-\.]+@[\w\-_\.]+\.\w{2,3})+>)/';
-    $this->mailEreg     = '/^([\w\-_\.]+@[\w\-_\.]+\.\w{2,3}+)$/';
-  }
+        while ($rs->next()) {
+            $this->spool_id = $rs->getString( 'APP_MSG_UID' );
+            $this->fileData['subject'] = $rs->getString( 'APP_MSG_SUBJECT' );
+            $this->fileData['from'] = $rs->getString( 'APP_MSG_FROM' );
+            $this->fileData['to'] = $rs->getString( 'APP_MSG_TO' );
+            $this->fileData['body'] = $rs->getString( 'APP_MSG_BODY' );
+            $this->fileData['date'] = $rs->getString( 'APP_MSG_DATE' );
+            $this->fileData['cc'] = $rs->getString( 'APP_MSG_CC' );
+            $this->fileData['bcc'] = $rs->getString( 'APP_MSG_BCC' );
+            $this->fileData['template'] = $rs->getString( 'APP_MSG_TEMPLATE' );
+            $this->fileData['attachments'] = array (); //$rs->getString('APP_MSG_ATTACH');
+            if ($this->config['MESS_ENGINE'] == 'OPENMAIL') {
+                if ($this->config['MESS_SERVER'] != '') {
+                    if (($sAux = @gethostbyaddr( $this->config['MESS_SERVER'] ))) {
+                        $this->fileData['domain'] = $sAux;
+                    } else {
+                        $this->fileData['domain'] = $this->config['MESS_SERVER'];
+                    }
+                } else {
+                    $this->fileData['domain'] = gethostbyaddr( '127.0.0.1' );
+                }
+            }
+            $this->sendMail();
+        }
+    }
 
-  /**
-   * get all files into spool in a list
-   * @param none
-   * @return none
-   */
-  public function getSpoolFilesList() {
-    $sql = "SELECT * FROM APP_MESSAGE WHERE APP_MSG_STATUS ='pending'";
+    /**
+     * create a msg record for spool
+     *
+     * @param array $aData
+     * @return none
+     */
+    public function create ($aData)
+    {
+        $sUID = $this->db_insert( $aData );
 
-    $con = Propel::getConnection("workflow");
-    $stmt = $con->prepareStatement($sql);
-    $rs = $stmt->executeQuery();
+        $aData['app_msg_date'] = isset( $aData['app_msg_date'] ) ? $aData['app_msg_date'] : '';
 
-    while( $rs->next() ) {
-      $this->spool_id = $rs->getString('APP_MSG_UID');
-      $this->fileData['subject'] = $rs->getString('APP_MSG_SUBJECT');
-      $this->fileData['from'] = $rs->getString('APP_MSG_FROM');
-      $this->fileData['to'] = $rs->getString('APP_MSG_TO');
-      $this->fileData['body'] = $rs->getString('APP_MSG_BODY');
-      $this->fileData['date'] = $rs->getString('APP_MSG_DATE');
-      $this->fileData['cc'] = $rs->getString('APP_MSG_CC');
-      $this->fileData['bcc'] = $rs->getString('APP_MSG_BCC');
-      $this->fileData['template'] = $rs->getString('APP_MSG_TEMPLATE');
-      $this->fileData['attachments'] = array (); //$rs->getString('APP_MSG_ATTACH');
-      if( $this->config['MESS_ENGINE'] == 'OPENMAIL' ) {
-        if( $this->config['MESS_SERVER'] != '' ) {
-          if( ($sAux = @gethostbyaddr($this->config['MESS_SERVER'])) ) {
-            $this->fileData['domain'] = $sAux;
-          } else {
-            $this->fileData['domain'] = $this->config['MESS_SERVER'];
-          }
+        if (isset( $aData['app_msg_status'] )) {
+            $this->status = strtolower( $aData['app_msg_status'] );
+        }
+
+        $this->setData( $sUID, $aData['app_msg_subject'], $aData['app_msg_from'], $aData['app_msg_to'], $aData['app_msg_body'], $aData['app_msg_date'], $aData['app_msg_cc'], $aData['app_msg_bcc'], $aData['app_msg_template'], $aData['app_msg_attach'] );
+    }
+
+    /**
+     * set configuration
+     *
+     * @param array $aConfig
+     * @return none
+     */
+    public function setConfig ($aConfig)
+    {
+        $this->config = $aConfig;
+    }
+
+    /**
+     * set email parameters
+     *
+     * @param string $sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate, $sCC, $sBCC, $sTemplate
+     * @return none
+     */
+    public function setData ($sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate = '', $sCC = '', $sBCC = '', $sTemplate = '', $aAttachment = array())
+    {
+        $this->spool_id = $sAppMsgUid;
+        $this->fileData['subject'] = $sSubject;
+        $this->fileData['from'] = $sFrom;
+        $this->fileData['to'] = $sTo;
+        $this->fileData['body'] = $sBody;
+        $this->fileData['date'] = ($sDate != '' ? $sDate : date( 'Y-m-d H:i:s' ));
+        $this->fileData['cc'] = $sCC;
+        $this->fileData['bcc'] = $sBCC;
+        $this->fileData['template'] = $sTemplate;
+        $this->fileData['attachments'] = is_array( $aAttachment ) ? $aAttachment : ($aAttachment != '' ? explode( ',', $aAttachment ) : array ());
+        $this->fileData['envelope_to'] = array ();
+
+        if ($this->config['MESS_ENGINE'] == 'OPENMAIL') {
+            if ($this->config['MESS_SERVER'] != '') {
+                if (($sAux = @gethostbyaddr( $this->config['MESS_SERVER'] ))) {
+                    $this->fileData['domain'] = $sAux;
+                } else {
+                    $this->fileData['domain'] = $this->config['MESS_SERVER'];
+                }
+            } else {
+                $this->fileData['domain'] = gethostbyaddr( '127.0.0.1' );
+            }
+        }
+    }
+
+    /**
+     * send mail
+     *
+     * @param none
+     * @return boolean true or exception
+     */
+    public function sendMail ()
+    {
+        try {
+            $this->handleFrom();
+            $this->handleEnvelopeTo();
+            $this->handleMail();
+            $this->updateSpoolStatus();
+            return true;
+        } catch (Exception $e) {
+            throw $e;
+        }
+    }
+
+    /**
+     * update the status to spool
+     *
+     * @param none
+     * @return none
+     */
+    private function updateSpoolStatus ()
+    {
+        $oAppMessage = AppMessagePeer::retrieveByPK( $this->spool_id );
+        if (is_array( $this->fileData['attachments'] )) {
+            $attachment = implode( ",", $this->fileData['attachments'] );
+            $oAppMessage->setappMsgAttach( $attachment );
+        }
+        $oAppMessage->setappMsgstatus( $this->status );
+        $oAppMessage->setappMsgsenddate( date( 'Y-m-d H:i:s' ) );
+        $oAppMessage->save();
+    }
+
+    /**
+     * handle the email that was set in "TO" parameter
+     *
+     * @param none
+     * @return boolean true or exception
+     */
+    private function handleFrom ()
+    {
+        if (strpos( $this->fileData['from'], '<' ) !== false) {
+            //to validate complex email address i.e. Erik A. O 
+            preg_match( $this->longMailEreg, $this->fileData['from'], $matches );
+            if (isset( $matches[1] ) && $matches[1] != '') {
+                //drop the " characters if they exist
+                $this->fileData['from_name'] = trim( str_replace( '"', '', $matches[1] ) );
+            } else {
+                //if the from name was not set
+                $this->fileData['from_name'] = '';
+            }
+
+            if (! isset( $matches[3] )) {
+                throw new Exception( 'Invalid email address in FROM parameter (' . $this->fileData['from'] . ')', $this->ExceptionCode['WARNING'] );
+            }
+
+            $this->fileData['from_email'] = trim( $matches[3] );
         } else {
-          $this->fileData['domain'] = gethostbyaddr('127.0.0.1');
+            //to validate simple email address i.e. erik@colosa.com
+            preg_match( $this->mailEreg, $this->fileData['from'], $matches );
+
+            if (! isset( $matches[0] )) {
+                throw new Exception( 'Invalid email address in FROM parameter (' . $this->fileData['from'] . ')', $this->ExceptionCode['WARNING'] );
+            }
+
+            $this->fileData['from_name'] = '';
+            $this->fileData['from_email'] = $matches[0];
         }
-      }
-      $this->sendMail();
-    }
-  }
 
-  /**
-   * create a msg record for spool
-   * @param array $aData
-   * @return none
-   */
-  public function create($aData) {
-    $sUID = $this->db_insert($aData);
-
-    $aData['app_msg_date'] = isset($aData['app_msg_date']) ? $aData['app_msg_date'] : '';
-
-    if( isset($aData['app_msg_status']) ) {
-      $this->status = strtolower($aData['app_msg_status']);
     }
 
-    $this->setData($sUID, $aData['app_msg_subject'], $aData['app_msg_from'], $aData['app_msg_to'], $aData['app_msg_body'], $aData['app_msg_date'], $aData['app_msg_cc'], $aData['app_msg_bcc'], $aData['app_msg_template'], $aData['app_msg_attach']);
-  }
+    /**
+     * handle all recipients to compose the mail
+     *
+     * @param none
+     * @return boolean true or exception
+     */
+    private function handleEnvelopeTo ()
+    {
+        $hold = array ();
+        $holdcc = array ();
+        $holdbcc = array ();
+        $text = trim( $this->fileData['to'] );
 
-  /**
-   * set configuration
-   * @param array $aConfig
-   * @return none
-   */
-  public function setConfig($aConfig) {
-    $this->config = $aConfig;
-  }
+        $textcc = '';
+        $textbcc = '';
+        if (isset( $this->fileData['cc'] ) && trim( $this->fileData['cc'] ) != '') {
+            $textcc = trim( $this->fileData['cc'] );
+        }
 
-  /**
-   * set email parameters
-   * @param string $sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate, $sCC, $sBCC, $sTemplate
-   * @return none
-   */
-  public function setData($sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate = '', $sCC = '', $sBCC = '', $sTemplate = '', $aAttachment = array()) {
-    $this->spool_id = $sAppMsgUid;
-    $this->fileData['subject'] = $sSubject;
-    $this->fileData['from'] = $sFrom;
-    $this->fileData['to'] = $sTo;
-    $this->fileData['body'] = $sBody;
-    $this->fileData['date'] = ($sDate != '' ? $sDate : date('Y-m-d H:i:s'));
-    $this->fileData['cc'] = $sCC;
-    $this->fileData['bcc'] = $sBCC;
-    $this->fileData['template'] = $sTemplate;
-    $this->fileData['attachments'] = is_array($aAttachment) ? $aAttachment : ($aAttachment != '' ? explode(',', $aAttachment) : array());
-    $this->fileData['envelope_to'] = array();
+        if (isset( $this->fileData['bcc'] ) && trim( $this->fileData['bcc'] ) != '') {
+            $textbcc = trim( $this->fileData['bcc'] );
+        }
 
-    if( $this->config['MESS_ENGINE'] == 'OPENMAIL' ) {
-      if( $this->config['MESS_SERVER'] != '' ) {
-        if( ($sAux = @gethostbyaddr($this->config['MESS_SERVER'])) ) {
-          $this->fileData['domain'] = $sAux;
+        if (false !== (strpos( $text, ',' ))) {
+            $hold = explode( ',', $text );
+
+            foreach ($hold as $val) {
+                if (strlen( $val ) > 0) {
+                    $this->fileData['envelope_to'][] = "$val";
+                }
+            }
+        } else if ($text != '') {
+            $this->fileData['envelope_to'][] = "$text";
         } else {
-          $this->fileData['domain'] = $this->config['MESS_SERVER'];
+            $this->fileData['envelope_to'] = Array ();
         }
-      } else {
-        $this->fileData['domain'] = gethostbyaddr('127.0.0.1');
-      }
-    }
-  }
 
-  /**
-   * send mail
-   * @param none
-   * @return boolean true or exception
-   */
-  public function sendMail() {
-    try {
-      $this->handleFrom();
-      $this->handleEnvelopeTo();
-      $this->handleMail();
-      $this->updateSpoolStatus();
-      return true;
-    } catch( Exception $e ) {
-      throw $e;
-    }
-  }
+        //CC
+        if (false !== (strpos( $textcc, ',' ))) {
+            $holdcc = explode( ',', $textcc );
 
-  /**
-   * update the status to spool
-   * @param none
-   * @return none
-   */
-  private function updateSpoolStatus() {
-    $oAppMessage = AppMessagePeer::retrieveByPK($this->spool_id);
-    if (is_array($this->fileData['attachments'])) {
-        $attachment = implode(",", $this->fileData['attachments']);
-        $oAppMessage->setappMsgAttach($attachment);
-    }
-    $oAppMessage->setappMsgstatus($this->status);
-    $oAppMessage->setappMsgsenddate(date('Y-m-d H:i:s'));
-    $oAppMessage->save();
-  }
-
-  /**
-   * handle the email that was set in "TO" parameter
-   * @param none
-   * @return boolean true or exception
-   */
-  private function handleFrom() {
-    if( strpos($this->fileData['from'], '<') !== false ) {
-      //to validate complex email address i.e. Erik A. O 
-      preg_match($this->longMailEreg, $this->fileData['from'], $matches);
-      if( isset($matches[1]) && $matches[1] != '' ) {
-        //drop the " characters if they exist
-        $this->fileData['from_name'] = trim(str_replace('"', '', $matches[1]));
-      }
-      else { //if the from name was not set
-        $this->fileData['from_name'] = '';
-      }
-
-      if( ! isset($matches[3]) ) {
-        throw new Exception('Invalid email address in FROM parameter (' . $this->fileData['from'] . ')', $this->ExceptionCode['WARNING']);
-      }
-
-      $this->fileData['from_email'] = trim($matches[3]);
-    }
-    else {
-      //to validate simple email address i.e. erik@colosa.com
-      preg_match($this->mailEreg, $this->fileData['from'], $matches);
-
-      if( ! isset($matches[0]) ) {
-        throw new Exception('Invalid email address in FROM parameter (' . $this->fileData['from'] . ')', $this->ExceptionCode['WARNING']);
-      }
-
-      $this->fileData['from_name'] = '';
-      $this->fileData['from_email'] = $matches[0];
-    }
-
-  }
-
-  /**
-   * handle all recipients to compose the mail
-   * @param none
-   * @return boolean true or exception
-   */
-  private function handleEnvelopeTo() {
-    $hold = array ();
-    $holdcc = array ();
-    $holdbcc = array ();
-    $text = trim($this->fileData['to']);
-
-    $textcc ='';
-    $textbcc='';
-    if( isset($this->fileData['cc']) && trim($this->fileData['cc']) != '' ) {
-      $textcc = trim($this->fileData['cc']);
-    }
-
-    if( isset($this->fileData['bcc']) && trim($this->fileData['bcc']) != '' ) {
-      $textbcc = trim($this->fileData['bcc']);
-    }
-
-    if( false !== (strpos($text, ',')) ) {
-      $hold = explode(',', $text);
-
-      foreach( $hold as $val ) {
-        if( strlen($val) > 0 ) {
-          $this->fileData['envelope_to'][] = "$val";
+            foreach ($holdcc as $valcc) {
+                if (strlen( $valcc ) > 0) {
+                    $this->fileData['envelope_cc'][] = "$valcc";
+                }
+            }
+        } else if ($textcc != '') {
+            $this->fileData['envelope_cc'][] = "$textcc";
+        } else {
+            $this->fileData['envelope_cc'] = Array ();
         }
-      }
-    } else if($text != '') {
-      $this->fileData['envelope_to'][] = "$text";
-    } else {
-      $this->fileData['envelope_to'] = Array();
-    }
 
-    //CC
-    if( false !== (strpos($textcc, ',')) ) {
-      $holdcc = explode(',', $textcc);
+        //BCC
+        if (false !== (strpos( $textbcc, ',' ))) {
+            $holdbcc = explode( ',', $textbcc );
 
-      foreach( $holdcc as $valcc ) {
-        if( strlen($valcc) > 0 ) {
-          $this->fileData['envelope_cc'][] = "$valcc";
+            foreach ($holdbcc as $valbcc) {
+                if (strlen( $valbcc ) > 0) {
+                    $this->fileData['envelope_bcc'][] = "$valbcc";
+                }
+            }
+        } else if ($textbcc != '') {
+            $this->fileData['envelope_bcc'][] = "$textbcc";
+        } else {
+            $this->fileData['envelope_bcc'] = Array ();
         }
-      }
-    } else if($textcc != '') {
-      $this->fileData['envelope_cc'][] = "$textcc";
-    } else {
-      $this->fileData['envelope_cc'] = Array();
+
     }
 
-    //BCC
-    if( false !== (strpos($textbcc, ',')) ) {
-      $holdbcc = explode(',', $textbcc);
+    /**
+     * handle and compose the email content and parameters
+     *
+     * @param none
+     * @return none
+     */
+    private function handleMail ()
+    {
+        if (count( $this->fileData['envelope_to'] ) > 0) {
+            switch ($this->config['MESS_ENGINE']) {
+                case 'MAIL':
+                case 'PHPMAILER':
+                    G::LoadThirdParty( 'phpmailer', 'class.phpmailer' );
 
-      foreach( $holdbcc as $valbcc ) {
-        if( strlen($valbcc) > 0 ) {
-          $this->fileData['envelope_bcc'][] = "$valbcc";
+                    switch ($this->config['MESS_ENGINE']) {
+                        case 'MAIL':
+                            $oPHPMailer = new PHPMailer();
+                            $oPHPMailer->Mailer = 'mail';
+                            break;
+                        case 'PHPMAILER':
+                            $oPHPMailer = new PHPMailer( true );
+                            $oPHPMailer->Mailer = 'smtp';
+                            break;
+                    }
+
+                    $oPHPMailer->SMTPAuth = (isset( $this->config['SMTPAuth'] ) ? $this->config['SMTPAuth'] : '');
+
+                    switch ($this->config['MESS_ENGINE']) {
+                        case 'MAIL':
+                            break;
+                        case 'PHPMAILER':
+                            //Posible Options for SMTPSecure are: "", "ssl" or "tls"
+                            if (isset( $this->config['SMTPSecure'] ) && preg_match( '/^(ssl|tls)$/', $this->config['SMTPSecure'] )) {
+                                $oPHPMailer->SMTPSecure = $this->config['SMTPSecure'];
+                            }
+                            break;
+                    }
+
+                    $oPHPMailer->CharSet = "UTF-8";
+                    $oPHPMailer->Encoding = "8bit";
+                    $oPHPMailer->Host = $this->config['MESS_SERVER'];
+                    $oPHPMailer->Port = $this->config['MESS_PORT'];
+                    $oPHPMailer->Username = $this->config['MESS_ACCOUNT'];
+                    $passwd = $this->config['MESS_PASSWORD'];
+                    $passwdDec = G::decrypt( $passwd, 'EMAILENCRYPT' );
+                    $auxPass = explode( 'hash:', $passwdDec );
+
+                    if (count( $auxPass ) > 1) {
+                        if (count( $auxPass ) == 2) {
+                            $passwd = $auxPass[1];
+                        } else {
+                            array_shift( $auxPass );
+                            $passwd = implode( '', $auxPass );
+                        }
+                    }
+
+                    $this->config['MESS_PASSWORD'] = $passwd;
+                    $oPHPMailer->Password = $this->config['MESS_PASSWORD'];
+                    $oPHPMailer->From = $this->fileData['from_email'];
+                    $oPHPMailer->FromName = utf8_decode( $this->fileData['from_name'] );
+
+                    $msSubject = $this->fileData['subject'];
+
+                    if (! (mb_detect_encoding( $msSubject, "UTF-8" ) == "UTF-8")) {
+                        $msSubject = utf8_encode( $msSubject );
+                    }
+
+                    $oPHPMailer->Subject = $msSubject;
+
+                    $msBody = $this->fileData['body'];
+
+                    if (! (mb_detect_encoding( $msBody, "UTF-8" ) == "UTF-8")) {
+                        $msBody = utf8_encode( $msBody );
+                    }
+
+                    $oPHPMailer->Body = $msBody;
+
+                    if (is_array( $this->fileData['attachments'] )) {
+                        foreach ($this->fileData['attachments'] as $key => $fileAttach) {
+                            if (file_exists( $fileAttach )) {
+                                $oPHPMailer->AddAttachment( $fileAttach, is_int( $key ) ? '' : $key );
+                            }
+                        }
+                    }
+
+                    foreach ($this->fileData['envelope_to'] as $sEmail) {
+                        if (strpos( $sEmail, '<' ) !== false) {
+                            preg_match( $this->longMailEreg, $sEmail, $matches );
+                            $sTo = trim( $matches[3] );
+                            $sToName = trim( $matches[1] );
+                            $oPHPMailer->AddAddress( $sTo, $sToName );
+                        } else {
+                            $oPHPMailer->AddAddress( $sEmail );
+                        }
+                    }
+
+                    //CC
+                    foreach ($this->fileData['envelope_cc'] as $sEmail) {
+                        if (strpos( $sEmail, '<' ) !== false) {
+                            preg_match( $this->longMailEreg, $sEmail, $matches );
+                            $sTo = trim( $matches[3] );
+                            $sToName = trim( $matches[1] );
+                            $oPHPMailer->AddCC( $sTo, $sToName );
+                        } else {
+                            $oPHPMailer->AddCC( $sEmail );
+                        }
+                    }
+
+                    //BCC
+                    foreach ($this->fileData['envelope_bcc'] as $sEmail) {
+                        if (strpos( $sEmail, '<' ) !== false) {
+                            preg_match( $this->longMailEreg, $sEmail, $matches );
+                            $sTo = trim( $matches[3] );
+                            $sToName = trim( $matches[1] );
+                            $oPHPMailer->AddBCC( $sTo, $sToName );
+                        } else {
+                            $oPHPMailer->AddBCC( $sEmail );
+                        }
+                    }
+
+                    $oPHPMailer->IsHTML( true );
+
+                    if ($oPHPMailer->Send()) {
+                        $this->error = '';
+                        $this->status = 'sent';
+                    } else {
+                        $this->error = $oPHPMailer->ErrorInfo;
+                        $this->status = 'failed';
+                    }
+                    break;
+                case 'OPENMAIL':
+                    G::LoadClass( 'package' );
+                    G::LoadClass( 'smtp' );
+                    $pack = new package( $this->fileData );
+                    $header = $pack->returnHeader();
+                    $body = $pack->returnBody();
+                    $send = new smtp();
+                    $send->setServer( $this->config['MESS_SERVER'] );
+                    $send->setPort( $this->config['MESS_PORT'] );
+                    $send->setUsername( $this->config['MESS_ACCOUNT'] );
+
+                    $passwd = $this->config['MESS_PASSWORD'];
+                    $passwdDec = G::decrypt( $passwd, 'EMAILENCRYPT' );
+                    $auxPass = explode( 'hash:', $passwdDec );
+
+                    if (count( $auxPass ) > 1) {
+                        if (count( $auxPass ) == 2) {
+                            $passwd = $auxPass[1];
+                        } else {
+                            array_shift( $auxPass );
+                            $passwd = implode( '', $auxPass );
+                        }
+                    }
+
+                    $this->config['MESS_PASSWORD'] = $passwd;
+                    $send->setPassword( $this->config['MESS_PASSWORD'] );
+                    $send->setReturnPath( $this->fileData['from_email'] );
+                    $send->setHeaders( $header );
+                    $send->setBody( $body );
+                    $send->setEnvelopeTo( $this->fileData['envelope_to'] );
+                    if ($send->sendMessage()) {
+                        $this->error = '';
+                        $this->status = 'sent';
+                    } else {
+                        $this->error = implode( ', ', $send->returnErrors() );
+                        $this->status = 'failed';
+                    }
+                    break;
+            }
         }
-      }
-    } else if($textbcc != '') {
-      $this->fileData['envelope_bcc'][] = "$textbcc";
-    } else {
-      $this->fileData['envelope_bcc'] = Array();
     }
 
-
-  }
-
-  /**
-   * handle and compose the email content and parameters
-   * @param none
-   * @return none
-   */
-  private function handleMail() {
-    if( count($this->fileData['envelope_to']) > 0 ) {
-      switch ($this->config['MESS_ENGINE']) {
-        case 'MAIL':
-        case 'PHPMAILER':
-          G::LoadThirdParty('phpmailer', 'class.phpmailer');
-
-          switch($this->config['MESS_ENGINE']) {
-              case 'MAIL':
-                  $oPHPMailer = new PHPMailer();
-                  $oPHPMailer->Mailer = 'mail';
-                  break;
-              case 'PHPMAILER':
-                  $oPHPMailer = new PHPMailer(true);
-                  $oPHPMailer->Mailer = 'smtp';
-                  break;
-          }
-
-          $oPHPMailer->SMTPAuth = (isset($this->config['SMTPAuth']) ? $this->config['SMTPAuth'] : '');
-
-          switch($this->config['MESS_ENGINE']) {
-              case 'MAIL':
-                  break;
-              case 'PHPMAILER':
-                  //Posible Options for SMTPSecure are: "", "ssl" or "tls"
-                  if (isset($this->config['SMTPSecure']) && preg_match('/^(ssl|tls)$/', $this->config['SMTPSecure'])) {
-                      $oPHPMailer->SMTPSecure = $this->config['SMTPSecure'];
-                  }
-                  break;
-          }
-
-          $oPHPMailer->CharSet = "UTF-8";
-          $oPHPMailer->Encoding = "8bit";
-          $oPHPMailer->Host = $this->config['MESS_SERVER'];
-          $oPHPMailer->Port = $this->config['MESS_PORT'];
-          $oPHPMailer->Username = $this->config['MESS_ACCOUNT'];
-          $passwd = $this->config['MESS_PASSWORD'];
-          $passwdDec = G::decrypt($passwd,'EMAILENCRYPT');
-          $auxPass = explode('hash:', $passwdDec);
-
-          if (count($auxPass) > 1) {
-              if (count($auxPass) == 2) {
-                  $passwd = $auxPass[1];
-              } else {
-                  array_shift($auxPass);
-                  $passwd = implode('', $auxPass);
-              }
-          }
-
-          $this->config['MESS_PASSWORD'] = $passwd;
-          $oPHPMailer->Password = $this->config['MESS_PASSWORD'];
-          $oPHPMailer->From = $this->fileData['from_email'];
-          $oPHPMailer->FromName = utf8_decode($this->fileData['from_name']);
-
-          $msSubject = $this->fileData['subject'];
-
-          if(!(mb_detect_encoding($msSubject, "UTF-8") == "UTF-8")) {
-            $msSubject = utf8_encode($msSubject);
-          }
-
-          $oPHPMailer->Subject = $msSubject;
-
-          $msBody = $this->fileData['body'];
-
-          if(!(mb_detect_encoding($msBody, "UTF-8") == "UTF-8")) {
-            $msBody = utf8_encode($msBody);
-          }
-
-          $oPHPMailer->Body = $msBody;
-
-          if(is_array($this->fileData['attachments'])){
-            foreach($this->fileData['attachments'] as $key => $fileAttach){
-              if (file_exists($fileAttach)) {
-                $oPHPMailer->AddAttachment($fileAttach, is_int($key) ? '' : $key);
-              }
-            }
-          }
-
-          foreach ($this->fileData['envelope_to'] as $sEmail) {
-            if( strpos($sEmail, '<') !== false ) {
-              preg_match($this->longMailEreg, $sEmail, $matches);
-              $sTo = trim($matches[3]);
-              $sToName = trim($matches[1]);
-              $oPHPMailer->AddAddress($sTo, $sToName);
-            } else {
-              $oPHPMailer->AddAddress($sEmail);
-            }
-          }
-
-          //CC
-          foreach ($this->fileData['envelope_cc'] as $sEmail) {
-            if(strpos($sEmail, '<') !== false) {
-              preg_match($this->longMailEreg, $sEmail, $matches);
-              $sTo = trim($matches[3]);
-              $sToName = trim($matches[1]);
-              $oPHPMailer->AddCC($sTo, $sToName);
-            } else {
-              $oPHPMailer->AddCC($sEmail);
-            }
-          }
-
-          //BCC
-          foreach ($this->fileData['envelope_bcc'] as $sEmail) {
-            if(strpos($sEmail, '<') !== false) {
-              preg_match($this->longMailEreg, $sEmail, $matches);
-              $sTo = trim($matches[3]);
-              $sToName = trim($matches[1]);
-              $oPHPMailer->AddBCC($sTo, $sToName);
-            } else {
-              $oPHPMailer->AddBCC($sEmail);
-            }
-          }
-
-          $oPHPMailer->IsHTML(true);
-
-          if($oPHPMailer->Send()) {
-              $this->error = '';
-              $this->status = 'sent';
-          } else {
-              $this->error = $oPHPMailer->ErrorInfo;
-              $this->status = 'failed';
-          }
-          break;
-        case 'OPENMAIL':
-          G::LoadClass('package');
-          G::LoadClass('smtp');
-          $pack = new package($this->fileData);
-          $header = $pack->returnHeader();
-          $body = $pack->returnBody();
-          $send = new smtp();
-          $send->setServer($this->config['MESS_SERVER']);
-          $send->setPort($this->config['MESS_PORT']);
-          $send->setUsername($this->config['MESS_ACCOUNT']);
-
-          $passwd = $this->config['MESS_PASSWORD'];
-          $passwdDec = G::decrypt($passwd,'EMAILENCRYPT');
-          $auxPass = explode('hash:', $passwdDec);
-
-          if (count($auxPass) > 1) {
-              if (count($auxPass) == 2) {
-                  $passwd = $auxPass[1];
-              } else {
-                  array_shift($auxPass);
-                  $passwd = implode('', $auxPass);
-              }
-          }
-
-          $this->config['MESS_PASSWORD'] = $passwd;
-          $send->setPassword($this->config['MESS_PASSWORD']);
-          $send->setReturnPath($this->fileData['from_email']);
-          $send->setHeaders($header);
-          $send->setBody($body);
-          $send->setEnvelopeTo($this->fileData['envelope_to']);
-          if( $send->sendMessage() ) {
-            $this->error = '';
-            $this->status = 'sent';
-          } else {
-            $this->error = implode(', ', $send->returnErrors());
-            $this->status = 'failed';
-          }
-          break;
-      }
-    }
-  }
-
     /**
      * try resend the emails from spool
+     *
      * @param string $dateResend
      * @return none or exception
      */
-    public function resendEmails($dateResend=null, $cron=0)
+    public function resendEmails ($dateResend = null, $cron = 0)
     {
         require_once ("classes/model/Configuration.php");
 
         $oConfiguration = new Configuration();
 
-        $aConfiguration = $oConfiguration->load("Emails", "", "", "", "");
+        $aConfiguration = $oConfiguration->load( "Emails", "", "", "", "" );
 
-        $aConfiguration = unserialize($aConfiguration["CFG_VALUE"]);
+        $aConfiguration = unserialize( $aConfiguration["CFG_VALUE"] );
         $passwd = $aConfiguration["MESS_PASSWORD"];
-        $passwdDec = G::decrypt($passwd,"EMAILENCRYPT");
-        $auxPass   = explode("hash:", $passwdDec);
+        $passwdDec = G::decrypt( $passwd, "EMAILENCRYPT" );
+        $auxPass = explode( "hash:", $passwdDec );
 
-        if (count($auxPass) > 1) {
-            if (count($auxPass) == 2) {
+        if (count( $auxPass ) > 1) {
+            if (count( $auxPass ) == 2) {
                 $passwd = $auxPass[1];
             } else {
-                array_shift($auxPass);
-                $passwd = implode("", $auxPass);
+                array_shift( $auxPass );
+                $passwd = implode( "", $auxPass );
             }
         }
 
@@ -520,60 +542,37 @@ class spoolRun {
         if ($aConfiguration["MESS_ENABLED"] == "1") {
             require_once ("classes/model/AppMessage.php");
 
-            $this->setConfig(array(
-                "MESS_ENGINE" => $aConfiguration["MESS_ENGINE"],
-                "MESS_SERVER" => $aConfiguration["MESS_SERVER"],
-                "MESS_PORT"   => $aConfiguration["MESS_PORT"],
-                "MESS_ACCOUNT"  => $aConfiguration["MESS_ACCOUNT"],
-                "MESS_PASSWORD" => $aConfiguration["MESS_PASSWORD"],
-                "SMTPAuth"   => $aConfiguration["MESS_RAUTH"],
-                "SMTPSecure" => $aConfiguration["SMTPSecure"]
-            ));
+            $this->setConfig( array ("MESS_ENGINE" => $aConfiguration["MESS_ENGINE"],"MESS_SERVER" => $aConfiguration["MESS_SERVER"],"MESS_PORT" => $aConfiguration["MESS_PORT"],"MESS_ACCOUNT" => $aConfiguration["MESS_ACCOUNT"],"MESS_PASSWORD" => $aConfiguration["MESS_PASSWORD"],"SMTPAuth" => $aConfiguration["MESS_RAUTH"],"SMTPSecure" => $aConfiguration["SMTPSecure"]
+            ) );
 
-            $criteria = new Criteria("workflow");
-            $criteria->add(AppMessagePeer::APP_MSG_STATUS, "sent", Criteria::NOT_EQUAL);
+            $criteria = new Criteria( "workflow" );
+            $criteria->add( AppMessagePeer::APP_MSG_STATUS, "sent", Criteria::NOT_EQUAL );
 
             if ($dateResend != null) {
-                $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateResend, Criteria::GREATER_EQUAL);
+                $criteria->add( AppMessagePeer::APP_MSG_DATE, $dateResend, Criteria::GREATER_EQUAL );
             }
 
-            $rsCriteria = AppMessagePeer::doSelectRS($criteria);
-            $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+            $rsCriteria = AppMessagePeer::doSelectRS( $criteria );
+            $rsCriteria->setFetchmode( ResultSet::FETCHMODE_ASSOC );
 
             while ($rsCriteria->next()) {
                 if ($cron == 1) {
-                    $arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
+                    $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) );
                     $arrayCron["processcTimeStart"] = time();
-                    @file_put_contents(PATH_DATA . "cron", serialize($arrayCron));
+                    @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) );
                 }
 
                 $row = $rsCriteria->getRow();
 
                 try {
-                    $this->setData(
-                        $row["APP_MSG_UID"],
-                        $row["APP_MSG_SUBJECT"],
-                        $row["APP_MSG_FROM"],
-                        $row["APP_MSG_TO"],
-                        $row["APP_MSG_BODY"],
-                        date("Y-m-d H:i:s"),
-                        $row["APP_MSG_CC"],
-                        $row["APP_MSG_BCC"],
-                        $row["APP_MSG_TEMPLATE"],
-                        $row["APP_MSG_ATTACH"]
-                    );
+                    $this->setData( $row["APP_MSG_UID"], $row["APP_MSG_SUBJECT"], $row["APP_MSG_FROM"], $row["APP_MSG_TO"], $row["APP_MSG_BODY"], date( "Y-m-d H:i:s" ), $row["APP_MSG_CC"], $row["APP_MSG_BCC"], $row["APP_MSG_TEMPLATE"], $row["APP_MSG_ATTACH"] );
 
                     $this->sendMail();
                 } catch (Exception $e) {
-                    $strAux = "Spool::resendEmails(): Using " .
-                              $aConfiguration["MESS_ENGINE"] .
-                              " for APP_MGS_UID=" .
-                              $row["APP_MSG_UID"] .
-                              " -> With message: " .
-                              $e->getMessage();
+                    $strAux = "Spool::resendEmails(): Using " . $aConfiguration["MESS_ENGINE"] . " for APP_MGS_UID=" . $row["APP_MSG_UID"] . " -> With message: " . $e->getMessage();
 
                     if ($e->getCode() == $this->ExceptionCode["WARNING"]) {
-                        array_push($this->aWarnings, $strAux);
+                        array_push( $this->aWarnings, $strAux );
                         continue;
                     } else {
                         throw $e;
@@ -585,12 +584,13 @@ class spoolRun {
 
     /**
      * gets all warnings
+     *
      * @param none
      * @return string $this->aWarnings
      */
-    public function getWarnings()
+    public function getWarnings ()
     {
-        if (sizeof($this->aWarnings) != 0) {
+        if (sizeof( $this->aWarnings ) != 0) {
             return $this->aWarnings;
         }
 
@@ -600,36 +600,37 @@ class spoolRun {
     /**
      * db_insert
      *
-     * @param  array  $db_spool
+     * @param array $db_spool
      * @return string $sUID;
      */
-    public function db_insert($db_spool)
+    public function db_insert ($db_spool)
     {
-        $sUID  = G::generateUniqueID();
+        $sUID = G::generateUniqueID();
         $spool = new AppMessage();
-        $spool->setAppMsgUid($sUID);
-        $spool->setMsgUid($db_spool['msg_uid']);
-        $spool->setAppUid($db_spool['app_uid']);
-        $spool->setDelIndex($db_spool['del_index']);
-        $spool->setAppMsgType($db_spool['app_msg_type']);
-        $spool->setAppMsgSubject($db_spool['app_msg_subject']);
-        $spool->setAppMsgFrom($db_spool['app_msg_from']);
-        $spool->setAppMsgTo($db_spool['app_msg_to']);
-        $spool->setAppMsgBody($db_spool['app_msg_body']);
-        $spool->setAppMsgDate(date('Y-m-d H:i:s'));
-        $spool->setAppMsgCc($db_spool['app_msg_cc']);
-        $spool->setAppMsgBcc($db_spool['app_msg_bcc']);
-        $spool->setappMsgAttach($db_spool['app_msg_attach']);
-        $spool->setAppMsgTemplate($db_spool['app_msg_template']);
-        $spool->setAppMsgStatus($db_spool['app_msg_status']);
-        $spool->setAppMsgSendDate(date('Y-m-d H:i:s')); // Add by Ankit
+        $spool->setAppMsgUid( $sUID );
+        $spool->setMsgUid( $db_spool['msg_uid'] );
+        $spool->setAppUid( $db_spool['app_uid'] );
+        $spool->setDelIndex( $db_spool['del_index'] );
+        $spool->setAppMsgType( $db_spool['app_msg_type'] );
+        $spool->setAppMsgSubject( $db_spool['app_msg_subject'] );
+        $spool->setAppMsgFrom( $db_spool['app_msg_from'] );
+        $spool->setAppMsgTo( $db_spool['app_msg_to'] );
+        $spool->setAppMsgBody( $db_spool['app_msg_body'] );
+        $spool->setAppMsgDate( date( 'Y-m-d H:i:s' ) );
+        $spool->setAppMsgCc( $db_spool['app_msg_cc'] );
+        $spool->setAppMsgBcc( $db_spool['app_msg_bcc'] );
+        $spool->setappMsgAttach( $db_spool['app_msg_attach'] );
+        $spool->setAppMsgTemplate( $db_spool['app_msg_template'] );
+        $spool->setAppMsgStatus( $db_spool['app_msg_status'] );
+        $spool->setAppMsgSendDate( date( 'Y-m-d H:i:s' ) ); // Add by Ankit
 
-        if (!$spool->validate()) {
+
+        if (! $spool->validate()) {
             $errors = $spool->getValidationFailures();
             $this->status = 'error';
 
             foreach ($errors as $key => $value) {
-                echo "Validation error - " . $value->getMessage($key) . "\n";
+                echo "Validation error - " . $value->getMessage( $key ) . "\n";
             }
         } else {
             //echo "Saving - validation ok\n";
diff --git a/workflow/engine/classes/class.system.php b/workflow/engine/classes/class.system.php
index 2b157b717..d716e6647 100755
--- a/workflow/engine/classes/class.system.php
+++ b/workflow/engine/classes/class.system.php
@@ -1,6 +1,8 @@
 .
+ * along with this program. If not, see .
  *
  * For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
  * Coral Gables, FL, 33134, USA, or email info@colosa.com.
@@ -29,1094 +31,1082 @@
  *
  * author Erik A.O.
  * date May 12th, 2010
+ *
  * @package workflow.engine.classes
  *
  */
 
-class System {
+class System
+{
 
-  var $sFilename;
-  var $sFilesList;
-  var $sUpgradeFileList;
-  var $aErrors;
-  var $aWorkspaces;
-  var $sRevision;
-  var $sPath;
-  var $newSystemClass;
+    var $sFilename;
+    var $sFilesList;
+    var $sUpgradeFileList;
+    var $aErrors;
+    var $aWorkspaces;
+    var $sRevision;
+    var $sPath;
+    var $newSystemClass;
 
-  /**
-  * List currently installed plugins
-  *
-  * param
-  * @return array with the names of the plugins
-  */
-  public static function getPlugins() {
-    $plugins = array ();
+    /**
+     * List currently installed plugins
+     *
+     * param
+     *
+     * @return array with the names of the plugins
+     */
+    public static function getPlugins ()
+    {
+        $plugins = array ();
 
-    foreach (glob(PATH_PLUGINS . "*") as $filename) {
-      $info = pathinfo($filename);
-      if (array_key_exists("extension", $info) && (strcmp($info["extension"], "php") == 0)) {
-        $plugins[] = basename($filename, ".php");
-      }
+        foreach (glob( PATH_PLUGINS . "*" ) as $filename) {
+            $info = pathinfo( $filename );
+            if (array_key_exists( "extension", $info ) && (strcmp( $info["extension"], "php" ) == 0)) {
+                $plugins[] = basename( $filename, ".php" );
+            }
+        }
+
+        sort( $plugins, SORT_STRING );
+        return $plugins;
     }
 
-    sort($plugins, SORT_STRING);
-    return $plugins;
-  }
-
-  /**
-   * Lists existing workspaces, returning an array of workspaceTools object
-   * for each.
-   * This is a class method, it does not require an instance.
-   *
-   * @author Alexandre Rosenfeld 
-   * @access public
-   * @return array of workspace tools objects
-   */
-  public static function listWorkspaces() {
-    $oDirectory = dir(PATH_DB);
-    $aWorkspaces = array();
-    foreach (glob(PATH_DB . "*") as $filename) {
-      if (is_dir($filename) && file_exists($filename . "/db.php"))
-        $aWorkspaces[] = new workspaceTools (basename($filename));
-    }
-    return $aWorkspaces;
-  }
-
-  /**
-   * Get the ProcessMaker version. If version-pmos.php is not found, try to
-   * retrieve the version from git.
-   *
-   * @author Alexandre Rosenfeld 
-   * @return string system
-   */
-  public static function getVersion() {
-    if (! defined ( 'PM_VERSION' )) {
-      if (file_exists ( PATH_METHODS . 'login/version-pmos.php' )) {
-        include (PATH_METHODS . 'login/version-pmos.php');
-      } else {
-        $version = self::getVersionFromGit();
-        if ($version === false)
-          $version = 'Development Version';
-        define ( 'PM_VERSION', $version );
-      }
-    }
-    return PM_VERSION;
-  }
-
-  /**
-   * Get the branch and tag information from a git repository.
-   *
-   * @author Alexandre Rosenfeld 
-   * @return string branch and tag information
-   */
-  public static function getVersionFromGit($dir = NULL) {
-    if ($dir == NULL)
-      $dir = PATH_TRUNK;
-    if (!file_exists("$dir/.git"))
-      return false;
-    if (exec("cd $dir && git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/^* \(.*\)$/(Branch \\1)/'", $target)) {
-      exec("cd $dir && git describe", $target);
-      return implode(' ', $target);
-    }
-    return false;
-  }
-
-  /**
-  * Get system information
-  *
-  * param
-  * @return array with system information
-  */
-  public static function getSysInfo() {
-    $ipe = explode(" ", $_SERVER['SSH_CONNECTION']);
-
-    if( getenv('HTTP_CLIENT_IP') ) {
-      $ip = getenv('HTTP_CLIENT_IP');
-    } elseif( getenv('HTTP_X_FORWARDED_FOR') ) {
-      $ip = getenv('HTTP_X_FORWARDED_FOR');
-    } else {
-      $ip = getenv('REMOTE_ADDR');
+    /**
+     * Lists existing workspaces, returning an array of workspaceTools object
+     * for each.
+     * This is a class method, it does not require an instance.
+     *
+     * @author Alexandre Rosenfeld 
+     * @access public
+     * @return array of workspace tools objects
+     */
+    public static function listWorkspaces ()
+    {
+        $oDirectory = dir( PATH_DB );
+        $aWorkspaces = array ();
+        foreach (glob( PATH_DB . "*" ) as $filename) {
+            if (is_dir( $filename ) && file_exists( $filename . "/db.php" ))
+                $aWorkspaces[] = new workspaceTools( basename( $filename ) );
+        }
+        return $aWorkspaces;
     }
 
-    /* For distros with the lsb_release, this returns a one-line description of
+    /**
+     * Get the ProcessMaker version.
+     * If version-pmos.php is not found, try to
+     * retrieve the version from git.
+     *
+     * @author Alexandre Rosenfeld 
+     * @return string system
+     */
+    public static function getVersion ()
+    {
+        if (! defined( 'PM_VERSION' )) {
+            if (file_exists( PATH_METHODS . 'login/version-pmos.php' )) {
+                include (PATH_METHODS . 'login/version-pmos.php');
+            } else {
+                $version = self::getVersionFromGit();
+                if ($version === false)
+                    $version = 'Development Version';
+                define( 'PM_VERSION', $version );
+            }
+        }
+        return PM_VERSION;
+    }
+
+    /**
+     * Get the branch and tag information from a git repository.
+     *
+     * @author Alexandre Rosenfeld 
+     * @return string branch and tag information
+     */
+    public static function getVersionFromGit ($dir = NULL)
+    {
+        if ($dir == NULL)
+            $dir = PATH_TRUNK;
+        if (! file_exists( "$dir/.git" ))
+            return false;
+        if (exec( "cd $dir && git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/^* \(.*\)$/(Branch \\1)/'", $target )) {
+            exec( "cd $dir && git describe", $target );
+            return implode( ' ', $target );
+        }
+        return false;
+    }
+
+    /**
+     * Get system information
+     *
+     * param
+     *
+     * @return array with system information
+     */
+    public static function getSysInfo ()
+    {
+        $ipe = explode( " ", $_SERVER['SSH_CONNECTION'] );
+
+        if (getenv( 'HTTP_CLIENT_IP' )) {
+            $ip = getenv( 'HTTP_CLIENT_IP' );
+        } elseif (getenv( 'HTTP_X_FORWARDED_FOR' )) {
+            $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
+        } else {
+            $ip = getenv( 'REMOTE_ADDR' );
+        }
+
+        /* For distros with the lsb_release, this returns a one-line description of
      * the distro name, such as "CentOS release 5.3 (Final)" or "Ubuntu 10.10"
      */
-    $distro = exec("lsb_release -d -s 2> /dev/null");
+        $distro = exec( "lsb_release -d -s 2> /dev/null" );
 
-    /* For distros without lsb_release, we look for *release (such as
+        /* For distros without lsb_release, we look for *release (such as
      * redhat-release, gentoo-release, SuSE-release, etc) or *version (such as
      * debian_version, slackware-version, etc)
      */
-    if (empty($distro)) {
-      foreach (glob("/etc/*release") as $filename) {
-        $distro = trim(file_get_contents($filename));
-        if (!empty($distro))
-          break;
-      }
-      if (empty($distro)) {
-        foreach (glob("/etc/*version") as $filename) {
-          $distro = trim(file_get_contents($filename));
-          if (!empty($distro))
-            break;
+        if (empty( $distro )) {
+            foreach (glob( "/etc/*release" ) as $filename) {
+                $distro = trim( file_get_contents( $filename ) );
+                if (! empty( $distro ))
+                    break;
+            }
+            if (empty( $distro )) {
+                foreach (glob( "/etc/*version" ) as $filename) {
+                    $distro = trim( file_get_contents( $filename ) );
+                    if (! empty( $distro ))
+                        break;
+                }
+            }
         }
-      }
-    }
 
-    /* CentOS returns a string with quotes, remove them and append
+        /* CentOS returns a string with quotes, remove them and append
      * the OS name (such as LINUX, WINNT, DARWIN, etc)
      */
-    $distro = trim($distro, "\"") . " (" . PHP_OS . ")";
+        $distro = trim( $distro, "\"" ) . " (" . PHP_OS . ")";
 
-    $Fields = array();
-    $Fields['SYSTEM'] = $distro;
-    $Fields['PHP'] = phpversion();
-    $Fields['PM_VERSION'] = self::getVersion();
-    $Fields['SERVER_ADDR'] = $ipe[2]; //lookup($ipe[2]);
-    $Fields['IP'] = $ipe[0]; //lookup($ipe[0]);
+        $Fields = array ();
+        $Fields['SYSTEM'] = $distro;
+        $Fields['PHP'] = phpversion();
+        $Fields['PM_VERSION'] = self::getVersion();
+        $Fields['SERVER_ADDR'] = $ipe[2]; //lookup($ipe[2]);
+        $Fields['IP'] = $ipe[0]; //lookup($ipe[0]);
 
-    $Fields['PLUGINS_LIST'] = System::getPlugins();
 
-    return $Fields;
-  }
+        $Fields['PLUGINS_LIST'] = System::getPlugins();
 
-  public static function listPoFiles() {
-    $folders = glob(PATH_CORE . '/content/translations/*');
-
-    $items = glob(PATH_CORE . '/content/translations/*.po');
-    foreach ($folders as $folder) {
-      if (is_dir($folder)) {
-        $add = glob($folder . "/*.po");
-        $items = array_merge($items, $add);
-      }
+        return $Fields;
     }
 
-    return $items;
-  }
+    public static function listPoFiles ()
+    {
+        $folders = glob( PATH_CORE . '/content/translations/*' );
 
-  public static function verifyChecksum() {
-    if (!file_exists(PATH_TRUNK . "checksum.txt"))
-      return false;
-    $lines = explode("\n", file_get_contents(PATH_TRUNK . "checksum.txt"));
-    $result = array("diff" => array(), "missing" => array());
-    foreach ($lines as $line) {
-      if (empty($line))
-        continue;
-      list($checksum, $empty, $filename) = explode(" ", $line);
-      //Skip xmlform because these files always change.
-      if (strpos($filename, "/xmlform/") !== false)
-        continue;
-      if (file_exists(realpath($filename))) {
-        if (strcmp($checksum, md5_file(realpath($filename))) != 0) {
-          $result['diff'][] = $filename;
+        $items = glob( PATH_CORE . '/content/translations/*.po' );
+        foreach ($folders as $folder) {
+            if (is_dir( $folder )) {
+                $add = glob( $folder . "/*.po" );
+                $items = array_merge( $items, $add );
+            }
         }
-      } else {
-        $result['missing'][] = $filename;
-      }
-    }
-    return $result;
-  }
 
-  /**
-  * This function checks files to do updated to pm
-  *
-  *
-  * @name verifyFileForUpgrade
-  *
-  * param
-  * @return boolean
-  */
-  function verifyFileForUpgrade()
-  {
-   $upgradeFilename = isset($_FILES['form']['name']['UPGRADE_FILENAME']) ? $_FILES['form']['name']['UPGRADE_FILENAME'] : '';
-   $tempFilename    = isset($_FILES['form']['tmp_name']['UPGRADE_FILENAME']) ? $_FILES['form']['tmp_name']['UPGRADE_FILENAME'] : '';
-   $this->sRevision = str_replace('.tar.gz', '', str_replace('pmos-patch-', '', $upgradeFilename));
-   $sTemFilename    = $tempFilename;
-   $this->sFilename = PATH_DATA . 'upgrade' . PATH_SEP . $upgradeFilename;
-   $this->sPath     = dirname($this->sFilename) . PATH_SEP;
-   G::mk_dir(PATH_DATA . 'upgrade');
-   if( ! move_uploaded_file($sTemFilename, $this->sFilename) ) {
-     return false;
-   }
-   return true;
-  }
-
-  /**
-  * This function gets files to do updated to pm
-  *
-  *
-  * @name getUpgradedFilesList
-  *
-  * param
-  * @return void
-  */
-  function getUpgradedFilesList()
-  {
-   G::LoadClass('archive');
-   $this->sFilesList = new gzip_file($this->sFilename);
-   $this->sFilesList->set_options(array (
-     'basedir'   => dirname($this->sFilename),
-     'overwrite' => 1
-   ));
-   $this->sFilesList->extract_files();
-    if( count($this->sFilesList->error) > 0 ) {
-      $msg = '';
-      foreach( $this->sFilesList->error as $key => $val ) {
-        $msg .= $val . "\n";
-    }
-     throw new Exception($msg);
-   }
-   if( count($this->sFilesList->files) == 0 ) {
-     throw new Exception('The uploaded file is an invalid patch file.');
-   }
-  }
-
-  /**
-  * This function checks to do updated for boot
-  *
-  *
-  * @name verifyForBootstrapUpgrade
-  *
-  * param
-  * @return boolean
-  */
-  function verifyForBootstrapUpgrade()
-  {
-   foreach( $this->sFilesList->files as $sFile ) {
-     if( basename($sFile) == 'schema.xml' ) {
-       $this->newSystemClass = $sFile;
-       return true;
-     }
-   }
-   return false;
-  }
-
-  /**
-  * This function updates to the files
-  *
-  *
-  * @name upgrade
-  *
-  * param
-  * @return array
-  */
-  function upgrade()
-  {
-   //get special files
-   $sListFile         = '';
-   $sCheckListFile    = '';
-   $sPatchVersionFile = '';
-   $sPoFile           = '';
-   $sSchemaFile       = '';
-   $sSchemaRBACFile   = '';
-   foreach( $this->sFilesList->files as $sFile ) {
-    if( basename($sFile) == 'schema.xml' ) {
-      if( strpos($sFile, '/rbac/engine/') === false ) {
-        $sOldSchema  = '';
-        $sSchemaFile = $sFile;
-      } else {
-        $sOldSchemaRBAC  = '';
-        $sSchemaRBACFile = $sFile;
-      }
+        return $items;
     }
 
-    //files.lst
-    if( basename($sFile) == 'files.lst' ) {
-      $this->sUpgradeFileList = $sFile;
-    }
-
-    //files.lst
-    if( basename($sFile) == 'patch.version.txt' ) {
-      $sPatchVersionFile = $sFile;
-    }
-
-    //files.rev.txt
-    if( substr(basename($sFile), 0, 6) == 'files.' && substr(basename($sFile), - 4) == '.txt' ) {
-      $sCheckListFile = $sFile;
-    }
-
-    //po files
-    $sExtension = substr($sFile, strrpos($sFile, '.') + 1, strlen($sFile));
-    if( $sExtension == 'po' ) {
-      $sPoFile = $sFile;
-    }
-   }
-
-   $pmVersion = explode('-', self::getVersion());
-   array_shift($pmVersion);
-   $patchVersion = explode('-', $this->sRevision);
-
-   if( $sPatchVersionFile != '' && file_exists($sPatchVersionFile) ) {
-    $this->sRevision = file_get_contents($sPatchVersionFile);
-    $patchVersion    = explode('-', $this->sRevision);
-   }
-
-   if( ! file_exists(PATH_DATA . 'log' . PATH_SEP) ) {
-     G::mk_dir(PATH_DATA . 'log' . PATH_SEP);
-   }
-
-   //empty query log
-   $sqlLog = PATH_DATA . 'log' . PATH_SEP . "query.log";
-   $fp     = fopen($sqlLog, "w+");
-   fwrite($fp, "");
-   fclose($fp);
-
-   $aEnvironmentsUpdated = array ();
-   $aEnvironmentsDiff    = array ();
-   $aErrors              = array ();
-
-   //now will verify each folder and file has permissions to write and add files.
-   if( $this->sUpgradeFileList != '' ) {
-    $bCopySchema = true;
-    $oFile       = fopen($this->sUpgradeFileList, 'r');
-    while( $sLine = trim(fgets($oFile)) ) {
-     $sLine = substr($sLine, 1);
-     $aAux  = explode(PATH_SEP, $sLine);
-     array_shift($aAux);
-     $sFilePath      = implode(PATH_SEP, $aAux);
-     $targetFileName = PATH_TRUNK . $sFilePath;
-     if( ! is_dir($this->sPath . 'processmaker' . PATH_SEP . $sFilePath) ) {
-      //if we are updating or deleting a file
-      if( file_exists($this->sPath . 'processmaker' . PATH_SEP . $sFilePath) ) {
-       if( file_exists($targetFileName) ) {
-        if( ! is_writable($targetFileName) ) {
-          throw (new Exception("File $targetFileName is not writable."));
+    public static function verifyChecksum ()
+    {
+        if (! file_exists( PATH_TRUNK . "checksum.txt" ))
+            return false;
+        $lines = explode( "\n", file_get_contents( PATH_TRUNK . "checksum.txt" ) );
+        $result = array ("diff" => array (),"missing" => array ()
+        );
+        foreach ($lines as $line) {
+            if (empty( $line ))
+                continue;
+            list ($checksum, $empty, $filename) = explode( " ", $line );
+            //Skip xmlform because these files always change.
+            if (strpos( $filename, "/xmlform/" ) !== false)
+                continue;
+            if (file_exists( realpath( $filename ) )) {
+                if (strcmp( $checksum, md5_file( realpath( $filename ) ) ) != 0) {
+                    $result['diff'][] = $filename;
+                }
+            } else {
+                $result['missing'][] = $filename;
+            }
         }
-       } else {
-        //verify parent folder, and ask if that folder is writable
-        $auxDir = explode('/', $targetFileName);
-        array_pop($auxDir);
-        $parentDir = implode('/', $auxDir);
-        if( ! is_dir($parentDir) ) {
-          //throw (new Exception("File $parentDir is an invalid directory."));
-          G::mk_dir($parentDir);
-        }
-        if( ! is_writable($parentDir) ) {
-          throw (new Exception("Directory $parentDir is not writable."));
-        }
-       }
-      } else {
-       //delete unused files
-       if( file_exists($targetFileName) && ! is_writable($targetFileName) ) {
-         throw (new Exception("File $targetFileName is not writable."));
-       }
-      }
-     } else {
-       $dirName = PATH_TRUNK . $sFilePath;
-       if( $dirName[strlen($dirName) - 1] == '/' )
-         $dirName = substr($dirName, 0, strlen($dirName) - 1);
-       $auxDir = explode('/', $dirName);
-       array_pop($auxDir);
-       $parentDir = implode('/', $auxDir);
-       if( file_exists($dirName) ) {
-        if( is_writable($dirName) ) {
-          //print "e. ok $dirName 
"; - } else { - throw (new Exception("$dirName is not writable")); - } - } else { - if( is_writable($parentDir) ) { - mkdir($dirName, 0777); - } else { - throw (new Exception("$dirName does not exist and parent folder $parentDir is not writable")); - } - } - } + return $result; } - } - - //processing list file files.lst - if( $this->sUpgradeFileList != '' ) { - $bCopySchema = true; - $oFile = fopen($this->sUpgradeFileList, 'r'); - while( $sLine = trim(fgets($oFile)) ) { - $action = substr($sLine, 0, 1); - $sLine = substr($sLine, 1); - $aAux = explode(PATH_SEP, $sLine); - array_shift($aAux); - $sFilePath = implode(PATH_SEP, $aAux); - $targetFileName = PATH_TRUNK . $sFilePath; - if( strtoupper($action) != 'D'){ - if( ! is_dir($this->sPath . 'processmaker' . PATH_SEP . $sFilePath) ) { - if( file_exists($this->sPath . 'processmaker' . PATH_SEP . $sFilePath) ) { - if( strpos($sFilePath, 'schema.xml') !== false && $bCopySchema ) { - $bCopySchema = false; - $sOldSchema = str_replace('schema.xml', 'schema_' . date('Ymd') . '.xml', PATH_TRUNK . $sFilePath); - $this->pm_copy(PATH_TRUNK . $sFilePath, $sOldSchema); - } - if( file_exists($targetFileName) ) { - if( is_writable($targetFileName) ) { - $this->pm_copy($this->sPath . 'processmaker' . PATH_SEP . $sFilePath, $targetFileName); - @chmod($targetFileName, 0666); - } else - throw (new Exception("Failed to open file: Permission denied in $targetFileName.")); - } else { - $this->pm_copy($this->sPath . 'processmaker' . PATH_SEP . $sFilePath, $targetFileName); - @chmod($targetFileName, 0666); - } - } else { //delete unused files - if( file_exists($targetFileName) ) { - @unlink($targetFileName); - } - } - } else { - if( ! file_exists(PATH_TRUNK . $sFilePath) ) { - mkdir(PATH_TRUNK . $sFilePath, 0777); - } - } - } else if( file_exists(PATH_TRUNK . $sFilePath) && $sFilePath != 'workflow/engine/gulliver' ) { - @unlink(PATH_TRUNK . $sFilePath); - } - } - } - - //end files copied. - $missedFiles = ''; - $distinctFiles = ''; - $missed = 0; - $distinct = 0; - //checking files of this installation server with the files in Repository Code. - if( $sCheckListFile != '' ) { - $fp = fopen($sCheckListFile, 'r'); - while( ! feof($fp) ) { - $line = explode(' ', fgets($fp)); - if( count($line) == 3 ) { - $file = PATH_TRUNK . trim($line[2]); - if( is_readable($file) ) { - $size = sprintf("%07d", filesize($file)); - $checksum = sprintf("%010u", crc32(file_get_contents($file))); - if( ! ($line[0] == $size && $line[1] == $checksum) && substr($file, - 4) != '.xml' ) { - $distinctFiles .= $file . "\n"; - $distinct ++; - } - } else { - $missedFiles .= $file . "\n"; - $missed ++; - } - } - } - fclose($fp); - } - - if( $missed > 0 ) - $aErrors[] = "Warning: there are $missed missed files. "; - $aErrors[] = $missedFiles; - - if( $distinct > 0 ) { - $aErrors[] = "Warning: there are $distinct files with differences. "; - $aErrors[] = $distinctFiles; - } - - //now include the files and classes needed for upgrade databases, dont move this files, because we - //are getting the last files in this point. Even the files was in the patch we will take the new ones. - include PATH_METHODS . PATH_SEP . 'setup' . PATH_SEP . 'upgrade_RBAC.php'; - G::LoadClass('languages'); - G::LoadSystem('database_mysql'); - - $bForceXml = true; - $bParseSchema = true; - $bParseSchemaRBAC = true; - $oDirectory = dir(PATH_DB); - - //count db.php files ( workspaces ) - $aWorkspaces = array (); - while( ($sObject = $oDirectory->read()) ) { - if( is_dir(PATH_DB . $sObject) && substr($sObject, 0, 1) != '.' && file_exists(PATH_DB . $sObject . PATH_SEP . 'db.php') ) { - $aWorkspaces[] = $sObject; - } - } - $aUpgradeData = array (); - $aUpgradeData['workspaces'] = $aWorkspaces; - $aUpgradeData['wsQuantity'] = count($aWorkspaces); - $aUpgradeData['sPoFile'] = $sPoFile; - $aUpgradeData['bForceXmlPoFile'] = true; - $aUpgradeData['sSchemaFile'] = $sSchemaFile; - $aUpgradeData['sSchemaRBACFile'] = $sSchemaRBACFile; - - file_put_contents(PATH_DATA . 'log' . PATH_SEP . "upgrade.data.bin", serialize($aUpgradeData)); - - $sSchemaFile = ''; - $sPoFile = ''; - $sSchemaRBACFile = ''; - - $oDirectory = dir(PATH_DB); - while( ($sObject = $oDirectory->read()) ) { - if( is_dir(PATH_DB . $sObject) && substr($sObject, 0, 1) != '.' ) { - if( file_exists(PATH_DB . $sObject . PATH_SEP . 'db.php') ) { - - eval($this->getDatabaseCredentials(PATH_DB . $sObject . PATH_SEP . 'db.php')); - - } - $aEnvironmentsUpdated[] = $sObject; - $aEnvironmentsDiff[] = $sObject; - } - } - $oDirectory->close(); - @unlink(PATH_CORE . 'config/_databases_.php'); - - //clean up smarty directory - $oDirectory = dir(PATH_SMARTY_C); - while( $sFilename = $oDirectory->read() ) { - if( ($sFilename != '.') && ($sFilename != '..') ) { - @unlink(PATH_SMARTY_C . PATH_SEP . $sFilename); - } - } - - //clean up xmlform folders - $sDir = PATH_C . 'xmlform'; - if( file_exists($sDir) && is_dir($sDir) ) { - $oDirectory = dir($sDir); - while( $sObjectName = $oDirectory->read() ) { - if( ($sObjectName != '.') && ($sObjectName != '..') ) { - if (is_dir($sDir . PATH_SEP . $sObjectName)) { - G::rm_dir($sDir . PATH_SEP . $sObjectName); - } - } - } - $oDirectory->close(); - } - - //changing the PM_VERSION according the patch file name - $oFile = fopen(PATH_METHODS . 'login/version-pmos.php', 'w+'); - if( isset($this->sRevision) && $this->sRevision != '' ) { - fwrite($oFile, "sRevision . "' ));\n?>"); - } else { - fwrite($oFile, ""); - } - fclose($oFile); - $ver = explode("-", $this->sRevision); - $this->aErrors = $aErrors; - $this->aWorkspaces = $aWorkspaces; - - return $ver; - } /** - * This function does to clean up to the upgrate directory - * - * - * @name cleanupUpgradeDirectory - * - * param - * @return array - */ - public function cleanupUpgradeDirectory() + * This function checks files to do updated to pm + * + * + * @name verifyFileForUpgrade + * + * param + * @return boolean + */ + function verifyFileForUpgrade () { - G::rm_dir(PATH_DATA . "upgrade" . PATH_SEP . "processmaker"); + $upgradeFilename = isset( $_FILES['form']['name']['UPGRADE_FILENAME'] ) ? $_FILES['form']['name']['UPGRADE_FILENAME'] : ''; + $tempFilename = isset( $_FILES['form']['tmp_name']['UPGRADE_FILENAME'] ) ? $_FILES['form']['tmp_name']['UPGRADE_FILENAME'] : ''; + $this->sRevision = str_replace( '.tar.gz', '', str_replace( 'pmos-patch-', '', $upgradeFilename ) ); + $sTemFilename = $tempFilename; + $this->sFilename = PATH_DATA . 'upgrade' . PATH_SEP . $upgradeFilename; + $this->sPath = dirname( $this->sFilename ) . PATH_SEP; + G::mk_dir( PATH_DATA . 'upgrade' ); + if (! move_uploaded_file( $sTemFilename, $this->sFilename )) { + return false; + } + return true; } - /** - * This function creates a directory - * - * - * @name pm_copy - * - * @param string $source - * @param string $target - * @return void - */ - function pm_copy($source, $target) - { - if( ! is_dir(dirname($target)) ) { - G::mk_dir(dirname($target)); + /** + * This function gets files to do updated to pm + * + * + * @name getUpgradedFilesList + * + * param + * @return void + */ + function getUpgradedFilesList () + { + G::LoadClass( 'archive' ); + $this->sFilesList = new gzip_file( $this->sFilename ); + $this->sFilesList->set_options( array ('basedir' => dirname( $this->sFilename ),'overwrite' => 1 + ) ); + $this->sFilesList->extract_files(); + if (count( $this->sFilesList->error ) > 0) { + $msg = ''; + foreach ($this->sFilesList->error as $key => $val) { + $msg .= $val . "\n"; + } + throw new Exception( $msg ); + } + if (count( $this->sFilesList->files ) == 0) { + throw new Exception( 'The uploaded file is an invalid patch file.' ); + } } - if( ! copy($source, $target) ) { - krumo($source); - krumo($target); + + /** + * This function checks to do updated for boot + * + * + * @name verifyForBootstrapUpgrade + * + * param + * @return boolean + */ + function verifyForBootstrapUpgrade () + { + foreach ($this->sFilesList->files as $sFile) { + if (basename( $sFile ) == 'schema.xml') { + $this->newSystemClass = $sFile; + return true; + } + } + return false; } - } - /** - * This function gets info about db - * - * - * @name getDatabaseCredentials - * - * @param string $dbFile - * @return $sContent - */ - function getDatabaseCredentials($dbFile) - { - $sContent = file_get_contents($dbFile); - $sContent = str_replace('', '', $sContent); - $sContent = str_replace('define', '', $sContent); - $sContent = str_replace("('", '$', $sContent); - $sContent = str_replace("',", '=', $sContent); - $sContent = str_replace(");", ';', $sContent); - return $sContent; - } + /** + * This function updates to the files + * + * + * @name upgrade + * + * param + * @return array + */ + function upgrade () + { + //get special files + $sListFile = ''; + $sCheckListFile = ''; + $sPatchVersionFile = ''; + $sPoFile = ''; + $sSchemaFile = ''; + $sSchemaRBACFile = ''; + foreach ($this->sFilesList->files as $sFile) { + if (basename( $sFile ) == 'schema.xml') { + if (strpos( $sFile, '/rbac/engine/' ) === false) { + $sOldSchema = ''; + $sSchemaFile = $sFile; + } else { + $sOldSchemaRBAC = ''; + $sSchemaRBACFile = $sFile; + } + } - /** - * Retrieves the system schema. - * - * @return schema content in an array - */ - public static function getSystemSchema() { - return System::getSchema(PATH_TRUNK . "workflow/engine/config/schema.xml"); - } + //files.lst + if (basename( $sFile ) == 'files.lst') { + $this->sUpgradeFileList = $sFile; + } - /** - * Retrieves the schema for a plugin. - * - * @param string $pluginName name of the plugin - * @return $sContent - */ - public static function getPluginSchema($pluginName) { - if (file_exists(PATH_PLUGINS . $pluginName . "/config/schema.xml")) - return System::getSchema(PATH_PLUGINS . $pluginName . "/config/schema.xml"); - else - return false; - } + //files.lst + if (basename( $sFile ) == 'patch.version.txt') { + $sPatchVersionFile = $sFile; + } - /** - * Retrieves a schema array from a file. - * - * @param string $sSchemaFile schema filename - * @return $sContent - */ - public static function getSchema($sSchemaFile) { - /* This is the MySQL mapping that Propel uses (from MysqlPlatform.php) */ - $mysqlTypes = array( - 'NUMERIC' => "DECIMAL", - 'LONGVARCHAR' => "MEDIUMTEXT", - 'TIMESTAMP' => "DATETIME", - 'BU_TIMESTAMP' => "DATETIME", - 'BINARY' => "BLOB", - 'VARBINARY' => "MEDIUMBLOB", - 'LONGVARBINARY' => "LONGBLOB", - 'BLOB' => "LONGBLOB", - 'CLOB' => "LONGTEXT", + //files.rev.txt + if (substr( basename( $sFile ), 0, 6 ) == 'files.' && substr( basename( $sFile ), - 4 ) == '.txt') { + $sCheckListFile = $sFile; + } + + //po files + $sExtension = substr( $sFile, strrpos( $sFile, '.' ) + 1, strlen( $sFile ) ); + if ($sExtension == 'po') { + $sPoFile = $sFile; + } + } + + $pmVersion = explode( '-', self::getVersion() ); + array_shift( $pmVersion ); + $patchVersion = explode( '-', $this->sRevision ); + + if ($sPatchVersionFile != '' && file_exists( $sPatchVersionFile )) { + $this->sRevision = file_get_contents( $sPatchVersionFile ); + $patchVersion = explode( '-', $this->sRevision ); + } + + if (! file_exists( PATH_DATA . 'log' . PATH_SEP )) { + G::mk_dir( PATH_DATA . 'log' . PATH_SEP ); + } + + //empty query log + $sqlLog = PATH_DATA . 'log' . PATH_SEP . "query.log"; + $fp = fopen( $sqlLog, "w+" ); + fwrite( $fp, "" ); + fclose( $fp ); + + $aEnvironmentsUpdated = array (); + $aEnvironmentsDiff = array (); + $aErrors = array (); + + //now will verify each folder and file has permissions to write and add files. + if ($this->sUpgradeFileList != '') { + $bCopySchema = true; + $oFile = fopen( $this->sUpgradeFileList, 'r' ); + while ($sLine = trim( fgets( $oFile ) )) { + $sLine = substr( $sLine, 1 ); + $aAux = explode( PATH_SEP, $sLine ); + array_shift( $aAux ); + $sFilePath = implode( PATH_SEP, $aAux ); + $targetFileName = PATH_TRUNK . $sFilePath; + if (! is_dir( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath )) { + //if we are updating or deleting a file + if (file_exists( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath )) { + if (file_exists( $targetFileName )) { + if (! is_writable( $targetFileName )) { + throw (new Exception( "File $targetFileName is not writable." )); + } + } else { + //verify parent folder, and ask if that folder is writable + $auxDir = explode( '/', $targetFileName ); + array_pop( $auxDir ); + $parentDir = implode( '/', $auxDir ); + if (! is_dir( $parentDir )) { + //throw (new Exception("File $parentDir is an invalid directory.")); + G::mk_dir( $parentDir ); + } + if (! is_writable( $parentDir )) { + throw (new Exception( "Directory $parentDir is not writable." )); + } + } + } else { + //delete unused files + if (file_exists( $targetFileName ) && ! is_writable( $targetFileName )) { + throw (new Exception( "File $targetFileName is not writable." )); + } + } + } else { + $dirName = PATH_TRUNK . $sFilePath; + if ($dirName[strlen( $dirName ) - 1] == '/') + $dirName = substr( $dirName, 0, strlen( $dirName ) - 1 ); + $auxDir = explode( '/', $dirName ); + array_pop( $auxDir ); + $parentDir = implode( '/', $auxDir ); + if (file_exists( $dirName )) { + if (is_writable( $dirName )) { + //print "e. ok $dirName
"; + } else { + throw (new Exception( "$dirName is not writable" )); + } + } else { + if (is_writable( $parentDir )) { + mkdir( $dirName, 0777 ); + } else { + throw (new Exception( "$dirName does not exist and parent folder $parentDir is not writable" )); + } + } + } + } + } + + //processing list file files.lst + if ($this->sUpgradeFileList != '') { + $bCopySchema = true; + $oFile = fopen( $this->sUpgradeFileList, 'r' ); + while ($sLine = trim( fgets( $oFile ) )) { + $action = substr( $sLine, 0, 1 ); + $sLine = substr( $sLine, 1 ); + $aAux = explode( PATH_SEP, $sLine ); + array_shift( $aAux ); + $sFilePath = implode( PATH_SEP, $aAux ); + $targetFileName = PATH_TRUNK . $sFilePath; + if (strtoupper( $action ) != 'D') { + if (! is_dir( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath )) { + if (file_exists( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath )) { + if (strpos( $sFilePath, 'schema.xml' ) !== false && $bCopySchema) { + $bCopySchema = false; + $sOldSchema = str_replace( 'schema.xml', 'schema_' . date( 'Ymd' ) . '.xml', PATH_TRUNK . $sFilePath ); + $this->pm_copy( PATH_TRUNK . $sFilePath, $sOldSchema ); + } + if (file_exists( $targetFileName )) { + if (is_writable( $targetFileName )) { + $this->pm_copy( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath, $targetFileName ); + @chmod( $targetFileName, 0666 ); + } else + throw (new Exception( "Failed to open file: Permission denied in $targetFileName." )); + } else { + $this->pm_copy( $this->sPath . 'processmaker' . PATH_SEP . $sFilePath, $targetFileName ); + @chmod( $targetFileName, 0666 ); + } + } else { //delete unused files + if (file_exists( $targetFileName )) { + @unlink( $targetFileName ); + } + } + } else { + if (! file_exists( PATH_TRUNK . $sFilePath )) { + mkdir( PATH_TRUNK . $sFilePath, 0777 ); + } + } + } else if (file_exists( PATH_TRUNK . $sFilePath ) && $sFilePath != 'workflow/engine/gulliver') { + @unlink( PATH_TRUNK . $sFilePath ); + } + } + } + + //end files copied. + $missedFiles = ''; + $distinctFiles = ''; + $missed = 0; + $distinct = 0; + //checking files of this installation server with the files in Repository Code. + if ($sCheckListFile != '') { + $fp = fopen( $sCheckListFile, 'r' ); + while (! feof( $fp )) { + $line = explode( ' ', fgets( $fp ) ); + if (count( $line ) == 3) { + $file = PATH_TRUNK . trim( $line[2] ); + if (is_readable( $file )) { + $size = sprintf( "%07d", filesize( $file ) ); + $checksum = sprintf( "%010u", crc32( file_get_contents( $file ) ) ); + if (! ($line[0] == $size && $line[1] == $checksum) && substr( $file, - 4 ) != '.xml') { + $distinctFiles .= $file . "\n"; + $distinct ++; + } + } else { + $missedFiles .= $file . "\n"; + $missed ++; + } + } + } + fclose( $fp ); + } + + if ($missed > 0) + $aErrors[] = "Warning: there are $missed missed files. "; + $aErrors[] = $missedFiles; + + if ($distinct > 0) { + $aErrors[] = "Warning: there are $distinct files with differences. "; + $aErrors[] = $distinctFiles; + } + + //now include the files and classes needed for upgrade databases, dont move this files, because we + //are getting the last files in this point. Even the files was in the patch we will take the new ones. + include PATH_METHODS . PATH_SEP . 'setup' . PATH_SEP . 'upgrade_RBAC.php'; + G::LoadClass( 'languages' ); + G::LoadSystem( 'database_mysql' ); + + $bForceXml = true; + $bParseSchema = true; + $bParseSchemaRBAC = true; + $oDirectory = dir( PATH_DB ); + + //count db.php files ( workspaces ) + $aWorkspaces = array (); + while (($sObject = $oDirectory->read())) { + if (is_dir( PATH_DB . $sObject ) && substr( $sObject, 0, 1 ) != '.' && file_exists( PATH_DB . $sObject . PATH_SEP . 'db.php' )) { + $aWorkspaces[] = $sObject; + } + } + $aUpgradeData = array (); + $aUpgradeData['workspaces'] = $aWorkspaces; + $aUpgradeData['wsQuantity'] = count( $aWorkspaces ); + $aUpgradeData['sPoFile'] = $sPoFile; + $aUpgradeData['bForceXmlPoFile'] = true; + $aUpgradeData['sSchemaFile'] = $sSchemaFile; + $aUpgradeData['sSchemaRBACFile'] = $sSchemaRBACFile; + + file_put_contents( PATH_DATA . 'log' . PATH_SEP . "upgrade.data.bin", serialize( $aUpgradeData ) ); + + $sSchemaFile = ''; + $sPoFile = ''; + $sSchemaRBACFile = ''; + + $oDirectory = dir( PATH_DB ); + while (($sObject = $oDirectory->read())) { + if (is_dir( PATH_DB . $sObject ) && substr( $sObject, 0, 1 ) != '.') { + if (file_exists( PATH_DB . $sObject . PATH_SEP . 'db.php' )) { + + eval( $this->getDatabaseCredentials( PATH_DB . $sObject . PATH_SEP . 'db.php' ) ); + + } + $aEnvironmentsUpdated[] = $sObject; + $aEnvironmentsDiff[] = $sObject; + } + } + $oDirectory->close(); + @unlink( PATH_CORE . 'config/_databases_.php' ); + + //clean up smarty directory + $oDirectory = dir( PATH_SMARTY_C ); + while ($sFilename = $oDirectory->read()) { + if (($sFilename != '.') && ($sFilename != '..')) { + @unlink( PATH_SMARTY_C . PATH_SEP . $sFilename ); + } + } + + //clean up xmlform folders + $sDir = PATH_C . 'xmlform'; + if (file_exists( $sDir ) && is_dir( $sDir )) { + $oDirectory = dir( $sDir ); + while ($sObjectName = $oDirectory->read()) { + if (($sObjectName != '.') && ($sObjectName != '..')) { + if (is_dir( $sDir . PATH_SEP . $sObjectName )) { + G::rm_dir( $sDir . PATH_SEP . $sObjectName ); + } + } + } + $oDirectory->close(); + } + + //changing the PM_VERSION according the patch file name + $oFile = fopen( PATH_METHODS . 'login/version-pmos.php', 'w+' ); + if (isset( $this->sRevision ) && $this->sRevision != '') { + fwrite( $oFile, "sRevision . "' ));\n?>" ); + } else { + fwrite( $oFile, "" ); + } + fclose( $oFile ); + $ver = explode( "-", $this->sRevision ); + $this->aErrors = $aErrors; + $this->aWorkspaces = $aWorkspaces; + + return $ver; + } + + /** + * This function does to clean up to the upgrate directory + * + * + * @name cleanupUpgradeDirectory + * + * param + * @return array + */ + public function cleanupUpgradeDirectory () + { + G::rm_dir( PATH_DATA . "upgrade" . PATH_SEP . "processmaker" ); + } + + /** + * This function creates a directory + * + * + * @name pm_copy + * + * @param string $source + * @param string $target + * @return void + */ + function pm_copy ($source, $target) + { + if (! is_dir( dirname( $target ) )) { + G::mk_dir( dirname( $target ) ); + } + if (! copy( $source, $target )) { + krumo( $source ); + krumo( $target ); + } + } + + /** + * This function gets info about db + * + * + * @name getDatabaseCredentials + * + * @param string $dbFile + * @return $sContent + */ + function getDatabaseCredentials ($dbFile) + { + $sContent = file_get_contents( $dbFile ); + $sContent = str_replace( '', '', $sContent ); + $sContent = str_replace( 'define', '', $sContent ); + $sContent = str_replace( "('", '$', $sContent ); + $sContent = str_replace( "',", '=', $sContent ); + $sContent = str_replace( ");", ';', $sContent ); + return $sContent; + } + + /** + * Retrieves the system schema. + * + * @return schema content in an array + */ + public static function getSystemSchema () + { + return System::getSchema( PATH_TRUNK . "workflow/engine/config/schema.xml" ); + } + + /** + * Retrieves the schema for a plugin. + * + * @param string $pluginName name of the plugin + * @return $sContent + */ + public static function getPluginSchema ($pluginName) + { + if (file_exists( PATH_PLUGINS . $pluginName . "/config/schema.xml" )) + return System::getSchema( PATH_PLUGINS . $pluginName . "/config/schema.xml" ); + else + return false; + } + + /** + * Retrieves a schema array from a file. + * + * @param string $sSchemaFile schema filename + * @return $sContent + */ + public static function getSchema ($sSchemaFile) + { + /* This is the MySQL mapping that Propel uses (from MysqlPlatform.php) */ + $mysqlTypes = array ('NUMERIC' => "DECIMAL",'LONGVARCHAR' => "MEDIUMTEXT",'TIMESTAMP' => "DATETIME",'BU_TIMESTAMP' => "DATETIME",'BINARY' => "BLOB",'VARBINARY' => "MEDIUMBLOB",'LONGVARBINARY' => "LONGBLOB",'BLOB' => "LONGBLOB",'CLOB' => "LONGTEXT", /* This is not from Propel, but is required to get INT right */ - 'INTEGER' => "INT"); - - $aSchema = array(); - $oXml = new DomDocument(); - $oXml->load($sSchemaFile); - $aTables = $oXml->getElementsByTagName('table'); - foreach ($aTables as $oTable) { - $aPrimaryKeys = array(); - $sTableName = $oTable->getAttribute('name'); - $aSchema[$sTableName] = array(); - $aColumns = $oTable->getElementsByTagName('column'); - foreach ($aColumns as $oColumn) { - $sColumName = $oColumn->getAttribute('name'); - - /* Get the field type. Propel uses VARCHAR if nothing else is specified */ - $type = $oColumn->hasAttribute('type') ? strtoupper($oColumn->getAttribute('type')) : "VARCHAR"; - - /* Convert type to MySQL type according to Propel */ - if (array_key_exists($type, $mysqlTypes)) - $type = $mysqlTypes[$type]; - - $size = $oColumn->hasAttribute('size') ? $oColumn->getAttribute('size') : NULL; - /* Add default sizes from MySQL */ - if ($type == "TINYINT" && !$size) - $size = "4"; - if ($type == "INT" && !$size) - $size = "11"; - - if ($size) - $type = "$type($size)"; - - $required = $oColumn->hasAttribute('required') ? $oColumn->getAttribute('required') : NULL; - /* Convert $required to a bool */ - $required = (in_array (strtolower ($required), array('1', 'true'))); - - $default = $oColumn->hasAttribute('default') ? $oColumn->getAttribute('default') : NULL; - - $primaryKey = $oColumn->hasAttribute('primaryKey') ? $oColumn->getAttribute('primaryKey') : NULL; - /* Convert $primaryKey to a bool */ - $primaryKey = (in_array (strtolower ($primaryKey), array('1', 'true'))); - if ($primaryKey) - $aPrimaryKeys[] = $sColumName; - - $aSchema[$sTableName][$sColumName] = array( - 'Field' => $sColumName, - 'Type' => $type, - 'Null' => $required ? "NO" : "YES", - 'Default' => $default + 'INTEGER' => "INT" ); - } - if ( is_array($aPrimaryKeys) && count($aPrimaryKeys) > 0 ) { - $aSchema[$sTableName]['INDEXES']['PRIMARY'] = $aPrimaryKeys; - } - $aIndexes = $oTable->getElementsByTagName('index'); - foreach ($aIndexes as $oIndex) { - $aIndex = array(); - $aIndexesColumns = $oIndex->getElementsByTagName('index-column'); - foreach ($aIndexesColumns as $oIndexColumn) { - $aIndex[] = $oIndexColumn->getAttribute('name'); - } - $aSchema[$sTableName]['INDEXES'][ $oIndex->getAttribute('name') ] = $aIndex; - } - } - return $aSchema; - } + $aSchema = array (); + $oXml = new DomDocument(); + $oXml->load( $sSchemaFile ); + $aTables = $oXml->getElementsByTagName( 'table' ); + foreach ($aTables as $oTable) { + $aPrimaryKeys = array (); + $sTableName = $oTable->getAttribute( 'name' ); + $aSchema[$sTableName] = array (); + $aColumns = $oTable->getElementsByTagName( 'column' ); + foreach ($aColumns as $oColumn) { + $sColumName = $oColumn->getAttribute( 'name' ); - /** - * Returns the difference between two schema arrays - * - * @param array $aOldSchema original schema array - * @param array $aNewSchema new schema array - * @return array with tablesToAdd, tablesToAlter, tablesWithNewIndex and tablesToAlterIndex - */ - public static function compareSchema($aOldSchema, $aNewSchema) { - //$aChanges = array('tablesToDelete' => array(), 'tablesToAdd' => array(), 'tablesToAlter' => array()); - //Tables to delete, but this is disabled - //foreach ($aOldSchema as $sTableName => $aColumns) { - // if ( !isset($aNewSchema[$sTableName])) { - // if (!in_array($sTableName, array('KT_APPLICATION', 'KT_DOCUMENT', 'KT_PROCESS'))) { - // $aChanges['tablesToDelete'][] = $sTableName; - // } - // } - //} + /* Get the field type. Propel uses VARCHAR if nothing else is specified */ + $type = $oColumn->hasAttribute( 'type' ) ? strtoupper( $oColumn->getAttribute( 'type' ) ) : "VARCHAR"; - $aChanges = array('tablesToAdd' => array(), 'tablesToAlter' => array(), 'tablesWithNewIndex' => array(), 'tablesToAlterIndex'=> array()); + /* Convert type to MySQL type according to Propel */ + if (array_key_exists( $type, $mysqlTypes )) + $type = $mysqlTypes[$type]; - //new tables to create and alter - foreach ($aNewSchema as $sTableName => $aColumns) { - if (!isset($aOldSchema[$sTableName])) { - $aChanges['tablesToAdd'][$sTableName] = $aColumns; - } - else { - //drop old columns - foreach ($aOldSchema[$sTableName] as $sColumName => $aParameters) { - if (!isset($aNewSchema[$sTableName][$sColumName])) { - if (!isset($aChanges['tablesToAlter'][$sTableName])) { - $aChanges['tablesToAlter'][$sTableName] = array('DROP' => array(), 'ADD' => array(), 'CHANGE' => array()); + $size = $oColumn->hasAttribute( 'size' ) ? $oColumn->getAttribute( 'size' ) : NULL; + /* Add default sizes from MySQL */ + if ($type == "TINYINT" && ! $size) + $size = "4"; + if ($type == "INT" && ! $size) + $size = "11"; + + if ($size) + $type = "$type($size)"; + + $required = $oColumn->hasAttribute( 'required' ) ? $oColumn->getAttribute( 'required' ) : NULL; + /* Convert $required to a bool */ + $required = (in_array( strtolower( $required ), array ('1','true' + ) )); + + $default = $oColumn->hasAttribute( 'default' ) ? $oColumn->getAttribute( 'default' ) : NULL; + + $primaryKey = $oColumn->hasAttribute( 'primaryKey' ) ? $oColumn->getAttribute( 'primaryKey' ) : NULL; + /* Convert $primaryKey to a bool */ + $primaryKey = (in_array( strtolower( $primaryKey ), array ('1','true' + ) )); + if ($primaryKey) + $aPrimaryKeys[] = $sColumName; + + $aSchema[$sTableName][$sColumName] = array ('Field' => $sColumName,'Type' => $type,'Null' => $required ? "NO" : "YES",'Default' => $default + ); } - $aChanges['tablesToAlter'][$sTableName]['DROP'][$sColumName] = $sColumName; - } - } - //create new columns - //foreach ($aNewSchema[$sTableName] as $sColumName => $aParameters) { - foreach ($aColumns as $sColumName => $aParameters) { - if ($sColumName != 'INDEXES') { - if (!isset($aOldSchema[$sTableName][$sColumName])) { //this column doesnt exist in oldschema - if (!isset($aChanges['tablesToAlter'][$sTableName])) { - $aChanges['tablesToAlter'][$sTableName] = array('DROP' => array(), 'ADD' => array(), 'CHANGE' => array()); - } - $aChanges['tablesToAlter'][$sTableName]['ADD'][$sColumName] = $aParameters; + if (is_array( $aPrimaryKeys ) && count( $aPrimaryKeys ) > 0) { + $aSchema[$sTableName]['INDEXES']['PRIMARY'] = $aPrimaryKeys; } - else { //the column exists - $newField = $aNewSchema[$sTableName][$sColumName]; - $oldField = $aOldSchema[$sTableName][$sColumName]; - //both are null, no change is required - if ( !isset($newField['Default']) && !isset($oldField['Default'])) $changeDefaultAttr = false; - //one of them is null, change IS required - if ( !isset($newField['Default']) && isset($oldField['Default']) && $oldField['Default']!= '') $changeDefaultAttr = true; - if ( isset($newField['Default']) && !isset($oldField['Default'])) $changeDefaultAttr = true; - //both are defined and they are different. - if ( isset($newField['Default']) && isset($oldField['Default']) ) { - if ( $newField['Default'] != $oldField['Default'] ) - $changeDefaultAttr = true; - else - $changeDefaultAttr = false; - } - //special cases - // BLOB and TEXT columns cannot have DEFAULT values. http://dev.mysql.com/doc/refman/5.0/en/blob.html - if ( in_array(strtolower($newField['Type']), array('text','mediumtext') ) ) - $changeDefaultAttr = false; - - //#1067 - Invalid default value for datetime field - if ( in_array($newField['Type'], array('datetime')) && isset($newField['Default']) && $newField['Default']== '' ) - $changeDefaultAttr = false; - - //#1067 - Invalid default value for int field - if ( substr($newField['Type'], 0, 3 ) == "int" && isset($newField['Default']) && $newField['Default']== '' ) - $changeDefaultAttr = false; - - //if any difference exists, then insert the difference in aChanges - if ( strcasecmp($newField['Field'], $oldField['Field']) !== 0 || - strcasecmp($newField['Type'], $oldField['Type']) !== 0 || - strcasecmp($newField['Null'], $oldField['Null']) !== 0 || - $changeDefaultAttr ) { - if (!isset($aChanges['tablesToAlter'][$sTableName])) { - $aChanges['tablesToAlter'][$sTableName] = array('DROP' => array(), 'ADD' => array(), 'CHANGE' => array()); + $aIndexes = $oTable->getElementsByTagName( 'index' ); + foreach ($aIndexes as $oIndex) { + $aIndex = array (); + $aIndexesColumns = $oIndex->getElementsByTagName( 'index-column' ); + foreach ($aIndexesColumns as $oIndexColumn) { + $aIndex[] = $oIndexColumn->getAttribute( 'name' ); } - $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Field'] = $newField['Field']; - $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Type'] = $newField['Type']; - $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Null'] = $newField['Null']; - if ( isset($newField['Default']) ) - $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Default'] = $newField['Default']; - else - $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Default'] = null; - - } + $aSchema[$sTableName]['INDEXES'][$oIndex->getAttribute( 'name' )] = $aIndex; } - } //only columns, no the indexes column - }//foreach $aColumns - - //now check the indexes of table - if ( isset($aNewSchema[$sTableName]['INDEXES']) ) { - foreach ( $aNewSchema[$sTableName]['INDEXES'] as $indexName => $indexFields ) { - if (!isset( $aOldSchema[$sTableName]['INDEXES'][$indexName]) ) { - if (!isset($aChanges['tablesWithNewIndex'][$sTableName])) { - $aChanges['tablesWithNewIndex'][$sTableName] = array(); - } - $aChanges['tablesWithNewIndex'][$sTableName][$indexName] = $indexFields; - } - else { - if ( $aOldSchema[$sTableName]['INDEXES'][$indexName] != $indexFields ) { - if (!isset($aChanges['tablesToAlterIndex'][$sTableName])) { - $aChanges['tablesToAlterIndex'][$sTableName] = array(); - } - $aChanges['tablesToAlterIndex'][$sTableName][$indexName] = $indexFields; - } - } - } } - } //for-else table exists - } //for new schema - return $aChanges; - } - - - function getEmailConfiguration() - { - G::LoadClass('configuration'); - $conf = new Configurations(); - $config = $conf->load('Emails'); - - return $config; - } - - function getSkingList() - { - //Create Skins custom folder if it doesn't exists - if(!is_dir(PATH_CUSTOM_SKINS)){ - G::verifyPath(PATH_CUSTOM_SKINS, true); + return $aSchema; } - //Get Skin Config files - $skinListArray = array(); - $customSkins = glob(PATH_CUSTOM_SKINS . "*/config.xml"); - - // getting al base skins - $baseSkins = glob(G::ExpandPath("skinEngine") . '*/config.xml'); - - // filtering no public skins (uxs, simplified) - foreach ($baseSkins as $i => $skinName) { - if (strpos($skinName, 'simplified') !== false || strpos($skinName, 'uxs') !== false) { - unset($baseSkins[$i]); - } - } - - $customSkins = array_merge($baseSkins, $customSkins); - - //Read and parse each Configuration File - foreach ($customSkins as $key => $configInformation) { - $folderId = basename(dirname($configInformation)); - - if ($folderId == 'base') { - $folderId = 'classic'; - } - - $xmlConfiguration = file_get_contents($configInformation); - $xmlConfigurationObj = G::xmlParser($xmlConfiguration); - - if (isset($xmlConfigurationObj->result['skinConfiguration'])) { - $skinInformationArray = $skinFilesArray = $xmlConfigurationObj->result['skinConfiguration']['__CONTENT__']['information']['__CONTENT__']; - $res = array(); - $res['SKIN_FOLDER_ID'] = strtolower($folderId); - - foreach ($skinInformationArray as $keyInfo => $infoValue) { - $res['SKIN_' . strtoupper($keyInfo)] = $infoValue['__VALUE__']; - } - - $skinListArray['skins'][] = $res; - } - } - - $skinListArray['currentSkin'] = SYS_SKIN; - - return $skinListArray; - } - - function getAllTimeZones() - { - $timezones = DateTimeZone::listAbbreviations(); - - $cities = array(); - foreach( $timezones as $key => $zones ) + /** + * Returns the difference between two schema arrays + * + * @param array $aOldSchema original schema array + * @param array $aNewSchema new schema array + * @return array with tablesToAdd, tablesToAlter, tablesWithNewIndex and tablesToAlterIndex + */ + public static function compareSchema ($aOldSchema, $aNewSchema) { - foreach( $zones as $id => $zone ) - { - /** - * Only get timezones explicitely not part of "Others". - * @see http://www.php.net/manual/en/timezones.others.php - */ - if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Africa|Europe|Indian|Pacific)\//', $zone['timezone_id'] ) - && $zone['timezone_id']) { - $cities[$zone['timezone_id']][] = $key; + //$aChanges = array('tablesToDelete' => array(), 'tablesToAdd' => array(), 'tablesToAlter' => array()); + //Tables to delete, but this is disabled + //foreach ($aOldSchema as $sTableName => $aColumns) { + // if ( !isset($aNewSchema[$sTableName])) { + // if (!in_array($sTableName, array('KT_APPLICATION', 'KT_DOCUMENT', 'KT_PROCESS'))) { + // $aChanges['tablesToDelete'][] = $sTableName; + // } + // } + //} + + + $aChanges = array ('tablesToAdd' => array (),'tablesToAlter' => array (),'tablesWithNewIndex' => array (),'tablesToAlterIndex' => array () + ); + + //new tables to create and alter + foreach ($aNewSchema as $sTableName => $aColumns) { + if (! isset( $aOldSchema[$sTableName] )) { + $aChanges['tablesToAdd'][$sTableName] = $aColumns; + } else { + //drop old columns + foreach ($aOldSchema[$sTableName] as $sColumName => $aParameters) { + if (! isset( $aNewSchema[$sTableName][$sColumName] )) { + if (! isset( $aChanges['tablesToAlter'][$sTableName] )) { + $aChanges['tablesToAlter'][$sTableName] = array ('DROP' => array (),'ADD' => array (),'CHANGE' => array () + ); + } + $aChanges['tablesToAlter'][$sTableName]['DROP'][$sColumName] = $sColumName; + } + } + + //create new columns + //foreach ($aNewSchema[$sTableName] as $sColumName => $aParameters) { + foreach ($aColumns as $sColumName => $aParameters) { + if ($sColumName != 'INDEXES') { + if (! isset( $aOldSchema[$sTableName][$sColumName] )) { //this column doesnt exist in oldschema + if (! isset( $aChanges['tablesToAlter'][$sTableName] )) { + $aChanges['tablesToAlter'][$sTableName] = array ('DROP' => array (),'ADD' => array (),'CHANGE' => array () + ); + } + $aChanges['tablesToAlter'][$sTableName]['ADD'][$sColumName] = $aParameters; + } else { //the column exists + $newField = $aNewSchema[$sTableName][$sColumName]; + $oldField = $aOldSchema[$sTableName][$sColumName]; + //both are null, no change is required + if (! isset( $newField['Default'] ) && ! isset( $oldField['Default'] )) + $changeDefaultAttr = false; + //one of them is null, change IS required + if (! isset( $newField['Default'] ) && isset( $oldField['Default'] ) && $oldField['Default'] != '') + $changeDefaultAttr = true; + if (isset( $newField['Default'] ) && ! isset( $oldField['Default'] )) + $changeDefaultAttr = true; + //both are defined and they are different. + if (isset( $newField['Default'] ) && isset( $oldField['Default'] )) { + if ($newField['Default'] != $oldField['Default']) + $changeDefaultAttr = true; + else + $changeDefaultAttr = false; + } + //special cases + // BLOB and TEXT columns cannot have DEFAULT values. http://dev.mysql.com/doc/refman/5.0/en/blob.html + if (in_array( strtolower( $newField['Type'] ), array ('text','mediumtext' + ) )) + $changeDefaultAttr = false; + + //#1067 - Invalid default value for datetime field + if (in_array( $newField['Type'], array ('datetime' + ) ) && isset( $newField['Default'] ) && $newField['Default'] == '') + $changeDefaultAttr = false; + + //#1067 - Invalid default value for int field + if (substr( $newField['Type'], 0, 3 ) == "int" && isset( $newField['Default'] ) && $newField['Default'] == '') + $changeDefaultAttr = false; + + //if any difference exists, then insert the difference in aChanges + if (strcasecmp( $newField['Field'], $oldField['Field'] ) !== 0 || strcasecmp( $newField['Type'], $oldField['Type'] ) !== 0 || strcasecmp( $newField['Null'], $oldField['Null'] ) !== 0 || $changeDefaultAttr) { + if (! isset( $aChanges['tablesToAlter'][$sTableName] )) { + $aChanges['tablesToAlter'][$sTableName] = array ('DROP' => array (),'ADD' => array (),'CHANGE' => array () + ); + } + $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Field'] = $newField['Field']; + $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Type'] = $newField['Type']; + $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Null'] = $newField['Null']; + if (isset( $newField['Default'] )) + $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Default'] = $newField['Default']; + else + $aChanges['tablesToAlter'][$sTableName]['CHANGE'][$sColumName]['Default'] = null; + + } + } + } //only columns, no the indexes column + } //foreach $aColumns + + + //now check the indexes of table + if (isset( $aNewSchema[$sTableName]['INDEXES'] )) { + foreach ($aNewSchema[$sTableName]['INDEXES'] as $indexName => $indexFields) { + if (! isset( $aOldSchema[$sTableName]['INDEXES'][$indexName] )) { + if (! isset( $aChanges['tablesWithNewIndex'][$sTableName] )) { + $aChanges['tablesWithNewIndex'][$sTableName] = array (); + } + $aChanges['tablesWithNewIndex'][$sTableName][$indexName] = $indexFields; + } else { + if ($aOldSchema[$sTableName]['INDEXES'][$indexName] != $indexFields) { + if (! isset( $aChanges['tablesToAlterIndex'][$sTableName] )) { + $aChanges['tablesToAlterIndex'][$sTableName] = array (); + } + $aChanges['tablesToAlterIndex'][$sTableName][$indexName] = $indexFields; + } + } + } + } + } //for-else table exists + } //for new schema + return $aChanges; + } + + function getEmailConfiguration () + { + G::LoadClass( 'configuration' ); + $conf = new Configurations(); + $config = $conf->load( 'Emails' ); + + return $config; + } + + function getSkingList () + { + //Create Skins custom folder if it doesn't exists + if (! is_dir( PATH_CUSTOM_SKINS )) { + G::verifyPath( PATH_CUSTOM_SKINS, true ); + } + + //Get Skin Config files + $skinListArray = array (); + $customSkins = glob( PATH_CUSTOM_SKINS . "*/config.xml" ); + + // getting al base skins + $baseSkins = glob( G::ExpandPath( "skinEngine" ) . '*/config.xml' ); + + // filtering no public skins (uxs, simplified) + foreach ($baseSkins as $i => $skinName) { + if (strpos( $skinName, 'simplified' ) !== false || strpos( $skinName, 'uxs' ) !== false) { + unset( $baseSkins[$i] ); } } - } - // For each city, have a comma separated list of all possible timezones for that city. - foreach( $cities as $key => $value ) - $cities[$key] = join( ', ', $value); + $customSkins = array_merge( $baseSkins, $customSkins ); - // Only keep one city (the first and also most important) for each set of possibilities. - $cities = array_unique( $cities ); + //Read and parse each Configuration File + foreach ($customSkins as $key => $configInformation) { + $folderId = basename( dirname( $configInformation ) ); - // Sort by area/city name. - ksort( $cities ); - - return $cities; - } - - public static function getSystemConfiguration($globalIniFile = '', $wsIniFile = '', $wsName = '') - { - $readGlobalIniFile = false; - $readWsIniFile = false; - - if (empty($globalIniFile)) { - $globalIniFile = PATH_CORE . 'config' . PATH_SEP . 'env.ini'; - } - - if (empty($wsIniFile)) { - if (defined('PATH_DB')) { // if we're on a valid workspace env. - if (empty($wsName)) { - $uriParts = explode('/', getenv("REQUEST_URI")); - - if (isset($uriParts[1])) { - if (substr($uriParts[1], 0, 3 ) == 'sys') { - $wsName = substr($uriParts[1], 3); + if ($folderId == 'base') { + $folderId = 'classic'; + } + + $xmlConfiguration = file_get_contents( $configInformation ); + $xmlConfigurationObj = G::xmlParser( $xmlConfiguration ); + + if (isset( $xmlConfigurationObj->result['skinConfiguration'] )) { + $skinInformationArray = $skinFilesArray = $xmlConfigurationObj->result['skinConfiguration']['__CONTENT__']['information']['__CONTENT__']; + $res = array (); + $res['SKIN_FOLDER_ID'] = strtolower( $folderId ); + + foreach ($skinInformationArray as $keyInfo => $infoValue) { + $res['SKIN_' . strtoupper( $keyInfo )] = $infoValue['__VALUE__']; + } + + $skinListArray['skins'][] = $res; } - } } - $wsIniFile = PATH_DB . $wsName . PATH_SEP . 'env.ini'; - } + + $skinListArray['currentSkin'] = SYS_SKIN; + + return $skinListArray; } - $readGlobalIniFile = file_exists($globalIniFile) ? true : false; - $readWsIniFile = file_exists($wsIniFile) ? true : false; + function getAllTimeZones () + { + $timezones = DateTimeZone::listAbbreviations(); - if (isset($_SESSION['PROCESSMAKER_ENV'])) { - $md5 = array(); + $cities = array (); + foreach ($timezones as $key => $zones) { + foreach ($zones as $id => $zone) { + /** + * Only get timezones explicitely not part of "Others". + * + * @see http://www.php.net/manual/en/timezones.others.php + */ + if (preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Africa|Europe|Indian|Pacific)\//', $zone['timezone_id'] ) && $zone['timezone_id']) { + $cities[$zone['timezone_id']][] = $key; + } + } + } - if ($readGlobalIniFile) - $md5[] = md5_file($globalIniFile); + // For each city, have a comma separated list of all possible timezones for that city. + foreach ($cities as $key => $value) + $cities[$key] = join( ', ', $value ); - if ($readWsIniFile) - $md5[] = md5_file($wsIniFile); + // Only keep one city (the first and also most important) for each set of possibilities. + $cities = array_unique( $cities ); - $hash = implode('-', $md5); + // Sort by area/city name. + ksort( $cities ); - if ($_SESSION['PROCESSMAKER_ENV_HASH'] === $hash) { - $_SESSION['PROCESSMAKER_ENV']['from_cache'] = 1; - return $_SESSION['PROCESSMAKER_ENV']; - } + return $cities; } - // default configuration - $config = array( - 'debug' => 0, - 'debug_sql' => 0, - 'debug_time' => 0, - 'debug_calendar' => 0, - 'wsdl_cache' => 1, - 'memory_limit' => '128M', - 'time_zone' => 'America/New_York', - 'memcached' => 0, - 'memcached_server' => '', - 'default_skin' => 'classic', - 'default_lang' => 'en', - 'proxy_host' => '', - 'proxy_port' => '', - 'proxy_user' => '', - 'proxy_pass' => '' - ); + public static function getSystemConfiguration ($globalIniFile = '', $wsIniFile = '', $wsName = '') + { + $readGlobalIniFile = false; + $readWsIniFile = false; - // read the global env.ini configuration file - if ($readGlobalIniFile && ($globalConf = @parse_ini_file($globalIniFile)) !== false) { - $config = array_merge($config, $globalConf); + if (empty( $globalIniFile )) { + $globalIniFile = PATH_CORE . 'config' . PATH_SEP . 'env.ini'; + } + + if (empty( $wsIniFile )) { + if (defined( 'PATH_DB' )) { // if we're on a valid workspace env. + if (empty( $wsName )) { + $uriParts = explode( '/', getenv( "REQUEST_URI" ) ); + + if (isset( $uriParts[1] )) { + if (substr( $uriParts[1], 0, 3 ) == 'sys') { + $wsName = substr( $uriParts[1], 3 ); + } + } + } + $wsIniFile = PATH_DB . $wsName . PATH_SEP . 'env.ini'; + } + } + + $readGlobalIniFile = file_exists( $globalIniFile ) ? true : false; + $readWsIniFile = file_exists( $wsIniFile ) ? true : false; + + if (isset( $_SESSION['PROCESSMAKER_ENV'] )) { + $md5 = array (); + + if ($readGlobalIniFile) + $md5[] = md5_file( $globalIniFile ); + + if ($readWsIniFile) + $md5[] = md5_file( $wsIniFile ); + + $hash = implode( '-', $md5 ); + + if ($_SESSION['PROCESSMAKER_ENV_HASH'] === $hash) { + $_SESSION['PROCESSMAKER_ENV']['from_cache'] = 1; + return $_SESSION['PROCESSMAKER_ENV']; + } + } + + // default configuration + $config = array ('debug' => 0,'debug_sql' => 0,'debug_time' => 0,'debug_calendar' => 0,'wsdl_cache' => 1,'memory_limit' => '128M','time_zone' => 'America/New_York','memcached' => 0,'memcached_server' => '','default_skin' => 'classic','default_lang' => 'en','proxy_host' => '','proxy_port' => '','proxy_user' => '','proxy_pass' => '' + ); + + // read the global env.ini configuration file + if ($readGlobalIniFile && ($globalConf = @parse_ini_file( $globalIniFile )) !== false) { + $config = array_merge( $config, $globalConf ); + } + + // Workspace environment configuration + if ($readWsIniFile && ($wsConf = @parse_ini_file( $wsIniFile )) !== false) { + $config = array_merge( $config, $wsConf ); + } + + // validation debug config, only binary value is valid; debug = 1, to enable + $config['debug'] = $config['debug'] == 1 ? 1 : 0; + + if ($config['proxy_pass'] != '') { + $config['proxy_pass'] = G::decrypt( $config['proxy_pass'], 'proxy_pass' ); + } + + $md5 = array (); + if ($readGlobalIniFile) + $md5[] = md5_file( $globalIniFile ); + + if ($readWsIniFile) + $md5[] = md5_file( $wsIniFile ); + + $hash = implode( '-', $md5 ); + + $_SESSION['PROCESSMAKER_ENV'] = $config; + $_SESSION['PROCESSMAKER_ENV_HASH'] = $hash; + + return $config; } - // Workspace environment configuration - if ($readWsIniFile && ($wsConf = @parse_ini_file($wsIniFile)) !== false) { - $config = array_merge($config, $wsConf); + function updateIndexFile ($conf) + { + if (! file_exists( PATH_HTML . 'index.html' )) { + throw new Exception( 'The public index file "' . PATH_HTML . 'index.html" does not exist!' ); + } else { + if (! is_writable( PATH_HTML . 'index.html' )) { + throw new Exception( 'The index.html file is not writable on workflow/public_html directory.' ); + } + } + + $content = file_get_contents( PATH_HTML . 'index.html' ); + $result = false; + + $patt = '//'; + + @preg_match( $patt, $content, $match ); + + if (is_array( $match ) && count( $match ) > 0 && isset( $match[1] )) { + $newUrl = 'sys/' . $conf['lang'] . '/' . $conf['skin'] . '/login/login'; + + $newMetaStr = str_replace( $match[1], $newUrl, $match[0] ); + $newContent = str_replace( $match[0], $newMetaStr, $content ); + + $result = (@file_put_contents( PATH_HTML . 'index.html', $newContent ) !== false); + } + + return $result; } - // validation debug config, only binary value is valid; debug = 1, to enable - $config['debug'] = $config['debug'] == 1 ? 1 : 0; + function solrEnv ($sysName = '') + { + if (empty( $sysName )) { + $conf = System::getSystemConfiguration(); + } else { + $conf = System::getSystemConfiguration( '', '', $sysName ); + } - if ($config['proxy_pass'] != '') { - $config['proxy_pass'] = G::decrypt($config['proxy_pass'], 'proxy_pass'); + if (! isset( $conf['solr_enabled'] ) || ! isset( $conf['solr_host'] ) || ! isset( $conf['solr_instance'] )) { + return false; + } + + if ($conf['solr_enabled']) { + return array ('solr_enabled' => $conf['solr_enabled'],'solr_host' => $conf['solr_host'],'solr_instance' => $conf['solr_instance'] + ); + } + + return false; } - $md5 = array(); - if ($readGlobalIniFile) - $md5[] = md5_file($globalIniFile); - - if ($readWsIniFile) - $md5[] = md5_file($wsIniFile); - - $hash = implode('-', $md5); - - $_SESSION['PROCESSMAKER_ENV'] = $config; - $_SESSION['PROCESSMAKER_ENV_HASH'] = $hash; - - return $config; - } - - function updateIndexFile($conf) - { - if (!file_exists(PATH_HTML . 'index.html')) { - throw new Exception('The public index file "'.PATH_HTML . 'index.html" does not exist!'); - } - else { - if (!is_writable(PATH_HTML . 'index.html')) { - throw new Exception('The index.html file is not writable on workflow/public_html directory.'); - } - } - - $content = file_get_contents(PATH_HTML . 'index.html'); - $result = false; - - $patt = '//'; - - @preg_match($patt, $content, $match); - - if (is_array($match) && count($match) > 0 && isset($match[1])) { - $newUrl = 'sys/'.$conf['lang'].'/'.$conf['skin'].'/login/login'; - - $newMetaStr = str_replace($match[1], $newUrl, $match[0]); - $newContent = str_replace($match[0], $newMetaStr, $content); - - $result = (@file_put_contents(PATH_HTML . 'index.html', $newContent) !== false); - } - - return $result; - } - - function solrEnv($sysName = '') - { - if (empty($sysName)) { - $conf = System::getSystemConfiguration(); - } - else { - $conf = System::getSystemConfiguration('', '', $sysName); - } - - if (!isset($conf['solr_enabled']) || !isset($conf['solr_host']) || !isset($conf['solr_instance'])) { - return false; - } - - if ($conf['solr_enabled']) { - return array( - 'solr_enabled' => $conf['solr_enabled'], - 'solr_host' => $conf['solr_host'], - 'solr_instance' => $conf['solr_instance'] - ); - } - - return false; - } - }// end System class diff --git a/workflow/engine/classes/class.tasks.php b/workflow/engine/classes/class.tasks.php index f15786669..fbb2eda83 100755 --- a/workflow/engine/classes/class.tasks.php +++ b/workflow/engine/classes/class.tasks.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -38,322 +39,329 @@ require_once 'classes/model/Gateway.php'; /** * Tasks - Tasks class + * * @package workflow.engine.ProcessMaker * @author Julio Cesar Laura Avenda�o * @copyright 2007 COLOSA */ -class Tasks +class Tasks { - /** - * Get the assigned groups of a task - * @param string $sTaskUID - * @param integer $iType - * @return array - */ - public function getGroupsOfTask($sTaskUID, $iType) - { - try { - $aGroups = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addJoin(GroupwfPeer::GRP_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 2); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroups[] = $aRow; - $oDataset->next(); - } - return $aGroups; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get all tasks for any Process - * @param string $sProUid - * @return array - */ - public function getAllTasks($sProUid) - { - try { - $aTasks = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskPeer::PRO_UID, $sProUid); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oTask = new Task(); - $aTasks[] = $oTask->Load($aRow['TAS_UID']); - $oDataset->next(); - } - return $aTasks; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * creates row tasks from an Task Array - * @param string $aTasks - * @return array - */ - public function createTaskRows( $aTask ) - { - foreach ( $aTask as $key => $row ) { - $oTask = new Task(); - if($oTask->taskExists ($row['TAS_UID'])) - $oTask->remove($row['TAS_UID']); - $res = $oTask->createRow($row); - } - return; - } - - /** - * updates row tasks from an Task Array - * @param string $aTasks - * @return array - */ - public function updateTaskRows( $aTask ) - { - foreach ( $aTask as $key => $row ) { - $oTask = new Task(); - if($oTask->taskExists ($row['TAS_UID'])) - $oTask->remove($row['TAS_UID']); - else - $res = $oTask->update($row); - } - return; - } - - /** - * Get all Routes for any Process - * @param string $sProUid - * @return array - */ - public function getAllRoutes($sProUid) - { - try { - $aRoutes = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProUid); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRoutes[] = $aRow; - $oDataset->next(); - } - return $aRoutes; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * creates row tasks from an Route Array - * @param string $aTasks - * @return array - */ - public function createRouteRows( $aRoutes ) - { - $routeID = array(); - $aField = array(); - $taskParallel = ''; - $taskSecJoin = ''; - $taskEvaluate = ''; - $taskParallelEv = ''; - $taskSelect = ''; - $taskDiscriminator = ''; - foreach ( $aRoutes as $key => $row ) { - $sRouteType = $row['ROU_TYPE']; - $oRoute = new Route(); - $oProcessMap = new processMap(); - $oTask = new Task(); - $oEvent = new Event(); - //unset ($row['ROU_UID']); - - //Saving Gateway into the GATEWAY table - $idTask = $row['TAS_UID']; - $nextTask = $row['ROU_NEXT_TASK']; - if($nextTask == "-1"){ - $end=1; - } - if($sRouteType != 'SEQUENTIAL'){ - switch($sRouteType){ - case 'PARALLEL': - if($idTask != $taskParallel){ - $taskParallel = $idTask; - - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); + /** + * Get the assigned groups of a task + * + * @param string $sTaskUID + * @param integer $iType + * @return array + */ + public function getGroupsOfTask ($sTaskUID, $iType) + { + try { + $aGroups = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addJoin( GroupwfPeer::GRP_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aGroups[] = $aRow; + $oDataset->next(); } - break; - case 'SEC-JOIN': - if($nextTask != $taskSecJoin){ - $taskSecJoin = $nextTask; - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); - } - break; - case 'EVALUATE': - if($idTask != $taskEvaluate){ - $taskEvaluate = $idTask; - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); - } - break; - case 'PARALLEL-BY-EVALUATION': - if($idTask != $taskParallelEv){ - $taskParallelEv = $idTask; - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); - } - break; - case 'SELECT': - if($idTask != $taskSelect){ - $taskSelect = $idTask; - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); - } - break; - case 'DISCRIMINATOR': - if($nextTask != $taskDiscriminator){ - $taskDiscriminator = $nextTask; - $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); - } - break; - } - $row['GAT_UID'] = $sGatewayUID; - } - - if($oRoute->routeExists($row['ROU_UID'])) - $oRoute->remove($row['ROU_UID']); - - $routeID = $oRoute->create($row); - - //saving end event while import old processes - if(isset($end) && $end==1){ - if(! $oEvent->existsByTaskUidFrom($idTask)) { - if($sRouteType == "SEQUENTIAL"){ - $aTaskDetails = $oTask->load($idTask); - $positionX = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH']/2; - $positionY = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; - - $aData['PRO_UID'] = $row['PRO_UID']; - $aData['EVN_TYPE'] = 'bpmnEventEmptyEnd'; - $aData['EVN_POSX'] = $positionX; - $aData['EVN_POSY'] = $positionY; - $aData['EVN_TAS_UID_FROM'] = $idTask; - $aData['EVN_STATUS'] = 'ACTIVE'; - $aData['EVN_RELATED_TO'] = 'MULTIPLE'; - $aData['EVN_WHEN'] = '1'; - $aData['EVN_ACTION'] = ''; - $sEvn_uid = $oEvent->create($aData); - - $aField['ROU_UID'] = $routeID; - $aField['ROU_EVN_UID'] = $sEvn_uid; - $oRoute->update($aField); - $end = 0; - } + return $aGroups; + } catch (Exception $oError) { + throw ($oError); } - } - } - return; - } - /** - * updates row tasks from an Route Array - * @param string $aTasks - * @return array - */ - public function updateRouteRows( $aRoutes ) - { - foreach ( $aRoutes as $key => $row ) { - $oRoute = new Route(); - //krumo ($row); - if(is_array($oRoute->load($row['ROU_UID']))) - $oRoute->remove($row['ROU_UID']); - else - $res = $oRoute->update($row); + /** + * Get all tasks for any Process + * + * @param string $sProUid + * @return array + */ + public function getAllTasks ($sProUid) + { + try { + $aTasks = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProUid ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTask = new Task(); + $aTasks[] = $oTask->Load( $aRow['TAS_UID'] ); + $oDataset->next(); + } + return $aTasks; + } catch (Exception $oError) { + throw ($oError); + } } - return; - } - /** - * Get the assigned users of a task - * @param string $sTaskUID - * @param integer $iType - * @return array - */ - public function getUsersOfTask($sTaskUID, $iType) - { - try { - $aUsers = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addJoin(UsersPeer::USR_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); - $oCriteria->add(TaskUserPeer::TU_RELATION, 1); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aUsers[] = $aRow; - $oDataset->next(); - } - return $aUsers; + /** + * creates row tasks from an Task Array + * + * @param string $aTasks + * @return array + */ + public function createTaskRows ($aTask) + { + foreach ($aTask as $key => $row) { + $oTask = new Task(); + if ($oTask->taskExists( $row['TAS_UID'] )) + $oTask->remove( $row['TAS_UID'] ); + $res = $oTask->createRow( $row ); + } + return; } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Delete a task - * @param string $sTaskUID - * @return void - */ - function deleteTask($sTaskUID = '') - { - try { - //Instance classes - $oTask = new Task(); - $oTasks = new Tasks(); - $oTaskUser = new TaskUser(); - $oStep = new Step(); - $oStepTrigger = new StepTrigger(); - //Get task information - $aFields = $oTask->load($sTaskUID); - //Delete routes - $oTasks->deleteAllRoutesOfTask($aFields['PRO_UID'], $sTaskUID, true); - //Delete gateways - $oTasks->deleteAllGatewayOfTask($aFields['PRO_UID'], $sTaskUID, true); - //Delete the users assigned to task - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oDataset1 = TaskUserPeer::doSelectRS($oCriteria); - $oDataset1->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset1->next(); - while ($aRow1 = $oDataset1->getRow()) { - $oTaskUser->remove($aRow1['TAS_UID'], $aRow1['USR_UID'], $aRow1['TU_TYPE'], $aRow1['TU_RELATION']); - $oDataset1->next(); - } - //Delete the steps of task - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::TAS_UID, $sTaskUID); - $oDataset1 = StepPeer::doSelectRS($oCriteria); - $oDataset1->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset1->next(); - while ($aRow1 = $oDataset1->getRow()) { - //Delete the triggers assigned to step - /*$oCriteria = new Criteria('workflow'); + /** + * updates row tasks from an Task Array + * + * @param string $aTasks + * @return array + */ + public function updateTaskRows ($aTask) + { + foreach ($aTask as $key => $row) { + $oTask = new Task(); + if ($oTask->taskExists( $row['TAS_UID'] )) + $oTask->remove( $row['TAS_UID'] ); + else + $res = $oTask->update( $row ); + } + return; + } + + /** + * Get all Routes for any Process + * + * @param string $sProUid + * @return array + */ + public function getAllRoutes ($sProUid) + { + try { + $aRoutes = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProUid ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRoutes[] = $aRow; + $oDataset->next(); + } + return $aRoutes; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * creates row tasks from an Route Array + * + * @param string $aTasks + * @return array + */ + public function createRouteRows ($aRoutes) + { + $routeID = array (); + $aField = array (); + $taskParallel = ''; + $taskSecJoin = ''; + $taskEvaluate = ''; + $taskParallelEv = ''; + $taskSelect = ''; + $taskDiscriminator = ''; + foreach ($aRoutes as $key => $row) { + $sRouteType = $row['ROU_TYPE']; + $oRoute = new Route(); + $oProcessMap = new processMap(); + $oTask = new Task(); + $oEvent = new Event(); + //unset ($row['ROU_UID']); + + + //Saving Gateway into the GATEWAY table + $idTask = $row['TAS_UID']; + $nextTask = $row['ROU_NEXT_TASK']; + if ($nextTask == "-1") { + $end = 1; + } + if ($sRouteType != 'SEQUENTIAL') { + switch ($sRouteType) { + case 'PARALLEL': + if ($idTask != $taskParallel) { + $taskParallel = $idTask; + + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + case 'SEC-JOIN': + if ($nextTask != $taskSecJoin) { + $taskSecJoin = $nextTask; + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + case 'EVALUATE': + if ($idTask != $taskEvaluate) { + $taskEvaluate = $idTask; + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + case 'PARALLEL-BY-EVALUATION': + if ($idTask != $taskParallelEv) { + $taskParallelEv = $idTask; + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + case 'SELECT': + if ($idTask != $taskSelect) { + $taskSelect = $idTask; + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + case 'DISCRIMINATOR': + if ($nextTask != $taskDiscriminator) { + $taskDiscriminator = $nextTask; + $sGatewayUID = $oProcessMap->saveNewGateway( $row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK'] ); + } + break; + } + $row['GAT_UID'] = $sGatewayUID; + } + + if ($oRoute->routeExists( $row['ROU_UID'] )) + $oRoute->remove( $row['ROU_UID'] ); + + $routeID = $oRoute->create( $row ); + + //saving end event while import old processes + if (isset( $end ) && $end == 1) { + if (! $oEvent->existsByTaskUidFrom( $idTask )) { + if ($sRouteType == "SEQUENTIAL") { + $aTaskDetails = $oTask->load( $idTask ); + $positionX = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH'] / 2; + $positionY = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; + + $aData['PRO_UID'] = $row['PRO_UID']; + $aData['EVN_TYPE'] = 'bpmnEventEmptyEnd'; + $aData['EVN_POSX'] = $positionX; + $aData['EVN_POSY'] = $positionY; + $aData['EVN_TAS_UID_FROM'] = $idTask; + $aData['EVN_STATUS'] = 'ACTIVE'; + $aData['EVN_RELATED_TO'] = 'MULTIPLE'; + $aData['EVN_WHEN'] = '1'; + $aData['EVN_ACTION'] = ''; + $sEvn_uid = $oEvent->create( $aData ); + + $aField['ROU_UID'] = $routeID; + $aField['ROU_EVN_UID'] = $sEvn_uid; + $oRoute->update( $aField ); + $end = 0; + } + } + } + + } + return; + } + + /** + * updates row tasks from an Route Array + * + * @param string $aTasks + * @return array + */ + public function updateRouteRows ($aRoutes) + { + foreach ($aRoutes as $key => $row) { + $oRoute = new Route(); + //krumo ($row); + if (is_array( $oRoute->load( $row['ROU_UID'] ) )) + $oRoute->remove( $row['ROU_UID'] ); + else + $res = $oRoute->update( $row ); + } + return; + } + + /** + * Get the assigned users of a task + * + * @param string $sTaskUID + * @param integer $iType + * @return array + */ + public function getUsersOfTask ($sTaskUID, $iType) + { + try { + $aUsers = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addJoin( UsersPeer::USR_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::TU_TYPE, $iType ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 1 ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsers[] = $aRow; + $oDataset->next(); + } + return $aUsers; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Delete a task + * + * @param string $sTaskUID + * @return void + */ + function deleteTask ($sTaskUID = '') + { + try { + //Instance classes + $oTask = new Task(); + $oTasks = new Tasks(); + $oTaskUser = new TaskUser(); + $oStep = new Step(); + $oStepTrigger = new StepTrigger(); + //Get task information + $aFields = $oTask->load( $sTaskUID ); + //Delete routes + $oTasks->deleteAllRoutesOfTask( $aFields['PRO_UID'], $sTaskUID, true ); + //Delete gateways + $oTasks->deleteAllGatewayOfTask( $aFields['PRO_UID'], $sTaskUID, true ); + //Delete the users assigned to task + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oDataset1 = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset1->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset1->next(); + while ($aRow1 = $oDataset1->getRow()) { + $oTaskUser->remove( $aRow1['TAS_UID'], $aRow1['USR_UID'], $aRow1['TU_TYPE'], $aRow1['TU_RELATION'] ); + $oDataset1->next(); + } + //Delete the steps of task + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::TAS_UID, $sTaskUID ); + $oDataset1 = StepPeer::doSelectRS( $oCriteria ); + $oDataset1->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset1->next(); + while ($aRow1 = $oDataset1->getRow()) { + //Delete the triggers assigned to step + /*$oCriteria = new Criteria('workflow'); $oCriteria->add(StepTriggerPeer::STEP_UID, $aRow1['STEP_UID']); $oDataset2 = StepTriggerPeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -362,168 +370,170 @@ class Tasks $oStepTrigger->remove($aRow2['STEP_UID'], $aRow2['TAS_UID'], $aRow2['TRI_UID'], $aRow2['ST_TYPE']); $oDataset2->next(); }*/ - $oStep->remove($aRow1['STEP_UID']); - $oDataset1->next(); - } - //Delete step triggers - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepTriggerPeer::TAS_UID, $sTaskUID); - StepTriggerPeer::doDelete($oCriteria); - //Delete permissions - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::TAS_UID, $sTaskUID); - ObjectPermissionPeer::doDelete($oCriteria); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::OP_TASK_SOURCE, $sTaskUID); - ObjectPermissionPeer::doDelete($oCriteria); - //Delete task - $oTask->remove($sTaskUID); - //Delete cases schedulers added by krlos - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseSchedulerPeer::TAS_UID, $sTaskUID); - CaseSchedulerPeer::doDelete($oCriteria); + $oStep->remove( $aRow1['STEP_UID'] ); + $oDataset1->next(); + } + //Delete step triggers + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID ); + StepTriggerPeer::doDelete( $oCriteria ); + //Delete permissions + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::TAS_UID, $sTaskUID ); + ObjectPermissionPeer::doDelete( $oCriteria ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::OP_TASK_SOURCE, $sTaskUID ); + ObjectPermissionPeer::doDelete( $oCriteria ); + //Delete task + $oTask->remove( $sTaskUID ); + //Delete cases schedulers added by krlos + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseSchedulerPeer::TAS_UID, $sTaskUID ); + CaseSchedulerPeer::doDelete( $oCriteria ); + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Delete all routes from a task - * @param string $sProcessUID - * @param string $sTaskUID - * @return boolean - */ - public function deleteAllRoutesOfTask($sProcessUID = '', $sTaskUID = '', $bAll = false) - { - try { - $oProcess = new Process(); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task(); - $aFields = $oTask->load($sTaskUID); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - RoutePeer::doDelete($oCriteria); - if ($bAll) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sTaskUID); - RoutePeer::doDelete($oCriteria); - } - return true; + /** + * Delete all routes from a task + * + * @param string $sProcessUID + * @param string $sTaskUID + * @return boolean + */ + public function deleteAllRoutesOfTask ($sProcessUID = '', $sTaskUID = '', $bAll = false) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUID ); + RoutePeer::doDelete( $oCriteria ); + if ($bAll) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProcessUID ); + $oCriteria->add( RoutePeer::ROU_NEXT_TASK, $sTaskUID ); + RoutePeer::doDelete( $oCriteria ); + } + return true; + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Get all gateways for any Process - * @param string $sProUid - * @return array - */ - public function getAllGateways($sProUid) - { - try { - $aGateways = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GatewayPeer::PRO_UID, $sProUid); - $oDataset = GatewayPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oGateway = new Gateway(); - $aGateways[] = $oGateway->load($aRow['GAT_UID']); - $oDataset->next(); - } - return $aGateways; + /** + * Get all gateways for any Process + * + * @param string $sProUid + * @return array + */ + public function getAllGateways ($sProUid) + { + try { + $aGateways = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GatewayPeer::PRO_UID, $sProUid ); + $oDataset = GatewayPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGateway = new Gateway(); + $aGateways[] = $oGateway->load( $aRow['GAT_UID'] ); + $oDataset->next(); + } + return $aGateways; + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } - /** - * creates row tasks from an Task Array - * @param string $aTasks - * @return array - */ - public function createGatewayRows( $aGateway ) - { - foreach ( $aGateway as $key => $row ) { - $oGateway = new Gateway(); - if($oGateway->gatewayExists ($row['GAT_UID'])) - $oGateway->remove($row['GAT_UID']); + /** + * creates row tasks from an Task Array + * + * @param string $aTasks + * @return array + */ + public function createGatewayRows ($aGateway) + { + foreach ($aGateway as $key => $row) { + $oGateway = new Gateway(); + if ($oGateway->gatewayExists( $row['GAT_UID'] )) + $oGateway->remove( $row['GAT_UID'] ); - if($row['TAS_UID'] != '' && $row['GAT_NEXT_TASK'] != '') - continue; - else - $res = $oGateway->createRow($row); + if ($row['TAS_UID'] != '' && $row['GAT_NEXT_TASK'] != '') + continue; + else + $res = $oGateway->createRow( $row ); + } + return; } - return; - } - /** - * Delete all routes from a task - * @param string $sProcessUID - * @param string $sTaskUID - * @return boolean - */ - public function deleteAllGatewayOfTask($sProcessUID = '', $sTaskUID = '', $bAll = false) - { - try { - $oProcess = new Process(); - $aFields = $oProcess->load($sProcessUID); - $oTask = new Task(); - $aFields = $oTask->load($sTaskUID); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GatewayPeer::PRO_UID, $sProcessUID); - $oCriteria->add(GatewayPeer::TAS_UID, $sTaskUID); - GatewayPeer::doDelete($oCriteria); - if ($bAll) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GatewayPeer::PRO_UID, $sProcessUID); - $oCriteria->add(GatewayPeer::GAT_NEXT_TASK, $sTaskUID); - GatewayPeer::doDelete($oCriteria); - } - return true; + /** + * Delete all routes from a task + * + * @param string $sProcessUID + * @param string $sTaskUID + * @return boolean + */ + public function deleteAllGatewayOfTask ($sProcessUID = '', $sTaskUID = '', $bAll = false) + { + try { + $oProcess = new Process(); + $aFields = $oProcess->load( $sProcessUID ); + $oTask = new Task(); + $aFields = $oTask->load( $sTaskUID ); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GatewayPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( GatewayPeer::TAS_UID, $sTaskUID ); + GatewayPeer::doDelete( $oCriteria ); + if ($bAll) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GatewayPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( GatewayPeer::GAT_NEXT_TASK, $sTaskUID ); + GatewayPeer::doDelete( $oCriteria ); + } + return true; + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Assign a user to task - * @param string $sTaskUID - * @param string $sUserUID - * @param string $iType - * @return integer - */ - public function assignUser($sTaskUID = '', $sUserUID = '', $iType = '') - { - try { - $oTaskUser = new TaskUser(); - return $oTaskUser->create(array('TAS_UID' => $sTaskUID, 'USR_UID' => $sUserUID, 'TU_TYPE' => $iType, 'TU_RELATION' => 1)); - } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Assign a group to task - * @param string $sTaskUID - * @param string $sGroupUID - * @param string $iType - * @return integer - */ - public function assignGroup($sTaskUID = '', $sGroupUID = '', $iType = '') - { - try { - $oTaskUser = new TaskUser(); - /*$oCriteria = new Criteria('workflow'); + /** + * Assign a user to task + * + * @param string $sTaskUID + * @param string $sUserUID + * @param string $iType + * @return integer + */ + public function assignUser ($sTaskUID = '', $sUserUID = '', $iType = '') + { + try { + $oTaskUser = new TaskUser(); + return $oTaskUser->create( array ('TAS_UID' => $sTaskUID,'USR_UID' => $sUserUID,'TU_TYPE' => $iType,'TU_RELATION' => 1 + ) ); + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Assign a group to task + * + * @param string $sTaskUID + * @param string $sGroupUID + * @param string $iType + * @return integer + */ + public function assignGroup ($sTaskUID = '', $sGroupUID = '', $iType = '') + { + try { + $oTaskUser = new TaskUser(); + /*$oCriteria = new Criteria('workflow'); $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); $oDataset = GroupUserPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -541,318 +551,317 @@ class Tasks } $oDataset->next(); }*/ - return $oTaskUser->create(array('TAS_UID' => $sTaskUID, 'USR_UID' => $sGroupUID, 'TU_TYPE' => $iType, 'TU_RELATION' => 2)); - } - catch (Exception $oError) { - throw($oError); - } - } - /** - * of the assign user of all the tasks - * @param string $sUserUID - * @return void - */ - public function ofToAssignUserOfAllTasks($sUserUID = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskUserPeer::USR_UID, $sUserUID); - TaskUserPeer::doDelete($oCriteria); - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Of to assign a user from a task - * @param string $sTaskUID - * @param string $sUserUID - * @param integer $iType - * @return boolean - */ - public function ofToAssignUser($sTaskUID = '', $sUserUID = '', $iType = 0) - { - try { - $oTaskUser = new TaskUser(); - $oTaskUser->remove($sTaskUID, $sUserUID, $iType, 1); - return true; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Of to assign a group from a task - * @param string $sTaskUID - * @param string $sGroupUID - * @param integer $iType - * @return boolean - */ - public function ofToAssignGroup($sTaskUID = '', $sGroupUID = '', $iType = 0) - { - try { - $oTaskUser = new TaskUser(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oDataset = GroupUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aGroupUser = $oDataset->getRow()) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::USR_UID, $aGroupUser['USR_UID']); - $oDataset2 = TaskUserPeer::doSelectRS($oCriteria); - $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow = $oDataset2->getRow(); - if (is_array($aRow)) { - $this->ofToAssignUser($sTaskUID, $aGroupUser['USR_UID'], $iType); + return $oTaskUser->create( array ('TAS_UID' => $sTaskUID,'USR_UID' => $sGroupUID,'TU_TYPE' => $iType,'TU_RELATION' => 2 + ) ); + } catch (Exception $oError) { + throw ($oError); } - $oDataset->next(); - } - return $oTaskUser->remove($sTaskUID, $sGroupUID, $iType, 2); } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Get the assigned steps of a task - * @param string $sTaskUID - * @return array - */ - public function getStepsOfTask($sTaskUID) - { - try { - $aSteps = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::TAS_UID, $sTaskUID); - $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aSteps[] = $aRow; - $oDataset->next(); - } - return $aSteps; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Return if exists building elements to add steps - * @param string $sProcessUID - * @return boolean - */ - public function existsBuildingElements($sProcessUID) - { - try { - $oCriteria = new Criteria('workflow'); - //$oCriteria->add(StepPeer::PRO_UID, $sProcessUID); - //$oDataset = StepPeer::doSelectRS($oCriteria); - //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - //$oDataset->next(); - return true; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get all tasks for any Process - * @param string $sProUid - * @return array - */ - public function getStartingTaskForUser($sProUid, $sUsrUid) - { - try { - $aTasks = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskPeer::PRO_UID, $sProUid); - //$oCriteria->add(TaskPeer::TAS_USER, $sUsrUid); - $oCriteria->add(TaskPeer::TAS_START, 'TRUE'); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oTask = new Task(); - $aTasks[] = $oTask->Load($aRow['TAS_UID']); - $oDataset->next(); - } - return $aTasks; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Verify the user assig in any task - * @param string $sTaskUID - * @return array - */ - public function assignUsertoTask($sTaskUID) - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if(is_array($aRow)) - return 1; - else - return 0; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Verify the user assig in task - * @param string $sUsrUid, $sTaskUID - * @return array - */ - public function verifyUsertoTask($sUsrUid, $sTaskUID) - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(TaskUserPeer::TU_RELATION); - $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); - $oCriteria->add(TaskUserPeer::USR_UID, $sUsrUid); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if(is_array($aRow)) - return $aRow; - else - return $aRow; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get tasks that the usser is assigned - * @param string $sUsrUID - * @return array - */ - public function getTasksThatUserIsAssigned($sUserUID) - { - try { - $aTasks = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskUserPeer::USR_UID, $sUserUID); - $oCriteria->add(TaskUserPeer::TU_RELATION, 1); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aTasks[] = $aRow['TAS_UID']; - $oDataset->next(); - } - $aGroups = array(); - $oCriteria = new Criteria(); - $oCriteria->add(GroupwfPeer::GRP_UID, '', Criteria::NOT_EQUAL); - $oCriteria->add(GroupUserPeer::USR_UID, $sUserUID); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oCriteria->addJoin(GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroups[] = $aRow['GRP_UID']; - $oDataset->next(); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); - $oCriteria->add(TaskUserPeer::TU_RELATION, 2); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if (!in_array($aRow['TAS_UID'], $aTasks)) { - $aTasks[] = $aRow['TAS_UID']; + /** + * of the assign user of all the tasks + * + * @param string $sUserUID + * @return void + */ + public function ofToAssignUserOfAllTasks ($sUserUID = '') + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::USR_UID, $sUserUID ); + TaskUserPeer::doDelete( $oCriteria ); + } catch (Exception $oError) { + throw ($oError); } - $oDataset->next(); - } - return $aTasks; } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Get Routes for any Process and any Task - * @param string $sProUid, $sTaskUid - * @return array - * by Everth - */ - public function getRoute($sProUid, $sTaskUid) - { - try { - $aRoutes = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProUid); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUid); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRoutes[] = $aRow; - $oDataset->next(); - } + /** + * Of to assign a user from a task + * + * @param string $sTaskUID + * @param string $sUserUID + * @param integer $iType + * @return boolean + */ + public function ofToAssignUser ($sTaskUID = '', $sUserUID = '', $iType = 0) + { + try { + $oTaskUser = new TaskUser(); + $oTaskUser->remove( $sTaskUID, $sUserUID, $iType, 1 ); + return true; + } catch (Exception $oError) { + throw ($oError); + } + } - return $aRoutes; + /** + * Of to assign a group from a task + * + * @param string $sTaskUID + * @param string $sGroupUID + * @param integer $iType + * @return boolean + */ + public function ofToAssignGroup ($sTaskUID = '', $sGroupUID = '', $iType = 0) + { + try { + $oTaskUser = new TaskUser(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $sGroupUID ); + $oDataset = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aGroupUser = $oDataset->getRow()) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::USR_UID, $aGroupUser['USR_UID'] ); + $oDataset2 = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset2->next(); + $aRow = $oDataset2->getRow(); + if (is_array( $aRow )) { + $this->ofToAssignUser( $sTaskUID, $aGroupUser['USR_UID'], $iType ); + } + $oDataset->next(); + } + return $oTaskUser->remove( $sTaskUID, $sGroupUID, $iType, 2 ); + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); - } - } -/** - * Get Routes for any Process,route type,route next task - * @param string $sProUid, $sTaskUid - * @return array - * by Girish - */ - public function getRouteByType($sProUid, $sRouteNextTaskUid,$sRouteType) - { - try { - $aRoutes = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProUid); - $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sRouteNextTaskUid); - $oCriteria->add(RoutePeer::ROU_TYPE, $sRouteType); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aRoutes[] = $aRow; - $oDataset->next(); - } + /** + * Get the assigned steps of a task + * + * @param string $sTaskUID + * @return array + */ + public function getStepsOfTask ($sTaskUID) + { + try { + $aSteps = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::TAS_UID, $sTaskUID ); + $oCriteria->addAscendingOrderByColumn( StepPeer::STEP_POSITION ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aSteps[] = $aRow; + $oDataset->next(); + } + return $aSteps; + } catch (Exception $oError) { + throw ($oError); + } + } - return $aRoutes; + /** + * Return if exists building elements to add steps + * + * @param string $sProcessUID + * @return boolean + */ + public function existsBuildingElements ($sProcessUID) + { + try { + $oCriteria = new Criteria( 'workflow' ); + //$oCriteria->add(StepPeer::PRO_UID, $sProcessUID); + //$oDataset = StepPeer::doSelectRS($oCriteria); + //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //$oDataset->next(); + return true; + } catch (Exception $oError) { + throw ($oError); + } } - catch (Exception $oError) { - throw($oError); + + /** + * Get all tasks for any Process + * + * @param string $sProUid + * @return array + */ + public function getStartingTaskForUser ($sProUid, $sUsrUid) + { + try { + $aTasks = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProUid ); + //$oCriteria->add(TaskPeer::TAS_USER, $sUsrUid); + $oCriteria->add( TaskPeer::TAS_START, 'TRUE' ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTask = new Task(); + $aTasks[] = $oTask->Load( $aRow['TAS_UID'] ); + $oDataset->next(); + } + return $aTasks; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Verify the user assig in any task + * + * @param string $sTaskUID + * @return array + */ + public function assignUsertoTask ($sTaskUID) + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if (is_array( $aRow )) + return 1; + else + return 0; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Verify the user assig in task + * + * @param string $sUsrUid, $sTaskUID + * @return array + */ + public function verifyUsertoTask ($sUsrUid, $sTaskUID) + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( TaskUserPeer::USR_UID, $sUsrUid ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if (is_array( $aRow )) + return $aRow; + else + return $aRow; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get tasks that the usser is assigned + * + * @param string $sUsrUID + * @return array + */ + public function getTasksThatUserIsAssigned ($sUserUID) + { + try { + $aTasks = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::USR_UID, $sUserUID ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 1 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aTasks[] = $aRow['TAS_UID']; + $oDataset->next(); + } + $aGroups = array (); + $oCriteria = new Criteria(); + $oCriteria->add( GroupwfPeer::GRP_UID, '', Criteria::NOT_EQUAL ); + $oCriteria->add( GroupUserPeer::USR_UID, $sUserUID ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oCriteria->addJoin( GroupUserPeer::GRP_UID, GroupwfPeer::GRP_UID, Criteria::LEFT_JOIN ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aGroups[] = $aRow['GRP_UID']; + $oDataset->next(); + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::USR_UID, $aGroups, Criteria::IN ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if (! in_array( $aRow['TAS_UID'], $aTasks )) { + $aTasks[] = $aRow['TAS_UID']; + } + $oDataset->next(); + } + return $aTasks; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Routes for any Process and any Task + * + * @param string $sProUid, $sTaskUid + * @return array by Everth + */ + public function getRoute ($sProUid, $sTaskUid) + { + try { + $aRoutes = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProUid ); + $oCriteria->add( RoutePeer::TAS_UID, $sTaskUid ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRoutes[] = $aRow; + $oDataset->next(); + } + + return $aRoutes; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Routes for any Process,route type,route next task + * + * @param string $sProUid, $sTaskUid + * @return array by Girish + */ + public function getRouteByType ($sProUid, $sRouteNextTaskUid, $sRouteType) + { + try { + $aRoutes = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProUid ); + $oCriteria->add( RoutePeer::ROU_NEXT_TASK, $sRouteNextTaskUid ); + $oCriteria->add( RoutePeer::ROU_TYPE, $sRouteType ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRoutes[] = $aRow; + $oDataset->next(); + } + + return $aRoutes; + } catch (Exception $oError) { + throw ($oError); + } } - } } ?> diff --git a/workflow/engine/classes/class.toolBar.php b/workflow/engine/classes/class.toolBar.php index 22628101a..46336aed4 100755 --- a/workflow/engine/classes/class.toolBar.php +++ b/workflow/engine/classes/class.toolBar.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - + /** * ToolBar - ToolBar class + * * @package workflow.engine.ProcessMaker */ -class ToolBar extends form +class ToolBar extends form { - var $type = 'toolbar'; - var $align = 'left'; + var $type = 'toolbar'; + var $align = 'left'; } - - /** + +/** * XmlForm_Field_ToolBar - XmlForm_Field_ToolBar class + * * @package workflow.engine.ProcessMaker */ -class XmlForm_Field_ToolBar extends XmlForm_Field +class XmlForm_Field_ToolBar extends XmlForm_Field { - var $xmlfile = ''; - var $type = 'toolbar'; - var $toolBar; - var $home=''; - var $withoutLabel = true; - - /** - * Constructor of the class XmlForm_Field_ToolBar - * @param string $xmlNode - * @param string $lang - * @param string $home - * @param string $owner - * @return void - */ - function XmlForm_Field_ToolBar($xmlNode, $lang='en', $home='', $owner) - { - parent::XmlForm_Field($xmlNode, $lang, $home, $owner); - $this->home = $home; - } - - /** - * Prints the ToolBar - * @param string $value - * @return string - */ - function render( $value ) - { - $this->toolBar = new toolBar( $this->xmlfile , $this->home ); - $template = PATH_CORE . 'templates/' . $this->type . '.html'; - $out = $this->toolBar->render( $template , $scriptCode ) ; - $oHeadPublisher =& headPublisher::getSingleton(); - $oHeadPublisher->addScriptFile( $this->toolBar->scriptURL ); - $oHeadPublisher->addScriptCode( $scriptCode ); - return $out; - } + var $xmlfile = ''; + var $type = 'toolbar'; + var $toolBar; + var $home = ''; + var $withoutLabel = true; + + /** + * Constructor of the class XmlForm_Field_ToolBar + * + * @param string $xmlNode + * @param string $lang + * @param string $home + * @param string $owner + * @return void + */ + function XmlForm_Field_ToolBar ($xmlNode, $lang = 'en', $home = '', $owner) + { + parent::XmlForm_Field( $xmlNode, $lang, $home, $owner ); + $this->home = $home; + } + + /** + * Prints the ToolBar + * + * @param string $value + * @return string + */ + function render ($value) + { + $this->toolBar = new toolBar( $this->xmlfile, $this->home ); + $template = PATH_CORE . 'templates/' . $this->type . '.html'; + $out = $this->toolBar->render( $template, $scriptCode ); + $oHeadPublisher = & headPublisher::getSingleton(); + $oHeadPublisher->addScriptFile( $this->toolBar->scriptURL ); + $oHeadPublisher->addScriptCode( $scriptCode ); + return $out; + } } /** * XmlForm_Field_toolButton - XmlForm_Field_toolButton class + * * @package workflow.engine.ProcessMaker */ class XmlForm_Field_toolButton extends XmlForm_Field { - var $file = ''; - var $fileAlt = ''; - var $url = ''; - var $urlAlt = ''; - var $home = 'public_html'; - /* types of buttons: + var $file = ''; + var $fileAlt = ''; + var $url = ''; + var $urlAlt = ''; + var $home = 'public_html'; + /* types of buttons: * image * text * image/text * text/image */ - var $buttonType = 'image'; - var $withoutLabel = false; - var $buttonStyle = ''; + var $buttonType = 'image'; + var $withoutLabel = false; + var $buttonStyle = ''; /*$hoverMethod : back | switch*/ - var $hoverMethod='back'; - var $class; - - /** - * Prints the components of the toolBar - * @param string $value - * @return string - */ - function render( $value ) - { - $url = $this->file; - if ($this->home === "methods") - $url = G::encryptlink( SYS_URI . $url ); - if ($this->home === "public_html") - $url ='/' . $url ; - $urlAlt = $this->fileAlt; - if ($this->fileAlt!=='') { - if ($this->home === "methods") - $urlAlt = G::encryptlink( SYS_URI . $urlAlt ); - if ($this->home === "public_html") - $urlAlt ='/' . $urlAlt ; - } - $this->url=$url; - $this->urlAlt=$urlAlt; - switch($this->buttonType){ - case 'image': - $html=''; - if ($this->hoverMethod==='back') { - $html='style)?' style="'.$this->style.'"':'').' onmouseover=\'backImage(this,"url('.htmlentities( $urlAlt, ENT_QUOTES, 'utf-8').') no-repeat")\' onmouseout=\'backImage(this,"")\' title=\'' . addslashes($this->label) . '\' />'; - } - elseif($this->hoverMethod==='switch'){ - $html='style)?' style="'.$this->style.'"':'').' onmouseover=\'switchImage(this,"'.htmlentities( $url, ENT_QUOTES, 'utf-8').'","'.htmlentities( $urlAlt, ENT_QUOTES, 'utf-8').'")\' onmouseout=\'switchImage(this,"'.htmlentities( $url, ENT_QUOTES, 'utf-8').'","'.htmlentities( $urlAlt, ENT_QUOTES, 'utf-8').'")\'/>'; - } - else { - $html='style)?' style="'.$this->style.'"':'').'/>'; + var $hoverMethod = 'back'; + var $class; + + /** + * Prints the components of the toolBar + * + * @param string $value + * @return string + */ + function render ($value) + { + $url = $this->file; + if ($this->home === "methods") + $url = G::encryptlink( SYS_URI . $url ); + if ($this->home === "public_html") + $url = '/' . $url; + $urlAlt = $this->fileAlt; + if ($this->fileAlt !== '') { + if ($this->home === "methods") + $urlAlt = G::encryptlink( SYS_URI . $urlAlt ); + if ($this->home === "public_html") + $urlAlt = '/' . $urlAlt; } - break; - case 'text': - $html=$this->htmlentities($this->label, ENT_QUOTES,'utf-8'); - break; - case 'html': - $html='
'. - $this->label.'
'; - - //$html=$this->label; - break; - case 'image/text': - $html='style)?' style="'.$this->style.'"':'').'/>
'. - $this->htmlentities($this->label, ENT_QUOTES,'utf-8'); - break; - case 'text/image': - $html=$this->htmlentities($this->label, ENT_QUOTES,'utf-8'). - '
style)?' style="'.$this->style.'"':'').'/>'; - break; - case 'class': - $html=' -
+ $this->url = $url; + $this->urlAlt = $urlAlt; + switch ($this->buttonType) { + case 'image': + $html = ''; + if ($this->hoverMethod === 'back') { + $html = 'style) ? ' style="' . $this->style . '"' : '') . ' onmouseover=\'backImage(this,"url(' . htmlentities( $urlAlt, ENT_QUOTES, 'utf-8' ) . ') no-repeat")\' onmouseout=\'backImage(this,"")\' title=\'' . addslashes( $this->label ) . '\' />'; + } elseif ($this->hoverMethod === 'switch') { + $html = 'style) ? ' style="' . $this->style . '"' : '') . ' onmouseover=\'switchImage(this,"' . htmlentities( $url, ENT_QUOTES, 'utf-8' ) . '","' . htmlentities( $urlAlt, ENT_QUOTES, 'utf-8' ) . '")\' onmouseout=\'switchImage(this,"' . htmlentities( $url, ENT_QUOTES, 'utf-8' ) . '","' . htmlentities( $urlAlt, ENT_QUOTES, 'utf-8' ) . '")\'/>'; + } else { + $html = 'style) ? ' style="' . $this->style . '"' : '') . '/>'; + } + break; + case 'text': + $html = $this->htmlentities( $this->label, ENT_QUOTES, 'utf-8' ); + break; + case 'html': + $html = '
' . $this->label . '
'; + + //$html=$this->label; + break; + case 'image/text': + $html = 'style) ? ' style="' . $this->style . '"' : '') . '/>
' . $this->htmlentities( $this->label, ENT_QUOTES, 'utf-8' ); + break; + case 'text/image': + $html = $this->htmlentities( $this->label, ENT_QUOTES, 'utf-8' ) . '
style) ? ' style="' . $this->style . '"' : '') . '/>'; + break; + case 'class': + $html = '
+
'; - return $html; - + return $html; + + } + return 'buttonStyle) ? ' style="' . $this->buttonStyle . '"' : '') . (($this->onclick) ? ' onclick="' . htmlentities( $this->onclick, ENT_QUOTES, 'utf-8' ) . '"' : '') . '>' . $html . ''; } - return 'buttonStyle)?' style="'.$this->buttonStyle.'"':''). - (($this->onclick)?' onclick="'. htmlentities($this->onclick, ENT_QUOTES,'utf-8').'"':''). - '>'.$html.''; - } } ?> diff --git a/workflow/engine/classes/class.triggerLibrary.php b/workflow/engine/classes/class.triggerLibrary.php index 6da1845c4..91173e38f 100755 --- a/workflow/engine/classes/class.triggerLibrary.php +++ b/workflow/engine/classes/class.triggerLibrary.php @@ -1,165 +1,169 @@ * - * This class Helps registering and implementing Wizard for Triggers + * This class Helps registering and implementing Wizard for Triggers */ -G::LoadThirdParty ( 'html2ps_pdf/classes', 'include' ); -G::LoadThirdParty ( 'html2ps_pdf/classes/org/active-link/doc', 'PHPClass' ); +G::LoadThirdParty( 'html2ps_pdf/classes', 'include' ); +G::LoadThirdParty( 'html2ps_pdf/classes/org/active-link/doc', 'PHPClass' ); - /** - * @package workflow.engine.ProcessMaker - */ +/** + * + * @package workflow.engine.ProcessMaker + */ -class triggerLibrary { +class triggerLibrary +{ - private $_aTriggerClasses_ = array (); + private $_aTriggerClasses_ = array (); - private static $instance = NULL; + private static $instance = NULL; - /** - * __construct - * - * @return void - */ - function __construct() - { - //Initialize the Library and register the Default - $this->registerFunctionsFileToLibrary ( PATH_CORE . "classes" . PATH_SEP . "class.pmFunctions.php", "ProcessMaker Functions" ); + /** + * __construct + * + * @return void + */ + function __construct () + { + //Initialize the Library and register the Default + $this->registerFunctionsFileToLibrary( PATH_CORE . "classes" . PATH_SEP . "class.pmFunctions.php", "ProcessMaker Functions" ); + + //Register all registered PLugin Functions + if (class_exists( 'folderData' )) { + //$folderData = new folderData($sProUid, $proFields['PRO_TITLE'], $sAppUid, $Fields['APP_TITLE'], $sUsrUid); + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $aAvailablePmFunctions = $oPluginRegistry->getPmFunctions(); + foreach ($aAvailablePmFunctions as $key => $class) { + $filePlugin = PATH_PLUGINS . $class . PATH_SEP . 'classes' . PATH_SEP . 'class.pmFunctions.php'; + + if (file_exists( $filePlugin ) && ! is_dir( $filePlugin )) { + $this->registerFunctionsFileToLibrary( $filePlugin, "ProcessMaker Functions" ); + } + } - //Register all registered PLugin Functions - if (class_exists ( 'folderData' )) { - //$folderData = new folderData($sProUid, $proFields['PRO_TITLE'], $sAppUid, $Fields['APP_TITLE'], $sUsrUid); - $oPluginRegistry = &PMPluginRegistry::getSingleton (); - $aAvailablePmFunctions = $oPluginRegistry->getPmFunctions (); - foreach ( $aAvailablePmFunctions as $key => $class ) { - $filePlugin = PATH_PLUGINS . $class . PATH_SEP . 'classes' . PATH_SEP . 'class.pmFunctions.php'; - - if ( file_exists($filePlugin) && !is_dir($filePlugin)) { - $this->registerFunctionsFileToLibrary ( $filePlugin, "ProcessMaker Functions" ); } - } + //Add External Triggers + $dir = G::ExpandPath( "classes" ) . 'triggers'; + $filesArray = array (); - } - //Add External Triggers - $dir = G::ExpandPath( "classes" ).'triggers'; - $filesArray = array(); - - if (file_exists($dir)){ - if ($handle = opendir($dir)) { - while (false !== ($file = readdir($handle))) { - if( $file != "." && $file != ".." && !is_dir($dir . PATH_SEP . $file)){ - $this->registerFunctionsFileToLibrary( $dir . PATH_SEP . $file, "ProcessMaker External Functions"); - } + if (file_exists( $dir )) { + if ($handle = opendir( $dir )) { + while (false !== ($file = readdir( $handle ))) { + if ($file != "." && $file != ".." && ! is_dir( $dir . PATH_SEP . $file )) { + $this->registerFunctionsFileToLibrary( $dir . PATH_SEP . $file, "ProcessMaker External Functions" ); + } + } + closedir( $handle ); + } } - closedir($handle); - } - } - } - - /** - * &getSingleton - * - * @return self::$instance; - */ - function &getSingleton() - { - if (self::$instance == NULL) { - self::$instance = new triggerLibrary ( ); - } - return self::$instance; - } - - /** - * serializeInstance - * - * @return serialize ( self::$instance ); - */ - function serializeInstance() - { - return serialize ( self::$instance ); - } - - /** - * unSerializeInstance - * - * @param integer $serialized - * @return void - */ - function unSerializeInstance($serialized) - { - if (self::$instance == NULL) { - self::$instance = new PMPluginRegistry ( ); } - $instance = unserialize ( $serialized ); - self::$instance = $instance; - } - - /** - * registerFunctionsFileToLibrary - * - * @param string $filePath - * @param string $libraryName - * @return void - */ - function registerFunctionsFileToLibrary($filePath, $libraryName) - { - $aLibrary = $this->getMethodsFromLibraryFile ( $filePath ); - $aLibrary->libraryFile = $filePath; - $aLibrary->libraryName = $libraryName; - if(isset($aLibrary->info['className'])){ - $this->_aTriggerClasses_ [$aLibrary->info['className']] = $aLibrary; + /** + * &getSingleton + * + * @return self::$instance; + */ + function &getSingleton () + { + if (self::$instance == NULL) { + self::$instance = new triggerLibrary(); + } + return self::$instance; } - } + /** + * serializeInstance + * + * @return serialize ( self::$instance ); + */ + function serializeInstance () + { + return serialize( self::$instance ); + } - /** - * getMethodsFromLibraryFile - * - * @param string $file - * @return object(PHPClass) $parsedLibrary - */ - function getMethodsFromLibraryFile($file) - { - // parse class comments from file - $parsedLibrary = new PHPClass ( ); - //$success = $parsedLibrary->parseFromFile ( PATH_CORE . "classes" . PATH_SEP . $file ); - $success = $parsedLibrary->parseFromFile ( $file ); + /** + * unSerializeInstance + * + * @param integer $serialized + * @return void + */ + function unSerializeInstance ($serialized) + { + if (self::$instance == NULL) { + self::$instance = new PMPluginRegistry(); + } - return $parsedLibrary; - } + $instance = unserialize( $serialized ); + self::$instance = $instance; + } - /** - * getRegisteredClasses - * - * @return array ($this->_aTriggerClasses_) - */ - function getRegisteredClasses() - { - return ($this->_aTriggerClasses_); - } + /** + * registerFunctionsFileToLibrary + * + * @param string $filePath + * @param string $libraryName + * @return void + */ + function registerFunctionsFileToLibrary ($filePath, $libraryName) + { + $aLibrary = $this->getMethodsFromLibraryFile( $filePath ); + $aLibrary->libraryFile = $filePath; + $aLibrary->libraryName = $libraryName; + if (isset( $aLibrary->info['className'] )) { + $this->_aTriggerClasses_[$aLibrary->info['className']] = $aLibrary; + } - /** - * getLibraryDefinition - * - * @param string $libraryClassName - * @return array ($this->_aTriggerClasses_[$libraryClassName]) - */ - function getLibraryDefinition($libraryClassName) - { - return ($this->_aTriggerClasses_[$libraryClassName]); - } + } - /** - * __destruct - * - * @return void - */ function __destruct() - { + /** + * getMethodsFromLibraryFile + * + * @param string $file + * @return object(PHPClass) $parsedLibrary + */ + function getMethodsFromLibraryFile ($file) + { + // parse class comments from file + $parsedLibrary = new PHPClass(); + //$success = $parsedLibrary->parseFromFile ( PATH_CORE . "classes" . PATH_SEP . $file ); + $success = $parsedLibrary->parseFromFile( $file ); - //TODO - Insert your code here - } + return $parsedLibrary; + } + + /** + * getRegisteredClasses + * + * @return array ($this->_aTriggerClasses_) + */ + function getRegisteredClasses () + { + return ($this->_aTriggerClasses_); + } + + /** + * getLibraryDefinition + * + * @param string $libraryClassName + * @return array ($this->_aTriggerClasses_[$libraryClassName]) + */ + function getLibraryDefinition ($libraryClassName) + { + return ($this->_aTriggerClasses_[$libraryClassName]); + } + + /** + * __destruct + * + * @return void + */ + function __destruct () + { + + //TODO - Insert your code here + } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.webdav.php b/workflow/engine/classes/class.webdav.php index 9f6c496ed..1564bed9a 100755 --- a/workflow/engine/classes/class.webdav.php +++ b/workflow/engine/classes/class.webdav.php @@ -1,252 +1,271 @@ base = '/'; - $this->uriBase = '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/webdav/'; - - // let the base class do all the work - parent::ServeRequest(); - } + /** + * Serve a webdav request + * + * @access public + * @param string + */ + function ServeRequest ($base = false) + { + //$this->base = '/'; + $this->uriBase = '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/webdav/'; - /** - * No authentication is needed here - * - * @access private - * @param string HTTP Authentication type (Basic, Digest, ...) - * @param string Username - * @param string Password - * @return bool true on successful authentication - */ - function check_auth($type, $user, $pass) - { - return true; - } - - /** - * PROPFIND method handler - * - * @param array general parameter passing array - * @param array return array for file properties - * @return bool true on success - */ - function PROPFIND(&$options, &$files) - { - $paths = $this->paths; - // prepare property array - $files["files"] = array(); - - $pathClasses = PATH_DB . PATH_SEP . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; - if ( count($paths) == 0 && is_dir( $pathClasses ) ) { - $props = array (); - $props[] = $this->mkprop("displayname", 'Classes' ); - $props[] = $this->mkprop("creationdate", filectime($pathClasses) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathClasses) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathClasses) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => 'classes' , 'props' => $props); + // let the base class do all the work + parent::ServeRequest(); } - if ( count($paths) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses ) ) { - // try to open directory - $handle = @opendir($pathClasses); - if ($handle) { - while ($filename = readdir($handle)) { - $ext = array_pop ( explode ( '.', $filename) ); - if ($filename != "." && $filename != ".." && !is_dir($pathClasses.$filename) && $ext == 'php' ) { - $props = array (); - $props[] = $this->mkprop("displayname", $filename ); - $props[] = $this->mkprop("creationdate", filectime($pathClasses.$filename) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathClasses.$filename) ); - $props[] = $this->mkprop("getetag", fileatime($pathClasses.$filename) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathClasses.$filename) ); - $props[] = $this->mkprop("resourcetype", '' ); - $props[] = $this->mkprop("getcontenttype", 'text/plain' ); - $props[] = $this->mkprop("getcontentlength", filesize($pathClasses.$filename) ); - if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) - $files["files"][] = array ( 'path' => "classes/$filename" , 'props' => $props); - } - } - } - - }//path classes - - $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP ; - if ( count($paths) == 0 && is_dir( $pathProcesses ) ) { - $props = array (); - $props[] = $this->mkprop("displayname", 'Processes' ); - $props[] = $this->mkprop("creationdate", filectime($pathProcesses) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathProcesses) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => 'processes' , 'props' => $props); + /** + * No authentication is needed here + * + * @access private + * @param string HTTP Authentication type (Basic, Digest, ...) + * @param string Username + * @param string Password + * @return bool true on successful authentication + */ + function check_auth ($type, $user, $pass) + { + return true; } - - //list all active processes - if ( count($paths) == 1 && $paths[0] == 'processes' && is_dir( $pathProcesses ) ) { - // try to get the process directory list - G::LoadClass ( 'processMap'); - G::LoadClass ( 'model/Process'); - $oProcessMap = new processMap(); - $oProcess = new Process(); - $c = $oProcessMap->getConditionProcessList(); - $oDataset = ProcessPeer::doSelectRS($c); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($aRow['PRO_STATUS'] == 'ACTIVE' ) { - $aProcess = $oProcess->load($aRow['PRO_UID']); - $props = array (); - $props[] = $this->mkprop("displayname", $aProcess['PRO_TITLE'] ); - $props[] = $this->mkprop("creationdate", filectime($pathProcesses) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathProcesses) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathProcesses) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => "processes/". $aRow['PRO_UID'] , 'props' => $props); + + /** + * PROPFIND method handler + * + * @param array general parameter passing array + * @param array return array for file properties + * @return bool true on success + */ + function PROPFIND (&$options, &$files) + { + $paths = $this->paths; + // prepare property array + $files["files"] = array (); + + $pathClasses = PATH_DB . PATH_SEP . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + if (count( $paths ) == 0 && is_dir( $pathClasses )) { + $props = array (); + $props[] = $this->mkprop( "displayname", 'Classes' ); + $props[] = $this->mkprop( "creationdate", filectime( $pathClasses ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathClasses ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathClasses ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => 'classes','props' => $props + ); } - $oDataset->next(); - } - }//dir of processes - //content of any process ( the three major folders of Processes ) - $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP; - if ( count($paths) == 2 && $paths[0] == 'processes' && is_dir( $pathProcesses ) ) { - $props = array (); - $props[] = $this->mkprop("displayname", 'xmlforms' ); - $props[] = $this->mkprop("creationdate", filectime($pathXmlform) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathXmlform) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathXmlform) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/xmlforms' , 'props' => $props); + if (count( $paths ) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses )) { + // try to open directory + $handle = @opendir( $pathClasses ); + if ($handle) { + while ($filename = readdir( $handle )) { + $ext = array_pop( explode( '.', $filename ) ); + if ($filename != "." && $filename != ".." && ! is_dir( $pathClasses . $filename ) && $ext == 'php') { + $props = array (); + $props[] = $this->mkprop( "displayname", $filename ); + $props[] = $this->mkprop( "creationdate", filectime( $pathClasses . $filename ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathClasses . $filename ) ); + $props[] = $this->mkprop( "getetag", fileatime( $pathClasses . $filename ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathClasses . $filename ) ); + $props[] = $this->mkprop( "resourcetype", '' ); + $props[] = $this->mkprop( "getcontenttype", 'text/plain' ); + $props[] = $this->mkprop( "getcontentlength", filesize( $pathClasses . $filename ) ); + if (count( $paths ) == 1 || (count( $paths ) == 2 && $paths[1] == $filename)) + $files["files"][] = array ('path' => "classes/$filename",'props' => $props + ); + } + } + } - $props[] = $this->mkprop("displayname", 'mailTemplates' ); - $props[] = $this->mkprop("creationdate", filectime($pathProcesses) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathProcesses) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathProcesses) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/mailTemplates' , 'props' => $props); + } //path classes - $props[] = $this->mkprop("displayname", 'public_html' ); - $props[] = $this->mkprop("creationdate", filectime($pathProcesses) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathProcesses) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathProcesses) ); - $props[] = $this->mkprop("resourcetype", 'collection' ); - $props[] = $this->mkprop("getcontenttype", 'httpd/unix-directory' ); - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/public_html' , 'props' => $props); - }//content of any processes - //list available xmlforms - if ( count($paths) == 3 && $paths[0] == 'processes' && $paths[2] == 'xmlforms' && is_dir( $pathXmlform ) ) { - $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; - - $handle = @opendir($pathXmlform); - if ($handle) { - while ($filename = readdir($handle)) { - $ext = array_pop ( explode ( '.', $filename) ); - if ($filename != "." && $filename != ".." && !is_dir($pathXmlform.$filename) && ( $ext == 'xml' || $ext == 'html' ) ) { - $props = array (); - $props[] = $this->mkprop("displayname", $filename ); - $props[] = $this->mkprop("creationdate", filectime($pathXmlform.$filename) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathXmlform.$filename) ); - $props[] = $this->mkprop("getetag", fileatime($pathXmlform.$filename) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathXmlform.$filename) ); - $props[] = $this->mkprop("resourcetype", '' ); - $props[] = $this->mkprop("getcontenttype", 'text/plain' ); - $props[] = $this->mkprop("getcontentlength", filesize($pathXmlform.$filename) ); - //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/xmlforms/' . $filename , 'props' => $props); - } + $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP; + if (count( $paths ) == 0 && is_dir( $pathProcesses )) { + $props = array (); + $props[] = $this->mkprop( "displayname", 'Processes' ); + $props[] = $this->mkprop( "creationdate", filectime( $pathProcesses ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => 'processes','props' => $props + ); } - } - }//content of xmlforms - //list available mailTemplates - $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP; - if ( count($paths) == 3 && $paths[0] == 'processes' && $paths[2] == 'mailTemplates' && is_dir( $pathTemplates ) ) { - $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; - - $handle = @opendir($pathTemplates); - if ($handle) { - while ($filename = readdir($handle)) { - $ext = array_pop ( explode ( '.', $filename) ); - if ($filename != "." && $filename != ".." && !is_dir($pathTemplates.$filename) /* && ( $ext == 'xml' || $ext == 'html' ) */ ) { - $props = array (); - $props[] = $this->mkprop("displayname", $filename ); - $props[] = $this->mkprop("creationdate", filectime($pathTemplates.$filename) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathTemplates.$filename) ); - $props[] = $this->mkprop("getetag", fileatime($pathTemplates.$filename) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathTemplates.$filename) ); - $props[] = $this->mkprop("resourcetype", '' ); - $props[] = $this->mkprop("getcontenttype", 'text/plain' ); - $props[] = $this->mkprop("getcontentlength", filesize($pathTemplates.$filename) ); - //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/mailTemplates/' . $filename , 'props' => $props); - } - } - } - }//content of mailTemplates + //list all active processes + if (count( $paths ) == 1 && $paths[0] == 'processes' && is_dir( $pathProcesses )) { + // try to get the process directory list + G::LoadClass( 'processMap' ); + G::LoadClass( 'model/Process' ); + $oProcessMap = new processMap(); + $oProcess = new Process(); + $c = $oProcessMap->getConditionProcessList(); + $oDataset = ProcessPeer::doSelectRS( $c ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($aRow['PRO_STATUS'] == 'ACTIVE') { + $aProcess = $oProcess->load( $aRow['PRO_UID'] ); + $props = array (); + $props[] = $this->mkprop( "displayname", $aProcess['PRO_TITLE'] ); + $props[] = $this->mkprop( "creationdate", filectime( $pathProcesses ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => "processes/" . $aRow['PRO_UID'],'props' => $props + ); + } + $oDataset->next(); + } + } //dir of processes - //list available public_html files - $pathPublic = $pathProcesses . 'public' . PATH_SEP; - if ( count($paths) == 3 && $paths[0] == 'processes' && $paths[2] == 'public_html' && is_dir( $pathTemplates ) ) { - $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; - - $handle = @opendir($pathPublic); - if ($handle) { - while ($filename = readdir($handle)) { - $ext = array_pop ( explode ( '.', $filename) ); - if ($filename != "." && $filename != ".." && !is_dir($pathPublic.$filename) /* && ( $ext == 'xml' || $ext == 'html' ) */ ) { - $props = array (); - $props[] = $this->mkprop("displayname", $filename ); - $props[] = $this->mkprop("creationdate", filectime($pathPublic.$filename) ); - $props[] = $this->mkprop("getlastmodified", filemtime($pathPublic.$filename) ); - $props[] = $this->mkprop("getetag", fileatime($pathPublic.$filename) ); - $props[] = $this->mkprop("lastaccessed", filemtime($pathPublic.$filename) ); - $props[] = $this->mkprop("resourcetype", '' ); - $props[] = $this->mkprop("getcontenttype", 'text/plain' ); - $props[] = $this->mkprop("getcontentlength", filesize($pathPublic.$filename) ); - //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) - $files["files"][] = array ( 'path' => 'processes/' . $paths[1] . '/public_html/' . $filename , 'props' => $props); - } - } - } - }//content of public_html files - /* + //content of any process ( the three major folders of Processes ) + $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP; + if (count( $paths ) == 2 && $paths[0] == 'processes' && is_dir( $pathProcesses )) { + $props = array (); + $props[] = $this->mkprop( "displayname", 'xmlforms' ); + $props[] = $this->mkprop( "creationdate", filectime( $pathXmlform ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathXmlform ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathXmlform ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/xmlforms','props' => $props + ); + + $props[] = $this->mkprop( "displayname", 'mailTemplates' ); + $props[] = $this->mkprop( "creationdate", filectime( $pathProcesses ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/mailTemplates','props' => $props + ); + + $props[] = $this->mkprop( "displayname", 'public_html' ); + $props[] = $this->mkprop( "creationdate", filectime( $pathProcesses ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathProcesses ) ); + $props[] = $this->mkprop( "resourcetype", 'collection' ); + $props[] = $this->mkprop( "getcontenttype", 'httpd/unix-directory' ); + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/public_html','props' => $props + ); + } //content of any processes + + + //list available xmlforms + if (count( $paths ) == 3 && $paths[0] == 'processes' && $paths[2] == 'xmlforms' && is_dir( $pathXmlform )) { + $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; + + $handle = @opendir( $pathXmlform ); + if ($handle) { + while ($filename = readdir( $handle )) { + $ext = array_pop( explode( '.', $filename ) ); + if ($filename != "." && $filename != ".." && ! is_dir( $pathXmlform . $filename ) && ($ext == 'xml' || $ext == 'html')) { + $props = array (); + $props[] = $this->mkprop( "displayname", $filename ); + $props[] = $this->mkprop( "creationdate", filectime( $pathXmlform . $filename ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathXmlform . $filename ) ); + $props[] = $this->mkprop( "getetag", fileatime( $pathXmlform . $filename ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathXmlform . $filename ) ); + $props[] = $this->mkprop( "resourcetype", '' ); + $props[] = $this->mkprop( "getcontenttype", 'text/plain' ); + $props[] = $this->mkprop( "getcontentlength", filesize( $pathXmlform . $filename ) ); + //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/xmlforms/' . $filename,'props' => $props + ); + } + } + } + } //content of xmlforms + + + //list available mailTemplates + $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP; + if (count( $paths ) == 3 && $paths[0] == 'processes' && $paths[2] == 'mailTemplates' && is_dir( $pathTemplates )) { + $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; + + $handle = @opendir( $pathTemplates ); + if ($handle) { + while ($filename = readdir( $handle )) { + $ext = array_pop( explode( '.', $filename ) ); + if ($filename != "." && $filename != ".." && ! is_dir( $pathTemplates . $filename ) /* && ( $ext == 'xml' || $ext == 'html' ) */ ) { + $props = array (); + $props[] = $this->mkprop( "displayname", $filename ); + $props[] = $this->mkprop( "creationdate", filectime( $pathTemplates . $filename ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathTemplates . $filename ) ); + $props[] = $this->mkprop( "getetag", fileatime( $pathTemplates . $filename ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathTemplates . $filename ) ); + $props[] = $this->mkprop( "resourcetype", '' ); + $props[] = $this->mkprop( "getcontenttype", 'text/plain' ); + $props[] = $this->mkprop( "getcontentlength", filesize( $pathTemplates . $filename ) ); + //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/mailTemplates/' . $filename,'props' => $props + ); + } + } + } + } //content of mailTemplates + + + //list available public_html files + $pathPublic = $pathProcesses . 'public' . PATH_SEP; + if (count( $paths ) == 3 && $paths[0] == 'processes' && $paths[2] == 'public_html' && is_dir( $pathTemplates )) { + $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; + + $handle = @opendir( $pathPublic ); + if ($handle) { + while ($filename = readdir( $handle )) { + $ext = array_pop( explode( '.', $filename ) ); + if ($filename != "." && $filename != ".." && ! is_dir( $pathPublic . $filename ) /* && ( $ext == 'xml' || $ext == 'html' ) */ ) { + $props = array (); + $props[] = $this->mkprop( "displayname", $filename ); + $props[] = $this->mkprop( "creationdate", filectime( $pathPublic . $filename ) ); + $props[] = $this->mkprop( "getlastmodified", filemtime( $pathPublic . $filename ) ); + $props[] = $this->mkprop( "getetag", fileatime( $pathPublic . $filename ) ); + $props[] = $this->mkprop( "lastaccessed", filemtime( $pathPublic . $filename ) ); + $props[] = $this->mkprop( "resourcetype", '' ); + $props[] = $this->mkprop( "getcontenttype", 'text/plain' ); + $props[] = $this->mkprop( "getcontentlength", filesize( $pathPublic . $filename ) ); + //if ( count( $paths ) == 1 || ( count( $paths ) == 2 && $paths[1] == $filename ) ) + $files["files"][] = array ('path' => 'processes/' . $paths[1] . '/public_html/' . $filename,'props' => $props + ); + } + } + } + } //content of public_html files + + + /* if ( 1 ) { $props = array (); $props[] = $this->mkprop("displayname", print_r ($pathPublic, 1) ); @@ -257,741 +276,736 @@ class ProcessMakerWebDav extends HTTP_WebDAV_Server $files["files"][] = array ( 'path' => '/' , 'props' => $props); } */ - // ok, all done - return true; - } - - /** - * detect if a given program is found in the search PATH - * - * helper function used by _mimetype() to detect if the - * external 'file' utility is available - * - * @param string program name - * @param string optional search path, defaults to $PATH - * @return bool true if executable program found in path - */ - function _can_execute($name, $path = false) - { - // path defaults to PATH from environment if not set - if ($path === false) { - $path = getenv("PATH"); - } - - // check method depends on operating system - if (!strncmp(PHP_OS, "WIN", 3)) { - // on Windows an appropriate COM or EXE file needs to exist - $exts = array(".exe", ".com"); - $check_fn = "file_exists"; - } else { - // anywhere else we look for an executable file of that name - $exts = array(""); - $check_fn = "is_executable"; - } - - // now check the directories in the path for the program - foreach (explode(PATH_SEPARATOR, $path) as $dir) { - // skip invalid path entries - if (!file_exists($dir)) continue; - if (!is_dir($dir)) continue; - - // and now look for the file - foreach ($exts as $ext) { - if ($check_fn("$dir/$name".$ext)) return true; - } - } - - return false; - } - - /** - * try to detect the mime type of a file - * - * @param string file path - * @return string guessed mime type - */ - function _mimetype($fspath) - { - if (@is_dir($fspath)) { - // directories are easy - return "httpd/unix-directory"; - } else if (function_exists("mime_content_type")) { - // use mime magic extension if available - $mime_type = mime_content_type($fspath); - } else if ($this->_can_execute("file")) { - // it looks like we have a 'file' command, - // lets see it it does have mime support - $fp = popen("file -i '$fspath' 2>/dev/null", "r"); - $reply = fgets($fp); - pclose($fp); - - // popen will not return an error if the binary was not found - // and find may not have mime support using "-i" - // so we test the format of the returned string - - // the reply begins with the requested filename - if (!strncmp($reply, "$fspath: ", strlen($fspath)+2)) { - $reply = substr($reply, strlen($fspath)+2); - // followed by the mime type (maybe including options) - if (preg_match('/^[[:alnum:]_-]+/[[:alnum:]_-]+;?.*/', $reply, $matches)) { - $mime_type = $matches[0]; - } - } - } - - if (empty($mime_type)) { - // Fallback solution: try to guess the type by the file extension - // TODO: add more ... - // TODO: it has been suggested to delegate mimetype detection - // to apache but this has at least three issues: - // - works only with apache - // - needs file to be within the document tree - // - requires apache mod_magic - // TODO: can we use the registry for this on Windows? - // OTOH if the server is Windos the clients are likely to - // be Windows, too, and tend do ignore the Content-Type - // anyway (overriding it with information taken from - // the registry) - // TODO: have a seperate PEAR class for mimetype detection? - switch (strtolower(strrchr(basename($fspath), "."))) { - case ".html": - $mime_type = "text/html"; - break; - case ".gif": - $mime_type = "image/gif"; - break; - case ".jpg": - $mime_type = "image/jpeg"; - break; - default: - $mime_type = "application/octet-stream"; - break; - } - } - - return $mime_type; - } - - /** - * GET method handler - * - * @param array parameter passing array - * @return bool true on success - */ - function GET(&$options) { - $paths = $this->paths; - - $pathClasses = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; - if ( count($paths) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses ) ) { - $fsFile = $pathClasses. $paths[1]; - if ( count($paths) == 2 && file_exists( $fsFile ) ) { - $content = file_get_contents ($fsFile); - print $content; - header("Content-Type: " . mime_content_type($fsFile ) ); - header("Last-Modified: " . date("D, j M Y H:m:s ", file_mtime($fsFile )) . "GMT"); - header("Content-Length: ". filesize($fsFile)); + // ok, all done return true; - } } - $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP; - if ( count($paths) > 0 && $paths[0] == 'processes' && is_dir( $pathProcesses ) ) { - if ( count($paths) == 4 && $paths[2] == 'xmlforms' ) { - $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathXmlform. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $content = file_get_contents ($fsFile); - print $content; - header("Content-Type: " . mime_content_type($fsFile ) ); - header("Last-Modified: " . date("D, j M Y H:m:s ", file_mtime($fsFile )) . "GMT"); - header("Content-Length: ". filesize($fsFile)); - return true; + /** + * detect if a given program is found in the search PATH + * + * helper function used by _mimetype() to detect if the + * external 'file' utility is available + * + * @param string program name + * @param string optional search path, defaults to $PATH + * @return bool true if executable program found in path + */ + function _can_execute ($name, $path = false) + { + // path defaults to PATH from environment if not set + if ($path === false) { + $path = getenv( "PATH" ); } - } - - if ( count($paths) == 4 && $paths[2] == 'mailTemplates' ) { - $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathTemplates. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $content = file_get_contents ($fsFile); - print $content; - header("Content-Type: " . mime_content_type($fsFile ) ); - header("Last-Modified: " . date("D, j M Y H:m:s ", file_mtime($fsFile )) . "GMT"); - header("Content-Length: ". filesize($fsFile)); - return true; + + // check method depends on operating system + if (! strncmp( PHP_OS, "WIN", 3 )) { + // on Windows an appropriate COM or EXE file needs to exist + $exts = array (".exe",".com" + ); + $check_fn = "file_exists"; + } else { + // anywhere else we look for an executable file of that name + $exts = array ("" + ); + $check_fn = "is_executable"; } - } - - if ( count($paths) == 4 && $paths[2] == 'public_html' ) { - $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathPublic. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $content = file_get_contents ($fsFile); - print $content; - header("Content-Type: " . mime_content_type($fsFile ) ); - header("Last-Modified: " . date("D, j M Y H:m:s ", file_mtime($fsFile )) . "GMT"); - header("Content-Length: ". filesize($fsFile)); - return true; + + // now check the directories in the path for the program + foreach (explode( PATH_SEPARATOR, $path ) as $dir) { + // skip invalid path entries + if (! file_exists( $dir )) + continue; + if (! is_dir( $dir )) + continue; + + // and now look for the file + foreach ($exts as $ext) { + if ($check_fn( "$dir/$name" . $ext )) + return true; + } } - } - } - - print_r ( $paths ); - return true; - - if ( $options["path"] == '/' ) { - return $this->getRoot( $options ); - } - //print_r ($options); - - - // get absolute fs path to requested resource - $fspath = $this->base . $options["path"]; - - // sanity check - if (!file_exists($fspath)) return false; - - // is this a collection? - if (is_dir($fspath)) { - return $this->GetDir($fspath, $options); - } - - // detect resource type - $options['mimetype'] = $this->_mimetype($fspath); - - // detect modification time - // see rfc2518, section 13.7 - // some clients seem to treat this as a reverse rule - // requiering a Last-Modified header if the getlastmodified header was set - $options['mtime'] = filemtime($fspath); - - // detect resource size - $options['size'] = filesize($fspath); - - // no need to check result here, it is handled by the base class - $options['stream'] = fopen($fspath, "r"); - - return true; - } - - /** - * getRoot - * - * @param string &$options - * @return boolean false - */ - function getRoot (&$options) - { - $path = $this->_slashify($options["path"]); - // fixed width directory column format - $format = "%15s %-19s %-s\n"; - - echo "Index of " . htmlspecialchars($options['path']) . "\n"; - echo "

Index of " . htmlspecialchars($options['path']) . "

\n"; - - echo "
";
-    printf($format, "Size", "Last modified", "Filename");
-    echo "
"; - - $pathRoot = array ( 'xmlforms', 'public_html', 'dir1', 'dir2' ); - - foreach ( $pathRoot as $key => $val ) { - $fullpath = $fspath."/".$filename; - $name = htmlspecialchars($val); - printf($format, number_format(filesize($fullpath)), - strftime("%Y-%m-%d %H:%M:%S", filemtime($fullpath)), - "$name"); - } - - echo "
"; - echo "\n"; - - die; - - $handle = @opendir($fspath); - if (!$handle) { - return false; - } - - - while ($filename = readdir($handle)) { - if ($filename != "." && $filename != "..") { - $fullpath = $fspath."/".$filename; - $name = htmlspecialchars($filename); - printf($format, - number_format(filesize($fullpath)), - strftime("%Y-%m-%d %H:%M:%S", filemtime($fullpath)), - "$name"); - } - } - - echo "
"; - - closedir($handle); - - echo "\n"; - - exit; - } - - /** - * GET method handler for directories - * - * This is a very simple mod_index lookalike. - * See RFC 2518, Section 8.4 on GET/HEAD for collections - * - * @param string directory path - * @return void function has to handle HTTP response itself - */ - function GetDir($fspath, &$options) - { - $path = $this->_slashify($options["path"]); - if ($path != $options["path"]) { - header("Location: ".$this->base_uri.$path); - exit; - } - - // fixed width directory column format - $format = "%15s %-19s %-s\n"; - - $handle = @opendir($fspath); - if (!$handle) { return false; } - echo "Index of ".htmlspecialchars($options['path'])."\n"; - - echo "

Index of ".htmlspecialchars($options['path'])."

\n"; - - echo "
";
-    printf($format, "Size", "Last modified", "Filename");
-    echo "
"; + /** + * try to detect the mime type of a file + * + * @param string file path + * @return string guessed mime type + */ + function _mimetype ($fspath) + { + if (@is_dir( $fspath )) { + // directories are easy + return "httpd/unix-directory"; + } else if (function_exists( "mime_content_type" )) { + // use mime magic extension if available + $mime_type = mime_content_type( $fspath ); + } else if ($this->_can_execute( "file" )) { + // it looks like we have a 'file' command, + // lets see it it does have mime support + $fp = popen( "file -i '$fspath' 2>/dev/null", "r" ); + $reply = fgets( $fp ); + pclose( $fp ); - while ($filename = readdir($handle)) { - if ($filename != "." && $filename != "..") { - $fullpath = $fspath."/".$filename; - $name = htmlspecialchars($filename); - printf($format, - number_format(filesize($fullpath)), - strftime("%Y-%m-%d %H:%M:%S", filemtime($fullpath)), - "$name"); - } - } - - echo "
"; - - closedir($handle); - - echo "\n"; - - exit; - } - - /** - * PUT method handler - * - * @param array parameter passing array - * @return bool true on success - */ - function PUT(&$options) - { - $paths = $this->paths; - - $pathClasses = PATH_DB . PATH_SEP . 'classes' . PATH_SEP; - if ( count($paths) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses ) ) { - $fsFile = $pathClasses. $paths[1]; - if ( count($paths) == 2 && file_exists( $fsFile ) ) { - $fp = fopen($fsFile, "w"); - if ( is_resource($fp) && is_resource($options["stream"])) { - while( !feof($options["stream"])) { - fwrite($fp, fread($options["stream"], 4096)); - } - fclose($fp); - fclose($options["stream"]); - } - return "201 Created " . $fsFile; - } - } - - $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP ; - if ( count($paths) > 0 && $paths[0] == 'processes' && is_dir( $pathProcesses ) ) { - if ( $paths[2] == 'xmlforms' ) { - $pathTemplates = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathTemplates. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $fp = fopen($fsFile, "w"); - if ( is_resource($fp) && is_resource($options["stream"])) { - while( !feof($options["stream"])) { - fwrite($fp, fread($options["stream"], 4096)); - } - fclose($fp); - fclose($options["stream"]); - } - return "201 Created " . $fsFile; - } - } - - if ( $paths[2] == 'mailTemplates' ) { - $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathTemplates. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $fp = fopen($fsFile, "w"); - if ( is_resource($fp) && is_resource($options["stream"])) { - while( !feof($options["stream"])) { - fwrite($fp, fread($options["stream"], 4096)); - } - fclose($fp); - fclose($options["stream"]); - } - return "201 Created " . $fsFile; - } - } - - - if ( $paths[2] == 'public_html' ) { - $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; - $fsFile = $pathPublic. $paths[3]; - if ( count($paths) == 4 && file_exists( $fsFile ) ) { - $fp = fopen($fsFile, "w"); - if ( is_resource($fp) && is_resource($options["stream"])) { - while( !feof($options["stream"])) { - fwrite($fp, fread($options["stream"], 4096)); - } - fclose($fp); - fclose($options["stream"]); - } - return "201 Created " . $fsFile; - } - } - - } - - return "409 Conflict"; - - } - - /** - * MKCOL method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function MKCOL($options) - { - $path = $this->base .$options["path"]; - $parent = dirname($path); - $name = basename($path); - - if (!file_exists($parent)) { - return "409 Conflict"; - } - - if (!is_dir($parent)) { - return "403 Forbidden"; - } - - if ( file_exists($parent."/".$name) ) { - return "405 Method not allowed"; - } - - if (!empty($_SERVER["CONTENT_LENGTH"])) { // no body parsing yet - return "415 Unsupported media type"; - } - - $stat = mkdir ($parent."/".$name,0777); - if (!$stat) { - return "403 Forbidden"; - } - - return ("201 Created"); - } - - - /** - * DELETE method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function DELETE($options) - { - $path = $this->base . "/" .$options["path"]; - - if (!file_exists($path)) { - return "404 Not found"; - } - - if (is_dir($path)) { - $query = "DELETE FROM properties WHERE path LIKE '".$this->_slashify($options["path"])."%'"; - mysql_query($query); - System::rm("-rf $path"); - } else { - unlink ($path); - } - $query = "DELETE FROM properties WHERE path = '$options[path]'"; - mysql_query($query); - - return "204 No Content"; - } + // popen will not return an error if the binary was not found + // and find may not have mime support using "-i" + // so we test the format of the returned string - /** - * MOVE method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function MOVE($options) - { - return "423 Locked"; - //return $this->COPY($options, true); - } - - /** - * COPY method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function COPY($options, $del=false) - { - // TODO Property updates still broken (Litmus should detect this?) - - if (!empty($_SERVER["CONTENT_LENGTH"])) { // no body parsing yet - return "415 Unsupported media type"; - } - - // no copying to different WebDAV Servers yet - if (isset($options["dest_url"])) { - return "502 bad gateway"; - } - - $source = $this->base .$options["path"]; - if (!file_exists($source)) return "404 Not found"; - - $dest = $this->base . $options["dest"]; - - $new = !file_exists($dest); - $existing_col = false; - - if (!$new) { - if ($del && is_dir($dest)) { - if (!$options["overwrite"]) { - return "412 precondition failed"; - } - $dest .= basename($source); - if (file_exists($dest)) { - $options["dest"] .= basename($source); - } else { - $new = true; - $existing_col = true; - } - } - } - - if (!$new) { - if ($options["overwrite"]) { - $stat = $this->DELETE(array("path" => $options["dest"])); - if (($stat{0} != "2") && (substr($stat, 0, 3) != "404")) { - return $stat; - } - } else { - return "412 precondition failed"; - } - } - - if (is_dir($source) && ($options["depth"] != "infinity")) { - // RFC 2518 Section 9.2, last paragraph - return "400 Bad request"; - } - - if ($del) { - if (!rename($source, $dest)) { - return "500 Internal server error"; - } - $destpath = $this->_unslashify($options["dest"]); - if (is_dir($source)) { - $query = "UPDATE properties - SET path = REPLACE(path, '".$options["path"]."', '".$destpath."') - WHERE path LIKE '".$this->_slashify($options["path"])."%'"; - mysql_query($query); - } - - $query = "UPDATE properties - SET path = '".$destpath."' - WHERE path = '".$options["path"]."'"; - mysql_query($query); - } else { - if (is_dir($source)) { - $files = System::find($source); - $files = array_reverse($files); - } else { - $files = array($source); - } - - if (!is_array($files) || empty($files)) { - return "500 Internal server error"; - } - - foreach ($files as $file) { - if (is_dir($file)) { - $file = $this->_slashify($file); - } - - $destfile = str_replace($source, $dest, $file); - - if (is_dir($file)) { - if (!is_dir($destfile)) { - // TODO "mkdir -p" here? (only natively supported by PHP 5) - if (!mkdir($destfile)) { - return "409 Conflict"; - } - } else { - error_log("existing dir '$destfile'"); - } - } else { - if (!copy($file, $destfile)) { - return "409 Conflict"; + // the reply begins with the requested filename + if (! strncmp( $reply, "$fspath: ", strlen( $fspath ) + 2 )) { + $reply = substr( $reply, strlen( $fspath ) + 2 ); + // followed by the mime type (maybe including options) + if (preg_match( '/^[[:alnum:]_-]+/[[:alnum:]_-]+;?.*/', $reply, $matches )) { + $mime_type = $matches[0]; + } } } - } - $query = "INSERT INTO properties SELECT ... FROM properties WHERE path = '".$options['path']."'"; + if (empty( $mime_type )) { + // Fallback solution: try to guess the type by the file extension + // TODO: add more ... + // TODO: it has been suggested to delegate mimetype detection + // to apache but this has at least three issues: + // - works only with apache + // - needs file to be within the document tree + // - requires apache mod_magic + // TODO: can we use the registry for this on Windows? + // OTOH if the server is Windos the clients are likely to + // be Windows, too, and tend do ignore the Content-Type + // anyway (overriding it with information taken from + // the registry) + // TODO: have a seperate PEAR class for mimetype detection? + switch (strtolower( strrchr( basename( $fspath ), "." ) )) { + case ".html": + $mime_type = "text/html"; + break; + case ".gif": + $mime_type = "image/gif"; + break; + case ".jpg": + $mime_type = "image/jpeg"; + break; + default: + $mime_type = "application/octet-stream"; + break; + } + } + + return $mime_type; } - return ($new && !$existing_col) ? "201 Created" : "204 No Content"; - } + /** + * GET method handler + * + * @param array parameter passing array + * @return bool true on success + */ + function GET (&$options) + { + $paths = $this->paths; - /** - * PROPPATCH method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function PROPPATCH(&$options) - { - global $prefs, $tab; + $pathClasses = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + if (count( $paths ) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses )) { + $fsFile = $pathClasses . $paths[1]; + if (count( $paths ) == 2 && file_exists( $fsFile )) { + $content = file_get_contents( $fsFile ); + print $content; + header( "Content-Type: " . mime_content_type( $fsFile ) ); + header( "Last-Modified: " . date( "D, j M Y H:m:s ", file_mtime( $fsFile ) ) . "GMT" ); + header( "Content-Length: " . filesize( $fsFile ) ); + return true; + } + } - $msg = ""; - - $path = $options["path"]; - - $dir = dirname($path)."/"; - $base = basename($path); - - foreach($options["props"] as $key => $prop) { - if ($prop["ns"] == "DAV:") { - $options["props"][$key]['status'] = "403 Forbidden"; - } else { - if (isset($prop["val"])) { - $query = "REPLACE INTO properties SET path = '$options[path]', name = '$prop[name]', ns= '$prop[ns]', value = '$prop[val]'"; - error_log($query); - } else { - $query = "DELETE FROM properties WHERE path = '$options[path]' AND name = '$prop[name]' AND ns = '$prop[ns]'"; - } - mysql_query($query); - } - } - return ""; - } + $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP; + if (count( $paths ) > 0 && $paths[0] == 'processes' && is_dir( $pathProcesses )) { + if (count( $paths ) == 4 && $paths[2] == 'xmlforms') { + $pathXmlform = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathXmlform . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $content = file_get_contents( $fsFile ); + print $content; + header( "Content-Type: " . mime_content_type( $fsFile ) ); + header( "Last-Modified: " . date( "D, j M Y H:m:s ", file_mtime( $fsFile ) ) . "GMT" ); + header( "Content-Length: " . filesize( $fsFile ) ); + return true; + } + } + if (count( $paths ) == 4 && $paths[2] == 'mailTemplates') { + $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathTemplates . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $content = file_get_contents( $fsFile ); + print $content; + header( "Content-Type: " . mime_content_type( $fsFile ) ); + header( "Last-Modified: " . date( "D, j M Y H:m:s ", file_mtime( $fsFile ) ) . "GMT" ); + header( "Content-Length: " . filesize( $fsFile ) ); + return true; + } + } - /** - * LOCK method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function LOCK(&$options) - { - if (isset($options["update"])) { // Lock Update - $query = "UPDATE locks SET expires = ".(time()+300); - mysql_query($query); - - if (mysql_affected_rows()) { - $options["timeout"] = 300; // 5min hardcoded + if (count( $paths ) == 4 && $paths[2] == 'public_html') { + $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathPublic . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $content = file_get_contents( $fsFile ); + print $content; + header( "Content-Type: " . mime_content_type( $fsFile ) ); + header( "Last-Modified: " . date( "D, j M Y H:m:s ", file_mtime( $fsFile ) ) . "GMT" ); + header( "Content-Length: " . filesize( $fsFile ) ); + return true; + } + } + + } + + print_r( $paths ); return true; - } else { - return false; - } - } - - $options["timeout"] = time()+300; // 5min. hardcoded - $query = "INSERT INTO locks + if ($options["path"] == '/') { + return $this->getRoot( $options ); + } + //print_r ($options); + + + // get absolute fs path to requested resource + $fspath = $this->base . $options["path"]; + + // sanity check + if (! file_exists( $fspath )) + return false; + + // is this a collection? + if (is_dir( $fspath )) { + return $this->GetDir( $fspath, $options ); + } + + // detect resource type + $options['mimetype'] = $this->_mimetype( $fspath ); + + // detect modification time + // see rfc2518, section 13.7 + // some clients seem to treat this as a reverse rule + // requiering a Last-Modified header if the getlastmodified header was set + $options['mtime'] = filemtime( $fspath ); + + // detect resource size + $options['size'] = filesize( $fspath ); + + // no need to check result here, it is handled by the base class + $options['stream'] = fopen( $fspath, "r" ); + + return true; + } + + /** + * getRoot + * + * @param string &$options + * @return boolean false + */ + function getRoot (&$options) + { + $path = $this->_slashify( $options["path"] ); + // fixed width directory column format + $format = "%15s %-19s %-s\n"; + + echo "Index of " . htmlspecialchars( $options['path'] ) . "\n"; + echo "

Index of " . htmlspecialchars( $options['path'] ) . "

\n"; + + echo "
";
+        printf( $format, "Size", "Last modified", "Filename" );
+        echo "
"; + + $pathRoot = array ('xmlforms','public_html','dir1','dir2' + ); + + foreach ($pathRoot as $key => $val) { + $fullpath = $fspath . "/" . $filename; + $name = htmlspecialchars( $val ); + printf( $format, number_format( filesize( $fullpath ) ), strftime( "%Y-%m-%d %H:%M:%S", filemtime( $fullpath ) ), "$name" ); + } + + echo "
"; + echo "\n"; + + die(); + + $handle = @opendir( $fspath ); + if (! $handle) { + return false; + } + + while ($filename = readdir( $handle )) { + if ($filename != "." && $filename != "..") { + $fullpath = $fspath . "/" . $filename; + $name = htmlspecialchars( $filename ); + printf( $format, number_format( filesize( $fullpath ) ), strftime( "%Y-%m-%d %H:%M:%S", filemtime( $fullpath ) ), "$name" ); + } + } + + echo "
"; + + closedir( $handle ); + + echo "\n"; + + exit(); + } + + /** + * GET method handler for directories + * + * This is a very simple mod_index lookalike. + * See RFC 2518, Section 8.4 on GET/HEAD for collections + * + * @param string directory path + * @return void function has to handle HTTP response itself + */ + function GetDir ($fspath, &$options) + { + $path = $this->_slashify( $options["path"] ); + if ($path != $options["path"]) { + header( "Location: " . $this->base_uri . $path ); + exit(); + } + + // fixed width directory column format + $format = "%15s %-19s %-s\n"; + + $handle = @opendir( $fspath ); + if (! $handle) { + return false; + } + + echo "Index of " . htmlspecialchars( $options['path'] ) . "\n"; + + echo "

Index of " . htmlspecialchars( $options['path'] ) . "

\n"; + + echo "
";
+        printf( $format, "Size", "Last modified", "Filename" );
+        echo "
"; + + while ($filename = readdir( $handle )) { + if ($filename != "." && $filename != "..") { + $fullpath = $fspath . "/" . $filename; + $name = htmlspecialchars( $filename ); + printf( $format, number_format( filesize( $fullpath ) ), strftime( "%Y-%m-%d %H:%M:%S", filemtime( $fullpath ) ), "$name" ); + } + } + + echo "
"; + + closedir( $handle ); + + echo "\n"; + + exit(); + } + + /** + * PUT method handler + * + * @param array parameter passing array + * @return bool true on success + */ + function PUT (&$options) + { + $paths = $this->paths; + + $pathClasses = PATH_DB . PATH_SEP . 'classes' . PATH_SEP; + if (count( $paths ) > 0 && $paths[0] == 'classes' && is_dir( $pathClasses )) { + $fsFile = $pathClasses . $paths[1]; + if (count( $paths ) == 2 && file_exists( $fsFile )) { + $fp = fopen( $fsFile, "w" ); + if (is_resource( $fp ) && is_resource( $options["stream"] )) { + while (! feof( $options["stream"] )) { + fwrite( $fp, fread( $options["stream"], 4096 ) ); + } + fclose( $fp ); + fclose( $options["stream"] ); + } + return "201 Created " . $fsFile; + } + } + + $pathProcesses = PATH_DB . SYS_SYS . PATH_SEP; + if (count( $paths ) > 0 && $paths[0] == 'processes' && is_dir( $pathProcesses )) { + if ($paths[2] == 'xmlforms') { + $pathTemplates = $pathProcesses . 'xmlForms' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathTemplates . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $fp = fopen( $fsFile, "w" ); + if (is_resource( $fp ) && is_resource( $options["stream"] )) { + while (! feof( $options["stream"] )) { + fwrite( $fp, fread( $options["stream"], 4096 ) ); + } + fclose( $fp ); + fclose( $options["stream"] ); + } + return "201 Created " . $fsFile; + } + } + + if ($paths[2] == 'mailTemplates') { + $pathTemplates = $pathProcesses . 'mailTemplates' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathTemplates . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $fp = fopen( $fsFile, "w" ); + if (is_resource( $fp ) && is_resource( $options["stream"] )) { + while (! feof( $options["stream"] )) { + fwrite( $fp, fread( $options["stream"], 4096 ) ); + } + fclose( $fp ); + fclose( $options["stream"] ); + } + return "201 Created " . $fsFile; + } + } + + if ($paths[2] == 'public_html') { + $pathPublic = $pathProcesses . 'public' . PATH_SEP . $paths[1] . PATH_SEP; + $fsFile = $pathPublic . $paths[3]; + if (count( $paths ) == 4 && file_exists( $fsFile )) { + $fp = fopen( $fsFile, "w" ); + if (is_resource( $fp ) && is_resource( $options["stream"] )) { + while (! feof( $options["stream"] )) { + fwrite( $fp, fread( $options["stream"], 4096 ) ); + } + fclose( $fp ); + fclose( $options["stream"] ); + } + return "201 Created " . $fsFile; + } + } + + } + + return "409 Conflict"; + + } + + /** + * MKCOL method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function MKCOL ($options) + { + $path = $this->base . $options["path"]; + $parent = dirname( $path ); + $name = basename( $path ); + + if (! file_exists( $parent )) { + return "409 Conflict"; + } + + if (! is_dir( $parent )) { + return "403 Forbidden"; + } + + if (file_exists( $parent . "/" . $name )) { + return "405 Method not allowed"; + } + + if (! empty( $_SERVER["CONTENT_LENGTH"] )) { // no body parsing yet + return "415 Unsupported media type"; + } + + $stat = mkdir( $parent . "/" . $name, 0777 ); + if (! $stat) { + return "403 Forbidden"; + } + + return ("201 Created"); + } + + /** + * DELETE method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function DELETE ($options) + { + $path = $this->base . "/" . $options["path"]; + + if (! file_exists( $path )) { + return "404 Not found"; + } + + if (is_dir( $path )) { + $query = "DELETE FROM properties WHERE path LIKE '" . $this->_slashify( $options["path"] ) . "%'"; + mysql_query( $query ); + System::rm( "-rf $path" ); + } else { + unlink( $path ); + } + $query = "DELETE FROM properties WHERE path = '$options[path]'"; + mysql_query( $query ); + + return "204 No Content"; + } + + /** + * MOVE method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function MOVE ($options) + { + return "423 Locked"; + //return $this->COPY($options, true); + } + + /** + * COPY method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function COPY ($options, $del = false) + { + // TODO Property updates still broken (Litmus should detect this?) + + + if (! empty( $_SERVER["CONTENT_LENGTH"] )) { // no body parsing yet + return "415 Unsupported media type"; + } + + // no copying to different WebDAV Servers yet + if (isset( $options["dest_url"] )) { + return "502 bad gateway"; + } + + $source = $this->base . $options["path"]; + if (! file_exists( $source )) + return "404 Not found"; + + $dest = $this->base . $options["dest"]; + + $new = ! file_exists( $dest ); + $existing_col = false; + + if (! $new) { + if ($del && is_dir( $dest )) { + if (! $options["overwrite"]) { + return "412 precondition failed"; + } + $dest .= basename( $source ); + if (file_exists( $dest )) { + $options["dest"] .= basename( $source ); + } else { + $new = true; + $existing_col = true; + } + } + } + + if (! $new) { + if ($options["overwrite"]) { + $stat = $this->DELETE( array ("path" => $options["dest"] + ) ); + if (($stat{0} != "2") && (substr( $stat, 0, 3 ) != "404")) { + return $stat; + } + } else { + return "412 precondition failed"; + } + } + + if (is_dir( $source ) && ($options["depth"] != "infinity")) { + // RFC 2518 Section 9.2, last paragraph + return "400 Bad request"; + } + + if ($del) { + if (! rename( $source, $dest )) { + return "500 Internal server error"; + } + $destpath = $this->_unslashify( $options["dest"] ); + if (is_dir( $source )) { + $query = "UPDATE properties + SET path = REPLACE(path, '" . $options["path"] . "', '" . $destpath . "') + WHERE path LIKE '" . $this->_slashify( $options["path"] ) . "%'"; + mysql_query( $query ); + } + + $query = "UPDATE properties + SET path = '" . $destpath . "' + WHERE path = '" . $options["path"] . "'"; + mysql_query( $query ); + } else { + if (is_dir( $source )) { + $files = System::find( $source ); + $files = array_reverse( $files ); + } else { + $files = array ($source + ); + } + + if (! is_array( $files ) || empty( $files )) { + return "500 Internal server error"; + } + + foreach ($files as $file) { + if (is_dir( $file )) { + $file = $this->_slashify( $file ); + } + + $destfile = str_replace( $source, $dest, $file ); + + if (is_dir( $file )) { + if (! is_dir( $destfile )) { + // TODO "mkdir -p" here? (only natively supported by PHP 5) + if (! mkdir( $destfile )) { + return "409 Conflict"; + } + } else { + error_log( "existing dir '$destfile'" ); + } + } else { + if (! copy( $file, $destfile )) { + return "409 Conflict"; + } + } + } + + $query = "INSERT INTO properties SELECT ... FROM properties WHERE path = '" . $options['path'] . "'"; + } + + return ($new && ! $existing_col) ? "201 Created" : "204 No Content"; + } + + /** + * PROPPATCH method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function PROPPATCH (&$options) + { + global $prefs, $tab; + + $msg = ""; + + $path = $options["path"]; + + $dir = dirname( $path ) . "/"; + $base = basename( $path ); + + foreach ($options["props"] as $key => $prop) { + if ($prop["ns"] == "DAV:") { + $options["props"][$key]['status'] = "403 Forbidden"; + } else { + if (isset( $prop["val"] )) { + $query = "REPLACE INTO properties SET path = '$options[path]', name = '$prop[name]', ns= '$prop[ns]', value = '$prop[val]'"; + error_log( $query ); + } else { + $query = "DELETE FROM properties WHERE path = '$options[path]' AND name = '$prop[name]' AND ns = '$prop[ns]'"; + } + mysql_query( $query ); + } + } + return ""; + } + + /** + * LOCK method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function LOCK (&$options) + { + if (isset( $options["update"] )) { // Lock Update + $query = "UPDATE locks SET expires = " . (time() + 300); + mysql_query( $query ); + + if (mysql_affected_rows()) { + $options["timeout"] = 300; // 5min hardcoded + return true; + } else { + return false; + } + } + + $options["timeout"] = time() + 300; // 5min. hardcoded + + + $query = "INSERT INTO locks SET token = '$options[locktoken]' , path = '$options[path]' , owner = '$options[owner]' , expires = '$options[timeout]' - , exclusivelock = " .($options['scope'] === "exclusive" ? "1" : "0") ; - mysql_query($query); + , exclusivelock = " . ($options['scope'] === "exclusive" ? "1" : "0"); + mysql_query( $query ); - return mysql_affected_rows() ? "200 OK" : "409 Conflict"; - } - - /** - * UNLOCK method handler - * - * @param array general parameter passing array - * @return bool true on success - */ - function UNLOCK(&$options) - { - $query = "DELETE FROM locks - WHERE path = '$options[path]' - AND token = '$options[token]'"; - mysql_query($query); - - return mysql_affected_rows() ? "204 No Content" : "409 Conflict"; - } - - /** - * checkLock() helper - * - * @param string resource path to check for locks - * @return bool true on success - */ - function checkLock($path) - { - $result = false; - - $query = "SELECT owner, token, expires, exclusivelock - FROM locks - WHERE path = '$path' "; - $res = mysql_query($query); - - if ($res) { - $row = mysql_fetch_array($res); - mysql_free_result($res); - - if ($row) { - $result = array( "type" => "write", - "scope" => $row["exclusivelock"] ? "exclusive" : "shared", - "depth" => 0, - "owner" => $row['owner'], - "token" => $row['token'], - "expires" => $row['expires'] - ); - } + return mysql_affected_rows() ? "200 OK" : "409 Conflict"; } - return $result; - } + /** + * UNLOCK method handler + * + * @param array general parameter passing array + * @return bool true on success + */ + function UNLOCK (&$options) + { + $query = "DELETE FROM locks + WHERE path = '$options[path]' + AND token = '$options[token]'"; + mysql_query( $query ); + return mysql_affected_rows() ? "204 No Content" : "409 Conflict"; + } + + /** + * checkLock() helper + * + * @param string resource path to check for locks + * @return bool true on success + */ + function checkLock ($path) + { + $result = false; + + $query = "SELECT owner, token, expires, exclusivelock + FROM locks + WHERE path = '$path' "; + $res = mysql_query( $query ); + + if ($res) { + $row = mysql_fetch_array( $res ); + mysql_free_result( $res ); + + if ($row) { + $result = array ("type" => "write","scope" => $row["exclusivelock"] ? "exclusive" : "shared","depth" => 0,"owner" => $row['owner'],"token" => $row['token'],"expires" => $row['expires'] + ); + } + } + + return $result; + } + + /** + * create database tables for property and lock storage + * + * @param void + * @return bool true on success + */ + function create_database () + { + // TODO + return false; + } - /** - * create database tables for property and lock storage - * - * @param void - * @return bool true on success - */ - function create_database() - { - // TODO - return false; - } - } ?> diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 461a8808d..8237b19f6 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +//It works with the table CONFIGURATION in a WF dataBase +require_once ("classes/model/Application.php"); +require_once ("classes/model/AppCacheView.php"); +require_once ("classes/model/AppDelegation.php"); +require_once ("classes/model/AppDocument.php"); +require_once ("classes/model/AppDelay.php"); +require_once ("classes/model/AppThread.php"); +require_once ("classes/model/Department.php"); +require_once ("classes/model/Dynaform.php"); +require_once ("classes/model/Groupwf.php"); +require_once ("classes/model/InputDocument.php"); +require_once ("classes/model/Language.php"); +require_once ("classes/model/OutputDocument.php"); +require_once ("classes/model/Process.php"); +require_once ("classes/model/ReportTable.php"); +require_once ("classes/model/ReportVar.php"); +require_once ("classes/model/Route.php"); +require_once ("classes/model/Step.php"); +require_once ("classes/model/StepTrigger.php"); +require_once ("classes/model/Task.php"); +require_once ("classes/model/TaskUser.php"); +require_once ("classes/model/Triggers.php"); +require_once ("classes/model/Users.php"); +require_once ("classes/model/Session.php"); +require_once ("classes/model/Content.php"); +G::LoadClass( "ArrayPeer" ); +G::LoadClass( "BasePeer" ); +G::LoadClass( 'case' ); +G::LoadClass( 'derivation' ); +G::LoadClass( 'groups' ); +G::LoadClass( 'sessions' ); +G::LoadClass( 'processes' ); +G::LoadClass( 'processMap' ); +G::LoadClass( 'pmScript' ); +G::LoadClass( 'spool' ); +G::LoadClass( 'tasks' ); +G::LoadClass( 'wsResponse' ); - //It works with the table CONFIGURATION in a WF dataBase - require_once ("classes/model/Application.php"); - require_once ("classes/model/AppCacheView.php"); - require_once ("classes/model/AppDelegation.php"); - require_once ("classes/model/AppDocument.php"); - require_once ("classes/model/AppDelay.php"); - require_once ("classes/model/AppThread.php"); - require_once ("classes/model/Department.php"); - require_once ("classes/model/Dynaform.php"); - require_once ("classes/model/Groupwf.php"); - require_once ("classes/model/InputDocument.php"); - require_once ("classes/model/Language.php"); - require_once ("classes/model/OutputDocument.php"); - require_once ("classes/model/Process.php"); - require_once ("classes/model/ReportTable.php"); - require_once ("classes/model/ReportVar.php"); - require_once ("classes/model/Route.php"); - require_once ("classes/model/Step.php"); - require_once ("classes/model/StepTrigger.php"); - require_once ("classes/model/Task.php"); - require_once ("classes/model/TaskUser.php"); - require_once ("classes/model/Triggers.php"); - require_once ("classes/model/Users.php"); - require_once ("classes/model/Session.php"); - require_once ("classes/model/Content.php"); - G::LoadClass("ArrayPeer"); - G::LoadClass("BasePeer"); - G::LoadClass('case'); - G::LoadClass('derivation'); - G::LoadClass('groups'); - G::LoadClass('sessions'); - G::LoadClass('processes'); - G::LoadClass('processMap'); - G::LoadClass('pmScript'); - G::LoadClass('spool'); - G::LoadClass('tasks'); - G::LoadClass('wsResponse'); - - /** +/** * Copyright (C) 2009 COLOSA * License: LGPL, see LICENSE * Last Modify: 26.06.2008 10:05:00 * Last modify by: Erik Amaru Ortiz * Last Modify comment(26.06.2008): the session expired verification was removed from here to soap class + * * @package workflow.engine.classes */ @@ -76,84 +77,83 @@ class wsBase public $stored_system_variables; //boolean public $wsSessionId; //web service session id, if the wsbase function is used from a WS request - public function __construct($params=null) + + public function __construct ($params = null) { $this->stored_system_variables = false; if ($params != null) { - $this->stored_system_variables = ( - isset($params->stored_system_variables)? $params->stored_system_variables : false - ); + $this->stored_system_variables = (isset( $params->stored_system_variables ) ? $params->stored_system_variables : false); - $this->wsSessionId = isset($params->wsSessionId)? $params->wsSessionId: ''; + $this->wsSessionId = isset( $params->wsSessionId ) ? $params->wsSessionId : ''; } } /** * function to start a web services session in ProcessMaker + * * @param string $userid * @param string $password * @return $wsResponse will return an object */ - public function login($userid, $password) + public function login ($userid, $password) { global $RBAC; try { - $uid = $RBAC->VerifyLogin($userid , $password); + $uid = $RBAC->VerifyLogin( $userid, $password ); switch ($uid) { case '': - case -1: //The user doesn't exist - $wsResponse = new wsResponse(3, G::loadTranslation('ID_USER_NOT_REGISTERED')); + case - 1: //The user doesn't exist + $wsResponse = new wsResponse( 3, G::loadTranslation( 'ID_USER_NOT_REGISTERED' ) ); break; - case -2: //The password is incorrect - $wsResponse = new wsResponse(4, G::loadTranslation('ID_WRONG_PASS')); + case - 2: //The password is incorrect + $wsResponse = new wsResponse( 4, G::loadTranslation( 'ID_WRONG_PASS' ) ); break; - case -3: //The user is inactive - $wsResponse = new wsResponse(5, G::loadTranslation('ID_USER_INACTIVE')); - case -4: //The Due date is finished - $wsResponse = new wsResponse(5, G::loadTranslation('ID_USER_INACTIVE')); + case - 3: //The user is inactive + $wsResponse = new wsResponse( 5, G::loadTranslation( 'ID_USER_INACTIVE' ) ); + break; + case - 4: //The Due date is finished + $wsResponse = new wsResponse( 5, G::loadTranslation( 'ID_USER_INACTIVE' ) ); break; } if ($uid < 0 || $uid == '') { - throw (new Exception(serialize($wsResponse))); + throw (new Exception( serialize( $wsResponse ) )); } //check access to PM - $RBAC->loadUserRolePermission($RBAC->sSystem, $uid); - $res = $RBAC->userCanAccess("PM_LOGIN"); + $RBAC->loadUserRolePermission( $RBAC->sSystem, $uid ); + $res = $RBAC->userCanAccess( "PM_LOGIN" ); if ($res != 1) { //if ($res == -2) // $wsResponse = new wsResponse(1, G::loadTranslation('ID_USER_HAVENT_RIGHTS_SYSTEM')); //else - $wsResponse = new wsResponse (2, G::loadTranslation('ID_USER_HAVENT_RIGHTS_SYSTEM')); - throw (new Exception(serialize($wsResponse))); + $wsResponse = new wsResponse( 2, G::loadTranslation( 'ID_USER_HAVENT_RIGHTS_SYSTEM' ) ); + throw (new Exception( serialize( $wsResponse ) )); } - $sessionId = G::generateUniqueID(); - $wsResponse = new wsResponse('0', $sessionId); + $sessionId = G::generateUniqueID(); + $wsResponse = new wsResponse( '0', $sessionId ); $session = new Session(); - $session->setSesUid($sessionId); - $session->setSesStatus('ACTIVE'); - $session->setUsrUid($uid); - $session->setSesRemoteIp($_SERVER['REMOTE_ADDR']); - $session->setSesInitDate(date ('Y-m-d H:i:s')); - $session->setSesDueDate(date( - 'Y-m-d H:i:s', - mktime(date('H'), date('i') + 15, date('s'), date('m'), date('d'), date('Y')) - )); - $session->setSesEndDate(''); + $session->setSesUid( $sessionId ); + $session->setSesStatus( 'ACTIVE' ); + $session->setUsrUid( $uid ); + $session->setSesRemoteIp( $_SERVER['REMOTE_ADDR'] ); + $session->setSesInitDate( date( 'Y-m-d H:i:s' ) ); + $session->setSesDueDate( date( 'Y-m-d H:i:s', mktime( date( 'H' ), date( 'i' ) + 15, date( 's' ), date( 'm' ), date( 'd' ), date( 'Y' ) ) ) ); + $session->setSesEndDate( '' ); $session->Save(); //save the session in DataBase + return $wsResponse; } catch (Exception $e) { - $wsResponse = unserialize($e->getMessage()); + $wsResponse = unserialize( $e->getMessage() ); return $wsResponse; } @@ -161,30 +161,33 @@ class wsBase /** * get all groups + * * @param none * @return $result will return an object */ - public function processList() + public function processList () { try { - $result = array(); - $oCriteria = new Criteria('workflow'); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); //$oCriteria->add(ProcessPeer::PRO_STATUS , 'ACTIVE'); - $oCriteria->add(ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL); - $oDataset = ProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $oProcess = new Process(); - $arrayProcess = $oProcess->Load($aRow['PRO_UID']); - $result[] = array('guid' => $aRow['PRO_UID'], 'name' => $arrayProcess['PRO_TITLE']); + $arrayProcess = $oProcess->Load( $aRow['PRO_UID'] ); + $result[] = array ('guid' => $aRow['PRO_UID'],'name' => $arrayProcess['PRO_TITLE'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -192,60 +195,65 @@ class wsBase /** * get all roles, to see all roles + * * @param none * @return $result will return an object */ - public function roleList() + public function roleList () { try { - $result = array(); + $result = array (); - $RBAC =& RBAC::getSingleton(); + $RBAC = & RBAC::getSingleton(); $RBAC->initRBAC(); $oCriteria = $RBAC->listAllRoles(); - $oDataset = GulliverBasePeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset = GulliverBasePeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array('guid' => $aRow['ROL_UID'], 'name' => $aRow['ROL_CODE']); + $result[] = array ('guid' => $aRow['ROL_UID'],'name' => $aRow['ROL_CODE'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } } - /** * get all groups + * * @param none * @return $result will return an object */ - public function groupList() + public function groupList () { try { - $result = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $oGroupwf = new Groupwf(); - $arrayGroupwf = $oGroupwf->Load($aRow['GRP_UID']); - $result[] = array ('guid' => $aRow['GRP_UID'], 'name' => $arrayGroupwf['GRP_TITLE']); + $arrayGroupwf = $oGroupwf->Load( $aRow['GRP_UID'] ); + $result[] = array ('guid' => $aRow['GRP_UID'],'name' => $arrayGroupwf['GRP_TITLE'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -253,22 +261,23 @@ class wsBase /** * get all department + * * @param none * @return $result will return an object */ - public function departmentList() + public function departmentList () { try { - $result = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DepartmentPeer::DEP_STATUS , 'ACTIVE'); - $oDataset = DepartmentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DepartmentPeer::DEP_STATUS, 'ACTIVE' ); + $oDataset = DepartmentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $oDepartment = new Department(); - $aDepartment = $oDepartment->Load( $aRow['DEP_UID']); + $aDepartment = $oDepartment->Load( $aRow['DEP_UID'] ); $node['guid'] = $aRow['DEP_UID']; $node['name'] = $aDepartment['DEPO_TITLE']; $node['parentUID'] = $aDepartment['DEP_PARENT']; @@ -277,9 +286,9 @@ class wsBase //get the users from this department $c = new Criteria(); $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $c->add(UsersPeer::DEP_UID, $aRow['DEP_UID']); - $rs = UsersPeer::doSelectRS($c); + $c->addSelectColumn( 'COUNT(*)' ); + $c->add( UsersPeer::DEP_UID, $aRow['DEP_UID'] ); + $rs = UsersPeer::doSelectRS( $c ); $rs->next(); $row = $rs->getRow(); $count = $row[0]; @@ -291,7 +300,8 @@ class wsBase return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -299,35 +309,40 @@ class wsBase /** * Get case list + * * @param string $userId * @return $result will return an object */ - public function caseList($userId) + public function caseList ($userId) { try { - $result = array(); - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(ApplicationPeer::APP_UID); - $oCriteria->addSelectColumn(ApplicationPeer::APP_NUMBER); - $oCriteria->addSelectColumn(ApplicationPeer::APP_STATUS); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addAsColumn('CASE_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAlias("C1", 'CONTENT'); - $caseTitleConds = array(); - $caseTitleConds[] = array(ApplicationPeer::APP_UID, 'C1.CON_ID'); - $caseTitleConds[] = array('C1.CON_CATEGORY', $del . 'APP_TITLE' . $del); - $caseTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($caseTitleConds, Criteria::LEFT_JOIN); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( ApplicationPeer::APP_UID ); + $oCriteria->addSelectColumn( ApplicationPeer::APP_NUMBER ); + $oCriteria->addSelectColumn( ApplicationPeer::APP_STATUS ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addAsColumn( 'CASE_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $caseTitleConds = array (); + $caseTitleConds[] = array (ApplicationPeer::APP_UID,'C1.CON_ID' + ); + $caseTitleConds[] = array ('C1.CON_CATEGORY',$del . 'APP_TITLE' . $del + ); + $caseTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $caseTitleConds, Criteria::LEFT_JOIN ); - $oCriteria->addJoin(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::LEFT_JOIN); + $oCriteria->addJoin( ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::LEFT_JOIN ); - $oCriteria->add(ApplicationPeer::APP_STATUS , array('TO_DO','DRAFT'), Criteria::IN); - $oCriteria->add(AppDelegationPeer::USR_UID, $userId); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $oCriteria->addDescendingOrderByColumn(ApplicationPeer::APP_NUMBER); - $oDataset = ApplicationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->add( ApplicationPeer::APP_STATUS, array ('TO_DO','DRAFT' + ), Criteria::IN ); + $oCriteria->add( AppDelegationPeer::USR_UID, $userId ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); + $oCriteria->addDescendingOrderByColumn( ApplicationPeer::APP_NUMBER ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -339,22 +354,14 @@ class wsBase 'delIndex' => $aRow['DEL_INDEX'] ); */ - $result[] = array( - 'guid' => $aRow['APP_UID'], - 'name' => $aRow['APP_NUMBER'], - 'status' => $aRow['APP_STATUS'], - 'delIndex' => $aRow['DEL_INDEX'] + $result[] = array ('guid' => $aRow['APP_UID'],'name' => $aRow['APP_NUMBER'],'status' => $aRow['APP_STATUS'],'delIndex' => $aRow['DEL_INDEX'] ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array( - 'guid' => $e->getMessage(), - 'name' => $e->getMessage(), - 'status' => $e->getMessage(), - 'status' => $e->getMessage() + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage(),'status' => $e->getMessage(),'status' => $e->getMessage() ); return $result; @@ -363,36 +370,30 @@ class wsBase /** * Get unassigned case list + * * @param string $userId * @return $result will return an object */ - public function unassignedCaseList($userId) + public function unassignedCaseList ($userId) { try { - $result = array(); + $result = array (); $oAppCache = new AppCacheView(); - $Criteria = $oAppCache->getUnassignedListCriteria($userId); - $oDataset = AppCacheViewPeer::doSelectRS($Criteria); - $oDataset -> setFetchmode(ResultSet::FETCHMODE_ASSOC); + $Criteria = $oAppCache->getUnassignedListCriteria( $userId ); + $oDataset = AppCacheViewPeer::doSelectRS( $Criteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array( - 'guid' => $aRow['APP_UID'], - 'name' => $aRow['APP_NUMBER'], - 'delIndex' => $aRow['DEL_INDEX'] + $result[] = array ('guid' => $aRow['APP_UID'],'name' => $aRow['APP_NUMBER'],'delIndex' => $aRow['DEL_INDEX'] ); - $oDataset-> next(); + $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array( - 'guid' => $e->getMessage(), - 'name' => $e->getMessage(), - 'status' => $e->getMessage(), - 'status' => $e->getMessage() + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage(),'status' => $e->getMessage(),'status' => $e->getMessage() ); return $result; @@ -401,29 +402,32 @@ class wsBase /** * get all groups + * * @param none * @return $result will return an object */ - public function userList() + public function userList () { try { - $result = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { //$oProcess = new User(); //$arrayProcess = $oUser->Load($aRow['PRO_UID']); - $result[] = array('guid' => $aRow['USR_UID'], 'name' => $aRow['USR_USERNAME']); + $result[] = array ('guid' => $aRow['USR_UID'],'name' => $aRow['USR_USERNAME'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -431,36 +435,37 @@ class wsBase /** * get list of all the available triggers in a workspace + * * @param none * @return $result will return an object */ - public function triggerList() + public function triggerList () { try { $del = DBAdapter::getStringDelimiter(); - $result = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(TriggersPeer::TRI_UID); - $oCriteria->addSelectColumn(TriggersPeer::PRO_UID); - $oCriteria->addAsColumn('TITLE', 'C1.CON_VALUE'); - $oCriteria->addAlias("C1", 'CONTENT'); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( TriggersPeer::TRI_UID ); + $oCriteria->addSelectColumn( TriggersPeer::PRO_UID ); + $oCriteria->addAsColumn( 'TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); - $caseTitleConds = array(); - $caseTitleConds[] = array(TriggersPeer::TRI_UID , 'C1.CON_ID'); - $caseTitleConds[] = array('C1.CON_CATEGORY', $del . 'TRI_TITLE' . $del); - $caseTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria ->addJoinMC($caseTitleConds , Criteria::LEFT_JOIN); + $caseTitleConds = array (); + $caseTitleConds[] = array (TriggersPeer::TRI_UID,'C1.CON_ID' + ); + $caseTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TRI_TITLE' . $del + ); + $caseTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $caseTitleConds, Criteria::LEFT_JOIN ); //$oCriteria->add(TriggersPeer::USR_STATUS, 'ACTIVE'); - $oDataset= TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array( - 'guid' => $aRow['TRI_UID'], - 'name' => $aRow['TITLE'], - 'processId' => $aRow['PRO_UID'] + $result[] = array ('guid' => $aRow['TRI_UID'],'name' => $aRow['TITLE'],'processId' => $aRow['PRO_UID'] ); $oDataset->next(); @@ -468,7 +473,8 @@ class wsBase return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -476,41 +482,43 @@ class wsBase /** * get list of the uploaded documents for a given case + * * @param string $sApplicationUID * @param string $sUserUID * @return $result */ - public function inputDocumentList($sApplicationUID, $sUserUID) + public function inputDocumentList ($sApplicationUID, $sUserUID) { try { $oCase = new Cases(); - $fields = $oCase->loadCase($sApplicationUID); + $fields = $oCase->loadCase( $sApplicationUID ); $sProcessUID = $fields['PRO_UID']; $sTaskUID = ''; - $oCriteria = $oCase->getAllUploadedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTaskUID, $sUserUID); + $oCriteria = $oCase->getAllUploadedDocumentsCriteria( $sProcessUID, $sApplicationUID, $sTaskUID, $sUserUID ); - $result = array(); + $result = array (); global $_DBArray; foreach ($_DBArray['inputDocuments'] as $key => $row) { - if (isset($row['DOC_VERSION'])) { - $docrow = array(); - $docrow['guid'] = $row['APP_DOC_UID']; - $docrow['filename'] = $row['APP_DOC_FILENAME']; - $docrow['docId'] = $row['DOC_UID']; - $docrow['version'] = $row['DOC_VERSION']; + if (isset( $row['DOC_VERSION'] )) { + $docrow = array (); + $docrow['guid'] = $row['APP_DOC_UID']; + $docrow['filename'] = $row['APP_DOC_FILENAME']; + $docrow['docId'] = $row['DOC_UID']; + $docrow['version'] = $row['DOC_VERSION']; $docrow['createDate'] = $row['CREATE_DATE']; - $docrow['createBy'] = $row['CREATED_BY']; - $docrow['type'] = $row['TYPE']; - $docrow['index'] = $row['APP_DOC_INDEX']; - $docrow['link'] = 'cases/' . $row['DOWNLOAD_LINK']; + $docrow['createBy'] = $row['CREATED_BY']; + $docrow['type'] = $row['TYPE']; + $docrow['index'] = $row['APP_DOC_INDEX']; + $docrow['link'] = 'cases/' . $row['DOWNLOAD_LINK']; $result[] = $docrow; } } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage() + ); return $result; } @@ -518,23 +526,24 @@ class wsBase /** * input document process list + * * @param string $sProcessUID * @return $result will return an object */ - public function inputDocumentProcessList($sProcessUID) + public function inputDocumentProcessList ($sProcessUID) { try { global $_DBArray; - $_DBArray = (isset($_SESSION['_DBArray']) ? $_SESSION['_DBArray'] : ''); + $_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : ''); $oMap = new processMap(); - $oCriteria = $oMap->getInputDocumentsCriteria($sProcessUID); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = $oMap->getInputDocumentsCriteria( $sProcessUID ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - $result = array(); + $result = array (); /* //not necesary for SOAP message @@ -546,27 +555,29 @@ class wsBase */ while ($aRow = $oDataset->getRow()) { - if ( $aRow['INP_DOC_TITLE'] == null) { + if ($aRow['INP_DOC_TITLE'] == null) { //There is no transaltion for this Document name, try to get/regenerate the label - $inputDocument = new InputDocument(); - $inputDocumentObj = $inputDocument->load($aRow['INP_DOC_UID']); - $aRow['INP_DOC_TITLE'] = $inputDocumentObj['INP_DOC_TITLE']; + $inputDocument = new InputDocument(); + $inputDocumentObj = $inputDocument->load( $aRow['INP_DOC_UID'] ); + $aRow['INP_DOC_TITLE'] = $inputDocumentObj['INP_DOC_TITLE']; $aRow['INP_DOC_DESCRIPTION'] = $inputDocumentObj['INP_DOC_DESCRIPTION']; } - $docrow = array(); - $docrow['guid'] = $aRow['INP_DOC_UID']; - $docrow['name'] = $aRow['INP_DOC_TITLE']; + $docrow = array (); + $docrow['guid'] = $aRow['INP_DOC_UID']; + $docrow['name'] = $aRow['INP_DOC_TITLE']; $docrow['description'] = $aRow['INP_DOC_DESCRIPTION']; $result[] = $docrow; - $oDataset->next (); + $oDataset->next(); } //$_DBArray['inputDocArray'] = $inputDocArray; + return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage() + ); return $result; } @@ -574,42 +585,44 @@ class wsBase /** * output document list + * * @param string $sApplicationUID * @param string $sUserUID * @return $result will return an object */ - public function outputDocumentList($sApplicationUID, $sUserUID) + public function outputDocumentList ($sApplicationUID, $sUserUID) { try { $oCase = new Cases(); - $fields = $oCase->loadCase($sApplicationUID); + $fields = $oCase->loadCase( $sApplicationUID ); $sProcessUID = $fields['PRO_UID']; $sTaskUID = ''; - $oCriteria = $oCase->getAllGeneratedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTaskUID, $sUserUID); + $oCriteria = $oCase->getAllGeneratedDocumentsCriteria( $sProcessUID, $sApplicationUID, $sTaskUID, $sUserUID ); - $result = array(); + $result = array (); global $_DBArray; foreach ($_DBArray['outputDocuments'] as $key => $row) { - if (isset($row['DOC_VERSION'])) { - $docrow = array(); - $docrow['guid'] = $row['APP_DOC_UID']; - $docrow['filename'] = $row['DOWNLOAD_FILE']; + if (isset( $row['DOC_VERSION'] )) { + $docrow = array (); + $docrow['guid'] = $row['APP_DOC_UID']; + $docrow['filename'] = $row['DOWNLOAD_FILE']; - $docrow['docId'] = $row['DOC_UID']; - $docrow['version'] = $row['DOC_VERSION']; + $docrow['docId'] = $row['DOC_UID']; + $docrow['version'] = $row['DOC_VERSION']; $docrow['createDate'] = $row['CREATE_DATE']; - $docrow['createBy'] = $row['CREATED_BY']; - $docrow['type'] = $row['TYPE']; - $docrow['index'] = $row['APP_DOC_INDEX']; - $docrow['link'] = 'cases/' . $row['DOWNLOAD_LINK']; + $docrow['createBy'] = $row['CREATED_BY']; + $docrow['type'] = $row['TYPE']; + $docrow['index'] = $row['APP_DOC_INDEX']; + $docrow['link'] = 'cases/' . $row['DOWNLOAD_LINK']; $result[] = $docrow; } } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage() + ); return $result; } @@ -617,19 +630,20 @@ class wsBase /** * remove document + * * @param string $appDocUid * @return $result will return an object */ - public function removeDocument($appDocUid) + public function removeDocument ($appDocUid) { try { $oAppDocument = new AppDocument(); - $oAppDocument->remove($appDocUid, 1); //always send version 1 - $result = new wsResponse(0, " $appDocUid"); + $oAppDocument->remove( $appDocUid, 1 ); //always send version 1 + $result = new wsResponse( 0, " $appDocUid" ); return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -637,45 +651,51 @@ class wsBase /** * get task list + * * @param string $userId * @return $result will return an object */ - public function taskList($userId) + public function taskList ($userId) { try { - g::loadClass('groups'); + g::loadClass( 'groups' ); $oGroup = new Groups(); - $aGroups = $oGroup->getActiveGroupsForAnUser($userId); + $aGroups = $oGroup->getActiveGroupsForAnUser( $userId ); - $result = array(); - $oCriteria = new Criteria('workflow'); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(TaskPeer::TAS_UID); + $oCriteria->addSelectColumn( TaskPeer::TAS_UID ); $oCriteria->setDistinct(); - $oCriteria->addAsColumn('TAS_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAlias("C1", 'CONTENT'); - $tasTitleConds = array(); - $tasTitleConds[] = array(TaskPeer::TAS_UID, 'C1.CON_ID'); - $tasTitleConds[] = array('C1.CON_CATEGORY', $del . 'TAS_TITLE' . $del); - $tasTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); + $oCriteria->addAsColumn( 'TAS_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $tasTitleConds = array (); + $tasTitleConds[] = array (TaskPeer::TAS_UID,'C1.CON_ID' + ); + $tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN ); - $oCriteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); - $oCriteria->addOr(TaskUserPeer::USR_UID, $userId); - $oCriteria->addOr(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); + $oCriteria->addJoin( TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN ); + $oCriteria->addOr( TaskUserPeer::USR_UID, $userId ); + $oCriteria->addOr( TaskUserPeer::USR_UID, $aGroups, Criteria::IN ); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array('guid' => $aRow['TAS_UID'], 'name' => $aRow['TAS_TITLE']); + $result[] = array ('guid' => $aRow['TAS_UID'],'name' => $aRow['TAS_TITLE'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -683,6 +703,7 @@ class wsBase /** * send message + * * @param string $caseId * @param string $sFrom * @param string $sTo @@ -693,55 +714,40 @@ class wsBase * @param $appFields = null * @return $result will return an object */ - public function sendMessage( - $caseId, - $sFrom, - $sTo, - $sCc, - $sBcc, - $sSubject, - $sTemplate, - $appFields=null, - $aAttachment=null - ) { + public function sendMessage ($caseId, $sFrom, $sTo, $sCc, $sBcc, $sSubject, $sTemplate, $appFields = null, $aAttachment = null) + { try { - G::loadClass('system'); + G::loadClass( 'system' ); $aSetup = System::getEmailConfiguration(); - $passwd =$aSetup['MESS_PASSWORD']; - $passwdDec = G::decrypt($passwd,'EMAILENCRYPT'); - $auxPass = explode('hash:', $passwdDec); - if (count($auxPass) > 1) { - if (count($auxPass) == 2) { + $passwd = $aSetup['MESS_PASSWORD']; + $passwdDec = G::decrypt( $passwd, 'EMAILENCRYPT' ); + $auxPass = explode( 'hash:', $passwdDec ); + if (count( $auxPass ) > 1) { + if (count( $auxPass ) == 2) { $passwd = $auxPass[1]; } else { - array_shift($auxPass); - $passwd = implode('', $auxPass); + array_shift( $auxPass ); + $passwd = implode( '', $auxPass ); } - } + } $aSetup['MESS_PASSWORD'] = $passwd; $oSpool = new spoolRun(); - $oSpool->setConfig(array( - 'MESS_ENGINE' => $aSetup['MESS_ENGINE'], - 'MESS_SERVER' => $aSetup['MESS_SERVER'], - 'MESS_PORT' => $aSetup['MESS_PORT'], - 'MESS_ACCOUNT' => $aSetup['MESS_ACCOUNT'], - 'MESS_PASSWORD' => $aSetup['MESS_PASSWORD'], - 'SMTPAuth' => $aSetup['MESS_RAUTH'] - )); + $oSpool->setConfig( array ('MESS_ENGINE' => $aSetup['MESS_ENGINE'],'MESS_SERVER' => $aSetup['MESS_SERVER'],'MESS_PORT' => $aSetup['MESS_PORT'],'MESS_ACCOUNT' => $aSetup['MESS_ACCOUNT'],'MESS_PASSWORD' => $aSetup['MESS_PASSWORD'],'SMTPAuth' => $aSetup['MESS_RAUTH'] + ) ); $oCase = new Cases(); $oldFields = $oCase->loadCase( $caseId ); $pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $oldFields['PRO_UID'] . PATH_SEP; $fileTemplate = $pathEmail . $sTemplate; - G::mk_dir($pathEmail, 0777, true); + G::mk_dir( $pathEmail, 0777, true ); - if (!file_exists($fileTemplate)) { + if (! file_exists( $fileTemplate )) { $data['FILE_TEMPLATE'] = $fileTemplate; - $result = new wsResponse(28, G::LoadTranslation('ID_TEMPLATE_FILE_NOT_EXIST', SYS_LANG, $data)); + $result = new wsResponse( 28, G::LoadTranslation( 'ID_TEMPLATE_FILE_NOT_EXIST', SYS_LANG, $data ) ); return $result; } @@ -749,98 +755,77 @@ class wsBase if ($appFields == null) { $Fields = $oldFields['APP_DATA']; } else { - $Fields = array_merge($oldFields['APP_DATA'], $appFields); + $Fields = array_merge( $oldFields['APP_DATA'], $appFields ); } - $templateContents = file_get_contents($fileTemplate); + $templateContents = file_get_contents( $fileTemplate ); //$sContent = G::unhtmlentities($sContent); - $iAux = 0; - $iOcurrences = preg_match_all('/\@(?:([\>])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $templateContents, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); + $iAux = 0; + $iOcurrences = preg_match_all( '/\@(?:([\>])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $templateContents, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); if ($iOcurrences) { - for ($i = 0; $i < $iOcurrences; $i++) { - preg_match_all( - '/@>' . $aMatch[2][$i][0] . '([\w\W]*)' . '@<' . $aMatch[2][$i][0] . '/', - $templateContents, - $aMatch2, - PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE - ); + for ($i = 0; $i < $iOcurrences; $i ++) { + preg_match_all( '/@>' . $aMatch[2][$i][0] . '([\w\W]*)' . '@<' . $aMatch[2][$i][0] . '/', $templateContents, $aMatch2, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); - $sGridName = $aMatch[2][$i][0]; + $sGridName = $aMatch[2][$i][0]; $sStringToRepeat = $aMatch2[1][0][0]; - if (isset($Fields[$sGridName])) { - if (is_array($Fields[$sGridName])) { + if (isset( $Fields[$sGridName] )) { + if (is_array( $Fields[$sGridName] )) { $sAux = ''; foreach ($Fields[$sGridName] as $aRow) { - $sAux .= G::replaceDataField($sStringToRepeat, $aRow); + $sAux .= G::replaceDataField( $sStringToRepeat, $aRow ); } } } - $templateContents = str_replace( - '@>' . $sGridName . $sStringToRepeat . '@<' . $sGridName, - $sAux, - $templateContents - ); + $templateContents = str_replace( '@>' . $sGridName . $sStringToRepeat . '@<' . $sGridName, $sAux, $templateContents ); } } - $sBody = G::replaceDataField( $templateContents, $Fields); - $hasEmailFrom = preg_match('/(.+)@(.+)\.(.+)/', $sFrom, $match); + $sBody = G::replaceDataField( $templateContents, $Fields ); + $hasEmailFrom = preg_match( '/(.+)@(.+)\.(.+)/', $sFrom, $match ); - if (!$hasEmailFrom || strpos($sFrom, $aSetup['MESS_ACCOUNT']) === false) { - $sFrom = '"' . stripslashes($sFrom) . '" <' . $aSetup['MESS_ACCOUNT'] . ">"; + if (! $hasEmailFrom || strpos( $sFrom, $aSetup['MESS_ACCOUNT'] ) === false) { + $sFrom = '"' . stripslashes( $sFrom ) . '" <' . $aSetup['MESS_ACCOUNT'] . ">"; } - $messageArray = array( - 'msg_uid' => '', - 'app_uid' => $caseId, - 'del_index' => 0, - 'app_msg_type' => 'TRIGGER', - 'app_msg_subject' => $sSubject, - 'app_msg_from' => $sFrom, - 'app_msg_to' => $sTo, - 'app_msg_body' => $sBody, - 'app_msg_cc' => $sCc, - 'app_msg_bcc' => $sBcc, - 'app_msg_attach' => $aAttachment, - 'app_msg_template' => '', - 'app_msg_status' => 'pending' + $messageArray = array ('msg_uid' => '','app_uid' => $caseId,'del_index' => 0,'app_msg_type' => 'TRIGGER','app_msg_subject' => $sSubject,'app_msg_from' => $sFrom,'app_msg_to' => $sTo,'app_msg_body' => $sBody,'app_msg_cc' => $sCc,'app_msg_bcc' => $sBcc,'app_msg_attach' => $aAttachment,'app_msg_template' => '','app_msg_status' => 'pending' ); - $oSpool->create($messageArray); + $oSpool->create( $messageArray ); $oSpool->sendMail(); - if ( $oSpool->status == 'sent' ) { - $result = new wsResponse(0, G::loadTranslation ('ID_MESSAGE_SENT') . ": ". $sTo); + if ($oSpool->status == 'sent') { + $result = new wsResponse( 0, G::loadTranslation( 'ID_MESSAGE_SENT' ) . ": " . $sTo ); } else { - $result = new wsResponse(29, $oSpool->status . ' ' . $oSpool->error . print_r ($aSetup ,1 )); + $result = new wsResponse( 29, $oSpool->status . ' ' . $oSpool->error . print_r( $aSetup, 1 ) ); } return $result; } catch (Exception $e) { - return new wsResponse(100, $e->getMessage()); + return new wsResponse( 100, $e->getMessage() ); } } /** * get case information + * * @param string $caseId * @param string $iDelIndex * @return $result will return an object */ - public function getCaseInfo($caseId, $iDelIndex) + public function getCaseInfo ($caseId, $iDelIndex) { try { $oCase = new Cases(); - $aRows = $oCase->loadCase($caseId, $iDelIndex); + $aRows = $oCase->loadCase( $caseId, $iDelIndex ); - if (count($aRows) == 0) { + if (count( $aRows ) == 0) { $data['CASE_NUMBER'] = $caseNumber; - $result = new wsResponse(16, G::loadTranslation('ID_CASE_DOES_NOT_EXIST', SYS_LANG, $data)); + $result = new wsResponse( 16, G::loadTranslation( 'ID_CASE_DOES_NOT_EXIST', SYS_LANG, $data ) ); return $result; } @@ -848,41 +833,41 @@ class wsBase $oProcess = new Process(); try { - $uFields = $oProcess->load($aRows['PRO_UID']); + $uFields = $oProcess->load( $aRows['PRO_UID'] ); $processName = $uFields['PRO_TITLE']; } catch (Exception $e) { $processName = ''; } - $result = new wsResponse(0, G::loadTranslation ('ID_COMMAND_EXECUTED_SUCCESSFULLY')); - $result->caseId = $aRows['APP_UID']; - $result->caseNumber = $aRows['APP_NUMBER']; - $result->caseName = $aRows['TITLE']; - $result->caseStatus = $aRows['APP_STATUS']; - $result->caseParalell = $aRows['APP_PARALLEL']; - $result->caseCreatorUser = $aRows['APP_INIT_USER']; + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); + $result->caseId = $aRows['APP_UID']; + $result->caseNumber = $aRows['APP_NUMBER']; + $result->caseName = $aRows['TITLE']; + $result->caseStatus = $aRows['APP_STATUS']; + $result->caseParalell = $aRows['APP_PARALLEL']; + $result->caseCreatorUser = $aRows['APP_INIT_USER']; $result->caseCreatorUserName = $aRows['CREATOR']; - $result->processId = $aRows['PRO_UID']; - $result->processName = $processName; - $result->createDate = $aRows['CREATE_DATE']; - $result->updateDate = $aRows['UPDATE_DATE']; + $result->processId = $aRows['PRO_UID']; + $result->processName = $processName; + $result->createDate = $aRows['CREATE_DATE']; + $result->updateDate = $aRows['UPDATE_DATE']; //now fill the array of AppDelegationPeer - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppDelegationPeer::USR_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_THREAD); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD_STATUS ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); - $oCriteria->addAscendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->addAscendingOrderByColumn( AppDelegationPeer::DEL_INDEX ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $aCurrentUsers = array(); + $aCurrentUsers = array (); while ($oDataset->next()) { $aAppDel = $oDataset->getRow(); @@ -890,8 +875,8 @@ class wsBase $oUser = new Users(); try { - $oUser->load($aAppDel['USR_UID']); - $uFields = $oUser->toArray(BasePeer::TYPE_FIELDNAME); + $oUser->load( $aAppDel['USR_UID'] ); + $uFields = $oUser->toArray( BasePeer::TYPE_FIELDNAME ); $currentUserName = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname(); } catch (Exception $e) { $currentUserName = ''; @@ -900,19 +885,19 @@ class wsBase $oTask = new Task(); try { - $uFields = $oTask->load($aAppDel['TAS_UID']); + $uFields = $oTask->load( $aAppDel['TAS_UID'] ); $taskName = $uFields['TAS_TITLE']; } catch (Exception $e) { $taskName = ''; } $currentUser = new stdClass(); - $currentUser->userId = $aAppDel['USR_UID']; - $currentUser->userName = $currentUserName; - $currentUser->taskId = $aAppDel['TAS_UID']; - $currentUser->taskName = $taskName; - $currentUser->delIndex = $aAppDel['DEL_INDEX']; - $currentUser->delThread = $aAppDel['DEL_THREAD']; + $currentUser->userId = $aAppDel['USR_UID']; + $currentUser->userName = $currentUserName; + $currentUser->taskId = $aAppDel['TAS_UID']; + $currentUser->taskName = $taskName; + $currentUser->delIndex = $aAppDel['DEL_INDEX']; + $currentUser->delThread = $aAppDel['DEL_THREAD']; $currentUser->delThreadStatus = $aAppDel['DEL_THREAD_STATUS']; $aCurrentUsers[] = $currentUser; } @@ -921,7 +906,7 @@ class wsBase return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -929,67 +914,61 @@ class wsBase /** * Create an new user + * * @param string sessionId : The session ID. - * @param string userName : The username for the new user. + * @param string userName : The username for the new user. * @param string firstName : The user's first name. - * @param string lastName : The user's last name. - * @param string email : The user's email address. - * @param string role : The user's role, such as "PROCESSMAKER_ADMIN" or "PROCESSMAKER_OPERATOR". - * @param string password : The user's password such as "Be@gle2" (It will be automatically encrypted - * with an MD5 hash). - * @param string dueDate : Optional parameter. The expiration date must be a string in the format "yyyy-mm-dd". - * @param string status : Optional parameter. The user's status, such as "ACTIVE", "INACTIVE" or "VACATION". + * @param string lastName : The user's last name. + * @param string email : The user's email address. + * @param string role : The user's role, such as "PROCESSMAKER_ADMIN" or "PROCESSMAKER_OPERATOR". + * @param string password : The user's password such as "Be@gle2" (It will be automatically encrypted + * with an MD5 hash). + * @param string dueDate : Optional parameter. The expiration date must be a string in the format "yyyy-mm-dd". + * @param string status : Optional parameter. The user's status, such as "ACTIVE", "INACTIVE" or "VACATION". * @return $result will return an object */ - public function createUser($userName, $firstName, $lastName, $email, $role, $password, $dueDate=null, $status=null) + public function createUser ($userName, $firstName, $lastName, $email, $role, $password, $dueDate = null, $status = null) { try { global $RBAC; $RBAC->initRBAC(); - if (empty($userName)) { - $result = new wsCreateUserResponse(25, G::loadTranslation("ID_USERNAME_REQUIRED"), null); + if (empty( $userName )) { + $result = new wsCreateUserResponse( 25, G::loadTranslation( "ID_USERNAME_REQUIRED" ), null ); return $result; } - if (empty($firstName)) { - $result = new wsCreateUserResponse(27, G::loadTranslation("ID_MSG_ERROR_USR_FIRSTNAME"), null); + if (empty( $firstName )) { + $result = new wsCreateUserResponse( 27, G::loadTranslation( "ID_MSG_ERROR_USR_FIRSTNAME" ), null ); return $result; } - if (empty($password)) { - $result = new wsCreateUserResponse(26, G::loadTranslation("ID_PASSWD_REQUIRED"), null); + if (empty( $password )) { + $result = new wsCreateUserResponse( 26, G::loadTranslation( "ID_PASSWD_REQUIRED" ), null ); return $result; } $mktimeDueDate = 0; - if (!empty($dueDate)) { - if (!preg_match("/^(\d{4})-(\d{2})-(\d{2})$/", $dueDate, $arrayMatch)) { - $result = new wsCreateUserResponse(-1, G::loadTranslation("ID_INVALID_DATA") . " $dueDate", null); + if (! empty( $dueDate )) { + if (! preg_match( "/^(\d{4})-(\d{2})-(\d{2})$/", $dueDate, $arrayMatch )) { + $result = new wsCreateUserResponse( - 1, G::loadTranslation( "ID_INVALID_DATA" ) . " $dueDate", null ); return $result; } else { - $mktimeDueDate = mktime( - 0, - 0, - 0, - intval($arrayMatch[2]), - intval($arrayMatch[3]), - intval($arrayMatch[1]) - ); + $mktimeDueDate = mktime( 0, 0, 0, intval( $arrayMatch[2] ), intval( $arrayMatch[3] ), intval( $arrayMatch[1] ) ); } } else { - $mktimeDueDate = mktime(0, 0, 0, date("m"), date("d"), date("Y") + 1); + $mktimeDueDate = mktime( 0, 0, 0, date( "m" ), date( "d" ), date( "Y" ) + 1 ); } - if (!empty($status)) { + if (! empty( $status )) { if ($status != "ACTIVE" && $status != "INACTIVE" && $status != "VACATION") { - $result = new wsCreateUserResponse(-1, G::loadTranslation("ID_INVALID_DATA") . " $status", null); + $result = new wsCreateUserResponse( - 1, G::loadTranslation( "ID_INVALID_DATA" ) . " $status", null ); return $result; } @@ -997,95 +976,88 @@ class wsBase $status = "ACTIVE"; } - $arrayRole = $RBAC->loadById($role); + $arrayRole = $RBAC->loadById( $role ); $strRole = null; - if (is_array($arrayRole)) { + if (is_array( $arrayRole )) { $strRole = $arrayRole["ROL_CODE"]; } else { $strRole = $role; - if ($RBAC->verifyByCode($role) == 0) { - $data = array(); + if ($RBAC->verifyByCode( $role ) == 0) { + $data = array (); $data["ROLE"] = $role; - $result = new wsCreateUserResponse(6, G::loadTranslation("ID_INVALID_ROLE", SYS_LANG, $data), null); + $result = new wsCreateUserResponse( 6, G::loadTranslation( "ID_INVALID_ROLE", SYS_LANG, $data ), null ); return $result; } } - if (strlen($password) > 20) { - $result = new wsCreateUserResponse(-1, G::loadTranslation("ID_PASSWORD_SURPRASES"), null); + if (strlen( $password ) > 20) { + $result = new wsCreateUserResponse( - 1, G::loadTranslation( "ID_PASSWORD_SURPRASES" ), null ); return $result; } - if ($RBAC->verifyUser($userName) == 1) { - $data = array(); + if ($RBAC->verifyUser( $userName ) == 1) { + $data = array (); $data["USER_ID"] = $userName; - $result = new wsCreateUserResponse( - 7, - G::loadTranslation("ID_USERNAME_ALREADY_EXISTS", SYS_LANG, $data), - null - ); + $result = new wsCreateUserResponse( 7, G::loadTranslation( "ID_USERNAME_ALREADY_EXISTS", SYS_LANG, $data ), null ); return $result; } //Set fields - $arrayData = array(); + $arrayData = array (); - $arrayData["USR_USERNAME"] = $userName; - $arrayData["USR_PASSWORD"] = md5($password); - $arrayData["USR_FIRSTNAME"] = $firstName; - $arrayData["USR_LASTNAME"] = $lastName; - $arrayData["USR_EMAIL"] = $email; - $arrayData["USR_DUE_DATE"] = $mktimeDueDate; - $arrayData["USR_CREATE_DATE"] = date("Y-m-d H:i:s"); - $arrayData["USR_UPDATE_DATE"] = date("Y-m-d H:i:s"); - $arrayData["USR_BIRTHDAY"] = date("Y-m-d"); + $arrayData["USR_USERNAME"] = $userName; + $arrayData["USR_PASSWORD"] = md5( $password ); + $arrayData["USR_FIRSTNAME"] = $firstName; + $arrayData["USR_LASTNAME"] = $lastName; + $arrayData["USR_EMAIL"] = $email; + $arrayData["USR_DUE_DATE"] = $mktimeDueDate; + $arrayData["USR_CREATE_DATE"] = date( "Y-m-d H:i:s" ); + $arrayData["USR_UPDATE_DATE"] = date( "Y-m-d H:i:s" ); + $arrayData["USR_BIRTHDAY"] = date( "Y-m-d" ); $arrayData["USR_AUTH_USER_DN"] = ""; - $arrayData["USR_STATUS"] = ($status == "ACTIVE")? 1 : 0; + $arrayData["USR_STATUS"] = ($status == "ACTIVE") ? 1 : 0; - $userUid = $RBAC->createUser($arrayData, $strRole); + $userUid = $RBAC->createUser( $arrayData, $strRole ); - $arrayData["USR_UID"] = $userUid; - $arrayData["USR_STATUS"] = $status; + $arrayData["USR_UID"] = $userUid; + $arrayData["USR_STATUS"] = $status; //$arrayData["USR_PASSWORD"] = md5($userUid); - $arrayData["USR_COUNTRY"] = ""; - $arrayData["USR_CITY"] = ""; + $arrayData["USR_COUNTRY"] = ""; + $arrayData["USR_CITY"] = ""; $arrayData["USR_LOCATION"] = ""; - $arrayData["USR_ADDRESS"] = ""; - $arrayData["USR_PHONE"] = ""; + $arrayData["USR_ADDRESS"] = ""; + $arrayData["USR_PHONE"] = ""; $arrayData["USR_ZIP_CODE"] = ""; $arrayData["USR_POSITION"] = ""; //$arrayData["USR_RESUME"] - $arrayData["USR_ROLE"] = $strRole ; + $arrayData["USR_ROLE"] = $strRole; //$arrayData["USR_REPLACED_BY"] + $user = new Users(); - $user->create($arrayData); + $user->create( $arrayData ); //Response - $data = array(); + $data = array (); $data["FIRSTNAME"] = $firstName; $data["LASTNAME"] = $lastName; $data["USER_ID"] = $userName; - $res = new wsResponse(0, G::loadTranslation("ID_USER_CREATED_SUCCESSFULLY", SYS_LANG, $data)); + $res = new wsResponse( 0, G::loadTranslation( "ID_USER_CREATED_SUCCESSFULLY", SYS_LANG, $data ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "userUID" => $userUid, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"userUID" => $userUid,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsCreateUserResponse(100 , $e->getMessage(), null); + $result = wsCreateUserResponse( 100, $e->getMessage(), null ); return $result; } @@ -1093,75 +1065,60 @@ class wsBase /** * Update user - * @param string userUid : The user UID. - * @param string userName : The username for the user. + * + * @param string userUid : The user UID. + * @param string userName : The username for the user. * @param string firstName : Optional parameter. The user's first name. - * @param string lastName : Optional parameter. The user's last name. - * @param string email : Optional parameter. The user's email address. - * @param string dueDate : Optional parameter. The expiration date must be a string in the format "yyyy-mm-dd". - * @param string status : Optional parameter. The user's status, such as "ACTIVE", "INACTIVE" or "VACATION". - * @param string role : Optional parameter. The user's role, such - * as "PROCESSMAKER_ADMIN" or "PROCESSMAKER_OPERATOR". - * @param string password : Optional parameter. The user's password such as "Be@gle2" (It will be automatically - * encrypted with an MD5 hash). + * @param string lastName : Optional parameter. The user's last name. + * @param string email : Optional parameter. The user's email address. + * @param string dueDate : Optional parameter. The expiration date must be a string in the format "yyyy-mm-dd". + * @param string status : Optional parameter. The user's status, such as "ACTIVE", "INACTIVE" or "VACATION". + * @param string role : Optional parameter. The user's role, such + * as "PROCESSMAKER_ADMIN" or "PROCESSMAKER_OPERATOR". + * @param string password : Optional parameter. The user's password such as "Be@gle2" (It will be automatically + * encrypted with an MD5 hash). * @return $result will return an object */ - public function updateUser( - $userUid, - $userName, - $firstName=null, - $lastName=null, - $email=null, - $dueDate=null, - $status=null, - $role=null, - $password=null - ) { + public function updateUser ($userUid, $userName, $firstName = null, $lastName = null, $email = null, $dueDate = null, $status = null, $role = null, $password = null) + { try { global $RBAC; $RBAC->initRBAC(); - if (empty($userUid)) { - $result = new wsResponse(25, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid"); + if (empty( $userUid )) { + $result = new wsResponse( 25, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); return $result; } - if (empty($userName)) { - $result = new wsResponse(25, G::LoadTranslation("ID_USERNAME_REQUIRED")); + if (empty( $userName )) { + $result = new wsResponse( 25, G::LoadTranslation( "ID_USERNAME_REQUIRED" ) ); return $result; } - if ($RBAC->verifyUserId($userUid) == 0) { - $result = new wsResponse(3, G::loadTranslation("ID_USER_NOT_REGISTERED_SYSTEM")); + if ($RBAC->verifyUserId( $userUid ) == 0) { + $result = new wsResponse( 3, G::loadTranslation( "ID_USER_NOT_REGISTERED_SYSTEM" ) ); return $result; } $mktimeDueDate = 0; - if (!empty($dueDate)) { - if (!preg_match("/^(\d{4})-(\d{2})-(\d{2})$/", $dueDate, $arrayMatch)) { - $result = new wsResponse(-1, G::LoadTranslation("ID_INVALID_DATA") . " $dueDate"); + if (! empty( $dueDate )) { + if (! preg_match( "/^(\d{4})-(\d{2})-(\d{2})$/", $dueDate, $arrayMatch )) { + $result = new wsResponse( - 1, G::LoadTranslation( "ID_INVALID_DATA" ) . " $dueDate" ); return $result; } else { - $mktimeDueDate = mktime( - 0, - 0, - 0, - intval($arrayMatch[2]), - intval($arrayMatch[3]), - intval($arrayMatch[1]) - ); + $mktimeDueDate = mktime( 0, 0, 0, intval( $arrayMatch[2] ), intval( $arrayMatch[3] ), intval( $arrayMatch[1] ) ); } } - if (!empty($status)) { + if (! empty( $status )) { if ($status != "ACTIVE" && $status != "INACTIVE" && $status != "VACATION") { - $result = new wsResponse(-1, G::LoadTranslation("ID_INVALID_DATA") . " $status"); + $result = new wsResponse( - 1, G::LoadTranslation( "ID_INVALID_DATA" ) . " $status" ); return $result; } @@ -1169,61 +1126,61 @@ class wsBase $strRole = null; - if (!empty($role)) { - $arrayRole = $RBAC->loadById($role); + if (! empty( $role )) { + $arrayRole = $RBAC->loadById( $role ); - if (is_array($arrayRole)) { + if (is_array( $arrayRole )) { $strRole = $arrayRole["ROL_CODE"]; } else { $strRole = $role; - if ($RBAC->verifyByCode($role) == 0) { - $data = array(); + if ($RBAC->verifyByCode( $role ) == 0) { + $data = array (); $data["ROLE"] = $role; - $result = new wsResponse(6, G::LoadTranslation("ID_INVALID_ROLE", SYS_LANG, $data)); + $result = new wsResponse( 6, G::LoadTranslation( "ID_INVALID_ROLE", SYS_LANG, $data ) ); return $result; } } } - if (!empty($password) && strlen($password) > 20) { - $result = new wsResponse(-1, G::LoadTranslation("ID_PASSWORD_SURPRASES")); + if (! empty( $password ) && strlen( $password ) > 20) { + $result = new wsResponse( - 1, G::LoadTranslation( "ID_PASSWORD_SURPRASES" ) ); return $result; } $criteria = new Criteria(); - $criteria->addSelectColumn(UsersPeer::USR_UID); - $criteria->add(UsersPeer::USR_USERNAME, $userName); - $criteria->add(UsersPeer::USR_UID, $userUid, Criteria::NOT_EQUAL); - $rs = UsersPeer::doSelectRS($criteria); + $criteria->addSelectColumn( UsersPeer::USR_UID ); + $criteria->add( UsersPeer::USR_USERNAME, $userName ); + $criteria->add( UsersPeer::USR_UID, $userUid, Criteria::NOT_EQUAL ); + $rs = UsersPeer::doSelectRS( $criteria ); if ($rs->next()) { - $data = array(); + $data = array (); $data["USER_ID"] = $userName; - $result = new wsResponse(7, G::LoadTranslation("ID_USERNAME_ALREADY_EXISTS", SYS_LANG, $data)); + $result = new wsResponse( 7, G::LoadTranslation( "ID_USERNAME_ALREADY_EXISTS", SYS_LANG, $data ) ); return $result; } //Set fields - $arrayData = array(); + $arrayData = array (); - $arrayData["USR_UID"] = $userUid; + $arrayData["USR_UID"] = $userUid; $arrayData["USR_USERNAME"] = $userName; - if (!empty($firstName)) { + if (! empty( $firstName )) { $arrayData["USR_FIRSTNAME"] = $firstName; } - if (!empty($lastName)) { + if (! empty( $lastName )) { $arrayData["USR_LASTNAME"] = $lastName; } - if (!empty($email)) { + if (! empty( $email )) { $arrayData["USR_EMAIL"] = $email; } @@ -1231,9 +1188,9 @@ class wsBase $arrayData["USR_DUE_DATE"] = $mktimeDueDate; } - $arrayData["USR_UPDATE_DATE"] = date("Y-m-d H:i:s"); + $arrayData["USR_UPDATE_DATE"] = date( "Y-m-d H:i:s" ); - if (!empty($status)) { + if (! empty( $status )) { $arrayData["USR_STATUS"] = $status; } @@ -1241,33 +1198,30 @@ class wsBase $arrayData["USR_ROLE"] = $strRole; } - if (!empty($password)) { - $arrayData["USR_PASSWORD"] = md5($password); + if (! empty( $password )) { + $arrayData["USR_PASSWORD"] = md5( $password ); } //Update user if ($strRole != null) { - $RBAC->updateUser($arrayData, $strRole); + $RBAC->updateUser( $arrayData, $strRole ); } else { - $RBAC->updateUser($arrayData); + $RBAC->updateUser( $arrayData ); } $user = new Users(); - $user->update($arrayData); + $user->update( $arrayData ); //Response //$res = new wsResponse(0, G::LoadTranslation("ID_OBJECT_UPDATE")); - $res = new wsResponse(0, G::LoadTranslation("ID_UPDATED_SUCCESSFULLY")); + $res = new wsResponse( 0, G::LoadTranslation( "ID_UPDATED_SUCCESSFULLY" ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsResponse(100, $e->getMessage()); + $result = wsResponse( 100, $e->getMessage() ); return $result; } @@ -1275,32 +1229,29 @@ class wsBase /** * create Group + * * @param string $groupName * @return $result will return an object */ - public function createGroup($groupName) + public function createGroup ($groupName) { try { - if (trim($groupName) == '') { - $result = new wsCreateGroupResponse(25, G::loadTranslation('ID_GROUP_NAME_REQUIRED'), ''); + if (trim( $groupName ) == '') { + $result = new wsCreateGroupResponse( 25, G::loadTranslation( 'ID_GROUP_NAME_REQUIRED' ), '' ); return $result; } $group = new Groupwf(); $grpRow['GRP_TITLE'] = $groupName; - $groupId = $group->create($grpRow); + $groupId = $group->create( $grpRow ); $data['GROUP_NAME'] = $groupName; - $result = new wsCreateGroupResponse( - 0, - G::loadTranslation('ID_GROUP_CREATED_SUCCESSFULLY', SYS_LANG, $data), - $groupId - ); + $result = new wsCreateGroupResponse( 0, G::loadTranslation( 'ID_GROUP_CREATED_SUCCESSFULLY', SYS_LANG, $data ), $groupId ); return $result; } catch (Exception $e) { - $result = wsCreateGroupResponse(100 , $e->getMessage(), ''); + $result = wsCreateGroupResponse( 100, $e->getMessage(), '' ); return $result; } @@ -1308,33 +1259,30 @@ class wsBase /** * Create New Department link on the top section of the left pane allows you to create a root-level department. + * * @param string $departmentName * @param string $parentUID * @return $result will return an object */ - public function createDepartment($departmentName, $parentUID) + public function createDepartment ($departmentName, $parentUID) { try { - if (trim($departmentName) == '') { - $result = new wsCreateDepartmentResponse(25, G::loadTranslation('ID_DEPARTMENT_NAME_REQUIRED'), ''); + if (trim( $departmentName ) == '') { + $result = new wsCreateDepartmentResponse( 25, G::loadTranslation( 'ID_DEPARTMENT_NAME_REQUIRED' ), '' ); return $result; } $department = new Department(); - if (($parentUID != '') && !($department->existsDepartment($parentUID))) { - $result = new wsCreateDepartmentResponse( - 26, - G::loadTranslation('ID_PARENT_DEPARTMENT_NOT_EXIST'), - $parentUID - ); + if (($parentUID != '') && ! ($department->existsDepartment( $parentUID ))) { + $result = new wsCreateDepartmentResponse( 26, G::loadTranslation( 'ID_PARENT_DEPARTMENT_NOT_EXIST' ), $parentUID ); return $result; } - if ($department->checkDepartmentName($departmentName, $parentUID)) { - $result = new wsCreateDepartmentResponse(27, G::loadTranslation('ID_DEPARTMENT_EXISTS'), ''); + if ($department->checkDepartmentName( $departmentName, $parentUID )) { + $result = new wsCreateDepartmentResponse( 27, G::loadTranslation( 'ID_DEPARTMENT_EXISTS' ), '' ); return $result; } @@ -1342,21 +1290,17 @@ class wsBase $row['DEP_TITLE'] = $departmentName; $row['DEP_PARENT'] = $parentUID; - $departmentId = $department->create($row); + $departmentId = $department->create( $row ); $data['DEPARTMENT_NAME'] = $departmentName; - $data['PARENT_UID'] = $parentUID; + $data['PARENT_UID'] = $parentUID; $data['DEPARTMENT_NAME'] = $departmentName; - $result = new wsCreateDepartmentResponse( - 0, - G::loadTranslation('ID_DEPARTMENT_CREATED_SUCCESSFULLY', SYS_LANG, $data), - $departmentId - ); + $result = new wsCreateDepartmentResponse( 0, G::loadTranslation( 'ID_DEPARTMENT_CREATED_SUCCESSFULLY', SYS_LANG, $data ), $departmentId ); return $result; } catch (Exception $e) { - $result = wsCreateDepartmentResponse(100, $e->getMessage(), ''); + $result = wsCreateDepartmentResponse( 100, $e->getMessage(), '' ); return $result; } @@ -1364,49 +1308,50 @@ class wsBase /** * remove user from group + * * @param string $appDocUid * @return $result will return an object */ - public function removeUserFromGroup($userId, $groupId) + public function removeUserFromGroup ($userId, $groupId) { try { - G::LoadClass('groups'); + G::LoadClass( 'groups' ); global $RBAC; $RBAC->initRBAC(); - $user=$RBAC->verifyUserId($userId); + $user = $RBAC->verifyUserId( $userId ); if ($user == 0) { - $result = new wsResponse(3, G::loadTranslation('ID_USER_NOT_REGISTERED_SYSTEM')); + $result = new wsResponse( 3, G::loadTranslation( 'ID_USER_NOT_REGISTERED_SYSTEM' ) ); return $result; } - $groups = new Groups; - $very_group = $groups->verifyGroup($groupId); + $groups = new Groups(); + $very_group = $groups->verifyGroup( $groupId ); if ($very_group == 0) { - $result = new wsResponse(9, G::loadTranslation('ID_GROUP_NOT_REGISTERED_SYSTEM')); + $result = new wsResponse( 9, G::loadTranslation( 'ID_GROUP_NOT_REGISTERED_SYSTEM' ) ); return $result; } - $very_user = $groups->verifyUsertoGroup($groupId, $userId); + $very_user = $groups->verifyUsertoGroup( $groupId, $userId ); if ($very_user == 1) { $oGroup = new Groups(); - $oGroup->removeUserOfGroup($groupId, $userId); - $result = new wsResponse (0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULY')); + $oGroup->removeUserOfGroup( $groupId, $userId ); + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULY' ) ); return $result; } //$oGroup->removeUserOfGroup($_POST['GRP_UID'], $_POST['USR_UID']); - $result = new wsResponse(8, G::loadTranslation('ID_USER_NOT_REGISTERED_GROUP')); + $result = new wsResponse( 8, G::loadTranslation( 'ID_USER_NOT_REGISTERED_GROUP' ) ); return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -1418,45 +1363,46 @@ class wsBase /** * assigns a user to a group + * * @param string $userId * @param string $groupId * @return $result will return an object */ - public function assignUserToGroup($userId, $groupId) + public function assignUserToGroup ($userId, $groupId) { try { global $RBAC; $RBAC->initRBAC(); - $user = $RBAC->verifyUserId($userId); + $user = $RBAC->verifyUserId( $userId ); if ($user == 0) { - $result = new wsResponse(3, G::loadTranslation('ID_USER_NOT_REGISTERED_SYSTEM')); + $result = new wsResponse( 3, G::loadTranslation( 'ID_USER_NOT_REGISTERED_SYSTEM' ) ); return $result; } $groups = new Groups(); - $very_group = $groups->verifyGroup($groupId); + $very_group = $groups->verifyGroup( $groupId ); if ($very_group == 0) { - $result = new wsResponse(9, G::loadTranslation('ID_GROUP_NOT_REGISTERED_SYSTEM')); + $result = new wsResponse( 9, G::loadTranslation( 'ID_GROUP_NOT_REGISTERED_SYSTEM' ) ); return $result; } - $very_user = $groups->verifyUsertoGroup($groupId, $userId); + $very_user = $groups->verifyUsertoGroup( $groupId, $userId ); if ($very_user == 1) { - $result = new wsResponse(8, G::loadTranslation('ID_USER_ALREADY_EXISTS_GROUP')); + $result = new wsResponse( 8, G::loadTranslation( 'ID_USER_ALREADY_EXISTS_GROUP' ) ); return $result; } - $groups->addUserToGroup($groupId, $userId); - $result = new wsResponse(0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULY')); + $groups->addUserToGroup( $groupId, $userId ); + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULY' ) ); return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -1464,46 +1410,44 @@ class wsBase /** * assigns user to department + * * @param string $userId * @param string $depId * @param string $manager * @return $result will return an object */ - public function assignUserToDepartment($userId, $depId, $manager) + public function assignUserToDepartment ($userId, $depId, $manager) { try { global $RBAC; $RBAC->initRBAC(); - $user = $RBAC->verifyUserId($userId); + $user = $RBAC->verifyUserId( $userId ); - if ($user == 0 ) { - $result = new wsResponse(3, G::loadTranslation('ID_USER_NOT_REGISTERED_SYSTEM')); + if ($user == 0) { + $result = new wsResponse( 3, G::loadTranslation( 'ID_USER_NOT_REGISTERED_SYSTEM' ) ); return $result; } - $deps = new Department; + $deps = new Department(); - if (!$deps->existsDepartment($depId)) { + if (! $deps->existsDepartment( $depId )) { $data['DEP_ID'] = $depId; - $result = new wsResponse( - 100, - G::loadTranslation('ID_DEPARTMENT_NOT_REGISTERED_SYSTEM', SYS_LANG, $data) - ); + $result = new wsResponse( 100, G::loadTranslation( 'ID_DEPARTMENT_NOT_REGISTERED_SYSTEM', SYS_LANG, $data ) ); return $result; } - if (!$deps->existsUserInDepartment($depId, $userId)) { - $deps->addUserToDepartment($depId, $userId, $manager, true); + if (! $deps->existsUserInDepartment( $depId, $userId )) { + $deps->addUserToDepartment( $depId, $userId, $manager, true ); } - $result = new wsResponse(0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULY')); + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULY' ) ); return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -1511,119 +1455,116 @@ class wsBase /** * sends variables to a case + * * @param string $caseId * @param string $variables * @return $result will return an object */ - public function sendVariables($caseId, $variables) + public function sendVariables ($caseId, $variables) { //delegation where app uid (caseId) y usruid(session) ordenar delindes descendente y agaarr el primero //delfinishdate != null error try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); - $oCriteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->addDescendingOrderByColumn( AppDelegationPeer::DEL_INDEX ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $cnt = 0; while ($oDataset->next()) { $aRow = $oDataset->getRow(); - $cnt++; + $cnt ++; } if ($cnt == 0) { - $result = new wsResponse(18, G::loadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')); + $result = new wsResponse( 18, G::loadTranslation( 'ID_CASE_DELEGATION_ALREADY_CLOSED' ) ); return $result; } - if (is_array($variables)) { - $cant = count($variables); + if (is_array( $variables )) { + $cant = count( $variables ); if ($cant > 0) { $oCase = new Cases(); - $oldFields = $oCase->loadCase($caseId); - $oldFields['APP_DATA'] = array_merge($oldFields['APP_DATA'], $variables); + $oldFields = $oCase->loadCase( $caseId ); + $oldFields['APP_DATA'] = array_merge( $oldFields['APP_DATA'], $variables ); ob_start(); - print_r($variables); + print_r( $variables ); $cdata = ob_get_contents(); ob_end_clean(); - $up_case = $oCase->updateCase($caseId, $oldFields); + $up_case = $oCase->updateCase( $caseId, $oldFields ); - $result = new wsResponse( - 0, - $cant . " " . G::loadTranslation('ID_VARIABLES_RECEIVED') . ": \n" . trim( - str_replace('Array', '', $cdata) - ) - ); + $result = new wsResponse( 0, $cant . " " . G::loadTranslation( 'ID_VARIABLES_RECEIVED' ) . ": \n" . trim( str_replace( 'Array', '', $cdata ) ) ); return $result; } else { - $result = new wsResponse(23, G::loadTranslation('ID_VARIABLES_PARAM_ZERO')); + $result = new wsResponse( 23, G::loadTranslation( 'ID_VARIABLES_PARAM_ZERO' ) ); return $result; } } else { - $result = new wsResponse(24, G::loadTranslation('ID_VARIABLES_PARAM_NOT_ARRAY')); + $result = new wsResponse( 24, G::loadTranslation( 'ID_VARIABLES_PARAM_NOT_ARRAY' ) ); return $result; } } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } } /** - * get variables The variables can be system variables and/or case variables + * get variables The variables can be system variables and/or case variables + * * @param string $caseId * @param string $variables * @return $result will return an object */ - public function getVariables($caseId, $variables) + public function getVariables ($caseId, $variables) { try { - if (is_array($variables)) { - $cant = count($variables); + if (is_array( $variables )) { + $cant = count( $variables ); if ($cant > 0) { $oCase = new Cases(); - $caseFields = $oCase->loadCase($caseId); - $oldFields = $caseFields['APP_DATA']; - $resFields = array(); + $caseFields = $oCase->loadCase( $caseId ); + $oldFields = $caseFields['APP_DATA']; + $resFields = array (); foreach ($variables as $key => $val) { $a .= $val->name . ', '; - if (isset($oldFields[$val->name])) { - if (!is_array($oldFields[$val->name])) { - $node = new stdClass(); - $node->name = $val->name; - $node->value = $oldFields[$val->name]; + if (isset( $oldFields[$val->name] )) { + if (! is_array( $oldFields[$val->name] )) { + $node = new stdClass(); + $node->name = $val->name; + $node->value = $oldFields[$val->name]; $resFields[] = $node; } else { foreach ($oldFields[$val->name] as $gridKey => $gridRow) { //Special Variables like grids or checkgroups - if (is_array($gridRow)) { + if (is_array( $gridRow )) { //Grids foreach ($gridRow as $col => $colValue) { - $node = new stdClass(); - $node->name = $val->name . "][" . $gridKey . "][" . $col; + $node = new stdClass(); + $node->name = $val->name . "][" . $gridKey . "][" . $col; $node->value = $colValue; $resFields[] = $node; } } else { //Checkgroups, Radiogroups - $node = new stdClass(); - $node->name = $key; - $node->value = implode("|",$val); + $node = new stdClass(); + $node->name = $key; + $node->value = implode( "|", $val ); $resFields[] = $node; } } @@ -1631,60 +1572,55 @@ class wsBase } } - $result = new wsGetVariableResponse( - 0, - count($resFields) . G::loadTranslation('ID_VARIABLES_SENT'), $resFields - ); + $result = new wsGetVariableResponse( 0, count( $resFields ) . G::loadTranslation( 'ID_VARIABLES_SENT' ), $resFields ); return $result; } else { - $result = new wsGetVariableResponse(23, G::loadTranslation('ID_VARIABLES_PARAM_ZERO'), null); + $result = new wsGetVariableResponse( 23, G::loadTranslation( 'ID_VARIABLES_PARAM_ZERO' ), null ); return $result; } } else { - $result = new wsGetVariableResponse(24, G::loadTranslation('ID_VARIABLES_PARAM_NOT_ARRAY'), null); + $result = new wsGetVariableResponse( 24, G::loadTranslation( 'ID_VARIABLES_PARAM_NOT_ARRAY' ), null ); return $result; } } catch (Exception $e) { - $result = new wsGetVariableResponse(100, $e->getMessage(), null); + $result = new wsGetVariableResponse( 100, $e->getMessage(), null ); return $result; } } /** - * get all variables the system and case selected + * get all variables the system and case selected + * * @param string $caseId * * @return $result will return an object */ - public function getVariablesNames($caseId) + public function getVariablesNames ($caseId) { try { $oCase = new Cases(); - $caseFields = $oCase->loadCase($caseId); + $caseFields = $oCase->loadCase( $caseId ); - $oldFields = $caseFields['APP_DATA']; - $resFields = array(); + $oldFields = $caseFields['APP_DATA']; + $resFields = array (); foreach ($oldFields as $key => $val) { $node = new stdClass(); - $node->name = $key; + $node->name = $key; $resFields[] = $node; } - $result = new wsGetVariableResponse( - 0, - count($resFields) . G::loadTranslation('ID_VARIABLES_SENT'), $resFields - ); + $result = new wsGetVariableResponse( 0, count( $resFields ) . G::loadTranslation( 'ID_VARIABLES_SENT' ), $resFields ); return $result; } catch (Exception $e) { - $result = new wsGetVariableResponse(100, $e->getMessage(), null); + $result = new wsGetVariableResponse( 100, $e->getMessage(), null ); return $result; } @@ -1692,79 +1628,80 @@ class wsBase /** * new Case begins a new case under the name of the logged-in user. + * * @param string $processId * @param string $userId * @param string $taskId * @param string $variables * @return $result will return an object */ - public function newCase($processId, $userId, $taskId, $variables) + public function newCase ($processId, $userId, $taskId, $variables) { try { - $originalValues = array(); + $originalValues = array (); //Unset any variable, because we are starting a new case - if (isset($_SESSION['APPLICATION'])) { + if (isset( $_SESSION['APPLICATION'] )) { $originalValues['APPLICATION'] = $_SESSION['APPLICATION']; - unset($_SESSION['APPLICATION']); + unset( $_SESSION['APPLICATION'] ); } - if (isset($_SESSION['PROCESS'])) { + if (isset( $_SESSION['PROCESS'] )) { $originalValues['PROCESS'] = $_SESSION['PROCESS']; - unset($_SESSION['PROCESS']); + unset( $_SESSION['PROCESS'] ); } - if (isset($_SESSION['TASK'])) { + if (isset( $_SESSION['TASK'] )) { $originalValues['TASK'] = $_SESSION['TASK']; - unset($_SESSION['TASK']); + unset( $_SESSION['TASK'] ); } - if (isset($_SESSION['INDEX'])) { + if (isset( $_SESSION['INDEX'] )) { $originalValues['INDEX'] = $_SESSION['INDEX']; - unset($_SESSION['INDEX']); + unset( $_SESSION['INDEX'] ); } - if (isset($_SESSION['USER_LOGGED'])) { + if (isset( $_SESSION['USER_LOGGED'] )) { $originalValues['USER_LOGGED'] = $_SESSION['USER_LOGGED']; - unset($_SESSION['USER_LOGGED']); + unset( $_SESSION['USER_LOGGED'] ); } - if (isset($_SESSION['USR_USERNAME'])) { + if (isset( $_SESSION['USR_USERNAME'] )) { $originalValues['USR_USERNAME'] = $_SESSION['USR_USERNAME']; - unset($_SESSION['USR_USERNAME']); + unset( $_SESSION['USR_USERNAME'] ); } - if (isset($_SESSION['STEP_POSITION'])) { + if (isset( $_SESSION['STEP_POSITION'] )) { $originalValues['STEP_POSITION'] = $_SESSION['STEP_POSITION']; - unset($_SESSION['STEP_POSITION']); + unset( $_SESSION['STEP_POSITION'] ); } - $Fields = array(); + $Fields = array (); - if (is_array($variables) && count($variables) > 0) { + if (is_array( $variables ) && count( $variables ) > 0) { $Fields = $variables; } $oProcesses = new Processes(); - $pro = $oProcesses->processExists($processId); + $pro = $oProcesses->processExists( $processId ); - if (!$pro) { - $result = new wsResponse(11, G::loadTranslation('ID_INVALID_PROCESS') . " " . $processId); + if (! $pro) { + $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId ); return $result; } $oCase = new Cases(); $oTask = new Tasks(); - $startingTasks = $oCase->getStartCases($userId); - array_shift($startingTasks); //remove the first row, the header row - $founded = ''; + $startingTasks = $oCase->getStartCases( $userId ); + array_shift( $startingTasks ); //remove the first row, the header row + $founded = ''; $tasksInThisProcess = 0; - $validTaskId = $taskId; + $validTaskId = $taskId; foreach ($startingTasks as $key => $val) { if ($val['pro_uid'] == $processId) { - $tasksInThisProcess++; + $tasksInThisProcess ++; $validTaskId = $val['uid']; } @@ -1776,73 +1713,73 @@ class wsBase if ($taskId == '') { if ($tasksInThisProcess == 1) { $founded = $validTaskId; - $taskId = $validTaskId; + $taskId = $validTaskId; } if ($tasksInThisProcess > 1) { - $result = new wsResponse(13, G::loadTranslation('ID_MULTIPLE_STARTING_TASKS')); + $result = new wsResponse( 13, G::loadTranslation( 'ID_MULTIPLE_STARTING_TASKS' ) ); return $result; } } - if ( $founded == '') { - $result = new wsResponse(14, G::loadTranslation('ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK')); + if ($founded == '') { + $result = new wsResponse( 14, G::loadTranslation( 'ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK' ) ); return $result; } - $case = $oCase->startCase($taskId, $userId); + $case = $oCase->startCase( $taskId, $userId ); - $_SESSION['APPLICATION'] = $case['APPLICATION']; - $_SESSION['PROCESS'] = $case['PROCESS']; - $_SESSION['TASK'] = $taskId; - $_SESSION['INDEX'] = $case['INDEX']; - $_SESSION['USER_LOGGED'] = $userId; - $_SESSION['USR_USERNAME'] = $case['USR_USERNAME']; + $_SESSION['APPLICATION'] = $case['APPLICATION']; + $_SESSION['PROCESS'] = $case['PROCESS']; + $_SESSION['TASK'] = $taskId; + $_SESSION['INDEX'] = $case['INDEX']; + $_SESSION['USER_LOGGED'] = $userId; + $_SESSION['USR_USERNAME'] = $case['USR_USERNAME']; $_SESSION['STEP_POSITION'] = 0; $caseId = $case['APPLICATION']; $caseNr = $case['CASE_NUMBER']; - $oldFields = $oCase->loadCase($caseId); + $oldFields = $oCase->loadCase( $caseId ); - $oldFields['APP_DATA'] = array_merge($oldFields['APP_DATA'], $Fields); + $oldFields['APP_DATA'] = array_merge( $oldFields['APP_DATA'], $Fields ); - $up_case = $oCase->updateCase($caseId, $oldFields); + $up_case = $oCase->updateCase( $caseId, $oldFields ); //Restore original values - if (isset($originalValues['APPLICATION'])) { + if (isset( $originalValues['APPLICATION'] )) { $_SESSION['APPLICATION'] = $originalValues['APPLICATION']; } - if (isset($originalValues['PROCESS'])) { + if (isset( $originalValues['PROCESS'] )) { $_SESSION['PROCESS'] = $originalValues['PROCESS']; } - if (isset($originalValues['TASK'])) { + if (isset( $originalValues['TASK'] )) { $_SESSION['TASK'] = $originalValues['TASK']; } - if (isset($originalValues['INDEX'])) { + if (isset( $originalValues['INDEX'] )) { $_SESSION['INDEX'] = $originalValues['INDEX']; } - if (isset($originalValues['USR_USERNAME'])) { + if (isset( $originalValues['USR_USERNAME'] )) { $_SESSION['USR_USERNAME'] = $originalValues['USR_USERNAME']; } - if (isset($originalValues['STEP_POSITION'])) { + if (isset( $originalValues['STEP_POSITION'] )) { $_SESSION['STEP_POSITION'] = $originalValues['STEP_POSITION']; } - $result = new wsResponse(0, G::loadTranslation('ID_STARTED_SUCCESSFULLY')); - $result->caseId = $caseId; + $result = new wsResponse( 0, G::loadTranslation( 'ID_STARTED_SUCCESSFULLY' ) ); + $result->caseId = $caseId; $result->caseNumber = $caseNr; return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -1850,85 +1787,86 @@ class wsBase /** * creates a new case impersonating a user who has the proper privileges to create new cases + * * @param string $processId * @param string $userId * @param string $variables * @return $result will return an object */ - public function newCaseImpersonate($processId, $userId, $variables) + public function newCaseImpersonate ($processId, $userId, $variables) { try { - if (is_array($variables)) { - if (count($variables) > 0) { - $c = count($variables); + if (is_array( $variables )) { + if (count( $variables ) > 0) { + $c = count( $variables ); $Fields = $variables; if ($c == 0) { //Si no tenenmos ninguna variables en el array variables. - $result = new wsResponse(10, G::loadTranslation('ID_ARRAY_VARIABLES_EMPTY')); + $result = new wsResponse( 10, G::loadTranslation( 'ID_ARRAY_VARIABLES_EMPTY' ) ); return $result; } } } else { - $result = new wsResponse(10, G::loadTranslation('ID_VARIABLES_PARAM_NOT_ARRAY')); + $result = new wsResponse( 10, G::loadTranslation( 'ID_VARIABLES_PARAM_NOT_ARRAY' ) ); return $result; } $processes = new Processes(); - if (!$processes->processExists($processId)) { - $result = new wsResponse(11, G::loadTranslation('ID_INVALID_PROCESS') . " " . $processId . "!!"); + if (! $processes->processExists( $processId )) { + $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId . "!!" ); return $result; } $user = new Users(); - if (!$user->userExists($userId)) { - $result = new wsResponse(11, G::loadTranslation('ID_USER_NOT_REGISTERED') . " " . $userId . "!!"); + if (! $user->userExists( $userId )) { + $result = new wsResponse( 11, G::loadTranslation( 'ID_USER_NOT_REGISTERED' ) . " " . $userId . "!!" ); return $result; } $oCase = new Cases(); - $arrayTask = $processes->getStartingTaskForUser($processId, null); - $numTasks = count($arrayTask); + $arrayTask = $processes->getStartingTaskForUser( $processId, null ); + $numTasks = count( $arrayTask ); if ($numTasks == 1) { - $case = $oCase->startCase($arrayTask[0]['TAS_UID'], $userId); - $caseId = $case['APPLICATION']; + $case = $oCase->startCase( $arrayTask[0]['TAS_UID'], $userId ); + $caseId = $case['APPLICATION']; $caseNumber = $case['CASE_NUMBER']; - $oldFields = $oCase->loadCase($caseId); + $oldFields = $oCase->loadCase( $caseId ); - $oldFields['APP_DATA'] = array_merge($oldFields['APP_DATA'], $Fields); + $oldFields['APP_DATA'] = array_merge( $oldFields['APP_DATA'], $Fields ); - $up_case = $oCase->updateCase($caseId, $oldFields); + $up_case = $oCase->updateCase( $caseId, $oldFields ); - $result = new wsResponse(0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULLY')); + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); - $result->caseId = $caseId; + $result->caseId = $caseId; $result->caseNumber = $caseNumber; return $result; } else { if ($numTasks == 0) { - $result = new wsResponse(12, G::loadTranslation('ID_NO_STARTING_TASK')); + $result = new wsResponse( 12, G::loadTranslation( 'ID_NO_STARTING_TASK' ) ); return $result; } if ($numTasks > 1) { - $result = new wsResponse(13, G::loadTranslation ('ID_MULTIPLE_STARTING_TASKS')); + $result = new wsResponse( 13, G::loadTranslation( 'ID_MULTIPLE_STARTING_TASKS' ) ); return $result; } } } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -1936,12 +1874,13 @@ class wsBase /** * derivate Case moves the case to the next task in the process according to the routing rules + * * @param string $userId * @param string $caseId * @param string $delIndex * @return $result will return an object */ - public function derivateCase($userId, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment=false) + public function derivateCase ($userId, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment = false) { try { $sStatus = 'TO_DO'; @@ -1950,133 +1889,126 @@ class wsBase $varTriggers = "\n"; if ($delIndex == '') { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); - if (AppDelegationPeer::doCount($oCriteria) > 1) { - $result = new wsResponse(20, G::loadTranslation('ID_SPECIFY_DELEGATION_INDEX')); + if (AppDelegationPeer::doCount( $oCriteria ) > 1) { + $result = new wsResponse( 20, G::loadTranslation( 'ID_SPECIFY_DELEGATION_INDEX' ) ); return $result; } - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - $aRow = $oDataset->getRow(); + $aRow = $oDataset->getRow(); $delIndex = $aRow['DEL_INDEX']; } $oAppDel = new AppDelegation(); - $appdel = $oAppDel->Load($caseId, $delIndex); + $appdel = $oAppDel->Load( $caseId, $delIndex ); if ($userId != $appdel['USR_UID']) { - $result = new wsResponse(17, G::loadTranslation('ID_CASE_ASSIGNED_ANOTHER_USER')); + $result = new wsResponse( 17, G::loadTranslation( 'ID_CASE_ASSIGNED_ANOTHER_USER' ) ); return $result; } if ($appdel['DEL_FINISH_DATE'] != null) { - $result = new wsResponse(18, G::loadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')); + $result = new wsResponse( 18, G::loadTranslation( 'ID_CASE_DELEGATION_ALREADY_CLOSED' ) ); return $result; } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelayPeer::APP_UID); - $oCriteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX); - $oCriteria->add(AppDelayPeer::APP_TYPE, ''); - $oCriteria->add( - $oCriteria->getNewCriterion(AppDelayPeer::APP_TYPE, 'PAUSE')->addOr( - $oCriteria->getNewCriterion(AppDelayPeer::APP_TYPE, 'CANCEL') - ) - ); - $oCriteria->addAscendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); - $oDataset = AppDelayPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelayPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX ); + $oCriteria->add( AppDelayPeer::APP_TYPE, '' ); + $oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) ); + $oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE ); + $oDataset = AppDelayPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - if (is_array($aRow)) { - if ( isset($aRow['APP_DISABLE_ACTION_USER']) && $aRow['APP_DISABLE_ACTION_USER'] != 0 && - isset($aRow['APP_DISABLE_ACTION_DATE']) && $aRow['APP_DISABLE_ACTION_DATE'] != '' - ) { - $result = new wsResponse(19, G::loadTranslation('ID_CASE_IN_STATUS') . " " . $aRow['APP_TYPE']); + if (is_array( $aRow )) { + if (isset( $aRow['APP_DISABLE_ACTION_USER'] ) && $aRow['APP_DISABLE_ACTION_USER'] != 0 && isset( $aRow['APP_DISABLE_ACTION_DATE'] ) && $aRow['APP_DISABLE_ACTION_DATE'] != '') { + $result = new wsResponse( 19, G::loadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] ); return $result; } } - $aData['APP_UID'] = $caseId; + $aData['APP_UID'] = $caseId; $aData['DEL_INDEX'] = $delIndex; - $aData['USER_UID'] = $userId; + $aData['USER_UID'] = $userId; //Load data - $oCase = new Cases(); - $appFields = $oCase->loadCase($caseId, $delIndex); + $oCase = new Cases(); + $appFields = $oCase->loadCase( $caseId, $delIndex ); - if (is_null($appFields["DEL_INIT_DATE"])) { - $oCase->setDelInitDate($caseId, $delIndex); - $appFields = $oCase->loadCase($caseId, $delIndex); + if (is_null( $appFields["DEL_INIT_DATE"] )) { + $oCase->setDelInitDate( $caseId, $delIndex ); + $appFields = $oCase->loadCase( $caseId, $delIndex ); } $appFields["APP_DATA"]["APPLICATION"] = $caseId; - if (!isset($_SESSION["PROCESS"])) { + if (! isset( $_SESSION["PROCESS"] )) { $_SESSION["PROCESS"] = $appFields["PRO_UID"]; } if ($bExecuteTriggersBeforeAssignment) { //Execute triggers before assignment - $aTriggers = $oCase->loadTriggers($appdel['TAS_UID'], 'ASSIGN_TASK', -1, 'BEFORE'); + $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 1, 'BEFORE' ); - if (count($aTriggers) > 0) { + if (count( $aTriggers ) > 0) { $oPMScript = new PMScript(); foreach ($aTriggers as $aTrigger) { //$appFields = $oCase->loadCase( $caseId ); //$appFields['APP_DATA']['APPLICATION'] = $caseId; + //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; - $params->SID = $this->wsSessionId; + $params->SID = $this->wsSessionId; } - $appFields["APP_DATA"] = array_merge($appFields["APP_DATA"], G::getSystemConstants($params)); + $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript - $oPMScript->setFields($appFields['APP_DATA']); + $oPMScript->setFields( $appFields['APP_DATA'] ); $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { - $oPMScript->setScript($aTrigger['ST_CONDITION']); + $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { - $oPMScript->setScript($aTrigger['TRI_WEBBOT']); + $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); - $varTriggers .= "
-= Before Assignment =-
" . nl2br( - htmlentities($aTrigger['TRI_WEBBOT'], ENT_QUOTES) - ) . "
"; + $varTriggers .= "
-= Before Assignment =-
" . nl2br( htmlentities( $aTrigger['TRI_WEBBOT'], ENT_QUOTES ) ) . "
"; //$appFields = $oCase->loadCase( $caseId ); $appFields['APP_DATA'] = $oPMScript->aFields; - $oCase->updateCase($caseId, $appFields); + $oCase->updateCase( $caseId, $appFields ); } } } } //Execute triggers before derivation - $aTriggers = $oCase->loadTriggers($appdel['TAS_UID'], 'ASSIGN_TASK', -2, 'BEFORE'); + $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'BEFORE' ); - if (count($aTriggers) > 0) { + if (count( $aTriggers ) > 0) { $varTriggers .= "-= Before Derivation =-
"; $oPMScript = new PMScript(); @@ -2085,89 +2017,88 @@ class wsBase //$appFields = $oCase->loadCase( $caseId ); //$appFields['APP_DATA']['APPLICATION'] = $caseId; + //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; - $params->SID = $this->wsSessionId; + $params->SID = $this->wsSessionId; } - $appFields["APP_DATA"] = array_merge($appFields["APP_DATA"], G::getSystemConstants($params)); + $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript - $oPMScript->setFields($appFields['APP_DATA']); + $oPMScript->setFields( $appFields['APP_DATA'] ); $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { - $oPMScript->setScript($aTrigger['ST_CONDITION']); + $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { - $oPMScript->setScript($aTrigger['TRI_WEBBOT']); + $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); - $oTrigger = TriggersPeer::retrieveByPk($aTrigger['TRI_UID']); - $varTriggers .= " - " . nl2br(htmlentities($oTrigger->getTriTitle(), ENT_QUOTES)) ."
"; + $oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] ); + $varTriggers .= " - " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "
"; //$appFields = $oCase->loadCase( $caseId ); $appFields['APP_DATA'] = $oPMScript->aFields; //$appFields['APP_DATA']['APPLICATION'] = $caseId; - $oCase->updateCase($caseId, $appFields); + $oCase->updateCase( $caseId, $appFields ); } } } $oDerivation = new Derivation(); - $derive = $oDerivation->prepareInformation($aData); + $derive = $oDerivation->prepareInformation( $aData ); - if (isset($derive[1])) { + if (isset( $derive[1] )) { if ($derive[1]['ROU_TYPE'] == 'SELECT') { - $result = new wsResponse(21, G::loadTranslation('ID_CAN_NOT_ROUTE_CASE_USING_WEBSERVICES')); + $result = new wsResponse( 21, G::loadTranslation( 'ID_CAN_NOT_ROUTE_CASE_USING_WEBSERVICES' ) ); return $result; } } else { - $result = new wsResponse(22, G::loadTranslation('ID_TASK_DOES_NOT_HAVE_ROUTING_RULE')); + $result = new wsResponse( 22, G::loadTranslation( 'ID_TASK_DOES_NOT_HAVE_ROUTING_RULE' ) ); return $result; } foreach ($derive as $key => $val) { if ($val['NEXT_TASK']['TAS_ASSIGN_TYPE'] == 'MANUAL') { - $result = new wsResponse(15, G::loadTranslation('ID_TASK_DEFINED_MANUAL_ASSIGNMENT')); + $result = new wsResponse( 15, G::loadTranslation( 'ID_TASK_DEFINED_MANUAL_ASSIGNMENT' ) ); return $result; } //Routed to the next task, if end process then not exist user - $nodeNext = array(); + $nodeNext = array (); $usrasgdUid = null; $usrasgdUserName = null; - if (isset($val['NEXT_TASK']['USER_ASSIGNED'])) { + if (isset( $val['NEXT_TASK']['USER_ASSIGNED'] )) { $usrasgdUid = $val['NEXT_TASK']['USER_ASSIGNED']['USR_UID']; $usrasgdUserName = '(' . $val['NEXT_TASK']['USER_ASSIGNED']['USR_USERNAME'] . ')'; } $nodeNext['TAS_UID'] = $val['NEXT_TASK']['TAS_UID']; $nodeNext['USR_UID'] = $usrasgdUid; - $nodeNext['TAS_ASSIGN_TYPE'] = $val['NEXT_TASK']['TAS_ASSIGN_TYPE']; + $nodeNext['TAS_ASSIGN_TYPE'] = $val['NEXT_TASK']['TAS_ASSIGN_TYPE']; $nodeNext['TAS_DEF_PROC_CODE'] = $val['NEXT_TASK']['TAS_DEF_PROC_CODE']; $nodeNext['DEL_PRIORITY'] = $appdel['DEL_PRIORITY']; - $nodeNext['TAS_PARENT'] = $val['NEXT_TASK']['TAS_PARENT']; + $nodeNext['TAS_PARENT'] = $val['NEXT_TASK']['TAS_PARENT']; $nextDelegations[] = $nodeNext; - $varResponse = $varResponse . ( - ($varResponse != '')? ',' : '' - ) . $val['NEXT_TASK']['TAS_TITLE'] . $usrasgdUserName; + $varResponse = $varResponse . (($varResponse != '') ? ',' : '') . $val['NEXT_TASK']['TAS_TITLE'] . $usrasgdUserName; } $appFields['DEL_INDEX'] = $delIndex; - if (isset($derive['TAS_UID'])) { - $appFields['TAS_UID'] = $derive['TAS_UID']; + if (isset( $derive['TAS_UID'] )) { + $appFields['TAS_UID'] = $derive['TAS_UID']; } //Save data - Start @@ -2175,53 +2106,51 @@ class wsBase //$oCase->updateCase ( $caseId, $appFields ); //Save data - End - $row = array(); - $oCriteria = new Criteria('workflow'); + + $row = array (); + $oCriteria = new Criteria( 'workflow' ); $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(RoutePeer::ROU_TYPE); - $oCriteria->addSelectColumn(RoutePeer::ROU_NEXT_TASK); - $oCriteria->add(RoutePeer::TAS_UID, $appdel['TAS_UID']); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->addSelectColumn( RoutePeer::ROU_TYPE ); + $oCriteria->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); + $oCriteria->add( RoutePeer::TAS_UID, $appdel['TAS_UID'] ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $row[] = array('ROU_TYPE' => $aRow['ROU_TYPE'], 'ROU_NEXT_TASK' => $aRow['ROU_NEXT_TASK']); + $row[] = array ('ROU_TYPE' => $aRow['ROU_TYPE'],'ROU_NEXT_TASK' => $aRow['ROU_NEXT_TASK'] + ); $oDataset->next(); } //derivate case - $aCurrentDerivation = array( - 'APP_UID' => $caseId, - 'DEL_INDEX' => $delIndex, - 'APP_STATUS' => $sStatus, - 'TAS_UID' => $appdel['TAS_UID'], - 'ROU_TYPE' => $row[0]['ROU_TYPE'] + $aCurrentDerivation = array ('APP_UID' => $caseId,'DEL_INDEX' => $delIndex,'APP_STATUS' => $sStatus,'TAS_UID' => $appdel['TAS_UID'],'ROU_TYPE' => $row[0]['ROU_TYPE'] ); - $oDerivation->derivate($aCurrentDerivation, $nextDelegations); - $appFields = $oCase->loadCase($caseId); + $oDerivation->derivate( $aCurrentDerivation, $nextDelegations ); + $appFields = $oCase->loadCase( $caseId ); //Execute triggers after derivation - $aTriggers = $oCase->loadTriggers($appdel['TAS_UID'], 'ASSIGN_TASK', -2, 'AFTER'); + $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'AFTER' ); - if (count($aTriggers) > 0) { + if (count( $aTriggers ) > 0) { //$appFields['APP_DATA']['APPLICATION'] = $caseId; + //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; - $params->SID = $this->wsSessionId; + $params->SID = $this->wsSessionId; } - $appFields["APP_DATA"] = array_merge($appFields["APP_DATA"], G::getSystemConstants($params)); + $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript $oPMScript = new PMScript(); - $oPMScript->setFields($appFields['APP_DATA']); + $oPMScript->setFields( $appFields['APP_DATA'] ); $varTriggers .= "-= After Derivation =-
"; @@ -2229,79 +2158,71 @@ class wsBase $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { - $oPMScript->setScript($aTrigger['ST_CONDITION']); + $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { - $oPMScript->setScript($aTrigger['TRI_WEBBOT']); + $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); - $oTrigger = TriggersPeer::retrieveByPk($aTrigger['TRI_UID']); - $varTriggers .= " - ".nl2br(htmlentities($oTrigger->getTriTitle(), ENT_QUOTES)) . "
"; + $oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] ); + $varTriggers .= " - " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "
"; //$appFields = $oCase->loadCase($caseId); $appFields['APP_DATA'] = $oPMScript->aFields; //$appFields['APP_DATA']['APPLICATION'] = $caseId; //$appFields = $oCase->loadCase($caseId); - $oCase->updateCase($caseId, $appFields); + $oCase->updateCase( $caseId, $appFields ); } } } $oUser = new Users(); - $aUser = $oUser->load($userId); + $aUser = $oUser->load( $userId ); - if (trim($aUser['USR_EMAIL']) == '') { - $aUser['USR_EMAIL'] = 'info@'.$_SERVER['HTTP_HOST']; + if (trim( $aUser['USR_EMAIL'] ) == '') { + $aUser['USR_EMAIL'] = 'info@' . $_SERVER['HTTP_HOST']; } - $sFromName = '"' . $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME'] . '" <'.$aUser['USR_EMAIL'].'>'; - $oCase->sendNotifications( - $appdel['TAS_UID'], - $nextDelegations, - $appFields['APP_DATA'], - $caseId, - $delIndex, - $sFromName - ); + $sFromName = '"' . $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME'] . '" <' . $aUser['USR_EMAIL'] . '>'; + $oCase->sendNotifications( $appdel['TAS_UID'], $nextDelegations, $appFields['APP_DATA'], $caseId, $delIndex, $sFromName ); //Save data - Start //$appFields = $oCase->loadCase($caseId); //$oCase->updateCase($caseId, $appFields); //Save data - End + $oProcess = new Process(); - $oProcessFieds = $oProcess->Load($appFields['PRO_UID']); + $oProcessFieds = $oProcess->Load( $appFields['PRO_UID'] ); //here dubug mode in web entry - if (isset($oProcessFieds['PRO_DEBUG']) && $oProcessFieds['PRO_DEBUG']) { - $result = new wsResponse( - 0, - $varResponse . " + + if (isset( $oProcessFieds['PRO_DEBUG'] ) && $oProcessFieds['PRO_DEBUG']) { + $result = new wsResponse( 0, $varResponse . "

- " . G::LoadTranslation('ID_DEBUG_MESSAGE') . "
" . $varTriggers - ); + " . G::LoadTranslation( 'ID_DEBUG_MESSAGE' ) . "" . $varTriggers ); } else { - $result = new wsResponse(0, $varResponse." --- ".$oProcessFieds['PRO_DEBUG']); + $result = new wsResponse( 0, $varResponse . " --- " . $oProcessFieds['PRO_DEBUG'] ); } $res = $result->getPayloadArray(); //now fill the array of AppDelegationPeer - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppDelegationPeer::USR_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_THREAD); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_PREVIOUS, $delIndex ); - $oCriteria->addAscendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD_STATUS ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::DEL_PREVIOUS, $delIndex ); + $oCriteria->addAscendingOrderByColumn( AppDelegationPeer::DEL_INDEX ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $aCurrentUsers = array(); + $aCurrentUsers = array (); while ($oDataset->next()) { $aAppDel = $oDataset->getRow(); @@ -2309,8 +2230,8 @@ class wsBase $oUser = new Users(); try { - $oUser->load($aAppDel['USR_UID']); - $uFields = $oUser->toArray(BasePeer::TYPE_FIELDNAME); + $oUser->load( $aAppDel['USR_UID'] ); + $uFields = $oUser->toArray( BasePeer::TYPE_FIELDNAME ); $currentUserName = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname(); } catch (Exception $e) { $currentUserName = ''; @@ -2319,7 +2240,7 @@ class wsBase $oTask = new Task(); try { - $uFields = $oTask->load($aAppDel['TAS_UID']); + $uFields = $oTask->load( $aAppDel['TAS_UID'] ); $taskName = $uFields['TAS_TITLE']; } catch (Exception $e) { $taskName = ''; @@ -2332,15 +2253,16 @@ class wsBase $eventTas = $aAppDel['TAS_UID']; $oEvent = new Event(); - $oEvent->createAppEvents($eventPro, $eventApp, $eventInd, $eventTas); + $oEvent->createAppEvents( $eventPro, $eventApp, $eventInd, $eventTas ); // end events + $currentUser = new stdClass(); - $currentUser->userId = $aAppDel['USR_UID']; - $currentUser->userName = $currentUserName; - $currentUser->taskId = $aAppDel['TAS_UID']; - $currentUser->taskName = $taskName; - $currentUser->delIndex = $aAppDel['DEL_INDEX']; + $currentUser->userId = $aAppDel['USR_UID']; + $currentUser->userName = $currentUserName; + $currentUser->taskId = $aAppDel['TAS_UID']; + $currentUser->taskName = $taskName; + $currentUser->delIndex = $aAppDel['DEL_INDEX']; $currentUser->delThread = $aAppDel['DEL_THREAD']; $currentUser->delThreadStatus = $aAppDel['DEL_THREAD_STATUS']; $aCurrentUsers[] = $currentUser; @@ -2350,106 +2272,105 @@ class wsBase return $res; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } } /** - * execute Trigger, executes a ProcessMaker trigger. Note that triggers which are tied to case derivation + * execute Trigger, executes a ProcessMaker trigger. + * Note that triggers which are tied to case derivation * will executing automatically. + * * @param string $userId * @param string $caseId * @param string $delIndex * @return $result will return an object */ - public function executeTrigger($userId, $caseId, $triggerIndex, $delIndex) + public function executeTrigger ($userId, $caseId, $triggerIndex, $delIndex) { try { $oAppDel = new AppDelegation(); - $appdel = $oAppDel->Load($caseId, $delIndex); + $appdel = $oAppDel->Load( $caseId, $delIndex ); - if ($userId!=$appdel['USR_UID']) { - $result = new wsResponse(17, G::loadTranslation('ID_CASE_ASSIGNED_ANOTHER_USER')); + if ($userId != $appdel['USR_UID']) { + $result = new wsResponse( 17, G::loadTranslation( 'ID_CASE_ASSIGNED_ANOTHER_USER' ) ); return $result; } if ($appdel['DEL_FINISH_DATE'] != null) { - $result = new wsResponse(18, G::loadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')); + $result = new wsResponse( 18, G::loadTranslation( 'ID_CASE_DELEGATION_ALREADY_CLOSED' ) ); return $result; } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelayPeer::APP_UID); - $oCriteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX); - $oCriteria->add(AppDelayPeer::APP_TYPE, ''); - $oCriteria->add( - $oCriteria->getNewCriterion(AppDelayPeer::APP_TYPE, 'PAUSE')->addOr( - $oCriteria->getNewCriterion(AppDelayPeer::APP_TYPE, 'CANCEL') - ) - ); - $oCriteria->addAscendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); - $oDataset = AppDelayPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( AppDelayPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX ); + $oCriteria->add( AppDelayPeer::APP_TYPE, '' ); + $oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) ); + $oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE ); + $oDataset = AppDelayPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - if (is_array($aRow)) { + if (is_array( $aRow )) { if ($aRow['APP_DISABLE_ACTION_USER'] != 0 && $aRow['APP_DISABLE_ACTION_DATE'] != '') { - $result = new wsResponse(19, G::loadTranslation('ID_CASE_IN_STATUS') . " ". $aRow['APP_TYPE']); + $result = new wsResponse( 19, G::loadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] ); return $result; } } //Load data - $oCase = new Cases(); - $appFields = $oCase->loadCase($caseId); + $oCase = new Cases(); + $appFields = $oCase->loadCase( $caseId ); $appFields["APP_DATA"]["APPLICATION"] = $caseId; - if (!isset($_SESSION["PROCESS"])) { + if (! isset( $_SESSION["PROCESS"] )) { $_SESSION["PROCESS"] = $appFields["PRO_UID"]; } //executeTrigger - $aTriggers = array(); + $aTriggers = array (); $c = new Criteria(); - $c->add(TriggersPeer::TRI_UID, $triggerIndex); - $rs = TriggersPeer::doSelectRS($c); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $c->add( TriggersPeer::TRI_UID, $triggerIndex ); + $rs = TriggersPeer::doSelectRS( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rs->next(); $row = $rs->getRow(); - if (is_array($row) && $row['TRI_TYPE'] == 'SCRIPT' ) { + if (is_array( $row ) && $row['TRI_TYPE'] == 'SCRIPT') { $aTriggers[] = $row; $oPMScript = new PMScript(); - $oPMScript->setFields($appFields['APP_DATA']); - $oPMScript->setScript($row['TRI_WEBBOT']); + $oPMScript->setFields( $appFields['APP_DATA'] ); + $oPMScript->setScript( $row['TRI_WEBBOT'] ); $oPMScript->execute(); //Save data - Start $appFields['APP_DATA'] = $oPMScript->aFields; //$appFields = $oCase->loadCase($caseId); - $oCase->updateCase($caseId, $appFields); + $oCase->updateCase( $caseId, $appFields ); //Save data - End } else { $data['TRIGGER_INDEX'] = $triggerIndex; - $result = new wsResponse(100, G::loadTranslation('ID_INVALID_TRIGGER', SYS_LANG, $data)); + $result = new wsResponse( 100, G::loadTranslation( 'ID_INVALID_TRIGGER', SYS_LANG, $data ) ); return $result; } - $result = new wsResponse(0, G::loadTranslation('ID_EXECUTED') . ": " . trim($row['TRI_WEBBOT'])); + $result = new wsResponse( 0, G::loadTranslation( 'ID_EXECUTED' ) . ": " . trim( $row['TRI_WEBBOT'] ) ); //$result = new wsResponse(0, 'executed: ' . print_r($oPMScript, 1)); + return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -2457,42 +2378,48 @@ class wsBase /** * task Case - * @param string sessionId : The session ID which is obtained when logging in - * @param string caseId : The case ID. The caseList() function can be used to find the ID number for cases + * + * @param string sessionId : The session ID which is obtained when logging in + * @param string caseId : The case ID. The caseList() function can be used to find the ID number for cases * @return $result returns the current task for a given case. Note that the logged-in user must have privileges * to access the task */ - public function taskCase($caseId) + public function taskCase ($caseId) { try { - $result = array(); - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $result = array (); + $oCriteria = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); - $oCriteria->addAsColumn('TAS_TITLE', 'C1.CON_VALUE'); - $oCriteria->addAlias("C1", 'CONTENT'); - $tasTitleConds = array(); - $tasTitleConds[] = array(AppDelegationPeer::TAS_UID, 'C1.CON_ID'); - $tasTitleConds[] = array('C1.CON_CATEGORY' , $del . 'TAS_TITLE' . $del); - $tasTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); - $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); + $oCriteria->addAsColumn( 'TAS_TITLE', 'C1.CON_VALUE' ); + $oCriteria->addAlias( "C1", 'CONTENT' ); + $tasTitleConds = array (); + $tasTitleConds[] = array (AppDelegationPeer::TAS_UID,'C1.CON_ID' + ); + $tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del + ); + $tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del + ); + $oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN ); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN' ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array('guid' => $aRow['DEL_INDEX'], 'name' => $aRow['TAS_TITLE']); + $result[] = array ('guid' => $aRow['DEL_INDEX'],'name' => $aRow['TAS_TITLE'] + ); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -2500,26 +2427,29 @@ class wsBase /** * process list verified - * @param string sessionId : The session ID which is obtained when logging in - * @param string userId : - * @return $result will return an object + * + * @param string sessionId : The session ID which is obtained when logging in + * @param string userId : + * @return $result will return an object */ - public function processListVerified($userId) + public function processListVerified ($userId) { try { $oCase = new Cases(); - $rows = $oCase->getStartCases($userId); - $result = array(); + $rows = $oCase->getStartCases( $userId ); + $result = array (); foreach ($rows as $key => $val) { if ($key != 0) { - $result[] = array('guid' => $val['pro_uid'], 'name' => $val['value']); + $result[] = array ('guid' => $val['pro_uid'],'name' => $val['value'] + ); } } return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -2527,109 +2457,121 @@ class wsBase /** * reassign Case - * @param string sessionId : The session ID (which was obtained during login) - * @param string caseId : The case ID (which can be obtained with the caseList() function) - * @param string delIndex : The delegation index number of the case (which can be obtained with the caseList() - * function). - * @param string userIdSource : The user who is currently assigned the case. - * @param string userIdTarget : The target user who will be newly assigned to the case. - * @return $result will return an object + * + * @param string sessionId : The session ID (which was obtained during login) + * @param string caseId : The case ID (which can be obtained with the caseList() function) + * @param string delIndex : The delegation index number of the case (which can be obtained with the caseList() + * function). + * @param string userIdSource : The user who is currently assigned the case. + * @param string userIdTarget : The target user who will be newly assigned to the case. + * @return $result will return an object */ - public function reassignCase($sessionId, $caseId, $delIndex, $userIdSource, $userIdTarget) + public function reassignCase ($sessionId, $caseId, $delIndex, $userIdSource, $userIdTarget) { try { if ($userIdTarget == $userIdSource) { - $result = new wsResponse(30, G::loadTranslation('ID_TARGET_ORIGIN_USER_SAME')); + $result = new wsResponse( 30, G::loadTranslation( 'ID_TARGET_ORIGIN_USER_SAME' ) ); return $result; } - /******************( 1 )******************/ - $oCriteria = new Criteria('workflow'); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oCriteria->add(UsersPeer::USR_UID, $userIdSource); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + /** + * ****************( 1 )***************** + */ + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oCriteria->add( UsersPeer::USR_UID, $userIdSource ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - if (!is_array($aRow)) { - $result = new wsResponse(31, G::loadTranslation('ID_INVALID_ORIGIN_USER')); + if (! is_array( $aRow )) { + $result = new wsResponse( 31, G::loadTranslation( 'ID_INVALID_ORIGIN_USER' ) ); return $result; } - /******************( 2 )******************/ + /** + * ****************( 2 )***************** + */ $oCase = new Cases(); - $rows = $oCase->loadCase($caseId); + $rows = $oCase->loadCase( $caseId ); - if (!is_array($aRow)) { - $result = new wsResponse(32, G::loadTranslation('ID_CASE_NOT_OPEN')); + if (! is_array( $aRow )) { + $result = new wsResponse( 32, G::loadTranslation( 'ID_CASE_NOT_OPEN' ) ); return $result; } - /******************( 3 )******************/ - $oCriteria = new Criteria('workflow'); - $aConditions = array(); + /** + * ****************( 3 )***************** + */ + $oCriteria = new Criteria( 'workflow' ); + $aConditions = array (); // $aConditions[] = array(AppDelegationPeer::USR_UID, TaskUserPeer::USR_UID); // $aConditions[] = array(AppDelegationPeer::TAS_UID, TaskUserPeer::TAS_UID); // $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); //$oCriteria->addJoin(AppDelegationPeer::USR_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::USR_UID, $userIdSource); - $oCriteria->add(AppDelegationPeer::DEL_INDEX, $delIndex); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); + $oCriteria->add( AppDelegationPeer::USR_UID, $userIdSource ); + $oCriteria->add( AppDelegationPeer::DEL_INDEX, $delIndex ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); + $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - if (!is_array($aRow)) { - $result = new wsResponse(33, G::loadTranslation('ID_INVALID_CASE_DELEGATION_INDEX')); + if (! is_array( $aRow )) { + $result = new wsResponse( 33, G::loadTranslation( 'ID_INVALID_CASE_DELEGATION_INDEX' ) ); return $result; } $tasUid = $aRow['TAS_UID']; $derivation = new Derivation(); - $userList = $derivation->getAllUsersFromAnyTask($tasUid); + $userList = $derivation->getAllUsersFromAnyTask( $tasUid ); - if (!in_array($userIdTarget, $userList)) { - $result = new wsResponse(34, G::loadTranslation('ID_TARGET_USER_DOES_NOT_HAVE_RIGHTS')); + if (! in_array( $userIdTarget, $userList )) { + $result = new wsResponse( 34, G::loadTranslation( 'ID_TARGET_USER_DOES_NOT_HAVE_RIGHTS' ) ); return $result; } - /******************( 4 )******************/ - $oCriteria = new Criteria('workflow'); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); - $oCriteria->add(UsersPeer::USR_UID, $userIdTarget); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + /** + * ****************( 4 )***************** + */ + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); + $oCriteria->add( UsersPeer::USR_UID, $userIdTarget ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); - if (!is_array($aRow)) { - $result = new wsResponse(35, G::loadTranslation('ID_TARGET_USER_DESTINATION_INVALID')); + if (! is_array( $aRow )) { + $result = new wsResponse( 35, G::loadTranslation( 'ID_TARGET_USER_DESTINATION_INVALID' ) ); return $result; } - /******************( 5 )******************/ - $var = $oCase->reassignCase($caseId, $delIndex, $userIdSource, $userIdTarget); + /** + * ****************( 5 )***************** + */ + $var = $oCase->reassignCase( $caseId, $delIndex, $userIdSource, $userIdTarget ); - if (!$var) { - $result = new wsResponse(36, G::loadTranslation('ID_CASE_COULD_NOT_REASSIGNED')); + if (! $var) { + $result = new wsResponse( 36, G::loadTranslation( 'ID_CASE_COULD_NOT_REASSIGNED' ) ); return $result; } - $result = new wsResponse(0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULLY')); + $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); return $result; } catch (Exception $e) { - $result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage()); + $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() + ); return $result; } @@ -2637,37 +2579,38 @@ class wsBase /** * get system information - * @param string sessionId : The session ID (which was obtained at login) + * + * @param string sessionId : The session ID (which was obtained at login) * @return $eturns information about the WAMP/LAMP stack, the workspace database, the IP number and version * of ProcessMaker, and the IP number and version of web browser of the user */ - public function systemInformation() + public function systemInformation () { try { - define('SKIP_RENDER_SYSTEM_INFORMATION', true); + define( 'SKIP_RENDER_SYSTEM_INFORMATION', true ); require_once (PATH_METHODS . 'login' . PATH_SEP . 'dbInfo.php'); - $result->status_code = 0; - $result->message = G::loadTranslation ('ID_SUCESSFUL'); - $result->timestamp = date ( 'Y-m-d H:i:s'); - G::LoadClass("system"); - $result->version = System::getVersion(); - $result->operatingSystem = $redhat; - $result->webServer = getenv('SERVER_SOFTWARE'); - $result->serverName = getenv('SERVER_NAME'); - $result->serverIp = $Fields['IP']; //lookup ($ip); - $result->phpVersion = phpversion(); - $result->databaseVersion = $Fields['DATABASE']; - $result->databaseServerIp = $Fields['DATABASE_SERVER']; - $result->databaseName = $Fields['DATABASE_NAME']; + $result->status_code = 0; + $result->message = G::loadTranslation( 'ID_SUCESSFUL' ); + $result->timestamp = date( 'Y-m-d H:i:s' ); + G::LoadClass( "system" ); + $result->version = System::getVersion(); + $result->operatingSystem = $redhat; + $result->webServer = getenv( 'SERVER_SOFTWARE' ); + $result->serverName = getenv( 'SERVER_NAME' ); + $result->serverIp = $Fields['IP']; //lookup ($ip); + $result->phpVersion = phpversion(); + $result->databaseVersion = $Fields['DATABASE']; + $result->databaseServerIp = $Fields['DATABASE_SERVER']; + $result->databaseName = $Fields['DATABASE_NAME']; $result->availableDatabases = $Fields['AVAILABLE_DB']; - $result->userBrowser = $Fields['HTTP_USER_AGENT']; - $result->userIp = $Fields['IP']; + $result->userBrowser = $Fields['HTTP_USER_AGENT']; + $result->userIp = $Fields['IP']; return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -2675,32 +2618,28 @@ class wsBase /** * import process fromLibrary: downloads and imports a process from the ProcessMaker library + * * @param string sessionId : The session ID (which was obtained at login). * @param string processId : * @param string version : * @param string importOption : * @param string usernameLibrary : The username to obtain access to the ProcessMaker library. * @param string passwordLibrary : The password to obtain access to the ProcessMaker library. - * @return $eturns will return an object + * @return $eturns will return an object */ - public function importProcessFromLibrary( - $processId, - $version='', - $importOption='', - $usernameLibrary='', - $passwordLibrary='' - ) { + public function importProcessFromLibrary ($processId, $version = '', $importOption = '', $usernameLibrary = '', $passwordLibrary = '') + { try { - G::LoadClass('processes'); + G::LoadClass( 'processes' ); //$versionReq = $_GET['v']; //. (isset($_GET['s']) ? '&s=' . $_GET['s'] : '') - $ipaddress = $_SERVER['REMOTE_ADDR']; + $ipaddress = $_SERVER['REMOTE_ADDR']; $oProcesses = new Processes(); $oProcesses->ws_open_public(); - $oProcess = $oProcesses->ws_processGetData($processId); + $oProcess = $oProcesses->ws_processGetData( $processId ); if ($oProcess->status_code != 0) { - throw (new Exception($oProcess->message)); + throw (new Exception( $oProcess->message )); } $privacy = $oProcess->privacy; @@ -2710,51 +2649,52 @@ class wsBase if ($privacy != 'FREE') { global $sessionId; $antSession = $sessionId; - $oProcesses->ws_open($usernameLibrary, $passwordLibrary); + $oProcesses->ws_open( $usernameLibrary, $passwordLibrary ); $strSession = "&s=" . $sessionId; $sessionId = $antSession; } //downloading the file $localPath = PATH_DOCUMENT . 'input' . PATH_SEP; - G::mk_dir($localPath); + G::mk_dir( $localPath ); $newfilename = G::GenerateUniqueId() . '.pm'; $downloadUrl = PML_DOWNLOAD_URL . '?id=' . $processId . $strSession; $oProcess = new Processes(); - $oProcess->downloadFile($downloadUrl, $localPath, $newfilename); + $oProcess->downloadFile( $downloadUrl, $localPath, $newfilename ); //getting the ProUid from the file recently downloaded - $oData = $oProcess->getProcessData($localPath . $newfilename); + $oData = $oProcess->getProcessData( $localPath . $newfilename ); - if (is_null($oData)) { + if (is_null( $oData )) { $data['DOWNLOAD_URL'] = $downloadUrl; - $data['LOCAL_PATH'] = $localPath; + $data['LOCAL_PATH'] = $localPath; $data['NEW_FILENAME'] = $newfilename; - throw new Exception(G::loadTranslation('ID_ERROR_URL_PROCESS_INVALID', SYS_LANG, $data)); + throw new Exception( G::loadTranslation( 'ID_ERROR_URL_PROCESS_INVALID', SYS_LANG, $data ) ); } $sProUid = $oData->process['PRO_UID']; $oData->process['PRO_UID_OLD'] = $sProUid; //if the process exists, we need to check the $importOption to and re-import if the user wants, - if ($oProcess->processExists($sProUid)) { + if ($oProcess->processExists( $sProUid )) { //Update the current Process, overwriting all tasks and steps if ($importOption == 1) { - $oProcess->updateProcessFromData ($oData, $localPath . $newfilename ); + $oProcess->updateProcessFromData( $oData, $localPath . $newfilename ); //delete the xmlform cache - if (file_exists(PATH_OUTTRUNK . 'compiled' . PATH_SEP . 'xmlform' . PATH_SEP . $sProUid)) { - $oDirectory = dir(PATH_OUTTRUNK . 'compiled' . PATH_SEP . 'xmlform' . PATH_SEP . $sProUid); + + if (file_exists( PATH_OUTTRUNK . 'compiled' . PATH_SEP . 'xmlform' . PATH_SEP . $sProUid )) { + $oDirectory = dir( PATH_OUTTRUNK . 'compiled' . PATH_SEP . 'xmlform' . PATH_SEP . $sProUid ); while ($sObjectName = $oDirectory->read()) { if (($sObjectName != '.') && ($sObjectName != '..')) { $strAux = PATH_OUTTRUNK . 'compiled' . PATH_SEP . 'xmlform' . PATH_SEP; $strAux = $strAux . $sProUid . PATH_SEP . $sObjectName; - unlink($strAux); + unlink( $strAux ); } } @@ -2766,77 +2706,73 @@ class wsBase //Disable current Process and create a new version of the Process if ($importOption == 2) { - $oProcess->disablePreviousProcesses($sProUid); + $oProcess->disablePreviousProcesses( $sProUid ); $sNewProUid = $oProcess->getUnusedProcessGUID(); - $oProcess->setProcessGuid($oData, $sNewProUid); - $oProcess->setProcessParent($oData, $sProUid); - $oData->process['PRO_TITLE'] = "New - " . $oData->process['PRO_TITLE'] . ' - ' . date('M d, H:i'); - $oProcess->renewAll($oData); - $oProcess->createProcessFromData($oData, $localPath . $newfilename); + $oProcess->setProcessGuid( $oData, $sNewProUid ); + $oProcess->setProcessParent( $oData, $sProUid ); + $oData->process['PRO_TITLE'] = "New - " . $oData->process['PRO_TITLE'] . ' - ' . date( 'M d, H:i' ); + $oProcess->renewAll( $oData ); + $oProcess->createProcessFromData( $oData, $localPath . $newfilename ); } //Create a completely new Process without change the current Process if ($importOption == 3) { //krumo ($oData); die; $sNewProUid = $oProcess->getUnusedProcessGUID(); - $oProcess->setProcessGuid($oData, $sNewProUid); + $oProcess->setProcessGuid( $oData, $sNewProUid ); - $strAux = "Copy of - " . $oData->process['PRO_TITLE'] . ' - ' . date('M d, H:i'); + $strAux = "Copy of - " . $oData->process['PRO_TITLE'] . ' - ' . date( 'M d, H:i' ); $oData->process['PRO_TITLE'] = $strAux; - $oProcess->renewAll($oData); - $oProcess->createProcessFromData($oData, $localPath . $newfilename); + $oProcess->renewAll( $oData ); + $oProcess->createProcessFromData( $oData, $localPath . $newfilename ); } if ($importOption != 1 && $importOption != 2 && $importOption != 3) { - throw new Exception(G::loadTranslation('ID_PROCESS_ALREADY_IN_SYSTEM')); + throw new Exception( G::loadTranslation( 'ID_PROCESS_ALREADY_IN_SYSTEM' ) ); } } //finally, creating the process if the process doesn't exist - if (!$oProcess->processExists($processId)) { - $oProcess->createProcessFromData($oData, $localPath . $newfilename); + if (! $oProcess->processExists( $processId )) { + $oProcess->createProcessFromData( $oData, $localPath . $newfilename ); } //show the info after the imported process $oProcess = new Processes(); $oProcess->ws_open_public(); - $processData = $oProcess->ws_processGetData($processId); + $processData = $oProcess->ws_processGetData( $processId ); - $result->status_code = 0; - $result->message = G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULLY'); - $result->timestamp = date('Y-m-d H:i:s'); - $result->processId = $processId; + $result->status_code = 0; + $result->message = G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ); + $result->timestamp = date( 'Y-m-d H:i:s' ); + $result->processId = $processId; $result->processTitle = $processData->title; - $result->category = (isset($processData->category) ? $processData->category : ''); - $result->version = $processData->version; + $result->category = (isset( $processData->category ) ? $processData->category : ''); + $result->version = $processData->version; return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } } - public function getCaseNotes($applicationID, $userUid='') + public function getCaseNotes ($applicationID, $userUid = '') { try { - G::LoadClass('case'); + G::LoadClass( 'case' ); - $result = new wsGetCaseNotesResponse( - 0, - G::loadTranslation('ID_SUCCESS'), - Cases::getCaseNotes($applicationID, 'array', $userUid) - ); + $result = new wsGetCaseNotesResponse( 0, G::loadTranslation( 'ID_SUCCESS' ), Cases::getCaseNotes( $applicationID, 'array', $userUid ) ); - $var = array(); + $var = array (); foreach ($result->notes as $key => $value) { - $var2 = array(); + $var2 = array (); foreach ($value as $keys => $values) { - $field = strtolower($keys); + $field = strtolower( $keys ); $var2[$field] = $values; } @@ -2847,7 +2783,7 @@ class wsBase return $result; } catch (Exception $e) { - $result = new wsResponse(100, $e->getMessage()); + $result = new wsResponse( 100, $e->getMessage() ); return $result; } @@ -2855,33 +2791,31 @@ class wsBase /** * Delete case + * * @param string caseUid : ID of the case. * @return $result will return an object */ - public function deleteCase($caseUid) + public function deleteCase ($caseUid) { try { - if (empty($caseUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid"); + if (empty( $caseUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); return $result; } $case = new Cases(); - $case->removeCase($caseUid); + $case->removeCase( $caseUid ); //Response - $res = new wsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + $res = new wsResponse( 0, G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsResponse(100, $e->getMessage()); + $result = wsResponse( 100, $e->getMessage() ); return $result; } @@ -2889,47 +2823,45 @@ class wsBase /** * Cancel case - * @param string caseUid : ID of the case. - * @param int delIndex : Delegation index of the case. - * @param string userUid : The unique ID of the user who will cancel the case. + * + * @param string caseUid : ID of the case. + * @param int delIndex : Delegation index of the case. + * @param string userUid : The unique ID of the user who will cancel the case. * @return $result will return an object */ - public function cancelCase($caseUid, $delIndex, $userUid) + public function cancelCase ($caseUid, $delIndex, $userUid) { try { - if (empty($caseUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid"); + if (empty( $caseUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); return $result; } - if (empty($delIndex)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " delIndex"); + if (empty( $delIndex )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); return $result; } - if (empty($userUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid"); + if (empty( $userUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); return $result; } $case = new Cases(); - $case->cancelCase($caseUid, $delIndex, $userUid); + $case->cancelCase( $caseUid, $delIndex, $userUid ); //Response - $res = new wsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + $res = new wsResponse( 0, G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsResponse(100, $e->getMessage()); + $result = wsResponse( 100, $e->getMessage() ); return $result; } @@ -2937,57 +2869,55 @@ class wsBase /** * Pause case - * @param string caseUid : ID of the case. - * @param int delIndex : Delegation index of the case. - * @param string userUid : The unique ID of the user who will pause the case. + * + * @param string caseUid : ID of the case. + * @param int delIndex : Delegation index of the case. + * @param string userUid : The unique ID of the user who will pause the case. * @param string unpauseDate : Optional parameter. The date in the format "yyyy-mm-dd" indicating when to unpause - * the case. + * the case. * @return $result will return an object */ - public function pauseCase($caseUid, $delIndex, $userUid, $unpauseDate=null) + public function pauseCase ($caseUid, $delIndex, $userUid, $unpauseDate = null) { try { - if (empty($caseUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid"); + if (empty( $caseUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); return $result; } - if (empty($delIndex)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " delIndex"); + if (empty( $delIndex )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); return $result; } - if (empty($userUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid"); + if (empty( $userUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); return $result; } - if (!empty($unpauseDate)) { - if (!preg_match("/^\d{4}-\d{2}-\d{2}$/", $unpauseDate)) { - $result = new wsResponse(100, G::LoadTranslation("ID_INVALID_DATA") . " $unpauseDate"); + if (! empty( $unpauseDate )) { + if (! preg_match( "/^\d{4}-\d{2}-\d{2}$/", $unpauseDate )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_INVALID_DATA" ) . " $unpauseDate" ); return $result; } } $case = new Cases(); - $case->pauseCase($caseUid, $delIndex, $userUid, $unpauseDate); + $case->pauseCase( $caseUid, $delIndex, $userUid, $unpauseDate ); //Response - $res = new wsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + $res = new wsResponse( 0, G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsResponse(100, $e->getMessage()); + $result = wsResponse( 100, $e->getMessage() ); return $result; } @@ -2995,47 +2925,45 @@ class wsBase /** * Unpause case - * @param string caseUid : ID of the case. - * @param int delIndex : Delegation index of the case. - * @param string userUid : The unique ID of the user who will unpause the case. + * + * @param string caseUid : ID of the case. + * @param int delIndex : Delegation index of the case. + * @param string userUid : The unique ID of the user who will unpause the case. * @return $result will return an object */ - public function unpauseCase($caseUid, $delIndex, $userUid) + public function unpauseCase ($caseUid, $delIndex, $userUid) { try { - if (empty($caseUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid"); + if (empty( $caseUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); return $result; } - if (empty($delIndex)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " delIndex"); + if (empty( $delIndex )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); return $result; } - if (empty($userUid)) { - $result = new wsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid"); + if (empty( $userUid )) { + $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); return $result; } $case = new Cases(); - $case->unpauseCase($caseUid, $delIndex, $userUid); + $case->unpauseCase( $caseUid, $delIndex, $userUid ); //Response - $res = new wsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + $res = new wsResponse( 0, G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" ) ); - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp + $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); return $result; } catch (Exception $e) { - $result = wsResponse(100, $e->getMessage()); + $result = wsResponse( 100, $e->getMessage() ); return $result; } diff --git a/workflow/engine/classes/class.wsResponse.php b/workflow/engine/classes/class.wsResponse.php index 9fa7a21ba..f3c4ece35 100755 --- a/workflow/engine/classes/class.wsResponse.php +++ b/workflow/engine/classes/class.wsResponse.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ - /** +/** + * * @package workflow.engine.classes */ - + class wsResponse { - public $status_code = 0; - public $message = ''; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @return void - */ - function __construct( $status, $message ) - { - $this->status_code = $status; - $this->message = $message; - $this->timestamp = date('Y-m-d H:i:s'); - } - - /** - * Function getPayloadString - * @param string $operation - * @return string - */ - function getPayloadString ( $operation ) - { - $res = "<$operation>\n"; - $res .= "" . $this->status_code . ""; - $res .= "" . $this->message . ""; - $res .= "" . $this->timestamp . ""; -// $res .= "" . $this->timestamp . ""; - $res .= "<$operation>"; - return $res; - } + public $status_code = 0; + public $message = ''; + public $timestamp = ''; - /** - * Function getPayloadArray - * @return array - */ - function getPayloadArray() - { - return array("status_code" => $this->status_code , 'message'=> $this->message, 'timestamp' => $this->timestamp); - } + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @return void + */ + function __construct ($status, $message) + { + $this->status_code = $status; + $this->message = $message; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } + + /** + * Function getPayloadString + * + * @param string $operation + * @return string + */ + function getPayloadString ($operation) + { + $res = "<$operation>\n"; + $res .= "" . $this->status_code . ""; + $res .= "" . $this->message . ""; + $res .= "" . $this->timestamp . ""; + // $res .= "" . $this->timestamp . ""; + $res .= "<$operation>"; + return $res; + } + + /** + * Function getPayloadArray + * + * @return array + */ + function getPayloadArray () + { + return array ("status_code" => $this->status_code,'message' => $this->message,'timestamp' => $this->timestamp + ); + } } /** * Class wsCreateUserResponse + * * @package workflow.engine.classes - */ + */ class wsCreateUserResponse { - public $status_code = 0; - public $message = ''; - public $userUID = ''; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @param string $userUID - * @return void - */ - function __construct( $status, $message, $userUID ) - { - $this->status_code = $status; - $this->message = $message; - $this->userUID = $userUID; - $this->timestamp = date('Y-m-d H:i:s'); - } + public $status_code = 0; + public $message = ''; + public $userUID = ''; + public $timestamp = ''; + + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @param string $userUID + * @return void + */ + function __construct ($status, $message, $userUID) + { + $this->status_code = $status; + $this->message = $message; + $this->userUID = $userUID; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } } /** * Class wsCreateGroupResponse + * * @package workflow.engine.classes - */ + */ class wsCreateGroupResponse { - public $status_code = 0; - public $message = ''; - public $groupUID = ''; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @param string $groupUID - * @return void - */ - function __construct( $status, $message, $groupUID ) { - $this->status_code = $status; - $this->message = $message; - $this->groupUID = $groupUID; - $this->timestamp = date('Y-m-d H:i:s'); - } - + public $status_code = 0; + public $message = ''; + public $groupUID = ''; + public $timestamp = ''; + + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @param string $groupUID + * @return void + */ + function __construct ($status, $message, $groupUID) + { + $this->status_code = $status; + $this->message = $message; + $this->groupUID = $groupUID; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } + } /** * Class wsCreateDepartmentResponse + * * @package workflow.engine.classes - */ + */ class wsCreateDepartmentResponse { - public $status_code = 0; - public $message = ''; - public $departmentUID = ''; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @param string $departmentUID - * @return void - */ - function __construct( $status, $message, $departmentUID ) { - $this->status_code = $status; - $this->message = $message; - $this->departmentUID = $departmentUID; - $this->timestamp = date('Y-m-d H:i:s'); - } + public $status_code = 0; + public $message = ''; + public $departmentUID = ''; + public $timestamp = ''; + + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @param string $departmentUID + * @return void + */ + function __construct ($status, $message, $departmentUID) + { + $this->status_code = $status; + $this->message = $message; + $this->departmentUID = $departmentUID; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } } /** * Class wsGetVariableResponse + * * @package workflow.engine.classes */ class wsGetVariableResponse { - public $status_code = 0; - public $message = ''; - public $variables = null; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @param string $variables - * @return void - */ - function __construct( $status, $message, $variables ) { - $this->status_code = $status; - $this->message = $message; - $this->variables = $variables; - $this->timestamp = date('Y-m-d H:i:s'); - } + public $status_code = 0; + public $message = ''; + public $variables = null; + public $timestamp = ''; + + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @param string $variables + * @return void + */ + function __construct ($status, $message, $variables) + { + $this->status_code = $status; + $this->message = $message; + $this->variables = $variables; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } } /** * Class wsGetCaseNotesResponse + * * @package workflow.engine.classes */ class wsGetCaseNotesResponse { - public $status_code = 0; - public $message = ''; - public $notes = null; - public $timestamp = ''; - - /** - * Function __construct - * Constructor of the class - * @param string $status - * @param string $message - * @param array|object|string $notes - * @return void - */ - function __construct( $status, $message, $notes ) { - $this->status_code = $status; - $this->message = $message; - $this->notes = $notes; - $this->timestamp = date('Y-m-d H:i:s'); - } + public $status_code = 0; + public $message = ''; + public $notes = null; + public $timestamp = ''; + + /** + * Function __construct + * Constructor of the class + * + * @param string $status + * @param string $message + * @param array|object|string $notes + * @return void + */ + function __construct ($status, $message, $notes) + { + $this->status_code = $status; + $this->message = $message; + $this->notes = $notes; + $this->timestamp = date( 'Y-m-d H:i:s' ); + } } ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.xmlDb.php b/workflow/engine/classes/class.xmlDb.php index f9af52543..b56c00f41 100755 --- a/workflow/engine/classes/class.xmlDb.php +++ b/workflow/engine/classes/class.xmlDb.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ - /** -* XMLDB -* -* ProcessMaker Open Source Edition -* -* @copyright (C) 2004 - 2008 Colosa Inc.23 -* @package workflow.engine.ProcessMaker -*/ -class XMLDB + * XMLDB + * + * ProcessMaker Open Source Edition + * + * @copyright (C) 2004 - 2008 Colosa Inc.23 + * @package workflow.engine.ProcessMaker + * + */ +class XMLDB { - /** - * &connect - * - * @param string $dsn - * @return array $options - */ - function &connect ($dsn, $options = array()) - { - //Needed for $mysql_real_escape_string - $mresdbc = new DBConnection(); + /** + * &connect + * + * @param string $dsn + * @return array $options + */ + function &connect ($dsn, $options = array()) + { + //Needed for $mysql_real_escape_string + $mresdbc = new DBConnection(); - if ( !file_exists( $dsn ) ) { - $err = new DB_Error( "File $dsn not found." ); - return $err; + if (! file_exists( $dsn )) { + $err = new DB_Error( "File $dsn not found." ); + return $err; + } + $dbc = new XMLConnection( $dsn ); + return $dbc; } - $dbc = new XMLConnection($dsn); - return $dbc; - } - /** - * isError - * - * @param string $result - * @return boolean is_a($result, 'DB_Error') - */ - function isError ( $result ) - { - return is_a($result, 'DB_Error'); - } + /** + * isError + * + * @param string $result + * @return boolean is_a($result, 'DB_Error') + */ + function isError ($result) + { + return is_a( $result, 'DB_Error' ); + } } /** -* XMLConnection -* -* ProcessMaker Open Source Edition -* -* @copyright (C) 2004 - 2008 Colosa Inc.23 -* @package workflow.engine.ProcessMaker -*/ -class XMLConnection + * XMLConnection + * + * ProcessMaker Open Source Edition + * + * @copyright (C) 2004 - 2008 Colosa Inc.23 + * @package workflow.engine.ProcessMaker + * + */ +class XMLConnection { - var $phptype = 'myxml'; - var $caseFolding = true; - var $xmldoc = NULL; - var $xmlFile = ''; + var $phptype = 'myxml'; + var $caseFolding = true; + var $xmldoc = NULL; + var $xmlFile = ''; - /** - * XMLConnection - * - * @param string $file - * @return void - */ - function XMLConnection ( $file ) - { - $this->xmldoc = new Xml_Document(); - $this->xmldoc->parseXmlFile( $file ); - $this->xmlFile = $file; - } - - /** - * &query - * Actualy the only one supported query is simple SELECT. - * - * @param string $sql - * @return object(XMLResult) $result - */ - function &query( $sql ) - { - if ( !isset( $this->xmldoc ) ) { - $err = new DB_Error( "Error: Closed xmlConnection." ); - return $err; + /** + * XMLConnection + * + * @param string $file + * @return void + */ + function XMLConnection ($file) + { + $this->xmldoc = new Xml_Document(); + $this->xmldoc->parseXmlFile( $file ); + $this->xmlFile = $file; } - if (1===preg_match('/^\s*SELECT\s+([\w\W]+?)(?:\s+FROM\s+`?([^`]+?)`?)(?:\s+WHERE\s+([\w\W]+?))?(?:\s+GROUP\s+BY\s+([\w\W]+?))?(?:\s+ORDER\s+BY\s+([\w\W]+?))?(?:\s+BETWEEN\s+([\w\W]+?)\s+AND\s+([\w\W]+?))?(?:\s+LIMIT\s+(\d+)\s*,\s*(\d+))?\s*$/im', $sql, $matches)) { - $sqlColumns = $matches[1]; - $sqlFrom = isset($matches[2])?$matches[2]:''; - $sqlWhere = isset($matches[3])?$matches[3]:''; - $sqlGroupBy = isset($matches[4])?$matches[4]:''; - $sqlOrderBy = isset($matches[5])?$matches[5]:''; - $sqlLowLimit = isset($matches[8])?$matches[8]:''; - $sqlHighLimit = isset($matches[9])?$matches[9]:''; - /* Start Block: Fields list */ - $count = preg_match_all('/\s*(\*|[\w\.]+)(?:\s+AS\s+([\w\.]+))?/im',$sqlColumns,$match,PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $fieldsList = array(); - for($r=0; $r< $count;$r++) { - $name = (is_array($match[2][$r]) && $match[2][$r][0]!=='') ? $match[2][$r][0] : $match[1][$r][0]; - $fieldsList[$name] = $match[1][$r][0]; - } - /* End Block */ + + /** + * &query + * Actualy the only one supported query is simple SELECT. + * + * @param string $sql + * @return object(XMLResult) $result + */ + function &query ($sql) + { + if (! isset( $this->xmldoc )) { + $err = new DB_Error( "Error: Closed xmlConnection." ); + return $err; + } + if (1 === preg_match( '/^\s*SELECT\s+([\w\W]+?)(?:\s+FROM\s+`?([^`]+?)`?)(?:\s+WHERE\s+([\w\W]+?))?(?:\s+GROUP\s+BY\s+([\w\W]+?))?(?:\s+ORDER\s+BY\s+([\w\W]+?))?(?:\s+BETWEEN\s+([\w\W]+?)\s+AND\s+([\w\W]+?))?(?:\s+LIMIT\s+(\d+)\s*,\s*(\d+))?\s*$/im', $sql, $matches )) { + $sqlColumns = $matches[1]; + $sqlFrom = isset( $matches[2] ) ? $matches[2] : ''; + $sqlWhere = isset( $matches[3] ) ? $matches[3] : ''; + $sqlGroupBy = isset( $matches[4] ) ? $matches[4] : ''; + $sqlOrderBy = isset( $matches[5] ) ? $matches[5] : ''; + $sqlLowLimit = isset( $matches[8] ) ? $matches[8] : ''; + $sqlHighLimit = isset( $matches[9] ) ? $matches[9] : ''; + /* Start Block: Fields list */ + $count = preg_match_all( '/\s*(\*|[\w\.]+)(?:\s+AS\s+([\w\.]+))?/im', $sqlColumns, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $fieldsList = array (); + for ($r = 0; $r < $count; $r ++) { + $name = (is_array( $match[2][$r] ) && $match[2][$r][0] !== '') ? $match[2][$r][0] : $match[1][$r][0]; + $fieldsList[$name] = $match[1][$r][0]; + } + /* End Block */ /* Start Block: Order list */ - $count=preg_match_all('/\s*(\*|[\w\.]+)(\s+ASC|\s+DESC)?\s*,?/im',$sqlOrderBy,$match,PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $orderList = array(); - for($r = $count-1; $r>=0; $r--) { - $direction = (is_array($match[2][$r]) && $match[2][$r][0]!=='') ? $match[2][$r][0] : 'ASC'; - $direction = strtoupper( $direction ); - $orderList[$match[1][$r][0]] = $direction; - } - /* End Block */ - $xmlFrom = '/' . str_replace( '.','/' , $sqlFrom ); - $node =& $this->xmldoc->findNode( $xmlFrom ); - if (!isset($node)) { - //$err = new DB_Error( "$xmlFrom node not found in $dsn." ); - throw new Exception( "$xmlFrom node not found in " . $this->xmlFile . "." ); - return $err; - } else { - $res = $this->fetchChildren ( $node ); - } - /* Start Block: WHERE*/ - if ($sqlWhere!=='') { - /*Start Block: Replace the operator */ - $blocks = preg_split('/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere , -1 , PREG_SPLIT_DELIM_CAPTURE ); - $sqlWhere = ''; - for($r = 0 ; $r < sizeof($blocks) ; $r++ ){ - if ( ($r % 2) === 0 ) { - $blocks[$r] = str_replace( '=' , '==', $blocks[$r]); - $blocks[$r] = str_replace( '<>' , '!=', $blocks[$r]); - $blocks[$r] = str_replace( 'AND' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'and' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'OR' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'or' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'NOT' , '!', $blocks[$r]); - $blocks[$r] = str_replace( 'not' , '!', $blocks[$r]); - $blocks[$r] = preg_replace('/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); - $blocks[$r] = preg_replace('/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); - } - $sqlWhere .= $blocks[$r]; - } - $sqlWhere = preg_replace_callback('/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', - array('XMLConnection','sqlWhereLike'), $sqlWhere ); - $sqlWhere = preg_replace_callback('/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', - array('XMLConnection','sqlString'), $sqlWhere ); - $newRes = array(); - for( $r=0 ; $r < sizeof($res) ; $r++ ) { - $evalWhere = false; - @eval('$evalWhere = '.$sqlWhere.';'); - if ( $evalWhere ) $newRes[] = $res[$r]; - } - $res = $newRes; - } - /* End Block */ + $count = preg_match_all( '/\s*(\*|[\w\.]+)(\s+ASC|\s+DESC)?\s*,?/im', $sqlOrderBy, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $orderList = array (); + for ($r = $count - 1; $r >= 0; $r --) { + $direction = (is_array( $match[2][$r] ) && $match[2][$r][0] !== '') ? $match[2][$r][0] : 'ASC'; + $direction = strtoupper( $direction ); + $orderList[$match[1][$r][0]] = $direction; + } + /* End Block */ + $xmlFrom = '/' . str_replace( '.', '/', $sqlFrom ); + $node = & $this->xmldoc->findNode( $xmlFrom ); + if (! isset( $node )) { + //$err = new DB_Error( "$xmlFrom node not found in $dsn." ); + throw new Exception( "$xmlFrom node not found in " . $this->xmlFile . "." ); + return $err; + } else { + $res = $this->fetchChildren( $node ); + } + /* Start Block: WHERE*/ + if ($sqlWhere !== '') { + /*Start Block: Replace the operator */ + $blocks = preg_split( '/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere, - 1, PREG_SPLIT_DELIM_CAPTURE ); + $sqlWhere = ''; + for ($r = 0; $r < sizeof( $blocks ); $r ++) { + if (($r % 2) === 0) { + $blocks[$r] = str_replace( '=', '==', $blocks[$r] ); + $blocks[$r] = str_replace( '<>', '!=', $blocks[$r] ); + $blocks[$r] = str_replace( 'AND', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'and', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'OR', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'or', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'NOT', '!', $blocks[$r] ); + $blocks[$r] = str_replace( 'not', '!', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); + } + $sqlWhere .= $blocks[$r]; + } + $sqlWhere = preg_replace_callback( '/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', array ('XMLConnection','sqlWhereLike' + ), $sqlWhere ); + $sqlWhere = preg_replace_callback( '/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', array ('XMLConnection','sqlString' + ), $sqlWhere ); + $newRes = array (); + for ($r = 0; $r < sizeof( $res ); $r ++) { + $evalWhere = false; + @eval( '$evalWhere = ' . $sqlWhere . ';' ); + if ($evalWhere) + $newRes[] = $res[$r]; + } + $res = $newRes; + } + /* End Block */ /* Start Block: Expands the resultant data according to fill an array * with the required fields in the query. */ - for( $r=0 ; $r < sizeof($res) ; $r++ ) { - $res[$r] = $this->expandFields( $res[$r] , $fieldsList ); - } - /* End Block */ - /* Start Block: ORDER BY*/ - foreach($orderList as $field => $direction ) { - for( $i=0 ; $i < sizeof($res) ; $i++ ) { - for( $j= $i+1 ; $j < sizeof($res) ; $j++ ) { - $condition = ($direction==='ASC')? - ($res[$j] < $res[$i]) : ($res[$j] > $res[$i]); - if ( $condition ) { - $swap = $res[$i]; - $res[$i] = $res[$j]; - $res[$j] = $swap; + for ($r = 0; $r < sizeof( $res ); $r ++) { + $res[$r] = $this->expandFields( $res[$r], $fieldsList ); } - } - } - } - /* End Block */ + /* End Block */ + /* Start Block: ORDER BY*/ + foreach ($orderList as $field => $direction) { + for ($i = 0; $i < sizeof( $res ); $i ++) { + for ($j = $i + 1; $j < sizeof( $res ); $j ++) { + $condition = ($direction === 'ASC') ? ($res[$j] < $res[$i]) : ($res[$j] > $res[$i]); + if ($condition) { + $swap = $res[$i]; + $res[$i] = $res[$j]; + $res[$j] = $swap; + } + } + } + } + /* End Block */ /* Start Block: Apply limits */ - if ($sqlLowLimit!='' && $sqlHighLimit!='') - { - $sqlLowLimit = (int) $sqlLowLimit; - $sqlHighLimit = (int) $sqlHighLimit; - $res = array_slice( $res , $sqlLowLimit , $sqlHighLimit ); - } - /* End Block */ - $result = new XMLResult( $res ); - return $result; - } - elseif (1===preg_match('/^\s*DELETE\s+FROM\s+`?([^`]+?)`?(?:\s+WHERE\s+([\w\W]+?))?\s*$/im',$sql,$matches)) - { - $sqlFrom = isset($matches[1])?$matches[1]:''; - $sqlWhere = isset($matches[2])?$matches[2]:'1'; - /* Start Block: WHERE*/ + if ($sqlLowLimit != '' && $sqlHighLimit != '') { + $sqlLowLimit = (int) $sqlLowLimit; + $sqlHighLimit = (int) $sqlHighLimit; + $res = array_slice( $res, $sqlLowLimit, $sqlHighLimit ); + } + /* End Block */ + $result = new XMLResult( $res ); + return $result; + } elseif (1 === preg_match( '/^\s*DELETE\s+FROM\s+`?([^`]+?)`?(?:\s+WHERE\s+([\w\W]+?))?\s*$/im', $sql, $matches )) { + $sqlFrom = isset( $matches[1] ) ? $matches[1] : ''; + $sqlWhere = isset( $matches[2] ) ? $matches[2] : '1'; + /* Start Block: WHERE*/ /*Start Block: Replace the operator */ - $blocks = preg_split('/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere , -1 , PREG_SPLIT_DELIM_CAPTURE ); - $sqlWhere = ''; - for($r = 0 ; $r < sizeof($blocks) ; $r++ ){ - if ( ($r % 2) === 0 ) { - $blocks[$r] = str_replace( '=' , '==', $blocks[$r]); - $blocks[$r] = str_replace( '<>' , '!=', $blocks[$r]); - $blocks[$r] = str_replace( 'AND' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'and' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'OR' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'or' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'NOT' , '!', $blocks[$r]); - $blocks[$r] = str_replace( 'not' , '!', $blocks[$r]); - $blocks[$r] = preg_replace('/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); - $blocks[$r] = preg_replace('/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); - } - $sqlWhere .= $blocks[$r]; - } - /* End Block */ - $sqlWhere = preg_replace_callback('/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', - array('XMLConnection','sqlWhereLike'), $sqlWhere ); - $sqlWhere = preg_replace_callback('/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', - array('XMLConnection','sqlString'), $sqlWhere ); + $blocks = preg_split( '/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere, - 1, PREG_SPLIT_DELIM_CAPTURE ); + $sqlWhere = ''; + for ($r = 0; $r < sizeof( $blocks ); $r ++) { + if (($r % 2) === 0) { + $blocks[$r] = str_replace( '=', '==', $blocks[$r] ); + $blocks[$r] = str_replace( '<>', '!=', $blocks[$r] ); + $blocks[$r] = str_replace( 'AND', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'and', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'OR', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'or', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'NOT', '!', $blocks[$r] ); + $blocks[$r] = str_replace( 'not', '!', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); + } + $sqlWhere .= $blocks[$r]; + } + /* End Block */ + $sqlWhere = preg_replace_callback( '/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', array ('XMLConnection','sqlWhereLike' + ), $sqlWhere ); + $sqlWhere = preg_replace_callback( '/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', array ('XMLConnection','sqlString' + ), $sqlWhere ); - /*Start Block: Removing fields */ - $xmlFrom = '/' . str_replace( '.','/' , $sqlFrom ); - $node =& $this->xmldoc->findNode( $xmlFrom ); - if (!isset($node)) { - $err = new DB_Error( "$xmlFrom node not found!." ); - return $err; - } else { - $res = $this->fetchChildren ( $node ); - } - $newRes = array(); - for( $r=0 ; $r < sizeof($res) ; $r++ ) { - $evalWhere = false; - @eval('$evalWhere = '.$sqlWhere.';'); - if ( $evalWhere ) { - unset($node->children[$r]); - $newRes[] = $res[$r]; - } - } - //Re-index - $node->children = array_values( $node->children ); - /* End Block */ - $this->xmldoc->save( $this->xmlFile ); - $result = new XMLResult( $newRes ); - return $result; - } - elseif (1===preg_match('/^\s*INSERT\s+INTO\s+`?([^`]+?)`?\s*\(([\w\W]+?)\)\s+VALUES\s*\(([\w\W]+?)\)\s*$/im',$sql,$matches)) - { - $sqlFrom = isset($matches[1])?$matches[1]:''; - $sqlColumns = isset($matches[2])?$matches[2]:'1'; - $sqlValues = isset($matches[3])?$matches[3]:'1'; - $xmlFrom = '/' . str_replace( '.','/' , $sqlFrom ); - $node =& $this->xmldoc->findNode( $xmlFrom ); - /* Start Block: Fields list */ - $count = preg_match_all('/([\w\.]+)/im',$sqlColumns,$match,PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $fieldsList = array(); - for($r=0; $r< $count;$r++) { - $fieldsList[] = $match[1][$r][0]; - } - /* End Block */ + /*Start Block: Removing fields */ + $xmlFrom = '/' . str_replace( '.', '/', $sqlFrom ); + $node = & $this->xmldoc->findNode( $xmlFrom ); + if (! isset( $node )) { + $err = new DB_Error( "$xmlFrom node not found!." ); + return $err; + } else { + $res = $this->fetchChildren( $node ); + } + $newRes = array (); + for ($r = 0; $r < sizeof( $res ); $r ++) { + $evalWhere = false; + @eval( '$evalWhere = ' . $sqlWhere . ';' ); + if ($evalWhere) { + unset( $node->children[$r] ); + $newRes[] = $res[$r]; + } + } + //Re-index + $node->children = array_values( $node->children ); + /* End Block */ + $this->xmldoc->save( $this->xmlFile ); + $result = new XMLResult( $newRes ); + return $result; + } elseif (1 === preg_match( '/^\s*INSERT\s+INTO\s+`?([^`]+?)`?\s*\(([\w\W]+?)\)\s+VALUES\s*\(([\w\W]+?)\)\s*$/im', $sql, $matches )) { + $sqlFrom = isset( $matches[1] ) ? $matches[1] : ''; + $sqlColumns = isset( $matches[2] ) ? $matches[2] : '1'; + $sqlValues = isset( $matches[3] ) ? $matches[3] : '1'; + $xmlFrom = '/' . str_replace( '.', '/', $sqlFrom ); + $node = & $this->xmldoc->findNode( $xmlFrom ); + /* Start Block: Fields list */ + $count = preg_match_all( '/([\w\.]+)/im', $sqlColumns, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $fieldsList = array (); + for ($r = 0; $r < $count; $r ++) { + $fieldsList[] = $match[1][$r][0]; + } + /* End Block */ /* Start Block: Fields Values */ - $count=preg_match_all('/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)/im', $sqlValues,$match,PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $fieldsValues = array(); - for($r=0; $r< $count;$r++) { - if (substr($match[1][$r][0],0,1)==='"') { - $match[1][$r][0] = substr( $match[1][$r][0] ,1, -1 ); - $match[1][$r][0] = str_replace('""', '"' , $match[1][$r][0] ); - $match[1][$r][0] = str_replace("''", "'" , $match[1][$r][0] ); - } if (substr($match[1][$r][0],0,1)==="'") { - $match[1][$r][0] = substr( $match[1][$r][0] ,1, -1 ); - $match[1][$r][0] = str_replace("''", "'" , $match[1][$r][0] ); - $match[1][$r][0] = str_replace('""', '"' , $match[1][$r][0] ); - } - $fieldsValues[$fieldsList[$r]] = $match[1][$r][0]; - } - /* End Block */ - $AAA = getNames($this->xmldoc->children[0]->children); - $this->insertRow( $node , $fieldsValues ); - $DDD = getNames($this->xmldoc->children[0]->children); - $this->xmldoc->save( $this->xmlFile ); - $result = new XMLResult( array( $fieldsValues ) ); - return $result; - } - elseif (1===preg_match('/^\s*UPDATE\s+`?([^`]+?)`?\s+SET\s+((?:(?:[a-z][\w\.]*)\s*=\s*(?:"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)\s*(?:,\s*)?)+)(?:\s+WHERE\s+([\w\W]+?))?\s*$/im',$sql,$matches)) - { - $sqlFrom = isset($matches[1])?$matches[1]:''; - $sqlColumns = isset($matches[2])?$matches[2]:''; - $sqlWhere = isset($matches[3])?$matches[3]:'1'; - $count = preg_match_all('/([a-z][\w\.]*)\s*=\s*("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)/im',$sqlColumns,$match,PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $fieldsValues = array(); - for($r=0; $r< $count;$r++) { - if (substr($match[2][$r][0],0,1)==='"') { - $match[2][$r][0] = substr( $match[2][$r][0] ,1, -1 ); - $match[2][$r][0] = str_replace('""', '"' , $match[2][$r][0] ); - $match[2][$r][0] = str_replace("''", "'" , $match[2][$r][0] ); - } if (substr($match[2][$r][0],0,1)==="'") { - $match[2][$r][0] = substr( $match[2][$r][0] ,1, -1 ); - $match[2][$r][0] = str_replace("''", "'" , $match[2][$r][0] ); - $match[2][$r][0] = str_replace('""', '"' , $match[2][$r][0] ); - } - $fieldsValues[$match[1][$r][0]] = $match[2][$r][0]; - } - /* Start Block: WHERE*/ + $count = preg_match_all( '/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)/im', $sqlValues, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $fieldsValues = array (); + for ($r = 0; $r < $count; $r ++) { + if (substr( $match[1][$r][0], 0, 1 ) === '"') { + $match[1][$r][0] = substr( $match[1][$r][0], 1, - 1 ); + $match[1][$r][0] = str_replace( '""', '"', $match[1][$r][0] ); + $match[1][$r][0] = str_replace( "''", "'", $match[1][$r][0] ); + } + if (substr( $match[1][$r][0], 0, 1 ) === "'") { + $match[1][$r][0] = substr( $match[1][$r][0], 1, - 1 ); + $match[1][$r][0] = str_replace( "''", "'", $match[1][$r][0] ); + $match[1][$r][0] = str_replace( '""', '"', $match[1][$r][0] ); + } + $fieldsValues[$fieldsList[$r]] = $match[1][$r][0]; + } + /* End Block */ + $AAA = getNames( $this->xmldoc->children[0]->children ); + $this->insertRow( $node, $fieldsValues ); + $DDD = getNames( $this->xmldoc->children[0]->children ); + $this->xmldoc->save( $this->xmlFile ); + $result = new XMLResult( array ($fieldsValues + ) ); + return $result; + } elseif (1 === preg_match( '/^\s*UPDATE\s+`?([^`]+?)`?\s+SET\s+((?:(?:[a-z][\w\.]*)\s*=\s*(?:"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)\s*(?:,\s*)?)+)(?:\s+WHERE\s+([\w\W]+?))?\s*$/im', $sql, $matches )) { + $sqlFrom = isset( $matches[1] ) ? $matches[1] : ''; + $sqlColumns = isset( $matches[2] ) ? $matches[2] : ''; + $sqlWhere = isset( $matches[3] ) ? $matches[3] : '1'; + $count = preg_match_all( '/([a-z][\w\.]*)\s*=\s*("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'|\d+)/im', $sqlColumns, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $fieldsValues = array (); + for ($r = 0; $r < $count; $r ++) { + if (substr( $match[2][$r][0], 0, 1 ) === '"') { + $match[2][$r][0] = substr( $match[2][$r][0], 1, - 1 ); + $match[2][$r][0] = str_replace( '""', '"', $match[2][$r][0] ); + $match[2][$r][0] = str_replace( "''", "'", $match[2][$r][0] ); + } + if (substr( $match[2][$r][0], 0, 1 ) === "'") { + $match[2][$r][0] = substr( $match[2][$r][0], 1, - 1 ); + $match[2][$r][0] = str_replace( "''", "'", $match[2][$r][0] ); + $match[2][$r][0] = str_replace( '""', '"', $match[2][$r][0] ); + } + $fieldsValues[$match[1][$r][0]] = $match[2][$r][0]; + } + /* Start Block: WHERE*/ /*Start Block: Replace the operator */ - $blocks = preg_split('/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere , -1 , PREG_SPLIT_DELIM_CAPTURE ); - $sqlWhere = ''; - for($r = 0 ; $r < sizeof($blocks) ; $r++ ){ - if ( ($r % 2) === 0 ) { - $blocks[$r] = str_replace( '=' , '==', $blocks[$r]); - $blocks[$r] = str_replace( '<>' , '!=', $blocks[$r]); - $blocks[$r] = str_replace( 'AND' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'and' , '&&', $blocks[$r]); - $blocks[$r] = str_replace( 'OR' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'or' , '||', $blocks[$r]); - $blocks[$r] = str_replace( 'NOT' , '!', $blocks[$r]); - $blocks[$r] = str_replace( 'not' , '!', $blocks[$r]); - $blocks[$r] = preg_replace('/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); - $blocks[$r] = preg_replace('/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); - } - $sqlWhere .= $blocks[$r]; - } - /* End Block */ - $sqlWhere = preg_replace_callback('/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', - array('XMLConnection','sqlWhereLike'), $sqlWhere ); - $sqlWhere = preg_replace_callback('/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', - array('XMLConnection','sqlString'), $sqlWhere ); - /*Start Block: Removing fields */ - $xmlFrom = '/' . str_replace( '.','/' , $sqlFrom ); - $node =& $this->xmldoc->findNode( $xmlFrom ); - if (!isset($node)) { - $err = new DB_Error( "$xmlFrom node not found in $dsn." ); - return $err; + $blocks = preg_split( '/("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', $sqlWhere, - 1, PREG_SPLIT_DELIM_CAPTURE ); + $sqlWhere = ''; + for ($r = 0; $r < sizeof( $blocks ); $r ++) { + if (($r % 2) === 0) { + $blocks[$r] = str_replace( '=', '==', $blocks[$r] ); + $blocks[$r] = str_replace( '<>', '!=', $blocks[$r] ); + $blocks[$r] = str_replace( 'AND', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'and', '&&', $blocks[$r] ); + $blocks[$r] = str_replace( 'OR', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'or', '||', $blocks[$r] ); + $blocks[$r] = str_replace( 'NOT', '!', $blocks[$r] ); + $blocks[$r] = str_replace( 'not', '!', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\b[a-zA-Z_][\w\.]*\b/im', '$res[$r][\'$0\']', $blocks[$r] ); + $blocks[$r] = preg_replace( '/\$res\[\$r\]\[\'(like)\'\]/im', '$1', $blocks[$r] ); + } + $sqlWhere .= $blocks[$r]; + } + /* End Block */ + $sqlWhere = preg_replace_callback( '/(.+)\s+like\s+("(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\')/im', array ('XMLConnection','sqlWhereLike' + ), $sqlWhere ); + $sqlWhere = preg_replace_callback( '/"(?:(?:[^"]|"")*)"|\'(?:(?:[^\']|\'\')*)\'/im', array ('XMLConnection','sqlString' + ), $sqlWhere ); + /*Start Block: Removing fields */ + $xmlFrom = '/' . str_replace( '.', '/', $sqlFrom ); + $node = & $this->xmldoc->findNode( $xmlFrom ); + if (! isset( $node )) { + $err = new DB_Error( "$xmlFrom node not found in $dsn." ); + return $err; + } else { + $res = $this->fetchChildren( $node ); + } + $newRes = array (); + for ($r = 0; $r < sizeof( $res ); $r ++) { + $evalWhere = false; + @eval( '$evalWhere = ' . $sqlWhere . ';' ); + if ($evalWhere) { + $this->updateRow( $node->children[$r], $fieldsValues ); + $newRes[] = array_merge( $res[$r], $fieldsValues ); + } + } + /* End Block */ + $nodeTEST = & $this->xmldoc->findNode( $xmlFrom ); + $this->xmldoc->save( $this->xmlFile ); + $result = new XMLResult( $newRes ); + return $result; } else { - $res = $this->fetchChildren ( $node ); + echo ($sql); + $err = new DB_Error( "SQL Query is not well formed." ); + return $err; } - $newRes = array(); - for( $r=0 ; $r < sizeof($res) ; $r++ ) { - $evalWhere = false; - @eval('$evalWhere = '.$sqlWhere.';'); - if ( $evalWhere ) { - $this->updateRow( $node->children[$r] , $fieldsValues ); - $newRes[] = array_merge( $res[$r] , $fieldsValues ); - } - } - /* End Block */ - $nodeTEST =& $this->xmldoc->findNode( $xmlFrom ); - $this->xmldoc->save( $this->xmlFile ); - $result = new XMLResult( $newRes ); - return $result; } - else + + /** + * sqlLike + * + * @param string $a + * @return void $b + */ + function sqlLike ($a, $b) { - echo($sql); - $err = new DB_Error( "SQL Query is not well formed." ); - return $err; + $b = addcslashes( $b, '[]()\/{}.?' ); + $b = str_replace( "%", '.*', $b ); + $b = '/^' . $b . '$/im'; + return preg_match( $b, $a ); } - } - /** - * sqlLike - * - * @param string $a - * @return void $b - */ - function sqlLike( $a , $b ) - { - $b = addcslashes( $b , '[]()\/{}.?' ); - $b = str_replace( "%" , '.*' , $b ); - $b = '/^'. $b . '$/im'; - return preg_match( $b , $a ); - } + /** + * expandFields + * + * @param string $resRow + * @param string $fieldsList + * @return array $res + */ + function expandFields ($resRow, $fieldsList) + { + $res = array (); + foreach ($fieldsList as $key => $value) { + if ($key === '*') { + foreach ($resRow as $k => $v) + $res[$k] = $v; + } else { + $res[$key] = array_key_exists( $value, $resRow ) ? $resRow[$value] : NULL; + } + } + return $res; + } - /** - * expandFields - * - * @param string $resRow - * @param string $fieldsList - * @return array $res - */ - function expandFields( $resRow, $fieldsList ) - { - $res = array(); - foreach($fieldsList as $key => $value ) { - if ($key==='*') { - foreach( $resRow as $k => $v ) $res[$k] = $v; - } else { - $res[$key] = array_key_exists( $value , $resRow ) ? $resRow[$value] : NULL; - } + /** + * fetchNode + * + * @param object &$node + * @return array $res + */ + function fetchNode (&$node) + { + $res = array ('XMLNODE_NAME' => $node->name,'XMLNODE_TYPE' => $node->type,'XMLNODE_VALUE' => $node->value + ); + foreach ($node->attributes as $name => $value) { + if ($this->caseFolding) + $name = strtoupper( $name ); + $res[$name] = $value; + } + return $res; } - return $res; - } - /** - * fetchNode - * - * @param object &$node - * @return array $res - */ - function fetchNode( &$node ) - { - $res = array ( - 'XMLNODE_NAME' => $node->name, - 'XMLNODE_TYPE' => $node->type, - 'XMLNODE_VALUE' => $node->value, - ); - foreach( $node->attributes as $name => $value ) { - if ($this->caseFolding) $name = strtoupper( $name ); - $res[$name] = $value; + /** + * fetchChildren + * + * @param string &$node + * @return array $res + */ + function fetchChildren (&$node) + { + $res = array (); + foreach ($node->children as $name => $child) { + $res[] = $this->fetchNode( $child ); + } + return $res; } - return $res; - } - - /** - * fetchChildren - * - * @param string &$node - * @return array $res - */ - function fetchChildren( &$node ) - { - $res = array(); - foreach( $node->children as $name => $child ) { - $res[] = $this->fetchNode( $child ); - } - return $res; - } - - /** - * disconnect - * - * @return void - */ - function disconnect() - { - unset( $this->xmldoc ); - } - - /** - * - * - * @param array $match - * @return object(DB_Error) $err - */ - function sqlWhereLike( $match ) - { - switch (substr($match[2],0,1)) { - case '"': - return ' $this->sqlLike( '.$match[1].', '.$match[2].' ) '; - break; - case "'": - return ' $this->sqlLike( '.$match[1].', '.$match[2].' ) '; - break; - default: - $err = new DB_Error( "XMLDB: Syntax error on $match[0]" ); - die; - return $err; - } - } - - /** - * sqlString - * - * @param array $match - * @return object(DB_Error) $err - */ - function sqlString( $match ) - { - switch (substr($match[0],0,1)) { - case '"': - $match[0] = substr( $match[0] ,1, -1 ); - $match[0] = str_replace('""', '"' , $match[0] ); - $match[0] = str_replace("''", "'" , $match[0] ); - $match[0] = addcslashes( $match[0] , '\\\'' ); - return "'$match[0]'"; - break; - case "'": - $match[0] = substr( $match[0] ,1, -1 ); - $match[0] = str_replace("''", "'" , $match[0] ); - $match[0] = str_replace('""', '"' , $match[0] ); - $match[0] = addcslashes( $match[0] , '\\\'' ); - return "'$match[0]'"; - break; - default: - $err = new DB_Error( "XMLDB: Syntax error on $match[0]" ); - die; - return $err; - } - } - /** - * insertRow - * - * @param string &$node - * @param object $values - * @return void - */ - function insertRow( &$node , $values ) - { - $attributes = array(); - foreach( $values as $field => $value ) { - switch( $field ) { - case 'XMLNODE_NAME' : - case 'XMLNODE_TYPE' : - case 'XMLNODE_VALUE': - break; - default: - $attributes[strtolower($field)] = $value; - } + /** + * disconnect + * + * @return void + */ + function disconnect () + { + unset( $this->xmldoc ); } - $values['XMLNODE_NAME'] = !isset($values['XMLNODE_NAME']) ? - '': $values['XMLNODE_NAME']; - $values['XMLNODE_TYPE'] = !isset($values['XMLNODE_TYPE']) ? - 'open': $values['XMLNODE_TYPE']; - $values['XMLNODE_VALUE'] = !isset($values['XMLNODE_VALUE']) ? - '': $values['XMLNODE_VALUE']; - $node->addChildNode( new Xml_Node( - $values['XMLNODE_NAME'] , $values['XMLNODE_TYPE'] , $values['XMLNODE_VALUE'], $attributes ) ); - } - /** - * updateRow - * - * @param string &$node - * @param object $values - * @return void - */ - function updateRow( &$node , $values ) - { - foreach( $values as $field => $value ) { - switch( $field ) { - case 'XMLNODE_NAME' : - $node->name = $value; - break; - case 'XMLNODE_TYPE' : - $node->type = $value; - break; - case 'XMLNODE_VALUE': - $node->value = $value; - break; - default: - $node->attributes[strtolower($field)] = $value; - } + /** + * + * @param array $match + * @return object(DB_Error) $err + */ + function sqlWhereLike ($match) + { + switch (substr( $match[2], 0, 1 )) { + case '"': + return ' $this->sqlLike( ' . $match[1] . ', ' . $match[2] . ' ) '; + break; + case "'": + return ' $this->sqlLike( ' . $match[1] . ', ' . $match[2] . ' ) '; + break; + default: + $err = new DB_Error( "XMLDB: Syntax error on $match[0]" ); + die(); + return $err; + } + } + + /** + * sqlString + * + * @param array $match + * @return object(DB_Error) $err + */ + function sqlString ($match) + { + switch (substr( $match[0], 0, 1 )) { + case '"': + $match[0] = substr( $match[0], 1, - 1 ); + $match[0] = str_replace( '""', '"', $match[0] ); + $match[0] = str_replace( "''", "'", $match[0] ); + $match[0] = addcslashes( $match[0], '\\\'' ); + return "'$match[0]'"; + break; + case "'": + $match[0] = substr( $match[0], 1, - 1 ); + $match[0] = str_replace( "''", "'", $match[0] ); + $match[0] = str_replace( '""', '"', $match[0] ); + $match[0] = addcslashes( $match[0], '\\\'' ); + return "'$match[0]'"; + break; + default: + $err = new DB_Error( "XMLDB: Syntax error on $match[0]" ); + die(); + return $err; + } + } + + /** + * insertRow + * + * @param string &$node + * @param object $values + * @return void + */ + function insertRow (&$node, $values) + { + $attributes = array (); + foreach ($values as $field => $value) { + switch ($field) { + case 'XMLNODE_NAME': + case 'XMLNODE_TYPE': + case 'XMLNODE_VALUE': + break; + default: + $attributes[strtolower( $field )] = $value; + } + } + $values['XMLNODE_NAME'] = ! isset( $values['XMLNODE_NAME'] ) ? '' : $values['XMLNODE_NAME']; + $values['XMLNODE_TYPE'] = ! isset( $values['XMLNODE_TYPE'] ) ? 'open' : $values['XMLNODE_TYPE']; + $values['XMLNODE_VALUE'] = ! isset( $values['XMLNODE_VALUE'] ) ? '' : $values['XMLNODE_VALUE']; + $node->addChildNode( new Xml_Node( $values['XMLNODE_NAME'], $values['XMLNODE_TYPE'], $values['XMLNODE_VALUE'], $attributes ) ); + } + + /** + * updateRow + * + * @param string &$node + * @param object $values + * @return void + */ + function updateRow (&$node, $values) + { + foreach ($values as $field => $value) { + switch ($field) { + case 'XMLNODE_NAME': + $node->name = $value; + break; + case 'XMLNODE_TYPE': + $node->type = $value; + break; + case 'XMLNODE_VALUE': + $node->value = $value; + break; + default: + $node->attributes[strtolower( $field )] = $value; + } + } } - } } /** -* XMLResult -* -* ProcessMaker Open Source Edition -* -* @copyright (C) 2004 - 2008 Colosa Inc.23 -* @package workflow.engine.ProcessMaker -*/ -class XMLResult + * XMLResult + * + * ProcessMaker Open Source Edition + * + * @copyright (C) 2004 - 2008 Colosa Inc.23 + * @package workflow.engine.ProcessMaker + * + */ +class XMLResult { - var $result = array(); - var $cursor = 0; - - /** - * XMLResult - * - * @param array $result - * @return void - */ - function XMLResult( $result = array() ) - { - $this->result = $result; - $this->cursor = 0; - } + var $result = array (); + var $cursor = 0; - /** - * numRows - * - * @return integer sizeof($this->result) - */ - function numRows() - { - return sizeof($this->result); - } + /** + * XMLResult + * + * @param array $result + * @return void + */ + function XMLResult ($result = array()) + { + $this->result = $result; + $this->cursor = 0; + } - /** - * fetchRow - * - * @param string $const - * @return integer $this->result[ $this->cursor-1 ]; - */ - function fetchRow ( $const ) - { - if ($this->cursor>=$this->numRows()) - return NULL; - $this->cursor++; - return $this->result[ $this->cursor-1 ]; - } + /** + * numRows + * + * @return integer sizeof($this->result) + */ + function numRows () + { + return sizeof( $this->result ); + } + + /** + * fetchRow + * + * @param string $const + * @return integer $this->result[ $this->cursor-1 ]; + */ + function fetchRow ($const) + { + if ($this->cursor >= $this->numRows()) + return NULL; + $this->cursor ++; + return $this->result[$this->cursor - 1]; + } } - /** - * getNames - * - * @param object $children - * @return array $names - */ - function getNames( $children ) - { - $names = array(); - $r = 0; - foreach($children as $child) { - $names[$r]=$child->name; - $r++; +/** + * getNames + * + * @param object $children + * @return array $names + */ +function getNames ($children) +{ + $names = array (); + $r = 0; + foreach ($children as $child) { + $names[$r] = $child->name; + $r ++; } return $names; - } +} ?> \ No newline at end of file diff --git a/workflow/engine/classes/class.xmlfield_Image.php b/workflow/engine/classes/class.xmlfield_Image.php index a01eedeb0..51f2f5c3b 100755 --- a/workflow/engine/classes/class.xmlfield_Image.php +++ b/workflow/engine/classes/class.xmlfield_Image.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -26,23 +28,27 @@ // DEPRECATED this class is also part of the xmlform package this class will be also removed // in future releases of pm, its discouraged the inclusion this class in the future from a // external file like this - /** +/** + * * @package workflow.engine.classes */ class XmlForm_Field_Image extends XmlForm_Field { - var $file = ''; - var $home = 'public_html'; - var $withoutLabel = false; - function render( $value, $owner = null ) - { - $url = G::replaceDataField($this->file, $owner->values); - if ($this->home === "methods") $url = G::encryptlink( SYS_URI . $url ); - if ($this->home === "public_html") $url ='/' . $url ; - return 'style)?'style="'.$this->style.'"':'') - .' alt ="'.htmlentities($value,ENT_QUOTES,'utf-8').'"/>'; - } - } -?> \ No newline at end of file + public $file = ''; + public $home = 'public_html'; + public $withoutLabel = false; + + public function render ($value, $owner = null) + { + $url = G::replaceDataField( $this->file, $owner->values ); + if ($this->home === "methods") { + $url = G::encryptlink( SYS_URI . $url ); + } + if ($this->home === "public_html") { + $url = '/' . $url; + } + return 'style) ? 'style="' . $this->style . '"' : '') . ' alt ="' . htmlentities( $value, ENT_QUOTES, 'utf-8' ) . '"/>'; + } +} + diff --git a/workflow/engine/classes/class.xmlfield_InputPM.php b/workflow/engine/classes/class.xmlfield_InputPM.php index 1d4b22ddf..fd9ac6851 100755 --- a/workflow/engine/classes/class.xmlfield_InputPM.php +++ b/workflow/engine/classes/class.xmlfield_InputPM.php @@ -1,6 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -27,125 +29,129 @@ class XmlForm_Field_TextPM extends XmlForm_Field_SimpleText { - var $size=15; - var $maxLength=64; - var $validate='Any'; - var $mask = ''; - var $defaultValue=''; - var $required=false; - var $dependentFields=''; - var $linkField=''; -//Possible values:(-|UPPER|LOWER|CAPITALIZE) - var $strTo=''; - var $readOnly=false; - var $sqlConnection=0; - var $sql=''; - var $sqlOption=array(); - //Atributes only for grids - var $formula = ''; - var $function = ''; - var $replaceTags = 0; - var $showVars = 0; - var $process = ''; - var $symbol = '@@'; + public $size = 15; + public $maxLength = 64; + public $validate = 'Any'; + public $mask = ''; + public $defaultValue = ''; + public $required = false; + public $dependentFields = ''; + public $linkField = ''; + //Possible values:(-|UPPER|LOWER|CAPITALIZE) + public $strTo = ''; + public $readOnly = false; + public $sqlConnection = 0; + public $sql = ''; + public $sqlOption = array (); + //Atributes only for grids + public $formula = ''; + public $function = ''; + public $replaceTags = 0; + public $showVars = 0; + public $process = ''; + public $symbol = '@@'; - /** - * Function render - * @author Julio Cesar Laura Avendano - * @access public - * @parameter string value - * @parameter string owner - * @return string - */ - function render( $value = NULL , $owner = NULL ) - { - //$this->executeSQL(); - //if (isset($this->sqlOption)) { - // reset($this->sqlOption); - // $firstElement=key($this->sqlOption); - // if (isset($firstElement)) $value = $firstElement; - //} - //NOTE: string functions must be in G class - if ($this->strTo==='UPPER') - $value = strtoupper($value); - if ($this->strTo==='LOWER') - $value = strtolower($value); - //if ($this->strTo==='CAPITALIZE') $value = strtocapitalize($value); - $onkeypress = G::replaceDataField( $this->onkeypress, $owner->values ); - if ($this->replaceTags == 1) { - $value = G::replaceDataField( $value, $owner->values ); + /** + * Function render + * + * @author Julio Cesar Laura Avendano + * @access public + * @param eter string value + * @param eter string owner + * @return string + */ + public function render ($value = null, $owner = null) + { + //$this->executeSQL(); + //if (isset($this->sqlOption)) { + // reset($this->sqlOption); + // $firstElement=key($this->sqlOption); + // if (isset($firstElement)) $value = $firstElement; + //} + //NOTE: string functions must be in G class + if ($this->strTo === 'UPPER') { + $value = strtoupper( $value ); + } + if ($this->strTo === 'LOWER') { + $value = strtolower( $value ); + } + //if ($this->strTo==='CAPITALIZE') $value = strtocapitalize($value); + $onkeypress = G::replaceDataField( $this->onkeypress, $owner->values ); + if ($this->replaceTags == 1) { + $value = G::replaceDataField( $value, $owner->values ); + } + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + //$sShowVars = ' ' . $this->symbol . ''; + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' readOnly="readOnly" style="' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $sShowVars; + } else { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' style="' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $sShowVars; + } + } elseif ($this->mode === 'view') { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' style="display:none;' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $this->htmlentities( $value, ENT_COMPAT, 'utf-8' ); + } else { + return $this->htmlentities( $value, ENT_COMPAT, 'utf-8' ); + } } - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - //$sShowVars = ' ' . $this->symbol . ''; - $sShowVars = ' '; - } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' readOnly="readOnly" style="'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . $sShowVars; - else - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' style="'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . $sShowVars; - } elseif ($this->mode==='view') { - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' style="display:none;'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . - $this->htmlentities( $value , ENT_COMPAT, 'utf-8'); - } else { - return $this->htmlentities( $value , ENT_COMPAT, 'utf-8'); - } - } - /** - * Function renderGrid - * @author Julio Cesar Laura Avendano - * @access public - * @parameter array values - * @parameter string owner - * @return string - */ - function renderGrid( $values=array() , $owner ) - { - $result=array(); - $r=1; - foreach($values as $v) { - if ($this->replaceTags == 1) { - $v = G::replaceDataField( $v, $owner->values ); - } - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - //$sShowVars = ' ' . $this->symbol . ''; - $sShowVars = ' '; - } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - $result[] = '' . $sShowVars; - else - $result[] = '' . $sShowVars; - } elseif ($this->mode==='view') { - $result[] = $this->htmlentities( $v , ENT_COMPAT, 'utf-8'); - } else { - $result[] = $this->htmlentities( $v , ENT_COMPAT, 'utf-8'); - } - $r++; + /** + * Function renderGrid + * + * @author Julio Cesar Laura Avendano + * @access public + * @param eter array values + * @param eter string owner + * @return string + */ + public function renderGrid ($values = array(), $owner) + { + $result = array (); + $r = 1; + foreach ($values as $v) { + if ($this->replaceTags == 1) { + $v = G::replaceDataField( $v, $owner->values ); + } + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + //$sShowVars = ' ' . $this->symbol . ''; + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + $result[] = '' . $sShowVars; + } else { + $result[] = '' . $sShowVars; + } + } elseif ($this->mode === 'view') { + $result[] = $this->htmlentities( $v, ENT_COMPAT, 'utf-8' ); + } else { + $result[] = $this->htmlentities( $v, ENT_COMPAT, 'utf-8' ); + } + $r ++; + } + return $result; } - return $result; - } - /** - * Function attachEvents - * @access public - * @parameter string $element - * @return string - */ - function attachEvents($element) - { - return "myForm.aElements[i] = new G_Text(myForm, $element,'{$this->name}'); + /** + * Function attachEvents + * + * @access public + * @param eter string $element + * @return string + */ + public function attachEvents ($element) + { + return "myForm.aElements[i] = new G_Text(myForm, $element,'{$this->name}'); myForm.aElements[i].setAttributes(" . $this->getAttributes() . ");"; - } + } } /** @@ -153,86 +159,87 @@ class XmlForm_Field_TextPM extends XmlForm_Field_SimpleText */ class XmlForm_Field_TextareaPM extends XmlForm_Field { - var $rows = 12; - var $cols = 40; - var $required = false; - var $readOnly = false; - var $wrap = 'OFF'; - var $showVars = 0; - var $process = ''; - var $symbol = '@@'; + public $rows = 12; + public $cols = 40; + public $required = false; + public $readOnly = false; + public $wrap = 'OFF'; + public $showVars = 0; + public $process = ''; + public $symbol = '@@'; - /** - * Function render - * @author Julio Cesar Laura Avendao - * @access public - * @parameter string value - * @parameter string owner - * @return string - */ - function render( $value = NULL, $owner ) - { - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - $sShowVars = ' '; + /** + * Function render + * + * @author Julio Cesar Laura Avendao + * @access public + * @param eter string value + * @param eter string owner + * @return string + */ + public function render ($value = null, $owner) + { + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + return '' . $sShowVars; + } else { + return '' . $sShowVars; + } + } elseif ($this->mode === 'view') { + return ''; + } else { + return ''; + } } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - return '' . $sShowVars; - else - return '' . $sShowVars; - } elseif ($this->mode==='view') { - return ''; - } else { - return ''; - } - } - /** - * Function renderGrid - * @author Julio Cesar Laura Avendano - * @access public - * @parameter string values - * @parameter string owner - * @return string - */ - function renderGrid( $values = NULL , $owner ) - { - $result=array(); - $r=1; - foreach($values as $v) { - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - //$sShowVars = ' ' . $this->symbol . ''; - $sShowVars = ' '; - } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - $result[] = 'htmlentities( $v , ENT_COMPAT, 'utf-8').'\' readOnly="readOnly"/>' . $sShowVars; - else - $result[] = 'htmlentities( $v , ENT_COMPAT, 'utf-8').'\' />' . $sShowVars; - } elseif ($this->mode==='view') { - if(stristr($_SERVER['HTTP_USER_AGENT'], 'iPhone')){ - //$result[] = '
'.$this->htmlentities( $v , ENT_COMPAT, 'utf-8').'
'; - $result[] = $this->htmlentities( $v , ENT_COMPAT, 'utf-8'); - } - else{ - //$result[] = '
'.$this->htmlentities( $v , ENT_COMPAT, 'utf-8').'
'; - $result[] = $this->htmlentities( $v , ENT_COMPAT, 'utf-8'); - } - } else{ - $result[] = $this->htmlentities( $v , ENT_COMPAT, 'utf-8'); - } - $r++; + /** + * Function renderGrid + * + * @author Julio Cesar Laura Avendano + * @access public + * @param eter string values + * @param eter string owner + * @return string + */ + public function renderGrid ($values = null, $owner) + { + $result = array (); + $r = 1; + foreach ($values as $v) { + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + //$sShowVars = ' ' . $this->symbol . ''; + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + $result[] = 'htmlentities( $v, ENT_COMPAT, 'utf-8' ) . '\' readOnly="readOnly"/>' . $sShowVars; + } else { + $result[] = 'htmlentities( $v, ENT_COMPAT, 'utf-8' ) . '\' />' . $sShowVars; + } + } elseif ($this->mode === 'view') { + if (stristr( $_SERVER['HTTP_USER_AGENT'], 'iPhone' )) { + //$result[] = '
'.$this->htmlentities( $v , ENT_COMPAT, 'utf-8').'
'; + $result[] = $this->htmlentities( $v, ENT_COMPAT, 'utf-8' ); + } else { + //$result[] = '
'.$this->htmlentities( $v , ENT_COMPAT, 'utf-8').'
'; + $result[] = $this->htmlentities( $v, ENT_COMPAT, 'utf-8' ); + } + } else { + $result[] = $this->htmlentities( $v, ENT_COMPAT, 'utf-8' ); + } + $r ++; + } + return $result; } - return $result; - } } /** @@ -240,230 +247,239 @@ class XmlForm_Field_TextareaPM extends XmlForm_Field */ class XmlForm_Field_hours extends XmlForm_Field_SimpleText { - var $size = 15; - var $maxLength = 64; - var $validate = 'Any'; - var $mask = ''; - var $defaultValue = ''; - var $required = false; - var $dependentFields= ''; - var $linkField = ''; -//Possible values:(-|UPPER|LOWER|CAPITALIZE) - var $strTo = ''; - var $readOnly = false; - var $sqlConnection = 0; - var $sql = ''; - var $sqlOption = array(); - //Atributes only for grids - var $formula = ''; - var $function = ''; - var $replaceTags = 0; - var $showVars = 0; - var $process = ''; - var $symbol = '@@'; + public $size = 15; + public $maxLength = 64; + public $validate = 'Any'; + public $mask = ''; + public $defaultValue = ''; + public $required = false; + public $dependentFields = ''; + public $linkField = ''; + //Possible values:(-|UPPER|LOWER|CAPITALIZE) + public $strTo = ''; + public $readOnly = false; + public $sqlConnection = 0; + public $sql = ''; + public $sqlOption = array (); + //Atributes only for grids + public $formula = ''; + public $function = ''; + public $replaceTags = 0; + public $showVars = 0; + public $process = ''; + public $symbol = '@@'; - /** - * Function render - * @author Julio Cesar Laura Avendano - * @access public - * @parameter string value - * @parameter string owner - * @return string - */ - function render( $value = NULL , $owner = NULL ) - { - if ($this->strTo==='UPPER') - $value = strtoupper($value); - if ($this->strTo==='LOWER') - $value = strtolower($value); - //if ($this->strTo==='CAPITALIZE') $value = strtocapitalize($value); - $onkeypress = G::replaceDataField( $this->onkeypress, $owner->values ); - if ($this->replaceTags == 1) { - $value = G::replaceDataField( $value, $owner->values ); + /** + * Function render + * + * @author Julio Cesar Laura Avendano + * @access public + * @param eter string value + * @param eter string owner + * @return string + */ + public function render ($value = null, $owner = null) + { + if ($this->strTo === 'UPPER') { + $value = strtoupper( $value ); + } + if ($this->strTo === 'LOWER') { + $value = strtolower( $value ); + } + //if ($this->strTo==='CAPITALIZE') $value = strtocapitalize($value); + $onkeypress = G::replaceDataField( $this->onkeypress, $owner->values ); + if ($this->replaceTags == 1) { + $value = G::replaceDataField( $value, $owner->values ); + } + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + //$sShowVars = ' ' . $this->symbol . ''; + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' readOnly="readOnly" style="' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $sShowVars; + } else { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' style="' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $sShowVars; + } + } elseif ($this->mode === 'view') { + return 'htmlentities( $value, ENT_COMPAT, 'utf-8' ) . '\' style="display:none;' . htmlentities( $this->style, ENT_COMPAT, 'utf-8' ) . '" onkeypress="' . htmlentities( $onkeypress, ENT_COMPAT, 'utf-8' ) . '"/>' . $this->htmlentities( $value, ENT_COMPAT, 'utf-8' ); + } else { + return $this->htmlentities( $value, ENT_COMPAT, 'utf-8' ); + } } - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - //$sShowVars = ' ' . $this->symbol . ''; - $sShowVars = ' '; - } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' readOnly="readOnly" style="'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . $sShowVars; - else - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' style="'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . $sShowVars; - } elseif ($this->mode==='view') { - return 'htmlentities( $value , ENT_COMPAT, 'utf-8').'\' style="display:none;'.htmlentities( $this->style , ENT_COMPAT, 'utf-8').'" onkeypress="'.htmlentities( $onkeypress , ENT_COMPAT, 'utf-8').'"/>' . - $this->htmlentities( $value , ENT_COMPAT, 'utf-8'); - } else { - return $this->htmlentities( $value , ENT_COMPAT, 'utf-8'); - } - } - /** - * Function renderGrid - * @author Julio Cesar Laura Avendano - * @access public - * @parameter array values - * @parameter string owner - * @return string - */ - function renderGrid( $values=array() , $owner ) - { - $result=array(); - $r=1; - foreach($values as $v) { - if ($this->replaceTags == 1) { - $v = G::replaceDataField( $v, $owner->values ); - } - if ($this->showVars == 1) { - $this->process = G::replaceDataField($this->process, $owner->values ); - //$sShowVars = ' ' . $this->symbol . ''; - $sShowVars = ' '; - } - else { - $sShowVars = ''; - } - if ($this->mode==='edit') { - if ($this->readOnly) - $result[] = '' . $sShowVars; - else - $result[] = '' . $sShowVars; - } elseif ($this->mode==='view') { - $result[] = '

'.$this->htmlentities( number_format($v, 2), ENT_COMPAT, 'utf-8').'

'; - } else { - $result[] = '

'.$this->htmlentities( number_format($v, 2), ENT_COMPAT, 'utf-8').'

'; - } - $r++; + /** + * Function renderGrid + * + * @author Julio Cesar Laura Avendano + * @access public + * @param eter array values + * @param eter string owner + * @return string + */ + public function renderGrid ($values = array(), $owner) + { + $result = array (); + $r = 1; + foreach ($values as $v) { + if ($this->replaceTags == 1) { + $v = G::replaceDataField( $v, $owner->values ); + } + if ($this->showVars == 1) { + $this->process = G::replaceDataField( $this->process, $owner->values ); + //$sShowVars = ' ' . $this->symbol . ''; + $sShowVars = ' '; + } else { + $sShowVars = ''; + } + if ($this->mode === 'edit') { + if ($this->readOnly) { + $result[] = '' . $sShowVars; + } else { + $result[] = '' . $sShowVars; + } + } elseif ($this->mode === 'view') { + $result[] = '

' . $this->htmlentities( number_format( $v, 2 ), ENT_COMPAT, 'utf-8' ) . '

'; + } else { + $result[] = '

' . $this->htmlentities( number_format( $v, 2 ), ENT_COMPAT, 'utf-8' ) . '

'; + } + $r ++; + } + return $result; } - return $result; - } - /** - * Function attachEvents - * @access public - * @parameter string $element - * @return string - */ - function attachEvents($element) - { - return "myForm.aElements[i] = new G_Text(myForm, $element,'{$this->name}'); + /** + * Function attachEvents + * + * @access public + * @param eter string $element + * @return string + */ + public function attachEvents ($element) + { + return "myForm.aElements[i] = new G_Text(myForm, $element,'{$this->name}'); myForm.aElements[i].setAttributes(" . $this->getAttributes() . ");"; - } + } } - /** - * Function getDynaformsVars - * @access public - * @parameter string $sProcessUID - * @parameter boolean $bSystemVars - * @return array - */ - function getDynaformsVars($sProcessUID, $bSystemVars = true, $bIncMulSelFields = 0) - { - $aFields = array(); - $aFieldsNames = array(); +/** + * Function getDynaformsVars + * + * @access public + * @param eter string $sProcessUID + * @param eter boolean $bSystemVars + * @return array + */ +function getDynaformsVars ($sProcessUID, $bSystemVars = true, $bIncMulSelFields = 0) +{ + $aFields = array (); + $aFieldsNames = array (); if ($bSystemVars) { - $aAux = G::getSystemConstants(); - foreach ($aAux as $sName => $sValue) { - $aFields[] = array('sName' => $sName, 'sType' => 'system', 'sLabel'=> 'System variable'); - } - //we're adding the ping variable to the system list - $aFields[] = array('sName' => 'PIN', 'sType' => 'system', 'sLabel' => 'System variable'); + $aAux = G::getSystemConstants(); + foreach ($aAux as $sName => $sValue) { + $aFields[] = array ('sName' => $sName,'sType' => 'system','sLabel' => 'System variable' + ); + } + //we're adding the ping variable to the system list + $aFields[] = array ('sName' => 'PIN','sType' => 'system','sLabel' => 'System variable' + ); } - $aInvalidTypes = array('title', 'subtitle', 'link', 'file', 'button', 'reset', 'submit', 'javascript'); - $aMultipleSelectionFields = array('listbox', 'checkgroup', 'grid'); + $aInvalidTypes = array ('title','subtitle','link','file','button','reset','submit','javascript' + ); + $aMultipleSelectionFields = array ('listbox','checkgroup','grid' + ); if ($bIncMulSelFields != 0) { - $aInvalidTypes = array_merge($aInvalidTypes, $aMultipleSelectionFields); + $aInvalidTypes = array_merge( $aInvalidTypes, $aMultipleSelectionFields ); } require_once 'classes/model/Dynaform.php'; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_FILENAME); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_FILENAME ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - if (file_exists(PATH_DYNAFORM . PATH_SEP . $aRow['DYN_FILENAME'] . '.xml')) { - $G_FORM = new Form($aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG); - if (($G_FORM->type == 'xmlform') || ($G_FORM->type == '')) { - foreach($G_FORM->fields as $k => $v) { - if (!in_array($v->type, $aInvalidTypes)) { - if (!in_array($k, $aFieldsNames)) { - $aFields[] = array('sName' => $k, - 'sType' => $v->type, - 'sLabel'=> ($v->type != 'grid' ? $v->label : '[ ' . G::LoadTranslation('ID_GRID') . ' ]') - ); - $aFieldsNames[] = $k; - } + if (file_exists( PATH_DYNAFORM . PATH_SEP . $aRow['DYN_FILENAME'] . '.xml' )) { + $G_FORM = new Form( $aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG ); + if (($G_FORM->type == 'xmlform') || ($G_FORM->type == '')) { + foreach ($G_FORM->fields as $k => $v) { + if (! in_array( $v->type, $aInvalidTypes )) { + if (! in_array( $k, $aFieldsNames )) { + $aFields[] = array ('sName' => $k,'sType' => $v->type,'sLabel' => ($v->type != 'grid' ? $v->label : '[ ' . G::LoadTranslation( 'ID_GRID' ) . ' ]') + ); + $aFieldsNames[] = $k; + } + } + } } - } } - } - $oDataset->next(); + $oDataset->next(); } return $aFields; - } +} - /** - * Function getGridsVars - * @access public - * @parameter string $sProcessUID - * @return array - */ - function getGridsVars($sProcessUID) - { - $aFields = array(); - $aFieldsNames = array(); +/** + * Function getGridsVars + * + * @access public + * @param eter string $sProcessUID + * @return array + */ +function getGridsVars ($sProcessUID) +{ + $aFields = array (); + $aFieldsNames = array (); require_once 'classes/model/Dynaform.php'; - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(DynaformPeer::DYN_FILENAME); - $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( DynaformPeer::DYN_FILENAME ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $G_FORM = new Form($aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG); - if ($G_FORM->type == 'xmlform') { - foreach($G_FORM->fields as $k => $v) { - if ($v->type == 'grid') { - if (!in_array($k, $aFieldsNames)) { - $aFields[] = array('sName' => $k, 'sXmlForm' => str_replace($sProcessUID . '/', '', $v->xmlGrid)); - $aFieldsNames[] = $k; + $G_FORM = new Form( $aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG ); + if ($G_FORM->type == 'xmlform') { + foreach ($G_FORM->fields as $k => $v) { + if ($v->type == 'grid') { + if (! in_array( $k, $aFieldsNames )) { + $aFields[] = array ('sName' => $k,'sXmlForm' => str_replace( $sProcessUID . '/', '', $v->xmlGrid ) + ); + $aFieldsNames[] = $k; + } + } } - } } - } - $oDataset->next(); + $oDataset->next(); } return $aFields; - } +} /** * Class XmlForm_Field_CheckBoxTable */ class XmlForm_Field_CheckBoxTable extends XmlForm_Field_Checkbox { - /** - * Function render - * @author The Answer - * @access public - * @parameter string value - * @parameter string owner - * @return string - */ - function render( $value = NULL , $owner = NULL ) - { - //$optionName = $owner->values['USR_UID']; - $optionName = $value; - $onclick = (($this->onclick)? ' onclick="' . G::replaceDataField( $this->onclick, $owner->values ) . '" ' : ''); - $html =' '; - return $html; - } + + /** + * Function render + * + * @author The Answer + * @access public + * @param eter string value + * @param eter string owner + * @return string + */ + public function render ($value = null, $owner = null) + { + //$optionName = $owner->values['USR_UID']; + $optionName = $value; + $onclick = (($this->onclick) ? ' onclick="' . G::replaceDataField( $this->onclick, $owner->values ) . '" ' : ''); + $html = ' '; + return $html; + } } -?> + diff --git a/workflow/engine/classes/class.xpdl.php b/workflow/engine/classes/class.xpdl.php index 04b0daa26..b69e9e279 100755 --- a/workflow/engine/classes/class.xpdl.php +++ b/workflow/engine/classes/class.xpdl.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ -G::LoadClass('processes'); -G::LoadClass('tasks'); -G::LoadClass('derivation'); +G::LoadClass( 'processes' ); +G::LoadClass( 'tasks' ); +G::LoadClass( 'derivation' ); require_once 'classes/model/Users.php'; require_once 'classes/model/Configuration.php'; require_once 'classes/model/Gateway.php'; require_once 'classes/model/Event.php'; /** + * * @package workflow.engine.classes */ class Xpdl extends processes { - /** - * This function creates a new Process, defined in the object $oData - * @param array $aData - * @param array $tasks - * @param string $pmFilename - * @return void - */ - function createProcessFromDataXpdl ($oData,$tasks) { - if ( !isset($oData->process['PRO_UID']) || trim($oData->process['PRO_UID']) == '' ) - $oData->process['PRO_UID'] = G::generateUniqueID() ; + /** + * This public function creates a new Process, defined in the object $oData + * + * @param array $aData + * @param array $tasks + * @param string $pmFilename + * @return void + */ + public function createProcessFromDataXpdl ($oData, $tasks) + { + if (! isset( $oData->process['PRO_UID'] ) || trim( $oData->process['PRO_UID'] ) == '') { + $oData->process['PRO_UID'] = G::generateUniqueID(); + } + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $uid = $this->createProcessRow( $oData->process ); + $this->createTaskRows( $oData->tasks ); + $newTasks = $this->verifyTasks( $uid, $tasks ); + if (! isset( $oData->routes )) { + $oData->routes = array (); + } + $this->createRouteRowsXpdl( $uid, $oData->routes, $newTasks ); + $this->createLaneRows( $oData->lanes ); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( isset( $oData->stepSupervisor ) ? $oData->stepSupervisor : array () ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( isset( $oData->dbconnections ) ? $oData->dbconnections : array () ); + $this->createReportTables( isset( $oData->reportTables ) ? $oData->reportTables : array (), isset( $oData->reportTablesVars ) ? $oData->reportTablesVars : array () ); + $this->createSubProcessRowsXpdl( $uid, isset( $oData->subProcess ) ? $oData->subProcess : array (), $newTasks ); + $this->createCaseTrackerRows( isset( $oData->caseTracker ) ? $oData->caseTracker : array () ); + $this->createCaseTrackerObjectRows( isset( $oData->caseTrackerObject ) ? $oData->caseTrackerObject : array () ); + $this->createObjectPermissionsRows( isset( $oData->objectPermissions ) ? $oData->objectPermissions : array () ); + $this->createStageRows( isset( $oData->stage ) ? $oData->stage : array () ); + $this->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms ); + $this->createEventRows( isset( $oData->event ) ? $oData->event : array () ); + $this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () ); + } - $this->removeProcessRows ($oData->process['PRO_UID'] ); - $uid = $this->createProcessRow($oData->process); - $this->createTaskRows($oData->tasks); - $newTasks=$this->verifyTasks($uid,$tasks); - if ( !isset($oData->routes) ) $oData->routes = array(); - $this->createRouteRowsXpdl($uid,$oData->routes,$newTasks); - $this->createLaneRows($oData->lanes); - $this->createDynaformRows($oData->dynaforms); - $this->createInputRows($oData->inputs); - $this->createOutputRows($oData->outputs); - $this->createStepRows($oData->steps); - $this->createStepSupervisorRows(isset($oData->stepSupervisor) ? $oData->stepSupervisor : array()); - $this->createTriggerRows($oData->triggers); - $this->createStepTriggerRows($oData->steptriggers); - $this->createTaskUserRows($oData->taskusers); - $this->createGroupRow($oData->groupwfs); - $this->createDBConnectionsRows(isset($oData->dbconnections) ? $oData->dbconnections : array()); - $this->createReportTables(isset($oData->reportTables) ? $oData->reportTables : array(), isset($oData->reportTablesVars) ? $oData->reportTablesVars : array()); - $this->createSubProcessRowsXpdl($uid,isset($oData->subProcess) ? $oData->subProcess : array(),$newTasks); - $this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array()); - $this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array()); - $this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array()); - $this->createStageRows(isset($oData->stage) ? $oData->stage : array()); - $this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms); - $this->createEventRows(isset($oData->event) ? $oData->event : array()); - $this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array()); - } + /** + * this public function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + public function updateProcessFromDataXpdl ($oData, $tasks) + { + if (is_array( $oData->process )) { + $this->updateProcessRow( $oData->process ); + } + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $uid = $this->createProcessRow( $oData->process ); + $this->createTaskRows( $oData->tasks ); + $newTasks = $this->verifyTasks( $uid, $tasks ); + $this->createRouteRowsXpdl( $uid, $oData->routes, $newTasks ); + $this->createLaneRows( $oData->lanes ); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( $oData->stepSupervisor ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( $oData->dbconnections ); + $this->updateReportTables( $oData->reportTables, $oData->reportTablesVars ); + $this->createSubProcessRows( $oData->subProcess ); + $this->createCaseTrackerRows( $oData->caseTracker ); + $this->createCaseTrackerObjectRows( $oData->caseTrackerObject ); + $this->createObjectPermissionsRows( $oData->objectPermissions ); + $this->createStageRows( $oData->stage ); + $this->createFieldCondition( $oData->fieldCondition, $oData->dynaforms ); + $this->createEventRows( $oData->event ); + $this->createCaseSchedulerRows( $oData->caseScheduler ); - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function updateProcessFromDataXpdl ($oData, $tasks ) { - if(is_array($oData->process)) - $this->updateProcessRow ($oData->process ); - $this->removeProcessRows ($oData->process['PRO_UID'] ); - $uid = $this->createProcessRow($oData->process); - $this->createTaskRows($oData->tasks); - $newTasks=$this->verifyTasks($uid,$tasks); - $this->createRouteRowsXpdl($uid,$oData->routes,$newTasks); - $this->createLaneRows ($oData->lanes ); - $this->createDynaformRows ($oData->dynaforms ); - $this->createInputRows ($oData->inputs ); - $this->createOutputRows ($oData->outputs ); - $this->createStepRows ($oData->steps ); - $this->createStepSupervisorRows($oData->stepSupervisor); - $this->createTriggerRows ($oData->triggers); - $this->createStepTriggerRows ($oData->steptriggers); - $this->createTaskUserRows ($oData->taskusers); - $this->createGroupRow ($oData->groupwfs ); - $this->createDBConnectionsRows($oData->dbconnections); - $this->updateReportTables($oData->reportTables, $oData->reportTablesVars); - $this->createSubProcessRows( $oData->subProcess ); - $this->createCaseTrackerRows( $oData->caseTracker); - $this->createCaseTrackerObjectRows( $oData->caseTrackerObject); - $this->createObjectPermissionsRows( $oData->objectPermissions); - $this->createStageRows( $oData->stage); - $this->createFieldCondition($oData->fieldCondition, $oData->dynaforms); - $this->createEventRows( $oData->event); - $this->createCaseSchedulerRows( $oData->caseScheduler ); + } - } - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function createProcessFromDataPmxml ($oData ) - { - $this->removeProcessRows ($oData->process['PRO_UID'] ); - $this->createProcessRow($oData->process); - $this->createDynaformRows($oData->dynaforms); - } + /** + * this public function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + public function createProcessFromDataPmxml ($oData) + { + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $this->createProcessRow( $oData->process ); + $this->createDynaformRows( $oData->dynaforms ); + } - /** - * This function update the dynaforms - * @param string $sProUid - * @param array $fields - * @return boolean - */ -// function updateDynaformsPmxml($uid,$fields) -// { -// $oData->dynaforms = $this->getDynaformRows ( $uid); -// $count = sizeof($oData->dynaforms); -// foreach ($fields as $val => $id){ -// $oData->dynaforms[$count]= $id; -// $count = $count + 1 ; -// } -// $this->createDynaformRows ($oData->dynaforms ); -// } + /** + * This public function update the dynaforms + * + * @param string $sProUid + * @param array $fields + * @return boolean + */ + // public function updateDynaformsPmxml($uid,$fields) + // { + // $oData->dynaforms = $this->getDynaformRows ( $uid); + // $count = sizeof($oData->dynaforms); + // foreach ($fields as $val => $id){ + // $oData->dynaforms[$count]= $id; + // $count = $count + 1 ; + // } + // $this->createDynaformRows ($oData->dynaforms ); + // } - /** - * This function create the subProcess from data - * @param array $oData - * @param array $tasks - * @return void - */ - function createSubProcessFromDataXpdl ($oData,$tasks) - { $this->removeProcessRows ($oData->process['PRO_UID'] ); - $uid = $this->createProcessRow($oData->process); - $this->createTaskRows($oData->tasks); - $newTasks = $this->verifyTasks($uid,$tasks); - $this->createRouteRowsXpdl($uid,$oData->routes,$newTasks); - $this->createLaneRows($oData->lanes); - $this->createDynaformRows($oData->dynaforms); - $this->createInputRows($oData->inputs); - $this->createOutputRows($oData->outputs); - $this->createStepRows($oData->steps); - $this->createStepSupervisorRows(isset($oData->stepSupervisor) ? $oData->stepSupervisor : array()); - $this->createTriggerRows($oData->triggers); - $this->createStepTriggerRows($oData->steptriggers); - $this->createTaskUserRows($oData->taskusers); - $this->createGroupRow($oData->groupwfs); - $this->createDBConnectionsRows(isset($oData->dbconnections) ? $oData->dbconnections : array()); - $this->createReportTables(isset($oData->reportTables) ? $oData->reportTables : array(), isset($oData->reportTablesVars) ? $oData->reportTablesVars : array()); - $this->createSubProcessRowsXpdl($uid,isset($oData->subProcess) ? $oData->subProcess : array(),$newTasks); - $this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array()); - $this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array()); - $this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array()); - $this->createStageRows(isset($oData->stage) ? $oData->stage : array()); - $this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms); - $this->createEventRows(isset($oData->event) ? $oData->event : array()); - $this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array()); - } - /** - * This function verify the tasks of a process that was created with the tasks they were sent to the process - * @param string $oProUid - * @param array $fieldsTasks - * @return array - */ - function verifyTasks($sProUid,$fieldsTasks) - { - $process = new Process( ); - $oData->tasks = $this->getTaskRows($sProUid); - $findTask= 0; - $findNext= 0; - foreach ($fieldsTasks as $taskVal => $idVal){ - foreach ($oData->tasks as $task => $id ){ - if($idVal['TAS_TITLE'] == $id['TAS_TITLE'] and $idVal['TAS_POSX'] == $id['TAS_POSX'] and $idVal['TAS_POSY'] == $id['TAS_POSY']){ - if(isset($idVal['TAS_DESCRIPTION']) and isset($id['TAS_DESCRIPTION'])){ - if($idVal['TAS_DESCRIPTION'] == $id['TAS_DESCRIPTION']){ - $fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID']; + /** + * This public function create the subProcess from data + * + * @param array $oData + * @param array $tasks + * @return void + */ + public function createSubProcessFromDataXpdl ($oData, $tasks) + { + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $uid = $this->createProcessRow( $oData->process ); + $this->createTaskRows( $oData->tasks ); + $newTasks = $this->verifyTasks( $uid, $tasks ); + $this->createRouteRowsXpdl( $uid, $oData->routes, $newTasks ); + $this->createLaneRows( $oData->lanes ); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( isset( $oData->stepSupervisor ) ? $oData->stepSupervisor : array () ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( isset( $oData->dbconnections ) ? $oData->dbconnections : array () ); + $this->createReportTables( isset( $oData->reportTables ) ? $oData->reportTables : array (), isset( $oData->reportTablesVars ) ? $oData->reportTablesVars : array () ); + $this->createSubProcessRowsXpdl( $uid, isset( $oData->subProcess ) ? $oData->subProcess : array (), $newTasks ); + $this->createCaseTrackerRows( isset( $oData->caseTracker ) ? $oData->caseTracker : array () ); + $this->createCaseTrackerObjectRows( isset( $oData->caseTrackerObject ) ? $oData->caseTrackerObject : array () ); + $this->createObjectPermissionsRows( isset( $oData->objectPermissions ) ? $oData->objectPermissions : array () ); + $this->createStageRows( isset( $oData->stage ) ? $oData->stage : array () ); + $this->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms ); + $this->createEventRows( isset( $oData->event ) ? $oData->event : array () ); + $this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () ); + } + + /** + * This public function verify the tasks of a process that was created with the tasks they were sent to the process + * + * @param string $oProUid + * @param array $fieldsTasks + * @return array + */ + public function verifyTasks ($sProUid, $fieldsTasks) + { + $process = new Process(); + $oData->tasks = $this->getTaskRows( $sProUid ); + $findTask = 0; + $findNext = 0; + foreach ($fieldsTasks as $taskVal => $idVal) { + foreach ($oData->tasks as $task => $id) { + if ($idVal['TAS_TITLE'] == $id['TAS_TITLE'] and $idVal['TAS_POSX'] == $id['TAS_POSX'] and $idVal['TAS_POSY'] == $id['TAS_POSY']) { + if (isset( $idVal['TAS_DESCRIPTION'] ) and isset( $id['TAS_DESCRIPTION'] )) { + if ($idVal['TAS_DESCRIPTION'] == $id['TAS_DESCRIPTION']) { + $fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID']; + } + } + $fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID']; + } } - } - $fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID']; } - } + return $fieldsTasks; } - return $fieldsTasks; - } - /** - * This function creates the rows of the process - * @param string $sProUid - * @param array $routes - * @param array $fieldsTasks - * @return void - */ - function createRouteRowsXpdl($sProUid,$routes,$fieldsTasks) - { - $process = new Process( ); - $oData->tasks = $this->getTaskRows($sProUid); - foreach ($routes as $taskRoute => $idRoute){ - $findTask = 0; - $findNext = 0; - foreach ($oData->tasks as $task => $id ){ - if($idRoute['TAS_UID'] == $id['TAS_UID']){ - $findTask = 1; + /** + * This public function creates the rows of the process + * + * @param string $sProUid + * @param array $routes + * @param array $fieldsTasks + * @return void + */ + public function createRouteRowsXpdl ($sProUid, $routes, $fieldsTasks) + { + $process = new Process(); + $oData->tasks = $this->getTaskRows( $sProUid ); + foreach ($routes as $taskRoute => $idRoute) { + $findTask = 0; + $findNext = 0; + foreach ($oData->tasks as $task => $id) { + if ($idRoute['TAS_UID'] == $id['TAS_UID']) { + $findTask = 1; + } + if ($idRoute['ROU_NEXT_TASK'] != '-1') { + if ($idRoute['ROU_NEXT_TASK'] == $id['TAS_UID']) { + $findNext = 1; + } + } else { + $findNext = 1; + } + } + if ($findTask == 0) { + $id = $this->findIdTask( $idRoute['TAS_UID'], $fieldsTasks ); + $routes[$taskRoute]['TAS_UID'] = $id; + } + if ($findNext == 0) { + $id = $this->findIdTask( $idRoute['ROU_NEXT_TASK'], $fieldsTasks ); + $routes[$taskRoute]['ROU_NEXT_TASK'] = $id; + } } - if($idRoute['ROU_NEXT_TASK']!='-1'){ - if($idRoute['ROU_NEXT_TASK'] == $id['TAS_UID']){ - $findNext= 1; - } - } - else{ - $findNext= 1; - } - } - if($findTask==0){ - $id = $this->findIdTask($idRoute['TAS_UID'],$fieldsTasks); - $routes[$taskRoute]['TAS_UID']=$id; - } - if($findNext==0){ - $id = $this->findIdTask($idRoute['ROU_NEXT_TASK'],$fieldsTasks); - $routes[$taskRoute]['ROU_NEXT_TASK']=$id; - } + $this->createRouteRows( $routes ); } - $this->createRouteRows($routes); - } - /** - * Create Sub Process rows from an array, removing those subprocesses with - * the same UID. - * @param $SubProcess array - * @return void. - */ - function createSubProcessRowsXpdl ($sProUid,$SubProcess,$tasks ) - { - $process = new Process(); - $oData->tasks = $this->getTaskRows($sProUid); - foreach ( $SubProcess as $key => $row ) { - $findTask = 0; - foreach ($oData->tasks as $task => $id ){ - if($row['TAS_PARENT'] == $id['TAS_UID']){ - $findTask = 1; + /** + * Create Sub Process rows from an array, removing those subprocesses with + * the same UID. + * + * @param $SubProcess array + * @return void. + */ + public function createSubProcessRowsXpdl ($sProUid, $SubProcess, $tasks) + { + $process = new Process(); + $oData->tasks = $this->getTaskRows( $sProUid ); + foreach ($SubProcess as $key => $row) { + $findTask = 0; + foreach ($oData->tasks as $task => $id) { + if ($row['TAS_PARENT'] == $id['TAS_UID']) { + $findTask = 1; + } + } + if ($findTask == 0) { + $id = $this->findIdTask( $row['TAS_PARENT'], $tasks ); + $SubProcess[$key]['TAS_PARENT'] = $id; + } + $oSubProcess = new SubProcess(); + if ($oSubProcess->subProcessExists( $row['SP_UID'] )) { + $oSubProcess->remove( $row['SP_UID'] ); + } + $res = $oSubProcess->create( $row ); } - } - if($findTask==0){ - $id = $this->findIdTask($row['TAS_PARENT'],$tasks ); - $SubProcess[$key]['TAS_PARENT']=$id; - } - $oSubProcess = new SubProcess(); - if($oSubProcess->subProcessExists ($row['SP_UID'])){ - $oSubProcess->remove($row['SP_UID']); - } - $res = $oSubProcess->create($row); + return; } - return; - } - /** - * this function find the id of the task - * @param string $idTask - * @param array $routes - * @return array - */ - function findIdTask($idTask,$routes) - { - foreach ($routes as $value => $id ){ - if($id['TAS_UID'] == $idTask){ - return $id['TAS_UID_DATA']; - } + /** + * this public function find the id of the task + * + * @param string $idTask + * @param array $routes + * @return array + */ + public function findIdTask ($idTask, $routes) + { + foreach ($routes as $value => $id) { + if ($id['TAS_UID'] == $idTask) { + return $id['TAS_UID_DATA']; + } + } } - } - /** - * This function create the file .xpdl from a process - * @param string $sProUid - * @return void - */ - function xmdlProcess ( $sProUid = '') - { - $oProcess = new Process(); - $oData->process = $this->getProcessRow( $sProUid, false); - $oData->tasks = $this->getTaskRows( $sProUid ); - $oData->routes = $this->getRouteRows( $sProUid ); - $oData->lanes = $this->getLaneRows( $sProUid ); - $oData->inputs = $this->getInputRows( $sProUid ); - $oData->outputs = $this->getOutputRows( $sProUid ); - $oData->dynaforms = $this->getDynaformRows ( $sProUid ); - $oData->steps = $this->getStepRows( $sProUid ); - $oData->triggers = $this->getTriggerRows( $sProUid ); - $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); - $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); - $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); - $oData->dbconnections = $this->getDBConnectionsRows($sProUid); - $oData->reportTables = $this->getReportTablesRows($sProUid); - $oData->reportTablesVars = $this->getReportTablesVarsRows($sProUid); - $oData->stepSupervisor = $this->getStepSupervisorRows($sProUid); - $oData->objectPermissions = $this->getObjectPermissionRows ($sProUid); - $oData->subProcess = $this->getSubProcessRow ($sProUid); - $oData->caseTracker = $this->getCaseTrackerRow ($sProUid); - $oData->caseTrackerObject = $this->getCaseTrackerObjectRow ($sProUid); - $oData->stage = $this->getStageRow ($sProUid); - $oData->fieldCondition = $this->getFieldCondition($sProUid); - $oData->event = $this->getEventRow ($sProUid); - $oData->caseScheduler = $this->getCaseSchedulerRow ($sProUid); - $path = PATH_DOCUMENT . 'output' . PATH_SEP; - if ( !is_dir($path) ) { - G::verifyPath($path, true); - } - $proTitle = (substr(G::inflect($oData->process['PRO_TITLE']), 0, 245)); - $proTitle = preg_replace("/[^A-Za-z0-9_]/", "", $proTitle); - //Calculating the maximum length of file name - $pathLength = strlen(PATH_DATA ."sites".PATH_SEP.SYS_SYS.PATH_SEP."files".PATH_SEP."output".PATH_SEP); - $length = strlen($proTitle) + $pathLength; - if ($length >= 250) { - $proTitle = myTruncate($proTitle, 250 - $pathLength, '_', ''); - } - $index = ''; - $lastIndex = ''; - do { - $filename = $path . $proTitle . $index . '.xpdl'; - $lastIndex = $index; - if ( $index == '' ) - $index = 1; - else - $index ++; - } while ( file_exists ( $filename ) ); - $proTitle .= $lastIndex; - $filenameOnly = $proTitle . '.xpdl'; - $xml = fopen( $filename.'tpm', "wb"); - $process = $oData->process; - $coordinateMaximumY = 0; - $coordinateMaximumX = 0; - $lanes = $oData->lanes; - foreach ($lanes as $keyLane => $valLane ) { - if($valLane['SWI_TYPE']=="TEXT"){ - $textLane = $valLane['SWI_TEXT']; - $longText = strlen($textLane); - $height = 0; - $width = 0; - if($longText < 40){ - $height = 20; - $width = ($longText*10)+ 10; + /** + * This public function create the file . + * + * xpdl from a process + * + * @param string $sProUid + * @return void + */ + public function xmdlProcess ($sProUid = '') + { + $oProcess = new Process(); + $oData->process = $this->getProcessRow( $sProUid, false ); + $oData->tasks = $this->getTaskRows( $sProUid ); + $oData->routes = $this->getRouteRows( $sProUid ); + $oData->lanes = $this->getLaneRows( $sProUid ); + $oData->inputs = $this->getInputRows( $sProUid ); + $oData->outputs = $this->getOutputRows( $sProUid ); + $oData->dynaforms = $this->getDynaformRows( $sProUid ); + $oData->steps = $this->getStepRows( $sProUid ); + $oData->triggers = $this->getTriggerRows( $sProUid ); + $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); + $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); + $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); + $oData->dbconnections = $this->getDBConnectionsRows( $sProUid ); + $oData->reportTables = $this->getReportTablesRows( $sProUid ); + $oData->reportTablesVars = $this->getReportTablesVarsRows( $sProUid ); + $oData->stepSupervisor = $this->getStepSupervisorRows( $sProUid ); + $oData->objectPermissions = $this->getObjectPermissionRows( $sProUid ); + $oData->subProcess = $this->getSubProcessRow( $sProUid ); + $oData->caseTracker = $this->getCaseTrackerRow( $sProUid ); + $oData->caseTrackerObject = $this->getCaseTrackerObjectRow( $sProUid ); + $oData->stage = $this->getStageRow( $sProUid ); + $oData->fieldCondition = $this->getFieldCondition( $sProUid ); + $oData->event = $this->getEventRow( $sProUid ); + $oData->caseScheduler = $this->getCaseSchedulerRow( $sProUid ); + $path = PATH_DOCUMENT . 'output' . PATH_SEP; + if (! is_dir( $path )) { + G::verifyPath( $path, true ); } - if($longText > 40){ - $numberRows = $longText/40; - $height = $numberRows * 20; - $width = 250; + $proTitle = (substr( G::inflect( $oData->process['PRO_TITLE'] ), 0, 245 )); + $proTitle = preg_replace( "/[^A-Za-z0-9_]/", "", $proTitle ); + //Calculating the maximum length of file name + $pathLength = strlen( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP ); + $length = strlen( $proTitle ) + $pathLength; + if ($length >= 250) { + $proTitle = myTruncate( $proTitle, 250 - $pathLength, '_', '' ); } - $coordinateX = $valLane['SWI_X'] + $width; - $coordinateY = $valLane['SWI_Y'] + $height ; - if($coordinateX > $coordinateMaximumX){ - $coordinateMaximumX = $coordinateX; + $index = ''; + $lastIndex = ''; + do { + $filename = $path . $proTitle . $index . '.xpdl'; + $lastIndex = $index; + if ($index == '') { + $index = 1; + } else { + $index ++; + } + } while (file_exists( $filename )); + $proTitle .= $lastIndex; + $filenameOnly = $proTitle . '.xpdl'; + $xml = fopen( $filename . 'tpm', "wb" ); + $process = $oData->process; + $coordinateMaximumY = 0; + $coordinateMaximumX = 0; + $lanes = $oData->lanes; + foreach ($lanes as $keyLane => $valLane) { + if ($valLane['SWI_TYPE'] == "TEXT") { + $textLane = $valLane['SWI_TEXT']; + $longText = strlen( $textLane ); + $height = 0; + $width = 0; + if ($longText < 40) { + $height = 20; + $width = ($longText * 10) + 10; + } + if ($longText > 40) { + $numberRows = $longText / 40; + $height = $numberRows * 20; + $width = 250; + } + $coordinateX = $valLane['SWI_X'] + $width; + $coordinateY = $valLane['SWI_Y'] + $height; + if ($coordinateX > $coordinateMaximumX) { + $coordinateMaximumX = $coordinateX; + } + if ($coordinateY > $coordinateMaximumY) { + $coordinateMaximumY = $coordinateY; + } + } } - if($coordinateY > $coordinateMaximumY){ - $coordinateMaximumY = $coordinateY; + foreach ($oData->tasks as $keyLane => $val) { + $coordinateX = $val['TAS_POSX'] + 160; + $coordinateY = $val['TAS_POSY'] + 38; + if ($coordinateX > $coordinateMaximumX) { + $coordinateMaximumX = $coordinateX; + } + if ($coordinateY > $coordinateMaximumY) { + $coordinateMaximumY = $coordinateY; + } } - } - } - foreach ($oData->tasks as $keyLane => $val ) { - $coordinateX = $val['TAS_POSX']+ 160; - $coordinateY = $val['TAS_POSY']+ 38; - if($coordinateX > $coordinateMaximumX){ - $coordinateMaximumX = $coordinateX; - } - if($coordinateY > $coordinateMaximumY){ - $coordinateMaximumY = $coordinateY; - } - } - $data = $this->createPool($process,$coordinateMaximumX + 60,$coordinateMaximumY +60); - fwrite ($xml, ''); - fwrite ($xml, $data); - $artifacts = ''; - $artifacts .= $this->createArtifacts($lanes,'0'); - $dataProcess =' + $data = $this->createPool( $process, $coordinateMaximumX + 60, $coordinateMaximumY + 60 ); + fwrite( $xml, '' ); + fwrite( $xml, $data ); + $artifacts = ''; + $artifacts .= $this->createArtifacts( $lanes, '0' ); + $dataProcess = ' '; - $dataProcess.= ' - + $dataProcess .= ' + '; - $activitySets = ''; - $subProcess = $oData->subProcess; - $subProcesses = $this-> createSubProcessesXpdl($subProcess,$oData->tasks); - $activitySets.= $subProcesses['ACTIVITIES']; - $activitySets.= ''; - $artifacts .= $subProcesses['ARTIFACTS']; - $artifacts .=' + $activitySets = ''; + $subProcess = $oData->subProcess; + $subProcesses = $this->createSubProcessesXpdl( $subProcess, $oData->tasks ); + $activitySets .= $subProcesses['ACTIVITIES']; + $activitySets .= ''; + $artifacts .= $subProcesses['ARTIFACTS']; + $artifacts .= ' '; - fwrite ($xml,$artifacts); - fwrite ($xml,$dataProcess); - fwrite ($xml,$activitySets); - // Here are generated activities of a file. XPDL - // for this use the process tasks - $tasks = $oData->tasks; - $events = $oData->event; - $scheduler = $oData->caseScheduler; - $dataTasks = $this-> createActivitiesXpdl($tasks,$events,$scheduler); - fwrite ($xml,$dataTasks['ACTIVITIES']); - $taskHidden = $dataTasks['TASK_HIDDEN']; - $routes = $oData->routes; - $dataRoutes = $this-> createTransitionsXpdl($routes,$tasks,$taskHidden); - fwrite ($xml,$dataRoutes['ACTIVITIES']); - $data = ' + fwrite( $xml, $artifacts ); + fwrite( $xml, $dataProcess ); + fwrite( $xml, $activitySets ); + // Here are generated activities of a file. XPDL + // for this use the process tasks + $tasks = $oData->tasks; + $events = $oData->event; + $scheduler = $oData->caseScheduler; + $dataTasks = $this->createActivitiesXpdl( $tasks, $events, $scheduler ); + fwrite( $xml, $dataTasks['ACTIVITIES'] ); + $taskHidden = $dataTasks['TASK_HIDDEN']; + $routes = $oData->routes; + $dataRoutes = $this->createTransitionsXpdl( $routes, $tasks, $taskHidden ); + fwrite( $xml, $dataRoutes['ACTIVITIES'] ); + $data = ' '; - fwrite ($xml, $data); - fwrite ($xml, $dataTasks['TRANSITION']); - fwrite ($xml, $dataRoutes['TRANSITION']); - $data = ' + fwrite( $xml, $data ); + fwrite( $xml, $dataTasks['TRANSITION'] ); + fwrite( $xml, $dataRoutes['TRANSITION'] ); + $data = ' '; - fwrite ($xml, $data); - fclose ($xml); - $filenameLink = 'processes_DownloadFileXpdl?p=' . $proTitle . '&r=' . rand(100,1000); - $result['FILENAMEXPDL'] = $proTitle.'.xpdl'; - $result['FILENAME_LINKXPDL']= $filenameLink; - return $result; - } + fwrite( $xml, $data ); + fclose( $xml ); + $filenameLink = 'processes_DownloadFileXpdl?p=' . $proTitle . '&r=' . rand( 100, 1000 ); + $result['FILENAMEXPDL'] = $proTitle . '.xpdl'; + $result['FILENAME_LINKXPDL'] = $filenameLink; + return $result; + } - /** - * This function create the pool from the process - * @param array $process - * @param string $coordinateMaximumX - * @param string $coordinateMaximumY - * @return string - */ - function createPool ($process,$coordinateMaximumX,$coordinateMaximumY) - { - $data = ''; - $data .= ' - + /** + * This public function create the pool from the process + * + * @param array $process + * @param string $coordinateMaximumX + * @param string $coordinateMaximumY + * @return string + */ + public function createPool ($process, $coordinateMaximumX, $coordinateMaximumY) + { + $data = ''; + $data .= ' + 2.1 Process Maker - '.$process['PRO_CREATE_DATE'].' - '.$process['PRO_DESCRIPTION'].' + ' . $process['PRO_CREATE_DATE'] . ' + ' . $process['PRO_DESCRIPTION'] . ' @@ -465,11 +485,11 @@ class Xpdl extends processes - + - + @@ -479,159 +499,161 @@ class Xpdl extends processes '; - return $data; - } + return $data; + } - /** - * This function generated the Artifacts of a file. XPDL - * @param array $lanes - * @param string $id - * @return string - */ - function createArtifacts($lanes,$id) - { - $artifacts = ''; - $idTask = ''; - foreach ($lanes as $keyLane => $valLane ) { - if($valLane['SWI_TYPE']=="TEXT"){ - $idLane = $valLane['SWI_UID']; - $textLane = $valLane['SWI_TEXT']; - $coordinateX = $valLane['SWI_X']; - $coordinateY = $valLane['SWI_Y']; - $longText = strlen($textLane); - if($longText < 40){ - $height = 20; - $width = ($longText*10)+ 10; - } - if($longText > 40){ - $numberRows = $longText/40; - $height = $numberRows * 20; - $width = 250; - } - if($id != 0){ - $idTask = ' ActivitySetId="'.$id.'"'; - } - $artifacts .=' - + /** + * This public function generated the Artifacts of a file. + * XPDL + * + * @param array $lanes + * @param string $id + * @return string + */ + public function createArtifacts ($lanes, $id) + { + $artifacts = ''; + $idTask = ''; + foreach ($lanes as $keyLane => $valLane) { + if ($valLane['SWI_TYPE'] == "TEXT") { + $idLane = $valLane['SWI_UID']; + $textLane = $valLane['SWI_TEXT']; + $coordinateX = $valLane['SWI_X']; + $coordinateY = $valLane['SWI_Y']; + $longText = strlen( $textLane ); + if ($longText < 40) { + $height = 20; + $width = ($longText * 10) + 10; + } + if ($longText > 40) { + $numberRows = $longText / 40; + $height = $numberRows * 20; + $width = 250; + } + if ($id != 0) { + $idTask = ' ActivitySetId="' . $id . '"'; + } + $artifacts .= ' + - - + + '; - } + } + } + return $artifacts; } - return $artifacts; - } - /** - * This function creates SubProcesses - * @param array $tasks - * @param array $subProcess - * @return array - */ - function createSubProcessesXpdl($subProcess,$tasks) - { - $activitySets = ''; - $dataCreated = ''; - $artifacts = ''; - foreach ($subProcess as $key => $row) { - if($row['SP_UID'] != ''){ - $idTask = $row['TAS_PARENT']; - foreach ($tasks as $id => $value) { - if($value['TAS_UID'] == $idTask){ - $nameTask = htmlentities($value['TAS_TITLE']); - } - } - $activitySets.=' - '; - if($row['PRO_UID'] != '' && $row['PRO_UID'] != 0){ - $dataSubProcess= $this->serializeProcess($row['PRO_UID']); - $data = unserialize ($dataSubProcess); - $tasks = $data->tasks; - $subProcessData= $data->subProcess; - $subProcessTask= $data->tasks; - $lanes = $data->lanes; - $events = $data->event; - $scheduler = $data->caseScheduler; - $artifacts = $this->createArtifacts($lanes,$idTask); - $dataCreated = $this->createSubProcessesXpdl($subProcessData,$subProcessTask); - $dataTasks = $this->createActivitiesXpdl($tasks,$events,$scheduler); - $activitySets .=$dataTasks['ACTIVITIES']; - $taskHidden = $dataTasks['TASK_HIDDEN']; - $routes = $data->routes; - $dataRoutes = $this->createTransitionsXpdl($routes,$tasks,$taskHidden); - $activitySets .=$dataRoutes['ACTIVITIES']; - $activitySets .= ' + /** + * This public function creates SubProcesses + * + * @param array $tasks + * @param array $subProcess + * @return array + */ + public function createSubProcessesXpdl ($subProcess, $tasks) + { + $activitySets = ''; + $dataCreated = ''; + $artifacts = ''; + foreach ($subProcess as $key => $row) { + if ($row['SP_UID'] != '') { + $idTask = $row['TAS_PARENT']; + foreach ($tasks as $id => $value) { + if ($value['TAS_UID'] == $idTask) { + $nameTask = htmlentities( $value['TAS_TITLE'] ); + } + } + $activitySets .= ' + '; + if ($row['PRO_UID'] != '' && $row['PRO_UID'] != 0) { + $dataSubProcess = $this->serializeProcess( $row['PRO_UID'] ); + $data = unserialize( $dataSubProcess ); + $tasks = $data->tasks; + $subProcessData = $data->subProcess; + $subProcessTask = $data->tasks; + $lanes = $data->lanes; + $events = $data->event; + $scheduler = $data->caseScheduler; + $artifacts = $this->createArtifacts( $lanes, $idTask ); + $dataCreated = $this->createSubProcessesXpdl( $subProcessData, $subProcessTask ); + $dataTasks = $this->createActivitiesXpdl( $tasks, $events, $scheduler ); + $activitySets .= $dataTasks['ACTIVITIES']; + $taskHidden = $dataTasks['TASK_HIDDEN']; + $routes = $data->routes; + $dataRoutes = $this->createTransitionsXpdl( $routes, $tasks, $taskHidden ); + $activitySets .= $dataRoutes['ACTIVITIES']; + $activitySets .= ' '; - $activitySets .=$dataTasks['TRANSITION']; - $activitySets .=$dataRoutes['TRANSITION']; - $activitySets .= ' + $activitySets .= $dataTasks['TRANSITION']; + $activitySets .= $dataRoutes['TRANSITION']; + $activitySets .= ' '; - } - else{ - $data =' + } else { + $data = ' '; + } + $activitySets .= ''; + $activitySets .= $dataCreated; + } } - $activitySets.=''; - $activitySets.=$dataCreated; - } + $fields['ACTIVITIES'] = $activitySets; + $fields['ARTIFACTS'] = $artifacts; + return $fields; } - $fields['ACTIVITIES']= $activitySets; - $fields['ARTIFACTS'] = $artifacts; - return $fields; - } - /** - * This function creates activities from the tasks - * @param array $tasks - * @return array - */ - function createActivitiesXpdl($tasks,$events,$scheduler) - { - $dataTasks = ' + /** + * This public function creates activities from the tasks + * + * @param array $tasks + * @return array + */ + public function createActivitiesXpdl ($tasks, $events, $scheduler) + { + $dataTasks = ' '; - $transitions =' + $transitions = ' '; - $start = 0; - $implementation = ''; - $taskHidden = array(); - $description = ''; - foreach ($tasks as $key => $val ) { - $idTask = $val['TAS_UID']; - $nameTask = $val['TAS_TITLE']; - $coordinateX = $val['TAS_POSX']; - $coordinateY = $val['TAS_POSY']; - if($val['TAS_TYPE']== 'NORMAL' or $val['TAS_TYPE']== 'SUBPROCESS'){ - if($val['TAS_TYPE']== 'NORMAL'){ - $implementation = ' + $start = 0; + $implementation = ''; + $taskHidden = array (); + $description = ''; + foreach ($tasks as $key => $val) { + $idTask = $val['TAS_UID']; + $nameTask = $val['TAS_TITLE']; + $coordinateX = $val['TAS_POSX']; + $coordinateY = $val['TAS_POSY']; + if ($val['TAS_TYPE'] == 'NORMAL' or $val['TAS_TYPE'] == 'SUBPROCESS') { + if ($val['TAS_TYPE'] == 'NORMAL') { + $implementation = ' '; - } - if($val['TAS_TYPE']== 'SUBPROCESS'){ - $implementation = ' - '; - } - if(isset($val['TAS_DESCRIPTION'])){ - $description = $val['TAS_DESCRIPTION']; - } - else{ - $description = ''; - } - $fillColor = $val['TAS_COLOR']; - if($val['TAS_START']=="TRUE"){ - $start = 1; - } - if($start==1){ - $start=0; - $positionX=$coordinateX+65; - $positionY=$coordinateY-45; - $dataTasks .=' - - '.$description.' + } + if ($val['TAS_TYPE'] == 'SUBPROCESS') { + $implementation = ' + '; + } + if (isset( $val['TAS_DESCRIPTION'] )) { + $description = $val['TAS_DESCRIPTION']; + } else { + $description = ''; + } + $fillColor = $val['TAS_COLOR']; + if ($val['TAS_START'] == "TRUE") { + $start = 1; + } + if ($start == 1) { + $start = 0; + $positionX = $coordinateX + 65; + $positionY = $coordinateY - 45; + $dataTasks .= ' + + ' . $description . ' @@ -639,14 +661,13 @@ class Xpdl extends processes - - + + '; - $transitions.=' - + $transitions .= ' + @@ -655,98 +676,95 @@ class Xpdl extends processes '; - } - $dataTasks .=' - - '.$description.'' - .$implementation.' + } + $dataTasks .= ' + + ' . $description . '' . $implementation . ' - - + + '; - } - else{ - if($val['TAS_TYPE']== 'HIDDEN'){ - $taskHidden[] = $tasks[$key]; - } - } - } - - $aux = $events; - foreach ($events as $key => $row) { - $aux[$key]= $row['TAS_UID']; - } - if(sizeof($events)> 0){ - array_multisort($aux,SORT_ASC,$events); - unset($aux); - } - $findTask = 0; - $idTasks = array(); - $arrayTasks = array(); - $port = 5; - foreach($events as $key => $val){ - if($val['EVN_ACTION'] == 'SEND_MESSAGE' and $val['EVN_RELATED_TO'] == 'SINGLE'){ - $idEvent = $val['EVN_UID']; - $idTask = $val['TAS_UID']; - foreach($tasks as $id => $value){ - if($value['TAS_UID'] == $idTask){ - $coordinateX = $value['TAS_POSX'] + 19; - $coordinateY = $value['TAS_POSY'] + 38; - $coordinateXM = $coordinateX + 96; - $coordinateYM = $coordinateY + 65; - } - } - foreach($arrayTasks as $id => $value){ - if($idTask == $value['ID']){ - $coordinateX = $value['X'] + 30; - $coordinateY = $value['Y']; - $coordinateXM = $value['XM']+ 30; - $coordinateYM = $value['YM']; - if($coordinateY < 30){ - $coordinateX = $value['FIRSTX'] + 30; - $coordinateY = $value['FIRSTY']; + } else { + if ($val['TAS_TYPE'] == 'HIDDEN') { + $taskHidden[] = $tasks[$key]; + } } - $arrayTasks[$id]['X'] = $coordinateX; - $arrayTasks[$id]['Y'] = $coordinateY; - $arrayTasks[$id]['PORT'] = $port + 1; - $findTask = 1; - $port = $arrayTasks[$id]['PORT']; - } } - $description = $val['EVN_DESCRIPTION']; - $arrayTo = $val['EVN_ACTION_PARAMETERS']; - foreach($arrayTo as $idTo => $valueTo){ - $to = $valueTo; + $aux = $events; + foreach ($events as $key => $row) { + $aux[$key] = $row['TAS_UID']; } - $to = explode('|',$to); - $to = $to[0]; - $oConfiguration = new Configuration(); - $emailArray = $oConfiguration->load('Emails','','','',''); - $arrayFrom = unserialize($emailArray['CFG_VALUE']); - $passwd = $arrayFrom['MESS_PASSWORD']; - $passwdDec = G::decrypt($passwd,'EMAILENCRYPT'); - if (strpos( $passwdDec, 'hash:' ) !== false) { - list($hash, $pass) = explode(":", $passwdDec); - $arrayFrom['MESS_PASSWORD'] = $pass; + if (sizeof( $events ) > 0) { + array_multisort( $aux, SORT_ASC, $events ); + unset( $aux ); } - $from = $arrayFrom['MESS_ACCOUNT']; - if($to == 'ext'){ - $oUser = new Users(); - $aUser = $oUser->load($_SESSION['USER_LOGGED']); - $to = $aUser['USR_USERNAME']; - } - $dataTasks .=' - + $findTask = 0; + $idTasks = array (); + $arrayTasks = array (); + $port = 5; + foreach ($events as $key => $val) { + if ($val['EVN_ACTION'] == 'SEND_MESSAGE' and $val['EVN_RELATED_TO'] == 'SINGLE') { + $idEvent = $val['EVN_UID']; + $idTask = $val['TAS_UID']; + foreach ($tasks as $id => $value) { + if ($value['TAS_UID'] == $idTask) { + $coordinateX = $value['TAS_POSX'] + 19; + $coordinateY = $value['TAS_POSY'] + 38; + $coordinateXM = $coordinateX + 96; + $coordinateYM = $coordinateY + 65; + } + } + foreach ($arrayTasks as $id => $value) { + if ($idTask == $value['ID']) { + $coordinateX = $value['X'] + 30; + $coordinateY = $value['Y']; + $coordinateXM = $value['XM'] + 30; + $coordinateYM = $value['YM']; + if ($coordinateY < 30) { + $coordinateX = $value['FIRSTX'] + 30; + $coordinateY = $value['FIRSTY']; + } + $arrayTasks[$id]['X'] = $coordinateX; + $arrayTasks[$id]['Y'] = $coordinateY; + $arrayTasks[$id]['PORT'] = $port + 1; + $findTask = 1; + $port = $arrayTasks[$id]['PORT']; + } + } + + $description = $val['EVN_DESCRIPTION']; + $arrayTo = $val['EVN_ACTION_PARAMETERS']; + foreach ($arrayTo as $idTo => $valueTo) { + $to = $valueTo; + } + $to = explode( '|', $to ); + $to = $to[0]; + $oConfiguration = new Configuration(); + $emailArray = $oConfiguration->load( 'Emails', '', '', '', '' ); + $arrayFrom = unserialize( $emailArray['CFG_VALUE'] ); + $passwd = $arrayFrom['MESS_PASSWORD']; + $passwdDec = G::decrypt( $passwd, 'EMAILENCRYPT' ); + if (strpos( $passwdDec, 'hash:' ) !== false) { + list ($hash, $pass) = explode( ":", $passwdDec ); + $arrayFrom['MESS_PASSWORD'] = $pass; + } + $from = $arrayFrom['MESS_ACCOUNT']; + if ($to == 'ext') { + $oUser = new Users(); + $aUser = $oUser->load( $_SESSION['USER_LOGGED'] ); + $to = $aUser['USR_USERNAME']; + } + $dataTasks .= ' + - + TimeCycle @@ -756,90 +774,90 @@ class Xpdl extends processes - + false - - '.$description.' + + ' . $description . ' - + - '.$description.' + ' . $description . ' - + false '; - $transitions.=' - + $transitions .= ' + - + '; - if($findTask == 0){ - $idTasks['ID'] = $idTask; - $idTasks['X'] = $coordinateX; - $idTasks['Y'] = $coordinateY; - $idTasks['FIRSTX'] = $coordinateX; - $idTasks['FIRSTY'] = $coordinateY; - $idTasks['XM'] = $coordinateXM; - $idTasks['YM'] = $coordinateYM; - $idTasks['PORT'] = $port; - $arrayTasks[] = $idTasks; - } - } - } - $idTasks = array(); - $arrayTasks = array(); - $findTask = 0; - foreach($scheduler as $key => $val){ - if($val['SCH_OPTION'] == 4){ - $idSch = $val['SCH_UID']; - $name = $val['SCH_NAME']; - $idTask = $val['TAS_UID']; - foreach($tasks as $id => $value){ - if($value['TAS_UID'] == $idTask){ - $coordinateX = $value['TAS_POSX'] - 60; - $coordinateY = $value['TAS_POSY'] + 5; - } - } - foreach($arrayTasks as $id => $value){ - if($idTask == $value['ID']){ - $coordinateX = $value['X']; - $coordinateY = $value['Y'] - 40; - if($coordinateY < 30){ - $coordinateX = $value['FIRSTX'] + 50; - $coordinateY = $value['FIRSTY'] - 90; + if ($findTask == 0) { + $idTasks['ID'] = $idTask; + $idTasks['X'] = $coordinateX; + $idTasks['Y'] = $coordinateY; + $idTasks['FIRSTX'] = $coordinateX; + $idTasks['FIRSTY'] = $coordinateY; + $idTasks['XM'] = $coordinateXM; + $idTasks['YM'] = $coordinateYM; + $idTasks['PORT'] = $port; + $arrayTasks[] = $idTasks; + } } - $arrayTasks[$id]['X'] = $coordinateX; - $arrayTasks[$id]['Y'] = $coordinateY; - $findTask = 1; - } } - $time = $val['SCH_TIME_NEXT_RUN']; - $time = explode(' ',$time); - $time = $time[0]; - $time = str_replace('-','/',$time); - $dataTasks .=' - + $idTasks = array (); + $arrayTasks = array (); + $findTask = 0; + foreach ($scheduler as $key => $val) { + if ($val['SCH_OPTION'] == 4) { + $idSch = $val['SCH_UID']; + $name = $val['SCH_NAME']; + $idTask = $val['TAS_UID']; + foreach ($tasks as $id => $value) { + if ($value['TAS_UID'] == $idTask) { + $coordinateX = $value['TAS_POSX'] - 60; + $coordinateY = $value['TAS_POSY'] + 5; + } + } + foreach ($arrayTasks as $id => $value) { + if ($idTask == $value['ID']) { + $coordinateX = $value['X']; + $coordinateY = $value['Y'] - 40; + if ($coordinateY < 30) { + $coordinateX = $value['FIRSTX'] + 50; + $coordinateY = $value['FIRSTY'] - 90; + } + $arrayTasks[$id]['X'] = $coordinateX; + $arrayTasks[$id]['Y'] = $coordinateY; + $findTask = 1; + } + } + $time = $val['SCH_TIME_NEXT_RUN']; + $time = explode( ' ', $time ); + $time = $time[0]; + $time = str_replace( '-', '/', $time ); + $dataTasks .= ' + - + TimeCycle @@ -848,13 +866,13 @@ class Xpdl extends processes - + false '; - $transitions.=' - + $transitions .= ' + @@ -863,40 +881,40 @@ class Xpdl extends processes '; - if($findTask == 0){ - $idTasks['ID'] = $idTask; - $idTasks['X'] = $coordinateX; - $idTasks['Y'] = $coordinateY; - $idTasks['FIRSTX'] = $coordinateX; - $idTasks['FIRSTY'] = $coordinateY; - $arrayTasks[] = $idTasks; - } - } - if($val['SCH_OPTION'] == 1){ - $idSch = $val['SCH_UID']; - $name = $val['SCH_NAME']; - $idTask = $val['TAS_UID']; - foreach($tasks as $id => $value){ - if($value['TAS_UID'] == $idTask){ - $coordinateX = $value['TAS_POSX'] - 60; - $coordinateY = $value['TAS_POSY'] + 5; - } - } - foreach($arrayTasks as $id => $value){ - if($idTask == $value['ID']){ - $coordinateX = $value['X']; - $coordinateY = $value['Y'] - 40; - if($coordinateY < 30){ - $coordinateX = $value['FIRSTX'] + 50; - $coordinateY = $value['FIRSTY'] - 90; + if ($findTask == 0) { + $idTasks['ID'] = $idTask; + $idTasks['X'] = $coordinateX; + $idTasks['Y'] = $coordinateY; + $idTasks['FIRSTX'] = $coordinateX; + $idTasks['FIRSTY'] = $coordinateY; + $arrayTasks[] = $idTasks; + } } - $arrayTasks[$id]['X'] = $coordinateX; - $arrayTasks[$id]['Y'] = $coordinateY; - $findTask = 1; - } - } - $dataTasks .=' - + if ($val['SCH_OPTION'] == 1) { + $idSch = $val['SCH_UID']; + $name = $val['SCH_NAME']; + $idTask = $val['TAS_UID']; + foreach ($tasks as $id => $value) { + if ($value['TAS_UID'] == $idTask) { + $coordinateX = $value['TAS_POSX'] - 60; + $coordinateY = $value['TAS_POSY'] + 5; + } + } + foreach ($arrayTasks as $id => $value) { + if ($idTask == $value['ID']) { + $coordinateX = $value['X']; + $coordinateY = $value['Y'] - 40; + if ($coordinateY < 30) { + $coordinateX = $value['FIRSTX'] + 50; + $coordinateY = $value['FIRSTY'] - 90; + } + $arrayTasks[$id]['X'] = $coordinateX; + $arrayTasks[$id]['Y'] = $coordinateY; + $findTask = 1; + } + } + $dataTasks .= ' + @@ -909,13 +927,13 @@ class Xpdl extends processes - + false '; - $transitions.=' - + $transitions .= ' + @@ -924,129 +942,130 @@ class Xpdl extends processes '; - if($findTask == 0){ - $idTasks['ID'] = $idTask; - $idTasks['X'] = $coordinateX; - $idTasks['Y'] = $coordinateY; - $idTasks['FIRSTX'] = $coordinateX; - $idTasks['FIRSTY'] = $coordinateY; - $arrayTasks[] = $idTasks; + if ($findTask == 0) { + $idTasks['ID'] = $idTask; + $idTasks['X'] = $coordinateX; + $idTasks['Y'] = $coordinateY; + $idTasks['FIRSTX'] = $coordinateX; + $idTasks['FIRSTY'] = $coordinateY; + $arrayTasks[] = $idTasks; + } + } } - } + $data = array (); + $data['ACTIVITIES'] = $dataTasks; + $data['TRANSITION'] = $transitions; + $data['TASK_HIDDEN'] = $taskHidden; + return $data; } - $data = array(); - $data['ACTIVITIES'] = $dataTasks; - $data['TRANSITION'] = $transitions; - $data['TASK_HIDDEN']= $taskHidden; - return $data; - } - /** - * This function creates transitions - * @param array $routes - * @param array $tasks - * @return array - */ - function createTransitionsXpdl($routes,$tasks,$taskHidden) - { - $cont = 0; - $dataRoutes = ''; - $endEvent = 1; - $taskParallel = ''; - $routeParallel = ''; - $taskSecJoin = ''; - $routeSecJoin = ''; - $taskEvaluate = ''; - $routeEvaluate = ''; - $taskParallelEv = ''; - $routeParallelEv = ''; - $taskSelect = ''; - $routeSelect = ''; - $routeEnd = ''; - $arraySecJoin = array(); - $position = 0; - $fillColor = ''; - $transitions = ''; - $condition = ''; - $nextTask = ''; - $findFrom = 0; - $findTo = 0; - $routesTasks = $routes; - foreach ($routes as $key => $row) { - if($row['ROU_TYPE'] == 'SEC-JOIN'){ - $arraySecJoin[$position] = array(); - $arraySecJoin[$position] = $row; - $position = $position + 1; - unset($routes[$key]); - } - } - $aux = $arraySecJoin ; - foreach ($arraySecJoin as $key => $row) { - $aux[$key]= $row['ROU_NEXT_TASK']; - } - if(sizeof($arraySecJoin)> 0){ - array_multisort($aux,SORT_ASC,$arraySecJoin); - unset($aux); - } - foreach ($routes as $key => $row) { - $uid[$key] = $row['TAS_UID']; - $case[$key] = $row['ROU_CASE']; - } - if(sizeof($routes)> 0){ - array_multisort($uid, SORT_ASC, $case, SORT_ASC, $routes); - } - $routes = array_merge($routes,$arraySecJoin); - $routesTasks = $routes; - foreach ($routes as $key => $val ) { - $end = 0; - $idRoute = $val['ROU_UID']; - $idTask = $val['TAS_UID']; - $nextTask = $val['ROU_NEXT_TASK']; - $condition = htmlentities($val['ROU_CONDITION']); - if($nextTask == "-1"){ - $end = 1; - } - $typeRoute = $val['ROU_TYPE']; - $route = ''; - if ($typeRoute != "SEQUENTIAL" ){ - switch($typeRoute){ - case 'PARALLEL': - $coordinateX = 0; - $coordinateY = 0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } + /** + * This public function creates transitions + * + * @param array $routes + * @param array $tasks + * @return array + */ + public function createTransitionsXpdl ($routes, $tasks, $taskHidden) + { + $cont = 0; + $dataRoutes = ''; + $endEvent = 1; + $taskParallel = ''; + $routeParallel = ''; + $taskSecJoin = ''; + $routeSecJoin = ''; + $taskEvaluate = ''; + $routeEvaluate = ''; + $taskParallelEv = ''; + $routeParallelEv = ''; + $taskSelect = ''; + $routeSelect = ''; + $routeEnd = ''; + $arraySecJoin = array (); + $position = 0; + $fillColor = ''; + $transitions = ''; + $condition = ''; + $nextTask = ''; + $findFrom = 0; + $findTo = 0; + $routesTasks = $routes; + foreach ($routes as $key => $row) { + if ($row['ROU_TYPE'] == 'SEC-JOIN') { + $arraySecJoin[$position] = array (); + $arraySecJoin[$position] = $row; + $position = $position + 1; + unset( $routes[$key] ); } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } + } + $aux = $arraySecJoin; + foreach ($arraySecJoin as $key => $row) { + $aux[$key] = $row['ROU_NEXT_TASK']; + } + if (sizeof( $arraySecJoin ) > 0) { + array_multisort( $aux, SORT_ASC, $arraySecJoin ); + unset( $aux ); + } + foreach ($routes as $key => $row) { + $uid[$key] = $row['TAS_UID']; + $case[$key] = $row['ROU_CASE']; + } + if (sizeof( $routes ) > 0) { + array_multisort( $uid, SORT_ASC, $case, SORT_ASC, $routes ); + } + $routes = array_merge( $routes, $arraySecJoin ); + $routesTasks = $routes; + foreach ($routes as $key => $val) { + $end = 0; + $idRoute = $val['ROU_UID']; + $idTask = $val['TAS_UID']; + $nextTask = $val['ROU_NEXT_TASK']; + $condition = htmlentities( $val['ROU_CONDITION'] ); + if ($nextTask == "-1") { + $end = 1; } - $positionX = $coordinateX + 60; - $positionY = $coordinateY + 40; - if($idTask != $taskParallel){ - $taskParallel = $idTask; - $routeParallel = $idRoute; - $dataRoutes .=' - + $typeRoute = $val['ROU_TYPE']; + $route = ''; + if ($typeRoute != "SEQUENTIAL") { + switch ($typeRoute) { + case 'PARALLEL': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY + 40; + if ($idTask != $taskParallel) { + $taskParallel = $idTask; + $routeParallel = $idRoute; + $dataRoutes .= ' + - - + + false '; - if($taskParallel != $routeParallel ){ - $transitions.=' - + if ($taskParallel != $routeParallel) { + $transitions .= ' + @@ -1055,9 +1074,9 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + @@ -1066,10 +1085,9 @@ class Xpdl extends processes '; - } - else{ - $transitions.=' - + } else { + $transitions .= ' + @@ -1078,45 +1096,45 @@ class Xpdl extends processes '; - } - break; - case 'SEC-JOIN': - $coordinateX = 0; - $coordinateY = 0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$nextTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } - } - $positionX = $coordinateX + 60; - $positionY = $coordinateY - 45; - if($nextTask != $taskSecJoin){ - $taskSecJoin = $nextTask; - $routeSecJoin = $idRoute; - $dataRoutes .=' - + } + break; + case 'SEC-JOIN': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $nextTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY - 45; + if ($nextTask != $taskSecJoin) { + $taskSecJoin = $nextTask; + $routeSecJoin = $idRoute; + $dataRoutes .= ' + - - + + false '; - if($routeSecJoin != $taskSecJoin ){ - $transitions.=' - + if ($routeSecJoin != $taskSecJoin) { + $transitions .= ' + @@ -1125,9 +1143,9 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + @@ -1136,10 +1154,9 @@ class Xpdl extends processes '; - } - else{ - $transitions.=' - + } else { + $transitions .= ' + @@ -1148,46 +1165,46 @@ class Xpdl extends processes '; - } - break; - case 'EVALUATE': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } - } - $positionX=$coordinateX+60; - $positionY=$coordinateY+40; - if($idTask != $taskEvaluate){ - $taskEvaluate = $idTask; - $routeEvaluate = $idRoute; - if($nextTask != "-1"){ - $dataRoutes .=' - + } + break; + case 'EVALUATE': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY + 40; + if ($idTask != $taskEvaluate) { + $taskEvaluate = $idTask; + $routeEvaluate = $idRoute; + if ($nextTask != "-1") { + $dataRoutes .= ' + - - + + false '; - if($taskEvaluate != $routeEvaluate ){ - $transitions.=' - + if ($taskEvaluate != $routeEvaluate) { + $transitions .= ' + @@ -1196,11 +1213,11 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1209,14 +1226,13 @@ class Xpdl extends processes '; - } - } - else{ - if($nextTask !="-1"){ - $transitions.=' - + } + } else { + if ($nextTask != "-1") { + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1225,49 +1241,48 @@ class Xpdl extends processes '; - } - else{ - $routeEnd = $routeEvaluate; - } - } - break; - case 'PARALLEL-BY-EVALUATION': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } - } - $positionX=$coordinateX+60; - $positionY=$coordinateY+40; - if($idTask != $taskParallelEv){ - $taskParallelEv = $idTask; - $routeParallelEv = $idRoute; - $dataRoutes .=' - + } else { + $routeEnd = $routeEvaluate; + } + } + break; + case 'PARALLEL-BY-EVALUATION': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY + 40; + if ($idTask != $taskParallelEv) { + $taskParallelEv = $idTask; + $routeParallelEv = $idRoute; + $dataRoutes .= ' + - - + + false '; - if($taskParallelEv != $routeParallelEv ){ - $transitions.=' - + if ($taskParallelEv != $routeParallelEv) { + $transitions .= ' + @@ -1276,11 +1291,11 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1289,12 +1304,11 @@ class Xpdl extends processes '; - } - else{ - $transitions.=' - + } else { + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1303,45 +1317,45 @@ class Xpdl extends processes '; - } - break; - case 'SELECT': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } - } - $positionX=$coordinateX+60; - $positionY=$coordinateY+40; - if($idTask != $taskSelect){ - $taskSelect = $idTask; - $routeSelect = $idRoute; - $dataRoutes .=' - + } + break; + case 'SELECT': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY + 40; + if ($idTask != $taskSelect) { + $taskSelect = $idTask; + $routeSelect = $idRoute; + $dataRoutes .= ' + - - + + false '; - if($taskSelect != $routeSelect ){ - $transitions.=' - + if ($taskSelect != $routeSelect) { + $transitions .= ' + @@ -1350,11 +1364,11 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1363,13 +1377,12 @@ class Xpdl extends processes '; - } - else{ - if($nextTask !="-1"){ - $transitions.=' - + } else { + if ($nextTask != "-1") { + $transitions .= ' + - '.$condition.' + ' . $condition . ' @@ -1378,53 +1391,52 @@ class Xpdl extends processes '; - } - else{ - $routeEnd = $routeSelect; - } - } - break; - case 'DISCRIMINATOR': - $coordinateX = 0; - $coordinateY = 0; - $optional = $val['ROU_OPTIONAL']; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$nextTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - foreach ($taskHidden as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX']; - $coordinateY = $idVal['TAS_POSY']; - $idRoute = $idTask; - } - } - $positionX=$coordinateX+60; - $positionY=$coordinateY-45; - if($nextTask != $taskSecJoin){ - $taskDiscriminator = $nextTask; - $routeDiscriminator = $idRoute; - $dataRoutes .=' - + } else { + $routeEnd = $routeSelect; + } + } + break; + case 'DISCRIMINATOR': + $coordinateX = 0; + $coordinateY = 0; + $optional = $val['ROU_OPTIONAL']; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $nextTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + foreach ($taskHidden as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $idRoute = $idTask; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY - 45; + if ($nextTask != $taskSecJoin) { + $taskDiscriminator = $nextTask; + $routeDiscriminator = $idRoute; + $dataRoutes .= ' + - - + + - - + + false '; - if($routeDiscriminator != $taskDiscriminator ){ - $transitions.=' - + if ($routeDiscriminator != $taskDiscriminator) { + $transitions .= ' + @@ -1433,9 +1445,9 @@ class Xpdl extends processes '; - } - $transitions.=' - + } + $transitions .= ' + @@ -1443,10 +1455,35 @@ class Xpdl extends processes '; + } else { + $transitions .= ' + + + + + + + + + '; + } + break; + } } - else{ - $transitions.=' - + if ($end == 1) { + if ($typeRoute == "SEQUENTIAL") { + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + $positionX = $coordinateX + 65; + $positionY = $coordinateY + 40; + $transitions .= ' + @@ -1455,47 +1492,20 @@ class Xpdl extends processes '; - } - break; - } - } - if($end==1){ - if($typeRoute == "SEQUENTIAL"){ - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - $positionX=$coordinateX+65; - $positionY=$coordinateY+40; - $transitions.=' - - - - - - - - - '; - } - else{ - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - } - } - $positionX = $coordinateX + 120; - $positionY = $coordinateY + 40; - $idTask = $routeEnd; - $transitions.=' - + } else { + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + } + } + $positionX = $coordinateX + 120; + $positionY = $coordinateY + 40; + $idTask = $routeEnd; + $transitions .= ' + @@ -1504,9 +1514,9 @@ class Xpdl extends processes '; - } - $dataRoutes .=' - + } + $dataRoutes .= ' + @@ -1514,19 +1524,18 @@ class Xpdl extends processes - - + + false '; - $end = 0; - $endEvent = 0; - } - else{ - if ($typeRoute == "SEQUENTIAL"){ - $transitions.=' - + $end = 0; + $endEvent = 0; + } else { + if ($typeRoute == "SEQUENTIAL") { + $transitions .= ' + @@ -1535,53 +1544,53 @@ class Xpdl extends processes '; - } - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']+190; - $coordinateY=$idVal['TAS_POSY']+5; - if(isset($idVal['TAS_DEF_MESSAGE'])){ - if($idVal['TAS_DEF_MESSAGE'] != '' and $idVal['TAS_DEF_MESSAGE'] != Null){ - $idEvent = G::generateUniqueID(); - $example = new Derivation(); - $fieldUserTo = $example->getAllUsersFromAnyTask($nextTask); - $fieldUserTo = $example->getUsersFullNameFromArray($fieldUserTo); - $fieldUserFrom = $example->getAllUsersFromAnyTask($idTask); - $fieldUserFrom = $example->getUsersFullNameFromArray($fieldUserFrom); - /*$oUser = new Users(); - $aUser = $oUser->load($_SESSION['USER_LOGGED']); - $from = $aUser['USR_USERNAME'];*/ - $description = ''; - $userFrom = ''; - $userTo = ''; - if(isset($fieldUserFrom[0]['USR_USERNAME'])){ - $userFrom = $fieldUserFrom[0]['USR_USERNAME']; - } - if(isset($fieldUserTo[0]['USR_USERNAME'])){ - $userTo = $fieldUserTo[0]['USR_USERNAME']; - } - $dataRoutes .=' - - '.$description.' + } + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX'] + 190; + $coordinateY = $idVal['TAS_POSY'] + 5; + if (isset( $idVal['TAS_DEF_MESSAGE'] )) { + if ($idVal['TAS_DEF_MESSAGE'] != '' and $idVal['TAS_DEF_MESSAGE'] != null) { + $idEvent = G::generateUniqueID(); + $example = new Derivation(); + $fieldUserTo = $example->getAllUsersFromAnyTask( $nextTask ); + $fieldUserTo = $example->getUsersFullNameFromArray( $fieldUserTo ); + $fieldUserFrom = $example->getAllUsersFromAnyTask( $idTask ); + $fieldUserFrom = $example->getUsersFullNameFromArray( $fieldUserFrom ); + /*$oUser = new Users(); + $aUser = $oUser->load($_SESSION['USER_LOGGED']); + $from = $aUser['USR_USERNAME'];*/ + $description = ''; + $userFrom = ''; + $userTo = ''; + if (isset( $fieldUserFrom[0]['USR_USERNAME'] )) { + $userFrom = $fieldUserFrom[0]['USR_USERNAME']; + } + if (isset( $fieldUserTo[0]['USR_USERNAME'] )) { + $userTo = $fieldUserTo[0]['USR_USERNAME']; + } + $dataRoutes .= ' + + ' . $description . ' - + - '.$description.' + ' . $description . ' - + false '; - $transitions.=' - + $transitions .= ' + @@ -1590,2353 +1599,2355 @@ class Xpdl extends processes '; - } - } - } - } - } - } - $data = array(); - $data['ACTIVITIES'] = $dataRoutes; - $data['TRANSITION'] = $transitions; - return $data; - } - - /** - * Get the process Data from a filename .XPDL - * @param array $pmFilename - * @return void - */ - function getProcessDataXpdl ( $pmFilename ) - { - if (! file_exists($pmFilename) ) - throw ( new Exception ( 'Unable to read uploaded file, please check permissions. ')); - if (! filesize($pmFilename) >= 9 ) - throw ( new Exception ( 'Uploaded file is corrupted, please check the file before continue. ')); - clearstatcache(); - $idProcess = 0; - $nameProcess = ''; - $sw = 0; - $file = new DOMDocument(); - @$file->load($pmFilename, LIBXML_DTDLOAD); - $root = $file->documentElement; - $node = $root->firstChild; - $numberTasks = 0; - $numberLanes = 0; - $endArray = array(); - $posEnd = 0; - $startArray = array(); - $posStart = 0; - $isEnd = 0; - $isStart = 0; - $posRoutes = 0; - $sequencial = 0; - $posT = 0; - $output = ''; - $arrayRoutes = array(); - $arrayLanes = array(); - $routeTransitions = array (); - $start = 0; - $end = 0; - $arrayScheduler = array(); - $arrayMessages = array(); - while ($node) { - if ($node->nodeType == XML_ELEMENT_NODE) { - $name = $node->nodeName; - $content = $node->firstChild; - if($content != array()){ - $output = $content->nodeValue; - } - if(strpos($name,'Pools')!== false){ - while ($content) { - if ($content->nodeType == XML_ELEMENT_NODE) { - $nameChild = $content->nodeName; - $contentChild = $content->firstChild; - if(strpos($nameChild,'Pool')!== false){ - $namePool = $content->getAttribute('Name'); - $idPool = str_replace('-','',$content->getAttribute('Process')); - $process['ID'] = $idPool; - $process['NAME']= $namePool; - $process['DESCRIPTION'] = ''; - $oData->process = $this->createProcess($process); - } - } - $content = $content->nextSibling; - } - } - if(strpos($name,'Artifacts')!== false){ - while ($content) { - if ($content->nodeType == XML_ELEMENT_NODE) { - $nameChild = $content->nodeName; - $contentChild = $content->firstChild; - $idActivity = ''; - if(strpos($nameChild,'Artifact')!== false){ - $artifactType = $content->getAttribute('ArtifactType'); - if($artifactType == 'Annotation'){ - $textAnnotation = $content->getAttribute('TextAnnotation'); - $idAnnotation = str_replace('-','',$content->getAttribute('Id')); - $idActivity = str_replace('-','',$content->getAttribute('ActivitySetId')); - $lanes = $this->findCoordinates($contentChild); - $lanes['TEXT'] = $textAnnotation; - $lanes['ID_PROCESS'] = $idPool; - $lanes['ID_LANE'] = $idAnnotation; - if($idActivity != ''){ - $lanes['ID_PROCESS'] = $idActivity; - } - $arrayLanes[$numberLanes] = $this->createLanes($lanes); - $numberLanes = $numberLanes +1; - } - } - } - $content = $content->nextSibling; - } - } - if(strpos($name,'WorkflowProcesses')!== false){ - while ($content) { - if ($content->nodeType == XML_ELEMENT_NODE) { - $nameChild = $content->nodeName; - $contentChild = $content->firstChild; - if(strpos($nameChild,'WorkflowProcess')!== false){ - $nameWorkflow = $content->getAttribute('Name'); - $idProcess = $content->getAttribute('Id'); - $idProcess = trim(str_replace('-','',$idProcess)); - $subProcesses = array(); - if($nameWorkflow == $namePool and $idProcess == $idPool){ - $idWorkflow = $idProcess; - while ($contentChild) { - if ($contentChild->nodeType == XML_ELEMENT_NODE){ - $nameNode = $contentChild->nodeName; - $contentNode = $contentChild->firstChild; - if(strpos($nameNode,'ActivitySets')!== false){ - $activitySet = $this->createSubProcesses($contentNode,$arrayLanes); - $subProcesses = $activitySet['SUB_PROCESS']; - $arraySubProcesses = $activitySet['SUBPROCESSES']; - } - if(strpos($nameNode,'Activities')!== false){ - $activities = $this->createActivities($contentNode,$idProcess,$subProcesses); - $oData->tasks = $activities['TASKS']; - $startArray = $activities['START']; - $endArray = $activities['END']; - $arrayRoutes = $activities['ROUTES']; - $arrayScheduler = $activities['SCHEDULER']; - $arrayMessages = $activities['MESSAGES']; - } - - if(strpos($nameNode,'Transitions')!== false){ - $transitions = $this->createTransitions($contentNode,$oData->tasks,$arrayRoutes,$endArray,$startArray,$idProcess,$arrayScheduler,$arrayMessages); - $oData->routes = $transitions['ROUTES']; - $oData->tasks = $transitions['TASKS']; - $routeTransitions = $transitions['TRANSITIONS']; - $numberRoutes = $transitions['NUMBER']; - $taskHidden = $transitions['TASKHIDDEN']; - $arrayScheduler = $transitions['SCHEDULER']; - $arrayMessages = $transitions['MESSAGES']; - } + } + } } - $contentChild = $contentChild->nextSibling; - } } - } } - $content = $content->nextSibling; - } } - } - $node = $node->nextSibling; - } - $oData->lanes = array(); - $numberLanes = 0; - foreach($arrayLanes as $key => $value) { - if($value['PRO_UID'] == $idProcess){ - $oData->lanes[$numberLanes] = $value; - $numberLanes = $numberLanes + 1; - } - } - $oData->inputs = array(); - $oData->outputs = array(); - $oData->dynaforms = array(); - $oData->steps = array(); - $oData->taskusers = array(); - $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); - $oData->steptriggers = array(); - $oData->dbconnections = array(); - $oData->reportTables = array(); - $oData->reportTablesVars = array(); - $oData->stepSupervisor = array(); - $oData->objectPermissions = array(); - $oData->subProcess = array(); - $numberSubProcess = 0; - $arraySubProcess = $subProcesses; - $numberSubProcess = isset($arraySubProcesses) && is_array($arraySubProcesses) ? sizeof($arraySubProcesses) : 0; - $numberCount = 0; - foreach($subProcesses as $key => $value) { - foreach($oData->tasks as $keyTask => $valueTask) { - if($value['ID_PROCESS'] == $valueTask['TAS_UID']){ - $fields['TASK_PARENT'] = $valueTask['TAS_UID']; - $idSubProcess = $valueTask['TAS_UID']; - $findTask = 0; - $newTasks = $this->getTaskRows($idSubProcess); - foreach ($newTasks as $keyLane => $val ) { - if($val['TAS_START']==='TRUE' and $findTask == 0){ - $findTask = 1; - $value['TASK_START']=$val['TAS_UID']; - } - } - $fields['PROCESS_PARENT']= $idProcess; - $fields['TAS_UID']= $value['TASK_START']; - $oData->subProcess[$numberSubProcess]= $this->createSubProcess($fields,$arraySubProcess); - $numberSubProcess = $numberSubProcess + 1; - } - } - } - $oData->caseTracker = array(); - $oData->caseTrackerObject = array(); - $oData->stage = array(); - $oData->fieldCondition = array(); - $oData->event = $this->createEventMessages($arrayMessages,$idProcess); - $oData->triggers = array(); - $oData->caseScheduler = $this->createScheduler($arrayScheduler,$idProcess); - $oData->dynaformFiles = array(); - $numberTransitions=sizeof($routeTransitions); - if($numberTransitions > 0){ - $routesArray = $this->createGateways($routeTransitions,$endArray,$oData->routes,$numberRoutes,$idProcess,$taskHidden); - $oData->routes = $routesArray; + $data = array (); + $data['ACTIVITIES'] = $dataRoutes; + $data['TRANSITION'] = $transitions; + return $data; } - //print_r($oData);die; - //print_r($arrayMessages);die; - return $oData; - } - - /** - * This function sort a array - * @param array $fields - * @return array sorted - */ - function sortArray($fields) - { - $aux = $fields ; - foreach ($fields as $key => $row) { - $aux[$key] = $row['FROM']; - } - array_multisort($aux,SORT_ASC,$fields); - return $fields; - } - - /** - * This functions verify the routes and removes the routes that are repeated - * @param array $routeTransitions - * @param array $endArray - * @return array - */ - function verifyRoutes ($routeTransitions,$endArray,$taskHidden) - { $findFirst = 0; - $firstRoute = ''; - $taskTo = ''; - $taskFrom = ''; - $routeArrayT = $routeTransitions; - $findHidden = 0; - foreach ($routeTransitions as $valRoute => $value){ - $findHidden = 0; - if($value['ROUTE'] == $firstRoute){ - if($value['TOORFROM'] == 'TO'){ - $taskFrom = $value['FROM']; + /** + * Get the process Data from a filename . + * + * XPDL + * + * @param array $pmFilename + * @return void + */ + public function getProcessDataXpdl ($pmFilename) + { + if (! file_exists( $pmFilename )) { + throw (new Exception( 'Unable to read uploaded file, please check permissions. ' )); } - if($value['TOORFROM'] == 'FROM'){ - $taskTo = $value['TO']; + if (! filesize( $pmFilename ) >= 9) { + throw (new Exception( 'Uploaded file is corrupted, please check the file before continue. ' )); } - if($taskFrom != ''){ - foreach ($routeArrayT as $valRoutes => $values){ - $isEventEnd = 0; - foreach ($endArray as $endBase => $valueEnd){ - if($valueEnd==$values['TO']){ - $isEventEnd = 1; - } - } - if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0){ - $taskFrom = $values['TO']; - } - else{ - if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0){ - foreach ($taskHidden as $idHidden => $valueHidden){ - if($valueHidden['ID_TASK'] == $values['TO']){ - $taskFrom = $valueHidden['ID_TASK']; - $findHidden= 1; - } + clearstatcache(); + $idProcess = 0; + $nameProcess = ''; + $sw = 0; + $file = new DOMDocument(); + @$file->load( $pmFilename, LIBXML_DTDLOAD ); + $root = $file->documentElement; + $node = $root->firstChild; + $numberTasks = 0; + $numberLanes = 0; + $endArray = array (); + $posEnd = 0; + $startArray = array (); + $posStart = 0; + $isEnd = 0; + $isStart = 0; + $posRoutes = 0; + $sequencial = 0; + $posT = 0; + $output = ''; + $arrayRoutes = array (); + $arrayLanes = array (); + $routeTransitions = array (); + $start = 0; + $end = 0; + $arrayScheduler = array (); + $arrayMessages = array (); + while ($node) { + if ($node->nodeType == XML_ELEMENT_NODE) { + $name = $node->nodeName; + $content = $node->firstChild; + if ($content != array ()) { + $output = $content->nodeValue; } - } - } - } - $routeTransitions[$valRoute]['TO']=$taskFrom; - $taskFrom = ''; - } - if($taskTo != ''){ - foreach ($routeArrayT as $valRoutes => $values){ - if($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0 ){ - $taskTo = $values['FROM']; - } - } - $routeTransitions[$valRoute]['FROM']=$taskTo; - $taskTo = ''; - } - } - else{ - $firstRoute = $value['ROUTE']; - $taskToE = ''; - $taskFromE = ''; - if($value['TOORFROM'] == 'TO'){ - $taskFromE = $value['FROM']; - } - if($value['TOORFROM'] == 'FROM'){ - $taskToE = $value['TO']; - } - if($taskFromE != ''){ - $findHidden = 0; - foreach ($routeArrayT as $valRoutes => $values){ - $isEventEnd = 0; - foreach ($endArray as $endBase => $valueEnd){ - if($valueEnd==$values['TO']){ - $isEventEnd = 1; - } - } - if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0){ - $taskFromE = $values['TO']; - } - else{ - if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0){ - foreach ($taskHidden as $idHidden => $valueHidden){ - if($valueHidden['ID_TASK'] == $values['TO']){ - $taskFromE = $valueHidden['ID_TASK']; - $findHidden = 1; - } + if (strpos( $name, 'Pools' ) !== false) { + while ($content) { + if ($content->nodeType == XML_ELEMENT_NODE) { + $nameChild = $content->nodeName; + $contentChild = $content->firstChild; + if (strpos( $nameChild, 'Pool' ) !== false) { + $namePool = $content->getAttribute( 'Name' ); + $idPool = str_replace( '-', '', $content->getAttribute( 'Process' ) ); + $process['ID'] = $idPool; + $process['NAME'] = $namePool; + $process['DESCRIPTION'] = ''; + $oData->process = $this->createProcess( $process ); + } + } + $content = $content->nextSibling; + } + } + if (strpos( $name, 'Artifacts' ) !== false) { + while ($content) { + if ($content->nodeType == XML_ELEMENT_NODE) { + $nameChild = $content->nodeName; + $contentChild = $content->firstChild; + $idActivity = ''; + if (strpos( $nameChild, 'Artifact' ) !== false) { + $artifactType = $content->getAttribute( 'ArtifactType' ); + if ($artifactType == 'Annotation') { + $textAnnotation = $content->getAttribute( 'TextAnnotation' ); + $idAnnotation = str_replace( '-', '', $content->getAttribute( 'Id' ) ); + $idActivity = str_replace( '-', '', $content->getAttribute( 'ActivitySetId' ) ); + $lanes = $this->findCoordinates( $contentChild ); + $lanes['TEXT'] = $textAnnotation; + $lanes['ID_PROCESS'] = $idPool; + $lanes['ID_LANE'] = $idAnnotation; + if ($idActivity != '') { + $lanes['ID_PROCESS'] = $idActivity; + } + $arrayLanes[$numberLanes] = $this->createLanes( $lanes ); + $numberLanes = $numberLanes + 1; + } + } + } + $content = $content->nextSibling; + } + } + if (strpos( $name, 'WorkflowProcesses' ) !== false) { + while ($content) { + if ($content->nodeType == XML_ELEMENT_NODE) { + $nameChild = $content->nodeName; + $contentChild = $content->firstChild; + if (strpos( $nameChild, 'WorkflowProcess' ) !== false) { + $nameWorkflow = $content->getAttribute( 'Name' ); + $idProcess = $content->getAttribute( 'Id' ); + $idProcess = trim( str_replace( '-', '', $idProcess ) ); + $subProcesses = array (); + if ($nameWorkflow == $namePool and $idProcess == $idPool) { + $idWorkflow = $idProcess; + while ($contentChild) { + if ($contentChild->nodeType == XML_ELEMENT_NODE) { + $nameNode = $contentChild->nodeName; + $contentNode = $contentChild->firstChild; + if (strpos( $nameNode, 'ActivitySets' ) !== false) { + $activitySet = $this->createSubProcesses( $contentNode, $arrayLanes ); + $subProcesses = $activitySet['SUB_PROCESS']; + $arraySubProcesses = $activitySet['SUBPROCESSES']; + } + if (strpos( $nameNode, 'Activities' ) !== false) { + $activities = $this->createActivities( $contentNode, $idProcess, $subProcesses ); + $oData->tasks = $activities['TASKS']; + $startArray = $activities['START']; + $endArray = $activities['END']; + $arrayRoutes = $activities['ROUTES']; + $arrayScheduler = $activities['SCHEDULER']; + $arrayMessages = $activities['MESSAGES']; + } + + if (strpos( $nameNode, 'Transitions' ) !== false) { + $transitions = $this->createTransitions( $contentNode, $oData->tasks, $arrayRoutes, $endArray, $startArray, $idProcess, $arrayScheduler, $arrayMessages ); + $oData->routes = $transitions['ROUTES']; + $oData->tasks = $transitions['TASKS']; + $routeTransitions = $transitions['TRANSITIONS']; + $numberRoutes = $transitions['NUMBER']; + $taskHidden = $transitions['TASKHIDDEN']; + $arrayScheduler = $transitions['SCHEDULER']; + $arrayMessages = $transitions['MESSAGES']; + } + } + $contentChild = $contentChild->nextSibling; + } + } + } + } + $content = $content->nextSibling; + } } - } } - } - $routeTransitions[$valRoute]['TO']=$taskFromE; - $taskFromE = ''; + $node = $node->nextSibling; } - if($taskToE != ''){ - foreach ($routeArrayT as $valRoutes => $values){ - if($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0){ - $taskToE = $values['FROM']; + $oData->lanes = array (); + $numberLanes = 0; + foreach ($arrayLanes as $key => $value) { + if ($value['PRO_UID'] == $idProcess) { + $oData->lanes[$numberLanes] = $value; + $numberLanes = $numberLanes + 1; } - } - $routeTransitions[$valRoute]['FROM']=$taskToE; - $taskToE = ''; } - } + $oData->inputs = array (); + $oData->outputs = array (); + $oData->dynaforms = array (); + $oData->steps = array (); + $oData->taskusers = array (); + $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); + $oData->steptriggers = array (); + $oData->dbconnections = array (); + $oData->reportTables = array (); + $oData->reportTablesVars = array (); + $oData->stepSupervisor = array (); + $oData->objectPermissions = array (); + $oData->subProcess = array (); + $numberSubProcess = 0; + $arraySubProcess = $subProcesses; + $numberSubProcess = isset( $arraySubProcesses ) && is_array( $arraySubProcesses ) ? sizeof( $arraySubProcesses ) : 0; + $numberCount = 0; + foreach ($subProcesses as $key => $value) { + foreach ($oData->tasks as $keyTask => $valueTask) { + if ($value['ID_PROCESS'] == $valueTask['TAS_UID']) { + $fields['TASK_PARENT'] = $valueTask['TAS_UID']; + $idSubProcess = $valueTask['TAS_UID']; + $findTask = 0; + $newTasks = $this->getTaskRows( $idSubProcess ); + foreach ($newTasks as $keyLane => $val) { + if ($val['TAS_START'] === 'TRUE' and $findTask == 0) { + $findTask = 1; + $value['TASK_START'] = $val['TAS_UID']; + } + } + $fields['PROCESS_PARENT'] = $idProcess; + $fields['TAS_UID'] = $value['TASK_START']; + $oData->subProcess[$numberSubProcess] = $this->createSubProcess( $fields, $arraySubProcess ); + $numberSubProcess = $numberSubProcess + 1; + } + } + } + $oData->caseTracker = array (); + $oData->caseTrackerObject = array (); + $oData->stage = array (); + $oData->fieldCondition = array (); + $oData->event = $this->createEventMessages( $arrayMessages, $idProcess ); + $oData->triggers = array (); + $oData->caseScheduler = $this->createScheduler( $arrayScheduler, $idProcess ); + $oData->dynaformFiles = array (); + $numberTransitions = sizeof( $routeTransitions ); + if ($numberTransitions > 0) { + $routesArray = $this->createGateways( $routeTransitions, $endArray, $oData->routes, $numberRoutes, $idProcess, $taskHidden ); + $oData->routes = $routesArray; + } + + //print_r($oData);die; + //print_r($arrayMessages);die; + return $oData; } - $firstRoute = 0; - $cont = 0; - $routeChange = $routeTransitions; - foreach ($routeTransitions as $valRoutes => $value){ - $route = $value['ROUTE']; - $type = $value['ROU_TYPE']; - $countFrom = 0; - $countTo = 0; - foreach ($routeChange as $valRoutes2 => $values){ - if($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'TO'){ - $countTo = $countTo + 1; + + /** + * This public function sort a array + * + * @param array $fields + * @return array sorted + */ + public function sortArray ($fields) + { + $aux = $fields; + foreach ($fields as $key => $row) { + $aux[$key] = $row['FROM']; } - if($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'FROM'){ - $countFrom = $countFrom + 1; - } - } - if($type == 'PARALLEL'){ - if($countTo > $countFrom){ - $routeTransitions[$valRoutes]['ROU_TYPE'] = 'SEC-JOIN'; - } - } + array_multisort( $aux, SORT_ASC, $fields ); + return $fields; } - $routeArrayT2 = $routeTransitions; - $routeArrayT1 = $routeTransitions; - foreach ($routeArrayT1 as $valRoutes => $value){ - if($firstRoute == 0){ - $taskFirst = $value['ROUTE']; - } - if($taskFirst == $value['ROUTE']){ - if($firstRoute == 0){ - foreach ($routeArrayT2 as $valRoutes2 => $values){ - if($values['ROUTE'] == $taskFirst and $values['FROM'] == $value['FROM'] and $values['TO'] == $value['TO'] and $values['ID'] != $value['ID']){ - unset($routeArrayT2[$valRoutes2]); - $firstRoute = 1; + + /** + * This functions verify the routes and removes the routes that are repeated + * + * @param array $routeTransitions + * @param array $endArray + * @return array + */ + public function verifyRoutes ($routeTransitions, $endArray, $taskHidden) + { + $findFirst = 0; + $firstRoute = ''; + $taskTo = ''; + $taskFrom = ''; + $routeArrayT = $routeTransitions; + $findHidden = 0; + foreach ($routeTransitions as $valRoute => $value) { + $findHidden = 0; + if ($value['ROUTE'] == $firstRoute) { + if ($value['TOORFROM'] == 'TO') { + $taskFrom = $value['FROM']; + } + if ($value['TOORFROM'] == 'FROM') { + $taskTo = $value['TO']; + } + if ($taskFrom != '') { + foreach ($routeArrayT as $valRoutes => $values) { + $isEventEnd = 0; + foreach ($endArray as $endBase => $valueEnd) { + if ($valueEnd == $values['TO']) { + $isEventEnd = 1; + } + } + if ($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0) { + $taskFrom = $values['TO']; + } else { + if ($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0) { + foreach ($taskHidden as $idHidden => $valueHidden) { + if ($valueHidden['ID_TASK'] == $values['TO']) { + $taskFrom = $valueHidden['ID_TASK']; + $findHidden = 1; + } + } + } + } + } + $routeTransitions[$valRoute]['TO'] = $taskFrom; + $taskFrom = ''; + } + if ($taskTo != '') { + foreach ($routeArrayT as $valRoutes => $values) { + if ($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0) { + $taskTo = $values['FROM']; + } + } + $routeTransitions[$valRoute]['FROM'] = $taskTo; + $taskTo = ''; + } + } else { + $firstRoute = $value['ROUTE']; + $taskToE = ''; + $taskFromE = ''; + if ($value['TOORFROM'] == 'TO') { + $taskFromE = $value['FROM']; + } + if ($value['TOORFROM'] == 'FROM') { + $taskToE = $value['TO']; + } + if ($taskFromE != '') { + $findHidden = 0; + foreach ($routeArrayT as $valRoutes => $values) { + $isEventEnd = 0; + foreach ($endArray as $endBase => $valueEnd) { + if ($valueEnd == $values['TO']) { + $isEventEnd = 1; + } + } + if ($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0) { + $taskFromE = $values['TO']; + } else { + if ($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0) { + foreach ($taskHidden as $idHidden => $valueHidden) { + if ($valueHidden['ID_TASK'] == $values['TO']) { + $taskFromE = $valueHidden['ID_TASK']; + $findHidden = 1; + } + } + } + } + } + $routeTransitions[$valRoute]['TO'] = $taskFromE; + $taskFromE = ''; + } + if ($taskToE != '') { + foreach ($routeArrayT as $valRoutes => $values) { + if ($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0) { + $taskToE = $values['FROM']; + } + } + $routeTransitions[$valRoute]['FROM'] = $taskToE; + $taskToE = ''; + } } - } } - } - else{ $firstRoute = 0; - } - } - return $routeArrayT2; - } - - /** - * this function creates an array for the process that will be created according to the data given in an array - * @param array $fields - * @return array $process - */ - function createProcess($fields) - { $process = array(); - $process['PRO_UID'] = $fields['ID']; - $process['PRO_PARENT'] = $fields['ID']; - $process['PRO_TIME'] = 1; - $process['PRO_TIMEUNIT'] = 'DAYS'; - $process['PRO_STATUS'] = 'ACTIVE'; - $process['PRO_TYPE_DAY'] = ''; - $process['PRO_TYPE'] = 'NORMAL'; - $process['PRO_ASSIGNMENT'] = 'FALSE'; - $process['PRO_SHOW_MAP'] = 0; - $process['PRO_SHOW_MESSAGE'] = 0; - $process['PRO_SHOW_DELEGATE'] = 0; - $process['PRO_SHOW_DYNAFORM'] = 0; - $process['PRO_CATEGORY'] = ''; - $process['PRO_SUB_CATEGORY'] = ''; - $process['PRO_INDUSTRY'] = 0; - $process['PRO_UPDATE_DATE'] = date("D M j G:i:s T Y"); - $process['PRO_CREATE_DATE'] = date("D M j G:i:s T Y"); - $process['PRO_CREATE_USER'] = 00000000000000000000000000000001; - $process['PRO_HEIGHT'] = 5000; - $process['PRO_WIDTH'] = 10000; - $process['PRO_TITLE_X'] = 0; - $process['PRO_TITLE_Y'] = 0; - $process['PRO_DEBUG'] = 0; - $process['PRO_TITLE'] = $fields['NAME']; - $process['PRO_DESCRIPTION'] = $fields['DESCRIPTION']; - return $process; - } - - /** - * this function creates an array for the subProcess that will be created,according to the data given in an array - * @param array $contentNode - * @param array $arrayLanes - * @return array - */ - function createSubProcesses($contentNode,$arrayLanes) - { $activities = array(); - $numberActivities = 0; - $numberLanes = 0; - $number = 0; - $contentSubNode = $contentNode; - $numberSub = 0; - while ($contentSubNode){ - if ($contentSubNode->nodeType == XML_ELEMENT_NODE){ - $nameActivity = $contentSubNode->nodeName; - $contentActivity = $contentSubNode->firstChild; - if(strpos($nameActivity,'ActivitySet')!== false){ - $idSetActivity = str_replace('-','',$contentSubNode->getAttribute('Id')); - $arrayActivity[$number]['ID_PROCESS']= $idSetActivity; - $number = $number + 1; + $cont = 0; + $routeChange = $routeTransitions; + foreach ($routeTransitions as $valRoutes => $value) { + $route = $value['ROUTE']; + $type = $value['ROU_TYPE']; + $countFrom = 0; + $countTo = 0; + foreach ($routeChange as $valRoutes2 => $values) { + if ($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'TO') { + $countTo = $countTo + 1; + } + if ($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'FROM') { + $countFrom = $countFrom + 1; + } + } + if ($type == 'PARALLEL') { + if ($countTo > $countFrom) { + $routeTransitions[$valRoutes]['ROU_TYPE'] = 'SEC-JOIN'; + } + } } - } - $contentSubNode = $contentSubNode->nextSibling; - } - $number = 0; - $arraySubProcesses = array(); - while ($contentNode){ - if ($contentNode->nodeType == XML_ELEMENT_NODE){ - $isSubProcess = 0; - $nameActivity = $contentNode->nodeName; - $contentActivity = $contentNode->firstChild; - $idSetActivity = 0; - if(strpos($nameActivity,'ActivitySet')!== false){ - $idSetActivity = str_replace('-','',$contentNode->getAttribute('Id')); - if($idSetActivity !== 0){ - $isSubProcess = 1; - } - $nameSetActivity = $contentNode->getAttribute('Name'); - $contentChild = $contentNode->firstChild; - $process['ID'] = $idSetActivity; - $process['NAME'] = $nameSetActivity; - $process['DESCRIPTION'] = ''; - $subProcess->process = $this->createProcess($process); - $activities[$number]['ID_PROCESS']= $idSetActivity ; - while ($contentChild){ - if ($contentChild->nodeType == XML_ELEMENT_NODE){ - - $nameChild = $contentChild->nodeName; - $contentFirst = $contentChild->firstChild; - if(strpos($nameChild,'Activities')!== false){ - $arrayActivities = $this->createActivities($contentFirst,$idSetActivity,$arrayActivity); - $subProcess->tasks = $arrayActivities['TASKS']; - $startArray = $arrayActivities['START']; - $endArray = $arrayActivities['END']; - $arrayRoutes = $arrayActivities['ROUTES']; - $arrayScheduler = $arrayActivities['SCHEDULER']; - $arrayMessages = $arrayActivities['MESSAGES']; - } - - if(strpos($nameChild,'Transitions')!== false){ - $transitions = $this->createTransitions($contentFirst,$subProcess->tasks,$arrayRoutes,$endArray,$startArray,$idSetActivity,$arrayScheduler,$arrayMessages); - $subProcess->routes = $transitions['ROUTES']; - $subProcess->tasks = $transitions['TASKS']; - $routeTransitions = $transitions['TRANSITIONS']; - $numberRoutes = $transitions['NUMBER']; - $arrayMessages = $transitions['MESSAGES']; - } + $routeArrayT2 = $routeTransitions; + $routeArrayT1 = $routeTransitions; + foreach ($routeArrayT1 as $valRoutes => $value) { + if ($firstRoute == 0) { + $taskFirst = $value['ROUTE']; } - $contentChild = $contentChild->nextSibling; - } - - $values = $subProcess; - if($isSubProcess == 1){ - $arraySubProcesses[$numberSub]['ID_PROCESS']=$idSetActivity ; - $arraySubProcesses[$numberSub]['TASKS'] =$subProcess->tasks; - $numberSub = $numberSub+1; - } - $activities[$number]['TASK_START']= $startArray[0]['ID_TASK']; - $number = $number + 1; - $subProcess->lanes = array(); - $numberLanes = 0; - foreach($arrayLanes as $key => $value) { - if($value['PRO_UID'] ==$idSetActivity){ - $subProcess->lanes[$numberLanes] = $value; - $numberLanes = $numberLanes + 1; - } - } - $subProcess->inputs = array(); - $subProcess->outputs = array(); - $subProcess->dynaforms = array(); - $subProcess->steps = array(); - $subProcess->triggers = array(); - $subProcess->taskusers = array(); - $subProcess->groupwfs = $this->getGroupwfRows($subProcess->taskusers ); - $subProcess->steptriggers = array(); - $subProcess->dbconnections = array(); - $subProcess->reportTables = array(); - $subProcess->reportTablesVars = array(); - $subProcess->stepSupervisor = array(); - $subProcess->objectPermissions = array(); - $subProcess->subProcess = array(); - $subProcess->caseTracker = array(); - $subProcess->caseTrackerObject = array(); - $subProcess->stage = array(); - $subProcess->fieldCondition = array(); - $subProcess->event = array(); - $subProcess->caseScheduler = array(); - $subProcess->dynaformFiles = array(); - $numberTransitions = sizeof($routeTransitions); - if($numberTransitions > 0){ - $routesArray = $this->createGateways($routeTransitions,$endArray,$subProcess->routes,$numberRoutes,$idProcess,''); - $subProcess->routes = $routesArray; - } - $numberSubProcess = 0; - foreach($subProcess->tasks as $key => $value) { - if($value['TAS_TYPE'] === 'SUBPROCESS'){ - $fields['TASK_PARENT'] = $value['TAS_UID']; - $idSubProcess = $value['TAS_UID']; - $newTasks = $this->getTaskRows($idSubProcess); - - $findTask = 0; - foreach ($newTasks as $keyLane => $val ) { - if($val['TAS_START']==='TRUE' and $findTask == 0){ - $findTask = 1; - $value['TASK_START']=$val['TAS_UID']; - } - } - $fields['PROCESS_PARENT'] = $idSetActivity; - $fields['TAS_UID'] = $value['TAS_UID']; - $subProcess->subProcess[$numberSubProcess]= $this->createSubProcess($fields,$arrayActivity); - $numberSubProcess = $numberSubProcess + 1; - } - } - $this->createSubProcessFromDataXpdl($subProcess,$subProcess->tasks); - } - } - $contentNode = $contentNode->nextSibling; - } - $arrayActivities['SUBPROCESSES'] = $arraySubProcesses; - $arrayActivities['SUB_PROCESS'] = $activities; - return $arrayActivities; - } - - /** - * This function creates an array for the task that will be created according to the data given in an array - * @param array $fields - * @return array $task - */ - function createTask($fields) - { - $task = array(); - $task['PRO_UID'] = $fields['ID_PROCESS']; - $task['TAS_UID'] = $fields['ID_TASK']; - $task['TAS_TYPE'] = $fields['TASK_TYPE']; - $task['TAS_DURATION'] = 1; - $task['TAS_DELAY_TYPE'] =''; - $task['TAS_TEMPORIZER'] = 0; - $task['TAS_TYPE_DAY'] ='' ; - $task['TAS_TIMEUNIT'] = 'DAYS'; - $task['TAS_ALERT'] = 'FALSE'; - $task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY'; - $task['TAS_ASSIGN_TYPE'] = 'BALANCED'; - $task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED'; - $task['TAS_ASSIGN_LOCATION'] = 'FALSE'; - $task['TAS_ASSIGN_LOCATION_ADHOC']= 'FALSE'; - $task['TAS_TRANSFER_FLY'] = 'FALSE'; - $task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001'; - $task['TAS_USER'] = '0'; - $task['TAS_CAN_UPLOAD'] = 'FALSE'; - $task['TAS_VIEW_UPLOAD'] = 'FALSE'; - $task['TAS_VIEW_ADDITIONAL_DOCUMENTATION']= 'FALSE'; - $task['TAS_CAN_CANCEL'] = 'FALSE'; - $task['TAS_OWNER_APP'] = 'FALSE'; - $task['STG_UID'] = ''; - $task['TAS_CAN_PAUSE'] = 'FALSE'; - $task['TAS_CAN_SEND_MESSAGE'] = 'TRUE'; - $task['TAS_CAN_DELETE_DOCS'] = 'FALSE'; - $task['TAS_SELF_SERVICE'] = 'FALSE'; - $task['TAS_START'] = 'FALSE'; - $task['TAS_TO_LAST_USER'] = 'FALSE'; - $task['TAS_SEND_LAST_EMAIL'] = 'FALSE'; - $task['TAS_DERIVATION'] = 'NORMAL'; - $task['TAS_POSX'] = $fields['X']; - $task['TAS_POSY'] = $fields['Y']; - $task['TAS_COLOR'] = ''; - $task['TAS_DEF_MESSAGE'] = ''; - $task['TAS_DEF_PROC_CODE'] = ''; - $task['TAS_DEF_DESCRIPTION'] = ''; - $task['TAS_TITLE'] = $fields['TAS_TITLE']; - $task['TAS_DESCRIPTION'] = $fields['DESCRIPTION']; - $task['TAS_DEF_TITLE'] = ''; - return $task; - } - - function createDataTask($fields) - { - $task = array(); - $task['PRO_UID'] = $fields['ID_PROCESS']; - $task['TAS_UID'] = $fields['ID_TASK']; - $task['TAS_TYPE'] = $fields['TAS_TYPE']; - $task['TAS_DURATION'] = 1; - $task['TAS_DELAY_TYPE'] =''; - $task['TAS_TEMPORIZER'] = 0; - $task['TAS_TYPE_DAY'] ='' ; - $task['TAS_TIMEUNIT'] = 'DAYS'; - $task['TAS_ALERT'] = 'FALSE'; - $task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY'; - $task['TAS_ASSIGN_TYPE'] = 'BALANCED'; - $task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED'; - $task['TAS_MI_INSTANCE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCE'; - $task['TAS_MI_COMPLETE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCES_COMPLETE'; - $task['TAS_ASSIGN_LOCATION'] = 'FALSE'; - $task['TAS_ASSIGN_LOCATION_ADHOC']= 'FALSE'; - $task['TAS_TRANSFER_FLY'] = 'FALSE'; - $task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001'; - $task['TAS_USER'] = '0'; - $task['TAS_CAN_UPLOAD'] = 'FALSE'; - $task['TAS_VIEW_UPLOAD'] = 'FALSE'; - $task['TAS_VIEW_ADDITIONAL_DOCUMENTATION']= 'FALSE'; - $task['TAS_CAN_CANCEL'] = 'FALSE'; - $task['TAS_OWNER_APP'] = 'FALSE'; - $task['STG_UID'] = ''; - $task['TAS_CAN_PAUSE'] = 'FALSE'; - $task['TAS_CAN_SEND_MESSAGE'] = 'TRUE'; - $task['TAS_CAN_DELETE_DOCS'] = 'FALSE'; - $task['TAS_SELF_SERVICE'] = 'FALSE'; - $task['TAS_START'] = $fields['START']; - $task['TAS_TO_LAST_USER'] = 'FALSE'; - $task['TAS_SEND_LAST_EMAIL'] = 'FALSE'; - $task['TAS_DERIVATION'] = 'NORMAL'; - $task['TAS_POSX'] = $fields['X']; - $task['TAS_POSY'] = $fields['Y']; - $task['TAS_COLOR'] = ''; - $task['TAS_DEF_MESSAGE'] = ''; - $task['TAS_DEF_PROC_CODE'] = ''; - $task['TAS_DEF_DESCRIPTION'] = ''; - $task['TAS_TITLE'] = $fields['TAS_TITLE']; - $task['TAS_DESCRIPTION'] = $fields['DESCRIPTION']; - $task['TAS_DEF_TITLE'] = ''; - return $task; - } -/** - * This function creates an array for the route that will be created according to the data given in an array - * @param array $fields - * @return array $route - */ - function createRoute($fields) - { - $route = array(); - $route['ROU_UID'] = $fields['ROU_UID']; - $route['ROU_PARENT'] = 0; - $route['PRO_UID'] = $fields['ID_PROCESS']; - $route['TAS_UID'] = $fields['FROM']; - $route['ROU_NEXT_TASK'] = $fields['TO']; - $route['ROU_CASE'] = 1; - $route['ROU_TYPE'] = 'SEQUENTIAL'; - $route['ROU_CONDITION'] = '' ; - $route['ROU_TO_LAST_USER'] = 'FALSE'; - $route['ROU_OPTIONAL'] = 'FALSE'; - $route['ROU_SEND_EMAIL'] = 'TRUE'; - $route['ROU_SOURCEANCHOR'] = 1; - $route['ROU_TARGETANCHOR'] = 0; - return $route; - } - - /** - * This function creates an array for the subProcess that will be created according to the data given in an array - * @param array $fields - * @return array $route - */ - function createSubProcess($fields) - { - $subProcess = array(); - $subProcess['SP_UID'] = $fields['TAS_UID']; - $subProcess['PRO_UID'] = $fields['TASK_PARENT']; - $subProcess['TAS_UID'] = $fields['TAS_UID']; - $subProcess['PRO_PARENT'] = $fields['PROCESS_PARENT']; - $subProcess['TAS_PARENT'] = $fields['TASK_PARENT']; - $subProcess['SP_TYPE'] = 'SIMPLE'; - $subProcess['SP_SYNCHRONOUS'] = 0; - $subProcess['SP_SYNCHRONOUS_TYPE'] = 'ALL' ; - $subProcess['SP_SYNCHRONOUS_WAIT'] = 0; - $subProcess['SP_VARIABLES_OUT'] = 'a:1:{s:0:"";s:0:"";}'; - $subProcess['SP_VARIABLES_IN'] = 'a:1:{s:0:"";s:0:"";}'; - $subProcess['SP_GRID_IN'] = ''; - return $subProcess; - } - - /** - * This function creates an array for the routes that are not sequential that will be created according to the data given in an array - * @param array $routeTransitions - * @param array $endArray - * @param array $dataRoutes - * @param array $numberRoutes - * @param string $idProcess - * @return array $dataRoutes - */ - function createGateways($routeTransitions,$endArray,$dataRoutes,$numberRoutes,$idProcess,$taskHidden) - { - $valueCase = ''; - $value = 1; - $valueC = 1; - $aux = $routeTransitions; - foreach ($routeTransitions as $key => $row) { - $aux[$key] = $row['ROUTE']; - } - array_multisort($aux,SORT_ASC,$routeTransitions); - $routeArray = $this->verifyRoutes($routeTransitions,$endArray,$taskHidden); - $routeArray = $this->sortArray($routeArray); - foreach($routeArray as $valRoutes => $value){ - $isEventEnd = 0; - foreach ($endArray as $endBase => $valueEnd){ - if($valueEnd['ID_TASK']==$value['TO']){ - $isEventEnd = 1; - } - } - $dataRoutes[$numberRoutes]= array(); - $dataRoutes[$numberRoutes]['ROU_UID'] = $value['ID']; - $dataRoutes[$numberRoutes]['ROU_PARENT'] = 0; - $dataRoutes[$numberRoutes]['PRO_UID'] = $idProcess; - $dataRoutes[$numberRoutes]['TAS_UID'] = $value['FROM']; - - if($isEventEnd == 0){ - $dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = $value['TO']; - } - else{ - $dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = '-1'; - } - if($valueCase == $value['FROM']){ - $valueC = $valueC + 1; - } - else{ - $valueC = 1; - $valueCase = $value['FROM']; - } - if($valueCase == ''){ - $valueC = 1; - $valueCase = $value['FROM']; - } - $dataRoutes[$numberRoutes]['ROU_CASE'] = $valueC; - $dataRoutes[$numberRoutes]['ROU_TYPE'] = $value['ROU_TYPE']; - if($value['ROU_TYPE'] ==='DISCRIMINATOR'){ - $dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION_DIS']; - $dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = $value['TYPE_DIS']; - } - if($value['ROU_TYPE'] !=='DISCRIMINATOR'){ - $dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION']; - $dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = 'FALSE'; - } - $dataRoutes[$numberRoutes]['ROU_TO_LAST_USER'] = 'FALSE'; - $dataRoutes[$numberRoutes]['ROU_SEND_EMAIL'] = 'TRUE'; - $dataRoutes[$numberRoutes]['ROU_SOURCEANCHOR'] = 1; - $dataRoutes[$numberRoutes]['ROU_TARGETANCHOR'] = 0; - $numberRoutes = $numberRoutes + 1; - } - return $dataRoutes; - } - - /** - * This function creates an array for the lane that will be created according to the data given in an array - * @param array $lanes - * @return array $lane - */ - function createLanesPM($array,$idProcess) - { - $arrayLanes = array(); - $field = array(); - foreach ($array as $key=> $value){ - $field['ID_LANE'] = $value['0']; - $field['ID_PROCESS'] = $idProcess; - $field['X'] = $value['2']; - $field['Y'] = $value['3']; - $field['WIDTH'] = $value['4']; - $field['HEIGHT'] = $value['5']; - $field['TEXT'] = $value['6']; - $arrayLanes[]= $this->createLanes($field); - } - return $arrayLanes; - } - -/** - * This function creates an array for the lane that will be created according to the data given in an array - * @param array $lanes - * @return array $lane - */ - function createLanes($lanes) - { - $lane = array(); - $lane['SWI_UID'] = $lanes['ID_LANE']; - $lane['PRO_UID'] = $lanes['ID_PROCESS']; - $lane['SWI_TYPE'] = 'TEXT'; - $lane['SWI_X'] = $lanes['X']; - $lane['SWI_Y'] = $lanes['Y']; - $lane['SWI_TEXT'] = $lanes['TEXT']; - $lane['SWI_WIDTH'] = $lanes['WIDTH']; - $lane['SWI_HEIGHT']= $lanes['HEIGHT']; - return $lane; - } - - /** - * This function creates an array for the lane that will be created according to the data given in an array - * @param array $lanes - * @return array $lane - */ - function createLanesNewPM($array) - { - $arrayLanes = array(); - $field = array(); - foreach ($array as $key=> $value){ - if($value['SWI_TYPE'] == 'TEXT') - { - $field['0'] = $value['SWI_UID']; - $field['1'] = $value['SWI_TEXT']; - $field['2'] = $value['SWI_X']; - $field['3'] = $value['SWI_Y']; - $field['4'] = $value['SWI_WIDTH']; - $field['5'] = $value['SWI_HEIGHT']; - $field['6'] = $value['SWI_NEXT_UID']; - $arrayLanes[]= $field; - } - } - return $arrayLanes; - } - - /** - * This function creates activities according the content of the node - * @param object $contentNode - * @param string $idProcess - * @param string $ActivitySet - * @return array $result - */ - function createActivities($contentNode,$idProcess,$activitySet) - { - $result = array(); - $numberTasks = 0; - $posRoutes = 0; - $posEnd = 0; - $posStart = 0; - $arrayRoutes = array(); - $endArray = array(); - $endArray = array(); - $startArray = array(); - $arrayScheduler = array(); - $scheduler = array(); - $message = array(); - $arrayMessages = array(); - while ($contentNode){ - if ($contentNode->nodeType == XML_ELEMENT_NODE){ - $nameActivity = $contentNode->nodeName; - $contentActivity = $contentNode->firstChild; - if(strpos($nameActivity,'Activity')!== false){ - $idActivity = $contentNode->getAttribute('Id'); - $idActivity = trim(str_replace('-','',$idActivity)); - $name = htmlentities($contentNode->getAttribute('Name')); - $result = $this->createActivity($contentActivity); - $result['ID_PROCESS']= $idProcess; - $result['ID_TASK'] = $idActivity; - $result['TAS_TITLE'] = $name; - $result['TASK_TYPE'] = 'NORMAL'; - foreach ($activitySet as $key => $value) { - if($value['ID_PROCESS'] ==$idActivity){ - $result['TASK_TYPE']= 'SUBPROCESS'; - } - } - if($result['EVENT'] =='' and $result['ROUTE'] ==''){ - $arrayTasks[$numberTasks]= $this->createTask($result); - $numberTasks = $numberTasks +1; - } - else{ - if($result['EVENT'] !='' and $result['TRIGGER']== 'None'){ - if($result['EVENT'] =='END'){ - $endArray[$posEnd] = $result; - $posEnd = $posEnd+1; - } - if($result['EVENT'] =='START'){ - $startArray[$posStart] = $result; - $posStart= $posStart+1; - } - } - else{ - if($result['TRIGGER']== 'Timer'){ - $scheduler['ID'] = $idActivity; - $scheduler['NAME'] = $name; - if($result['TIME'] == '' or $result['TIME'] == Null){ - $scheduler['TIME'] = date("D M j G:i:s T Y"); - } - else{ - $scheduler['TIME'] = $result['TIME']; - } - $scheduler['TYPE_TIME']= $result['TYPE_TIME']; - $arrayScheduler[] = $scheduler; - } - if($result['TRIGGER']== 'Message'){ - $message['ID'] = $idActivity; - $message['NAME'] = $name; - $message['TYPE_MESSAGE'] = $result['MESSAGE']; - $arrayMessages[] = $message; - } - } - if($result['ROUTE'] !=''){ - $position = $this->findCoordinates($contentActivity); - $arrayRoutes[$posRoutes]['ID'] = $idActivity; - $arrayRoutes[$posRoutes]['ROUTE'] = $result['ROUTE']; - $arrayRoutes[$posRoutes]['TYPE_DIS'] = $result['TYPE_DISCRIMINATOR']; - $arrayRoutes[$posRoutes]['CONDITION_DIS'] = $result['CONDITION_DISCRIMINATOR']; - $arrayRoutes[$posRoutes]['X'] = $position['X']; - $arrayRoutes[$posRoutes]['Y'] = $position['Y']; - $posRoutes = $posRoutes + 1; - } - } - } - } - $contentNode = $contentNode->nextSibling; - } - $result['TASKS'] = $arrayTasks; - $result['END'] = $endArray; - $result['START'] = $startArray; - $result['ROUTES'] = $arrayRoutes; - $result['SCHEDULER']= $arrayScheduler; - $result['MESSAGES'] = $arrayMessages; - return $result; - } - - -/** - * This function creates the scheduler - * @param array $fields - * @return array $result - */ - function createEventMessages($fields,$idProcess) - { - $result = array(); - $event = array(); - $example = new Derivation(); - foreach($fields as $key => $value){ - $oEvent = new Event(); - $event['EVN_UID'] = $value['ID']; - $event['PRO_UID'] = $idProcess; - $event['EVN_RELATED_TO'] = 'SINGLE'; - $event['TAS_UID'] = $value['ID_TASK']; - $event['EVN_TAS_ESTIMATED_DURATION'] = '1'; - $event['EVN_WHEN_OCCURS'] = 'AFTER'; - $event['EVN_STATUS'] = 'ACTIVE'; - $event['EVN_WHEN'] = 1; - $event['EVN_MAX_ATTEMPTS'] = 3; - $event['EVN_ACTION'] = 'SEND_MESSAGE'; - $event['EVN_DESCRIPTION'] = $value['NAME']; - $event['EVN_WHEN_OCCURS'] = 'AFTER_TIME'; - $event['EVN_ACTION_PARAMETERS'] = array( - 'SUBJECT' => 'subject', - 'TO' => array('0'=>'usr|-1','1'=>'ext|'), - 'CC' => array(), - 'BCC' => array(), - 'TEMPLATE' => 'alert_message.html' - ); - $result[] = $event; - } - return $result; - } - - /** - * This function creates the scheduler - * @param array $fields - * @return array $result - */ - function createScheduler($fields,$idProcess) - { - $result = array(); - $example = new Derivation(); - foreach($fields as $key => $value){ - if($value['TYPE_TIME'] == 'TimeDate'){ - //there is a scheduler one time only - $value['OPTION']= 4; - $result[]= $this->createArrayScheduler($value,$idProcess); - } - if($value['TYPE_TIME'] == 'TimeCycle'){ - //we calculated if is daily or monthly, etc - $time = $this->calculateTimeScheduler($value['TIME']); - /*$value['OPTION']= $time['OPTION']; - $value['TIME'] = $time['TIME'];*/ - $value['OPTION']= '1'; - } - } - //PRINT_r($result); - return $result; - } - -/** - * This function creates the scheduler - * @param array $fields - * @return array $result - */ - function calculateTimeScheduler($time) - { - $result = array(); - // The split function has been DEPRECATED as of PHP 5.3.0. - // $result = split(' ',$time); - $result = explode(' ', $time); - //print_r($result); - return $result; - } - - /** - * This function creates the array scheduler - * @param string $time - * @param string $type (TimeCycle or TimeDate) - * @return array $result - */ - function createArrayScheduler($fields,$idProcess) - { - $result['SCH_UID'] = $fields['ID']; - $result['SCH_DEL_USER_NAME'] = ''; - $result['SCH_DEL_USER_PASS'] = ''; - $result['SCH_DEL_USER_UID'] = ''; - $result['SCH_NAME'] = $fields['NAME']; - $result['PRO_UID'] = $idProcess; - $result['TAS_UID'] = $fields['ID_TASK']; - $result['SCH_TIME_NEXT_RUN'] = $fields['TIME']; - $result['SCH_LAST_RUN_TIME'] = null; - $result['SCH_STATE'] = 'ACTIVE'; - $result['SCH_LAST_STATE'] = 'CREATED'; - $result['USR_UID'] = '00000000000000000000000000000001'; - $result['SCH_OPTION'] = $fields['OPTION']; - $result['SCH_START_TIME'] = $fields['TIME']; - $result['SCH_START_DATE'] = $fields['TIME']; - $result['SCH_DAYS_PERFORM_TASK'] = ''; - $result['SCH_EVERY_DAYS'] = '0'; - $result['SCH_WEEK_DAYS'] = '0|0|0|0|0|0|0'; - $result['SCH_START_DAY'] = ''; - $result['SCH_MONTHS'] = '0|0|0|0|0|0|0|0|0|0|0|0'; - $result['SCH_END_DATE'] = $fields['TIME']; - $result['SCH_REPEAT_EVERY'] = ''; - $result['SCH_REPEAT_UNTIL'] = ''; - $result['SCH_REPEAT_STOP_IF_RUNNING'] = ''; - return $result; - } - - /** - * This function creates transitions according the content of the node - * @param object $contentNode - * @param array $dataTask - * @param array $arrayRoutes - * @param array $endArray - * @param array $startArray - * @param string $idProcess - * @return array $result - */ - - function createTransitions($contentNode,$dataTasks,$arrayRoutes,$endArray,$startArray,$idProcess,$schedulerArray,$messages) - { - $numberRoutes = 0; - $posT = 0; - $output = ''; - $routeTransitions = array(); - $taskHidden = array(); - $countHidden = 1; - $dataRoutes = array(); - $newFrom = 0; - $isScheduler = 0; - $isMessage = 0; - while ($contentNode){ - $isEnd = 0; - $isStart = 0; - $tasks = $dataTasks; - if ($contentNode->nodeType == XML_ELEMENT_NODE){ - $nameTransition = $contentNode->nodeName; - $contentTransition = $contentNode->firstChild; - if(strpos($nameTransition,'Transition')!== false){ - $idTransition = $contentNode->getAttribute('Id'); - $idTransition = trim(str_replace('-','',$idTransition)); - $from = trim(str_replace('-','',$contentNode->getAttribute('From'))); - $to = trim(str_replace('-','',$contentNode->getAttribute('To'))); - $routes['ROU_UID'] = $idTransition; - $routes['ID_PROCESS']= $idProcess; - $routes['FROM'] = $from; - $routes['TO'] = $to; - $isScheduler = 0; - $isMessage = 0; - foreach ($startArray as $startBase => $value){ - if($value['ID_TASK']==$from){ - foreach($tasks as $tasksValue=> $taskId){ - if($to==$taskId['TAS_UID']){ - $taskId['TAS_START']='TRUE'; - $dataTasks[$tasksValue]['TAS_START']='TRUE'; - $isStart = 1; - } - } - } - } - foreach ($schedulerArray as $startBase => $value){ - if($value['ID']==$from){ - $isScheduler = 1; - $schedulerArray[$startBase]['ID_TASK'] = $to; - foreach($tasks as $tasksValue=> $taskId){ - if($to==$taskId['TAS_UID']){ - $taskId['TAS_START']='TRUE'; - $dataTasks[$tasksValue]['TAS_START']='TRUE'; - $isStart = 1; - } - } - } - } - foreach ($messages as $startBase => $value){ - if($value['ID']==$from){ - $isMessage = 1; - $messages[$startBase]['ID_TASK'] = $to; - } - if($value['ID']==$to){ - $isMessage = 1; - $messages[$startBase]['ID_TASK'] = $from; - } - } - $sequencial = 0; - $findRoute = 0; - foreach ($arrayRoutes as $routeBase => $value){ - //change for task hidden - if($value['ID']==$from){ - if($findRoute == 0){ - $typeT = 'FROM'; - $valueRoute = $value['ID']; - $typeRoute = $value['ROUTE']; - $sequencial = 1; - $conditionD = $value['CONDITION_DIS']; - $typeD = $value['TYPE_DIS']; - $findRoute = 1; - } - else{ - $contendHidden = $contentTransition; - $fieldsXY = $this->findCoordinatesTransition($to,$arrayRoutes); - $hidden['ID_TASK'] = G::generateUniqueID(); - $hidden['ID_PROCESS'] = $idProcess; - $hidden['TAS_TITLE'] = ''; - $hidden['TASK_TYPE'] = 'HIDDEN'; - $hidden['DESCRIPTION'] = $countHidden; - $hidden['X'] = $fieldsXY['X']; - $hidden['Y'] = $fieldsXY['Y']; - $taskHidden[] = $hidden; - $dataTasks[] = $this->createTask($hidden); - $countHidden = $countHidden + 1; - $routeTransitions[$posT]['ID'] = G::generateUniqueID(); - $routeTransitions[$posT]['ROUTE'] = $from; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; - $routeTransitions[$posT]['TOORFROM'] = 'FROM'; - $routeTransitions[$posT]['ROU_TYPE'] = $value['ROUTE']; - $routeTransitions[$posT]['CONDITION'] = $output; - $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; - $routeTransitions[$posT]['TYPE_DIS'] = $typeD; - $output = ''; - $posT = $posT + 1; - $from = $hidden['ID_TASK']; - } - } - if($value['ID']==$to){ - if($findRoute == 0){ - $typeT = 'TO'; - $valueRoute = $value['ID']; - $typeRoute = $value['ROUTE']; - $sequencial = 1; - $conditionD = $value['CONDITION_DIS']; - $typeD = $value['TYPE_DIS']; - $findRoute = 1; - } - else{ - - $contendHidden = $contentTransition; - $fieldsXY = $this->findCoordinatesTransition($to,$arrayRoutes); - $hidden['ID_TASK'] = G::generateUniqueID(); - $hidden['ID_PROCESS'] = $idProcess; - $hidden['TAS_TITLE'] = ''; - $hidden['TASK_TYPE'] = 'HIDDEN'; - $hidden['DESCRIPTION'] = $countHidden; - $hidden['X'] = $fieldsXY['X']; - $hidden['Y'] = $fieldsXY['Y']; - $taskHidden[] = $hidden; - $dataTasks[] = $this->createTask($hidden); - $countHidden = $countHidden + 1; - $routeTransitions[$posT]['ID'] = G::generateUniqueID(); - $routeTransitions[$posT]['ROUTE'] = $from; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; - $routeTransitions[$posT]['TOORFROM'] = 'TO'; - $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; - $routeTransitions[$posT]['CONDITION'] = $output; - $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; - $routeTransitions[$posT]['TYPE_DIS'] = $typeD; - $output = ''; - $posT = $posT + 1; - $from = $hidden['ID_TASK']; - $conditionD = $value['CONDITION_DIS']; - $typeRoute = $value['ROUTE']; - $typeT = 'TO'; - $valueRoute = $value['ID']; - $sequencial = 1; - $conditionD = $value['CONDITION_DIS']; - $typeD = $value['TYPE_DIS']; - } - } - } - if($sequencial == 0){ - foreach ($endArray as $endBase => $value){ - if($value['ID_TASK']==$to){ - foreach($tasks as $tasksValue=> $taskId){ - if($from==$taskId['TAS_UID']){ - $routes['TO'] = '-1'; - $dataRoutes[$numberRoutes]= $this->createRoute($routes); - $numberRoutes = $numberRoutes +1; - $isEnd = 1; - } - } - } - } - } - if($sequencial == 1){ - while ($contentTransition) { - $nameCondition = $contentTransition->nodeName; - $contentCondition = $contentTransition->firstChild; - if(strpos($nameCondition,'Condition')!== false){ - while ($contentCondition) { - $nameExpression = $contentCondition->nodeName; - $contentCondition1 = ''; - if(strpos($nameExpression,'Expression')!== false){ - $contentCondition1 = $contentCondition->firstChild; - if($contentCondition1 != array()){ - $output = $contentCondition1->nodeValue; + if ($taskFirst == $value['ROUTE']) { + if ($firstRoute == 0) { + foreach ($routeArrayT2 as $valRoutes2 => $values) { + if ($values['ROUTE'] == $taskFirst and $values['FROM'] == $value['FROM'] and $values['TO'] == $value['TO'] and $values['ID'] != $value['ID']) { + unset( $routeArrayT2[$valRoutes2] ); + $firstRoute = 1; + } } - } - $contentCondition = $contentCondition->nextSibling; } - } - $contentTransition = $contentTransition->nextSibling; + } else { + $firstRoute = 0; } - $routeTransitions[$posT]['ID'] = $idTransition; - $routeTransitions[$posT]['ROUTE'] = $valueRoute; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $to; - $routeTransitions[$posT]['TOORFROM'] = $typeT; - $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; - $routeTransitions[$posT]['CONDITION'] = $output; - $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; - $routeTransitions[$posT]['TYPE_DIS'] = $typeD; - $output = ''; - $posT = $posT + 1; - $sequencial = 1; - } - if($isEnd==0 and $isStart == 0 and $sequencial == 0 and $isScheduler == 0 and $isMessage == 0){ - $dataRoutes[$numberRoutes]= $this->createRoute($routes); - $numberRoutes = $numberRoutes +1; - } } - } - $contentNode = $contentNode->nextSibling; + return $routeArrayT2; } - $routes = $routeTransitions; - foreach($routeTransitions as $key => $id){ - $findTo = 0; - $findFrom = 0; - foreach ($dataTasks as $keyHidden => $value){ - if($id['FROM']== $value['TAS_UID']){ - $findFrom= 1; - } - if($id['TO']== $value['TAS_UID']){ - $findTo = 1; - } - } - if($findTo == 0){ - foreach($routes as $keyR => $idR){ - if($id['TO'] == $idR['ROUTE']){ - $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; - $routeTransitions[$key]['ROUTE'] = $id['TO']; - $routeTransitions[$key]['TOORFROM'] = 'TO'; - } - } - } - if($findFrom == 0){ - foreach($routes as $keyR => $idR){ - if($id['FROM'] == $idR['ROUTE']){ - $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; - $routeTransitions[$key]['ROUTE'] = $id['FROM']; - $routeTransitions[$key]['TOORFROM'] = 'FROM'; - } - } - } - } - $result['ROUTES'] = $dataRoutes; - $result['TRANSITIONS']= $routeTransitions; - $result['TASKS'] = $dataTasks; - $result['NUMBER'] = $numberRoutes; - $result['TASKHIDDEN'] = $taskHidden; - $result['SCHEDULER'] = $schedulerArray; - $result['MESSAGES'] = $messages; - return $result; - } -/** - * this function creates a array according to the data given in a node - * @param object $contentNode - * @return array - */ - function createActivity($contentNode) - { - $coordinates = array(); - $event = ''; - $typeRoute = ''; - $markerVisible = ''; - $typePM = ''; - $isRoute = 0; - $description = ''; - $isSubProcess = 0 ; - $trigger = ''; - $time = ''; - $typeTime = ''; - $isMessage = 0; - while ($contentNode) { - if ($contentNode->nodeType == XML_ELEMENT_NODE) { - $nameChild = $contentNode->nodeName; - $contentChild = $contentNode->firstChild; - if(strpos($nameChild,'Description')!== false){ - $description = $contentNode->nodeValue; - } - if(strpos($nameChild,'ExtendedAttributes')!== false){ - $result = $this->createExtended($contentChild); - } - if(strpos($nameChild,'BlockActivity')!== false){ - $isSubProcess = 1; - $idSubProcess = trim(str_replace('-','',$contentNode->getAttribute('ActivitySetId'))); - } - if(strpos($nameChild,'Event')!== false){ - while ($contentChild) { - if ($contentChild->nodeType == XML_ELEMENT_NODE) { - $nameInfo = $contentChild->nodeName; - $contentInfo = $contentChild->firstChild; - if(strpos($nameInfo,'StartEvent')!== false){ - $event = 'START'; - $trigger = $contentChild->getAttribute('Trigger'); - } - if(strpos($nameInfo,'EndEvent')!== false){ - $event = 'END'; - $trigger = $contentChild->getAttribute('Trigger'); - if($trigger == ''){ - $trigger = 'None'; - } - } - if(strpos($nameInfo,'IntermediateEvent')!== false){ - $event = 'INTERMEDIATE'; - $trigger = $contentChild->getAttribute('Trigger'); - } - } - $contentChild = $contentChild->nextSibling; - } - if($trigger != 'None'){ - if($trigger == 'Timer'){ - while ($contentInfo) { - $nameTrigger = $contentInfo->nodeName; - $contentTrigger = $contentInfo->firstChild; - if(strpos($nameTrigger,'TriggerTimer')!== false){ - $time = $contentInfo->getAttribute('TimeCycle'); - $typeTime = 'TimeCycle'; - if($time == ''){ - $time = $contentInfo->getAttribute('TimeDate'); - $typeTime = 'TimeDate'; - } - } - $contentInfo = $contentInfo->nextSibling; - } - } - if($trigger == 'Message'){ - $typeMessage = ''; - $isMessage = 1; - while ($contentInfo) { - $nameTrigger = $contentInfo->nodeName; - $contentTrigger = $contentInfo->firstChild; - if(strpos($nameTrigger,'TriggerResultMessage')!== false){ - $typeMessage = $contentInfo->getAttribute('CatchThrow'); - } - $contentInfo = $contentInfo->nextSibling; - } - } - } - } - if(strpos($nameChild,'Route')!== false){ - $typePM = ''; - $typeRoute = $contentNode->getAttribute('GatewayType'); - $markerVisible = $contentNode->getAttribute('MarkerVisible'); - if($markerVisible !=''){ - $coordinates['ROUTE'] = $markerVisible; - } - if($typeRoute !=''){ - $coordinates['ROUTE'] = $typeRoute; - } - if($typeRoute =='' and $markerVisible ==''){ - $coordinates['ROUTE'] = 'EVALUATE'; - } - switch($coordinates['ROUTE']){ - case 'AND': - $typePM = 'PARALLEL'; - break; - case 'true': - $typePM = 'EVALUATE'; - break; - case 'EVALUATE': + /** + * this public function creates an array for the process that will be created according to the data given in an array + * + * @param array $fields + * @return array $process + */ + public function createProcess ($fields) + { + $process = array (); + $process['PRO_UID'] = $fields['ID']; + $process['PRO_PARENT'] = $fields['ID']; + $process['PRO_TIME'] = 1; + $process['PRO_TIMEUNIT'] = 'DAYS'; + $process['PRO_STATUS'] = 'ACTIVE'; + $process['PRO_TYPE_DAY'] = ''; + $process['PRO_TYPE'] = 'NORMAL'; + $process['PRO_ASSIGNMENT'] = 'FALSE'; + $process['PRO_SHOW_MAP'] = 0; + $process['PRO_SHOW_MESSAGE'] = 0; + $process['PRO_SHOW_DELEGATE'] = 0; + $process['PRO_SHOW_DYNAFORM'] = 0; + $process['PRO_CATEGORY'] = ''; + $process['PRO_SUB_CATEGORY'] = ''; + $process['PRO_INDUSTRY'] = 0; + $process['PRO_UPDATE_DATE'] = date( "D M j G:i:s T Y" ); + $process['PRO_CREATE_DATE'] = date( "D M j G:i:s T Y" ); + $process['PRO_CREATE_USER'] = 00000000000000000000000000000001; + $process['PRO_HEIGHT'] = 5000; + $process['PRO_WIDTH'] = 10000; + $process['PRO_TITLE_X'] = 0; + $process['PRO_TITLE_Y'] = 0; + $process['PRO_DEBUG'] = 0; + $process['PRO_TITLE'] = $fields['NAME']; + $process['PRO_DESCRIPTION'] = $fields['DESCRIPTION']; + return $process; + } + + /** + * this public function creates an array for the subProcess that will be created,according to the data given in an array + * + * @param array $contentNode + * @param array $arrayLanes + * @return array + */ + public function createSubProcesses ($contentNode, $arrayLanes) + { + $activities = array (); + $numberActivities = 0; + $numberLanes = 0; + $number = 0; + $contentSubNode = $contentNode; + $numberSub = 0; + while ($contentSubNode) { + if ($contentSubNode->nodeType == XML_ELEMENT_NODE) { + $nameActivity = $contentSubNode->nodeName; + $contentActivity = $contentSubNode->firstChild; + if (strpos( $nameActivity, 'ActivitySet' ) !== false) { + $idSetActivity = str_replace( '-', '', $contentSubNode->getAttribute( 'Id' ) ); + $arrayActivity[$number]['ID_PROCESS'] = $idSetActivity; + $number = $number + 1; + } + } + $contentSubNode = $contentSubNode->nextSibling; + } + $number = 0; + $arraySubProcesses = array (); + while ($contentNode) { + if ($contentNode->nodeType == XML_ELEMENT_NODE) { + $isSubProcess = 0; + $nameActivity = $contentNode->nodeName; + $contentActivity = $contentNode->firstChild; + $idSetActivity = 0; + if (strpos( $nameActivity, 'ActivitySet' ) !== false) { + $idSetActivity = str_replace( '-', '', $contentNode->getAttribute( 'Id' ) ); + if ($idSetActivity !== 0) { + $isSubProcess = 1; + } + $nameSetActivity = $contentNode->getAttribute( 'Name' ); + $contentChild = $contentNode->firstChild; + $process['ID'] = $idSetActivity; + $process['NAME'] = $nameSetActivity; + $process['DESCRIPTION'] = ''; + $subProcess->process = $this->createProcess( $process ); + $activities[$number]['ID_PROCESS'] = $idSetActivity; + while ($contentChild) { + if ($contentChild->nodeType == XML_ELEMENT_NODE) { + + $nameChild = $contentChild->nodeName; + $contentFirst = $contentChild->firstChild; + if (strpos( $nameChild, 'Activities' ) !== false) { + $arrayActivities = $this->createActivities( $contentFirst, $idSetActivity, $arrayActivity ); + $subProcess->tasks = $arrayActivities['TASKS']; + $startArray = $arrayActivities['START']; + $endArray = $arrayActivities['END']; + $arrayRoutes = $arrayActivities['ROUTES']; + $arrayScheduler = $arrayActivities['SCHEDULER']; + $arrayMessages = $arrayActivities['MESSAGES']; + } + + if (strpos( $nameChild, 'Transitions' ) !== false) { + $transitions = $this->createTransitions( $contentFirst, $subProcess->tasks, $arrayRoutes, $endArray, $startArray, $idSetActivity, $arrayScheduler, $arrayMessages ); + $subProcess->routes = $transitions['ROUTES']; + $subProcess->tasks = $transitions['TASKS']; + $routeTransitions = $transitions['TRANSITIONS']; + $numberRoutes = $transitions['NUMBER']; + $arrayMessages = $transitions['MESSAGES']; + } + } + $contentChild = $contentChild->nextSibling; + } + + $values = $subProcess; + if ($isSubProcess == 1) { + $arraySubProcesses[$numberSub]['ID_PROCESS'] = $idSetActivity; + $arraySubProcesses[$numberSub]['TASKS'] = $subProcess->tasks; + $numberSub = $numberSub + 1; + } + $activities[$number]['TASK_START'] = $startArray[0]['ID_TASK']; + $number = $number + 1; + $subProcess->lanes = array (); + $numberLanes = 0; + foreach ($arrayLanes as $key => $value) { + if ($value['PRO_UID'] == $idSetActivity) { + $subProcess->lanes[$numberLanes] = $value; + $numberLanes = $numberLanes + 1; + } + } + $subProcess->inputs = array (); + $subProcess->outputs = array (); + $subProcess->dynaforms = array (); + $subProcess->steps = array (); + $subProcess->triggers = array (); + $subProcess->taskusers = array (); + $subProcess->groupwfs = $this->getGroupwfRows( $subProcess->taskusers ); + $subProcess->steptriggers = array (); + $subProcess->dbconnections = array (); + $subProcess->reportTables = array (); + $subProcess->reportTablesVars = array (); + $subProcess->stepSupervisor = array (); + $subProcess->objectPermissions = array (); + $subProcess->subProcess = array (); + $subProcess->caseTracker = array (); + $subProcess->caseTrackerObject = array (); + $subProcess->stage = array (); + $subProcess->fieldCondition = array (); + $subProcess->event = array (); + $subProcess->caseScheduler = array (); + $subProcess->dynaformFiles = array (); + $numberTransitions = sizeof( $routeTransitions ); + if ($numberTransitions > 0) { + $routesArray = $this->createGateways( $routeTransitions, $endArray, $subProcess->routes, $numberRoutes, $idProcess, '' ); + $subProcess->routes = $routesArray; + } + $numberSubProcess = 0; + foreach ($subProcess->tasks as $key => $value) { + if ($value['TAS_TYPE'] === 'SUBPROCESS') { + $fields['TASK_PARENT'] = $value['TAS_UID']; + $idSubProcess = $value['TAS_UID']; + $newTasks = $this->getTaskRows( $idSubProcess ); + + $findTask = 0; + foreach ($newTasks as $keyLane => $val) { + if ($val['TAS_START'] === 'TRUE' and $findTask == 0) { + $findTask = 1; + $value['TASK_START'] = $val['TAS_UID']; + } + } + $fields['PROCESS_PARENT'] = $idSetActivity; + $fields['TAS_UID'] = $value['TAS_UID']; + $subProcess->subProcess[$numberSubProcess] = $this->createSubProcess( $fields, $arrayActivity ); + $numberSubProcess = $numberSubProcess + 1; + } + } + $this->createSubProcessFromDataXpdl( $subProcess, $subProcess->tasks ); + } + } + $contentNode = $contentNode->nextSibling; + } + $arrayActivities['SUBPROCESSES'] = $arraySubProcesses; + $arrayActivities['SUB_PROCESS'] = $activities; + return $arrayActivities; + } + + /** + * This public function creates an array for the task that will be created according to the data given in an array + * + * @param array $fields + * @return array $task + */ + public function createTask ($fields) + { + $task = array (); + $task['PRO_UID'] = $fields['ID_PROCESS']; + $task['TAS_UID'] = $fields['ID_TASK']; + $task['TAS_TYPE'] = $fields['TASK_TYPE']; + $task['TAS_DURATION'] = 1; + $task['TAS_DELAY_TYPE'] = ''; + $task['TAS_TEMPORIZER'] = 0; + $task['TAS_TYPE_DAY'] = ''; + $task['TAS_TIMEUNIT'] = 'DAYS'; + $task['TAS_ALERT'] = 'FALSE'; + $task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY'; + $task['TAS_ASSIGN_TYPE'] = 'BALANCED'; + $task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED'; + $task['TAS_ASSIGN_LOCATION'] = 'FALSE'; + $task['TAS_ASSIGN_LOCATION_ADHOC'] = 'FALSE'; + $task['TAS_TRANSFER_FLY'] = 'FALSE'; + $task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001'; + $task['TAS_USER'] = '0'; + $task['TAS_CAN_UPLOAD'] = 'FALSE'; + $task['TAS_VIEW_UPLOAD'] = 'FALSE'; + $task['TAS_VIEW_ADDITIONAL_DOCUMENTATION'] = 'FALSE'; + $task['TAS_CAN_CANCEL'] = 'FALSE'; + $task['TAS_OWNER_APP'] = 'FALSE'; + $task['STG_UID'] = ''; + $task['TAS_CAN_PAUSE'] = 'FALSE'; + $task['TAS_CAN_SEND_MESSAGE'] = 'TRUE'; + $task['TAS_CAN_DELETE_DOCS'] = 'FALSE'; + $task['TAS_SELF_SERVICE'] = 'FALSE'; + $task['TAS_START'] = 'FALSE'; + $task['TAS_TO_LAST_USER'] = 'FALSE'; + $task['TAS_SEND_LAST_EMAIL'] = 'FALSE'; + $task['TAS_DERIVATION'] = 'NORMAL'; + $task['TAS_POSX'] = $fields['X']; + $task['TAS_POSY'] = $fields['Y']; + $task['TAS_COLOR'] = ''; + $task['TAS_DEF_MESSAGE'] = ''; + $task['TAS_DEF_PROC_CODE'] = ''; + $task['TAS_DEF_DESCRIPTION'] = ''; + $task['TAS_TITLE'] = $fields['TAS_TITLE']; + $task['TAS_DESCRIPTION'] = $fields['DESCRIPTION']; + $task['TAS_DEF_TITLE'] = ''; + return $task; + } + + public function createDataTask ($fields) + { + $task = array (); + $task['PRO_UID'] = $fields['ID_PROCESS']; + $task['TAS_UID'] = $fields['ID_TASK']; + $task['TAS_TYPE'] = $fields['TAS_TYPE']; + $task['TAS_DURATION'] = 1; + $task['TAS_DELAY_TYPE'] = ''; + $task['TAS_TEMPORIZER'] = 0; + $task['TAS_TYPE_DAY'] = ''; + $task['TAS_TIMEUNIT'] = 'DAYS'; + $task['TAS_ALERT'] = 'FALSE'; + $task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY'; + $task['TAS_ASSIGN_TYPE'] = 'BALANCED'; + $task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED'; + $task['TAS_MI_INSTANCE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCE'; + $task['TAS_MI_COMPLETE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCES_COMPLETE'; + $task['TAS_ASSIGN_LOCATION'] = 'FALSE'; + $task['TAS_ASSIGN_LOCATION_ADHOC'] = 'FALSE'; + $task['TAS_TRANSFER_FLY'] = 'FALSE'; + $task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001'; + $task['TAS_USER'] = '0'; + $task['TAS_CAN_UPLOAD'] = 'FALSE'; + $task['TAS_VIEW_UPLOAD'] = 'FALSE'; + $task['TAS_VIEW_ADDITIONAL_DOCUMENTATION'] = 'FALSE'; + $task['TAS_CAN_CANCEL'] = 'FALSE'; + $task['TAS_OWNER_APP'] = 'FALSE'; + $task['STG_UID'] = ''; + $task['TAS_CAN_PAUSE'] = 'FALSE'; + $task['TAS_CAN_SEND_MESSAGE'] = 'TRUE'; + $task['TAS_CAN_DELETE_DOCS'] = 'FALSE'; + $task['TAS_SELF_SERVICE'] = 'FALSE'; + $task['TAS_START'] = $fields['START']; + $task['TAS_TO_LAST_USER'] = 'FALSE'; + $task['TAS_SEND_LAST_EMAIL'] = 'FALSE'; + $task['TAS_DERIVATION'] = 'NORMAL'; + $task['TAS_POSX'] = $fields['X']; + $task['TAS_POSY'] = $fields['Y']; + $task['TAS_COLOR'] = ''; + $task['TAS_DEF_MESSAGE'] = ''; + $task['TAS_DEF_PROC_CODE'] = ''; + $task['TAS_DEF_DESCRIPTION'] = ''; + $task['TAS_TITLE'] = $fields['TAS_TITLE']; + $task['TAS_DESCRIPTION'] = $fields['DESCRIPTION']; + $task['TAS_DEF_TITLE'] = ''; + return $task; + } + + /** + * This public function creates an array for the route that will be created according to the data given in an array + * + * @param array $fields + * @return array $route + */ + public function createRoute ($fields) + { + $route = array (); + $route['ROU_UID'] = $fields['ROU_UID']; + $route['ROU_PARENT'] = 0; + $route['PRO_UID'] = $fields['ID_PROCESS']; + $route['TAS_UID'] = $fields['FROM']; + $route['ROU_NEXT_TASK'] = $fields['TO']; + $route['ROU_CASE'] = 1; + $route['ROU_TYPE'] = 'SEQUENTIAL'; + $route['ROU_CONDITION'] = ''; + $route['ROU_TO_LAST_USER'] = 'FALSE'; + $route['ROU_OPTIONAL'] = 'FALSE'; + $route['ROU_SEND_EMAIL'] = 'TRUE'; + $route['ROU_SOURCEANCHOR'] = 1; + $route['ROU_TARGETANCHOR'] = 0; + return $route; + } + + /** + * This public function creates an array for the subProcess that will be created according to the data given in an array + * + * @param array $fields + * @return array $route + */ + public function createSubProcess ($fields) + { + $subProcess = array (); + $subProcess['SP_UID'] = $fields['TAS_UID']; + $subProcess['PRO_UID'] = $fields['TASK_PARENT']; + $subProcess['TAS_UID'] = $fields['TAS_UID']; + $subProcess['PRO_PARENT'] = $fields['PROCESS_PARENT']; + $subProcess['TAS_PARENT'] = $fields['TASK_PARENT']; + $subProcess['SP_TYPE'] = 'SIMPLE'; + $subProcess['SP_SYNCHRONOUS'] = 0; + $subProcess['SP_SYNCHRONOUS_TYPE'] = 'ALL'; + $subProcess['SP_SYNCHRONOUS_WAIT'] = 0; + $subProcess['SP_VARIABLES_OUT'] = 'a:1:{s:0:"";s:0:"";}'; + $subProcess['SP_VARIABLES_IN'] = 'a:1:{s:0:"";s:0:"";}'; + $subProcess['SP_GRID_IN'] = ''; + return $subProcess; + } + + /** + * This public function creates an array for the routes that are not sequential that will be created according to the data given in an array + * + * @param array $routeTransitions + * @param array $endArray + * @param array $dataRoutes + * @param array $numberRoutes + * @param string $idProcess + * @return array $dataRoutes + */ + public function createGateways ($routeTransitions, $endArray, $dataRoutes, $numberRoutes, $idProcess, $taskHidden) + { + $valueCase = ''; + $value = 1; + $valueC = 1; + $aux = $routeTransitions; + foreach ($routeTransitions as $key => $row) { + $aux[$key] = $row['ROUTE']; + } + array_multisort( $aux, SORT_ASC, $routeTransitions ); + $routeArray = $this->verifyRoutes( $routeTransitions, $endArray, $taskHidden ); + $routeArray = $this->sortArray( $routeArray ); + foreach ($routeArray as $valRoutes => $value) { + $isEventEnd = 0; + foreach ($endArray as $endBase => $valueEnd) { + if ($valueEnd['ID_TASK'] == $value['TO']) { + $isEventEnd = 1; + } + } + $dataRoutes[$numberRoutes] = array (); + $dataRoutes[$numberRoutes]['ROU_UID'] = $value['ID']; + $dataRoutes[$numberRoutes]['ROU_PARENT'] = 0; + $dataRoutes[$numberRoutes]['PRO_UID'] = $idProcess; + $dataRoutes[$numberRoutes]['TAS_UID'] = $value['FROM']; + + if ($isEventEnd == 0) { + $dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = $value['TO']; + } else { + $dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = '-1'; + } + if ($valueCase == $value['FROM']) { + $valueC = $valueC + 1; + } else { + $valueC = 1; + $valueCase = $value['FROM']; + } + if ($valueCase == '') { + $valueC = 1; + $valueCase = $value['FROM']; + } + $dataRoutes[$numberRoutes]['ROU_CASE'] = $valueC; + $dataRoutes[$numberRoutes]['ROU_TYPE'] = $value['ROU_TYPE']; + if ($value['ROU_TYPE'] === 'DISCRIMINATOR') { + $dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION_DIS']; + $dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = $value['TYPE_DIS']; + } + if ($value['ROU_TYPE'] !== 'DISCRIMINATOR') { + $dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION']; + $dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = 'FALSE'; + } + $dataRoutes[$numberRoutes]['ROU_TO_LAST_USER'] = 'FALSE'; + $dataRoutes[$numberRoutes]['ROU_SEND_EMAIL'] = 'TRUE'; + $dataRoutes[$numberRoutes]['ROU_SOURCEANCHOR'] = 1; + $dataRoutes[$numberRoutes]['ROU_TARGETANCHOR'] = 0; + $numberRoutes = $numberRoutes + 1; + } + return $dataRoutes; + } + + /** + * This public function creates an array for the lane that will be created according to the data given in an array + * + * @param array $lanes + * @return array $lane + */ + public function createLanesPM ($array, $idProcess) + { + $arrayLanes = array (); + $field = array (); + foreach ($array as $key => $value) { + $field['ID_LANE'] = $value['0']; + $field['ID_PROCESS'] = $idProcess; + $field['X'] = $value['2']; + $field['Y'] = $value['3']; + $field['WIDTH'] = $value['4']; + $field['HEIGHT'] = $value['5']; + $field['TEXT'] = $value['6']; + $arrayLanes[] = $this->createLanes( $field ); + } + return $arrayLanes; + } + + /** + * This public function creates an array for the lane that will be created according to the data given in an array + * + * @param array $lanes + * @return array $lane + */ + public function createLanes ($lanes) + { + $lane = array (); + $lane['SWI_UID'] = $lanes['ID_LANE']; + $lane['PRO_UID'] = $lanes['ID_PROCESS']; + $lane['SWI_TYPE'] = 'TEXT'; + $lane['SWI_X'] = $lanes['X']; + $lane['SWI_Y'] = $lanes['Y']; + $lane['SWI_TEXT'] = $lanes['TEXT']; + $lane['SWI_WIDTH'] = $lanes['WIDTH']; + $lane['SWI_HEIGHT'] = $lanes['HEIGHT']; + return $lane; + } + + /** + * This public function creates an array for the lane that will be created according to the data given in an array + * + * @param array $lanes + * @return array $lane + */ + public function createLanesNewPM ($array) + { + $arrayLanes = array (); + $field = array (); + foreach ($array as $key => $value) { + if ($value['SWI_TYPE'] == 'TEXT') { + $field['0'] = $value['SWI_UID']; + $field['1'] = $value['SWI_TEXT']; + $field['2'] = $value['SWI_X']; + $field['3'] = $value['SWI_Y']; + $field['4'] = $value['SWI_WIDTH']; + $field['5'] = $value['SWI_HEIGHT']; + $field['6'] = $value['SWI_NEXT_UID']; + $arrayLanes[] = $field; + } + } + return $arrayLanes; + } + + /** + * This public function creates activities according the content of the node + * + * @param object $contentNode + * @param string $idProcess + * @param string $ActivitySet + * @return array $result + */ + public function createActivities ($contentNode, $idProcess, $activitySet) + { + $result = array (); + $numberTasks = 0; + $posRoutes = 0; + $posEnd = 0; + $posStart = 0; + $arrayRoutes = array (); + $endArray = array (); + $endArray = array (); + $startArray = array (); + $arrayScheduler = array (); + $scheduler = array (); + $message = array (); + $arrayMessages = array (); + while ($contentNode) { + if ($contentNode->nodeType == XML_ELEMENT_NODE) { + $nameActivity = $contentNode->nodeName; + $contentActivity = $contentNode->firstChild; + if (strpos( $nameActivity, 'Activity' ) !== false) { + $idActivity = $contentNode->getAttribute( 'Id' ); + $idActivity = trim( str_replace( '-', '', $idActivity ) ); + $name = htmlentities( $contentNode->getAttribute( 'Name' ) ); + $result = $this->createActivity( $contentActivity ); + $result['ID_PROCESS'] = $idProcess; + $result['ID_TASK'] = $idActivity; + $result['TAS_TITLE'] = $name; + $result['TASK_TYPE'] = 'NORMAL'; + foreach ($activitySet as $key => $value) { + if ($value['ID_PROCESS'] == $idActivity) { + $result['TASK_TYPE'] = 'SUBPROCESS'; + } + } + if ($result['EVENT'] == '' and $result['ROUTE'] == '') { + $arrayTasks[$numberTasks] = $this->createTask( $result ); + $numberTasks = $numberTasks + 1; + } else { + if ($result['EVENT'] != '' and $result['TRIGGER'] == 'None') { + if ($result['EVENT'] == 'END') { + $endArray[$posEnd] = $result; + $posEnd = $posEnd + 1; + } + if ($result['EVENT'] == 'START') { + $startArray[$posStart] = $result; + $posStart = $posStart + 1; + } + } else { + if ($result['TRIGGER'] == 'Timer') { + $scheduler['ID'] = $idActivity; + $scheduler['NAME'] = $name; + if ($result['TIME'] == '' or $result['TIME'] == null) { + $scheduler['TIME'] = date( "D M j G:i:s T Y" ); + } else { + $scheduler['TIME'] = $result['TIME']; + } + $scheduler['TYPE_TIME'] = $result['TYPE_TIME']; + $arrayScheduler[] = $scheduler; + } + if ($result['TRIGGER'] == 'Message') { + $message['ID'] = $idActivity; + $message['NAME'] = $name; + $message['TYPE_MESSAGE'] = $result['MESSAGE']; + $arrayMessages[] = $message; + } + } + if ($result['ROUTE'] != '') { + $position = $this->findCoordinates( $contentActivity ); + $arrayRoutes[$posRoutes]['ID'] = $idActivity; + $arrayRoutes[$posRoutes]['ROUTE'] = $result['ROUTE']; + $arrayRoutes[$posRoutes]['TYPE_DIS'] = $result['TYPE_DISCRIMINATOR']; + $arrayRoutes[$posRoutes]['CONDITION_DIS'] = $result['CONDITION_DISCRIMINATOR']; + $arrayRoutes[$posRoutes]['X'] = $position['X']; + $arrayRoutes[$posRoutes]['Y'] = $position['Y']; + $posRoutes = $posRoutes + 1; + } + } + } + } + $contentNode = $contentNode->nextSibling; + } + $result['TASKS'] = $arrayTasks; + $result['END'] = $endArray; + $result['START'] = $startArray; + $result['ROUTES'] = $arrayRoutes; + $result['SCHEDULER'] = $arrayScheduler; + $result['MESSAGES'] = $arrayMessages; + return $result; + } + + /** + * This public function creates the scheduler + * + * @param array $fields + * @return array $result + */ + public function createEventMessages ($fields, $idProcess) + { + $result = array (); + $event = array (); + $example = new Derivation(); + foreach ($fields as $key => $value) { + $oEvent = new Event(); + $event['EVN_UID'] = $value['ID']; + $event['PRO_UID'] = $idProcess; + $event['EVN_RELATED_TO'] = 'SINGLE'; + $event['TAS_UID'] = $value['ID_TASK']; + $event['EVN_TAS_ESTIMATED_DURATION'] = '1'; + $event['EVN_WHEN_OCCURS'] = 'AFTER'; + $event['EVN_STATUS'] = 'ACTIVE'; + $event['EVN_WHEN'] = 1; + $event['EVN_MAX_ATTEMPTS'] = 3; + $event['EVN_ACTION'] = 'SEND_MESSAGE'; + $event['EVN_DESCRIPTION'] = $value['NAME']; + $event['EVN_WHEN_OCCURS'] = 'AFTER_TIME'; + $event['EVN_ACTION_PARAMETERS'] = array ('SUBJECT' => 'subject','TO' => array ('0' => 'usr|-1','1' => 'ext|' + ),'CC' => array (),'BCC' => array (),'TEMPLATE' => 'alert_message.html' + ); + $result[] = $event; + } + return $result; + } + + /** + * This public function creates the scheduler + * + * @param array $fields + * @return array $result + */ + public function createScheduler ($fields, $idProcess) + { + $result = array (); + $example = new Derivation(); + foreach ($fields as $key => $value) { + if ($value['TYPE_TIME'] == 'TimeDate') { + //there is a scheduler one time only + $value['OPTION'] = 4; + $result[] = $this->createArrayScheduler( $value, $idProcess ); + } + if ($value['TYPE_TIME'] == 'TimeCycle') { + //we calculated if is daily or monthly, etc + $time = $this->calculateTimeScheduler( $value['TIME'] ); + /*$value['OPTION']= $time['OPTION']; + $value['TIME'] = $time['TIME'];*/ + $value['OPTION'] = '1'; + } + } + //PRINT_r($result); + return $result; + } + + /** + * This public function creates the scheduler + * + * @param array $fields + * @return array $result + */ + public function calculateTimeScheduler ($time) + { + $result = array (); + // The split public function has been DEPRECATED as of PHP 5.3.0. + // $result = split(' ',$time); + $result = explode( ' ', $time ); + //print_r($result); + return $result; + } + + /** + * This public function creates the array scheduler + * + * @param string $time + * @param string $type (TimeCycle or TimeDate) + * @return array $result + */ + public function createArrayScheduler ($fields, $idProcess) + { + $result['SCH_UID'] = $fields['ID']; + $result['SCH_DEL_USER_NAME'] = ''; + $result['SCH_DEL_USER_PASS'] = ''; + $result['SCH_DEL_USER_UID'] = ''; + $result['SCH_NAME'] = $fields['NAME']; + $result['PRO_UID'] = $idProcess; + $result['TAS_UID'] = $fields['ID_TASK']; + $result['SCH_TIME_NEXT_RUN'] = $fields['TIME']; + $result['SCH_LAST_RUN_TIME'] = null; + $result['SCH_STATE'] = 'ACTIVE'; + $result['SCH_LAST_STATE'] = 'CREATED'; + $result['USR_UID'] = '00000000000000000000000000000001'; + $result['SCH_OPTION'] = $fields['OPTION']; + $result['SCH_START_TIME'] = $fields['TIME']; + $result['SCH_START_DATE'] = $fields['TIME']; + $result['SCH_DAYS_PERFORM_TASK'] = ''; + $result['SCH_EVERY_DAYS'] = '0'; + $result['SCH_WEEK_DAYS'] = '0|0|0|0|0|0|0'; + $result['SCH_START_DAY'] = ''; + $result['SCH_MONTHS'] = '0|0|0|0|0|0|0|0|0|0|0|0'; + $result['SCH_END_DATE'] = $fields['TIME']; + $result['SCH_REPEAT_EVERY'] = ''; + $result['SCH_REPEAT_UNTIL'] = ''; + $result['SCH_REPEAT_STOP_IF_RUNNING'] = ''; + return $result; + } + + /** + * This public function creates transitions according the content of the node + * + * @param object $contentNode + * @param array $dataTask + * @param array $arrayRoutes + * @param array $endArray + * @param array $startArray + * @param string $idProcess + * @return array $result + */ + + public function createTransitions ($contentNode, $dataTasks, $arrayRoutes, $endArray, $startArray, $idProcess, $schedulerArray, $messages) + { + $numberRoutes = 0; + $posT = 0; + $output = ''; + $routeTransitions = array (); + $taskHidden = array (); + $countHidden = 1; + $dataRoutes = array (); + $newFrom = 0; + $isScheduler = 0; + $isMessage = 0; + while ($contentNode) { + $isEnd = 0; + $isStart = 0; + $tasks = $dataTasks; + if ($contentNode->nodeType == XML_ELEMENT_NODE) { + $nameTransition = $contentNode->nodeName; + $contentTransition = $contentNode->firstChild; + if (strpos( $nameTransition, 'Transition' ) !== false) { + $idTransition = $contentNode->getAttribute( 'Id' ); + $idTransition = trim( str_replace( '-', '', $idTransition ) ); + $from = trim( str_replace( '-', '', $contentNode->getAttribute( 'From' ) ) ); + $to = trim( str_replace( '-', '', $contentNode->getAttribute( 'To' ) ) ); + $routes['ROU_UID'] = $idTransition; + $routes['ID_PROCESS'] = $idProcess; + $routes['FROM'] = $from; + $routes['TO'] = $to; + $isScheduler = 0; + $isMessage = 0; + foreach ($startArray as $startBase => $value) { + if ($value['ID_TASK'] == $from) { + foreach ($tasks as $tasksValue => $taskId) { + if ($to == $taskId['TAS_UID']) { + $taskId['TAS_START'] = 'TRUE'; + $dataTasks[$tasksValue]['TAS_START'] = 'TRUE'; + $isStart = 1; + } + } + } + } + foreach ($schedulerArray as $startBase => $value) { + if ($value['ID'] == $from) { + $isScheduler = 1; + $schedulerArray[$startBase]['ID_TASK'] = $to; + foreach ($tasks as $tasksValue => $taskId) { + if ($to == $taskId['TAS_UID']) { + $taskId['TAS_START'] = 'TRUE'; + $dataTasks[$tasksValue]['TAS_START'] = 'TRUE'; + $isStart = 1; + } + } + } + } + foreach ($messages as $startBase => $value) { + if ($value['ID'] == $from) { + $isMessage = 1; + $messages[$startBase]['ID_TASK'] = $to; + } + if ($value['ID'] == $to) { + $isMessage = 1; + $messages[$startBase]['ID_TASK'] = $from; + } + } + $sequencial = 0; + $findRoute = 0; + foreach ($arrayRoutes as $routeBase => $value) { + //change for task hidden + if ($value['ID'] == $from) { + if ($findRoute == 0) { + $typeT = 'FROM'; + $valueRoute = $value['ID']; + $typeRoute = $value['ROUTE']; + $sequencial = 1; + $conditionD = $value['CONDITION_DIS']; + $typeD = $value['TYPE_DIS']; + $findRoute = 1; + } else { + $contendHidden = $contentTransition; + $fieldsXY = $this->findCoordinatesTransition( $to, $arrayRoutes ); + $hidden['ID_TASK'] = G::generateUniqueID(); + $hidden['ID_PROCESS'] = $idProcess; + $hidden['TAS_TITLE'] = ''; + $hidden['TASK_TYPE'] = 'HIDDEN'; + $hidden['DESCRIPTION'] = $countHidden; + $hidden['X'] = $fieldsXY['X']; + $hidden['Y'] = $fieldsXY['Y']; + $taskHidden[] = $hidden; + $dataTasks[] = $this->createTask( $hidden ); + $countHidden = $countHidden + 1; + $routeTransitions[$posT]['ID'] = G::generateUniqueID(); + $routeTransitions[$posT]['ROUTE'] = $from; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; + $routeTransitions[$posT]['TOORFROM'] = 'FROM'; + $routeTransitions[$posT]['ROU_TYPE'] = $value['ROUTE']; + $routeTransitions[$posT]['CONDITION'] = $output; + $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; + $routeTransitions[$posT]['TYPE_DIS'] = $typeD; + $output = ''; + $posT = $posT + 1; + $from = $hidden['ID_TASK']; + } + } + if ($value['ID'] == $to) { + if ($findRoute == 0) { + $typeT = 'TO'; + $valueRoute = $value['ID']; + $typeRoute = $value['ROUTE']; + $sequencial = 1; + $conditionD = $value['CONDITION_DIS']; + $typeD = $value['TYPE_DIS']; + $findRoute = 1; + } else { + + $contendHidden = $contentTransition; + $fieldsXY = $this->findCoordinatesTransition( $to, $arrayRoutes ); + $hidden['ID_TASK'] = G::generateUniqueID(); + $hidden['ID_PROCESS'] = $idProcess; + $hidden['TAS_TITLE'] = ''; + $hidden['TASK_TYPE'] = 'HIDDEN'; + $hidden['DESCRIPTION'] = $countHidden; + $hidden['X'] = $fieldsXY['X']; + $hidden['Y'] = $fieldsXY['Y']; + $taskHidden[] = $hidden; + $dataTasks[] = $this->createTask( $hidden ); + $countHidden = $countHidden + 1; + $routeTransitions[$posT]['ID'] = G::generateUniqueID(); + $routeTransitions[$posT]['ROUTE'] = $from; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; + $routeTransitions[$posT]['TOORFROM'] = 'TO'; + $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; + $routeTransitions[$posT]['CONDITION'] = $output; + $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; + $routeTransitions[$posT]['TYPE_DIS'] = $typeD; + $output = ''; + $posT = $posT + 1; + $from = $hidden['ID_TASK']; + $conditionD = $value['CONDITION_DIS']; + $typeRoute = $value['ROUTE']; + $typeT = 'TO'; + $valueRoute = $value['ID']; + $sequencial = 1; + $conditionD = $value['CONDITION_DIS']; + $typeD = $value['TYPE_DIS']; + } + } + } + if ($sequencial == 0) { + foreach ($endArray as $endBase => $value) { + if ($value['ID_TASK'] == $to) { + foreach ($tasks as $tasksValue => $taskId) { + if ($from == $taskId['TAS_UID']) { + $routes['TO'] = '-1'; + $dataRoutes[$numberRoutes] = $this->createRoute( $routes ); + $numberRoutes = $numberRoutes + 1; + $isEnd = 1; + } + } + } + } + } + if ($sequencial == 1) { + while ($contentTransition) { + $nameCondition = $contentTransition->nodeName; + $contentCondition = $contentTransition->firstChild; + if (strpos( $nameCondition, 'Condition' ) !== false) { + while ($contentCondition) { + $nameExpression = $contentCondition->nodeName; + $contentCondition1 = ''; + if (strpos( $nameExpression, 'Expression' ) !== false) { + $contentCondition1 = $contentCondition->firstChild; + if ($contentCondition1 != array ()) { + $output = $contentCondition1->nodeValue; + } + } + $contentCondition = $contentCondition->nextSibling; + } + } + $contentTransition = $contentTransition->nextSibling; + } + $routeTransitions[$posT]['ID'] = $idTransition; + $routeTransitions[$posT]['ROUTE'] = $valueRoute; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $to; + $routeTransitions[$posT]['TOORFROM'] = $typeT; + $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; + $routeTransitions[$posT]['CONDITION'] = $output; + $routeTransitions[$posT]['CONDITION_DIS'] = $conditionD; + $routeTransitions[$posT]['TYPE_DIS'] = $typeD; + $output = ''; + $posT = $posT + 1; + $sequencial = 1; + } + if ($isEnd == 0 and $isStart == 0 and $sequencial == 0 and $isScheduler == 0 and $isMessage == 0) { + $dataRoutes[$numberRoutes] = $this->createRoute( $routes ); + $numberRoutes = $numberRoutes + 1; + } + } + } + $contentNode = $contentNode->nextSibling; + } + $routes = $routeTransitions; + foreach ($routeTransitions as $key => $id) { + $findTo = 0; + $findFrom = 0; + foreach ($dataTasks as $keyHidden => $value) { + if ($id['FROM'] == $value['TAS_UID']) { + $findFrom = 1; + } + if ($id['TO'] == $value['TAS_UID']) { + $findTo = 1; + } + } + if ($findTo == 0) { + foreach ($routes as $keyR => $idR) { + if ($id['TO'] == $idR['ROUTE']) { + $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; + $routeTransitions[$key]['ROUTE'] = $id['TO']; + $routeTransitions[$key]['TOORFROM'] = 'TO'; + } + } + } + if ($findFrom == 0) { + foreach ($routes as $keyR => $idR) { + if ($id['FROM'] == $idR['ROUTE']) { + $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; + $routeTransitions[$key]['ROUTE'] = $id['FROM']; + $routeTransitions[$key]['TOORFROM'] = 'FROM'; + } + } + } + } + $result['ROUTES'] = $dataRoutes; + $result['TRANSITIONS'] = $routeTransitions; + $result['TASKS'] = $dataTasks; + $result['NUMBER'] = $numberRoutes; + $result['TASKHIDDEN'] = $taskHidden; + $result['SCHEDULER'] = $schedulerArray; + $result['MESSAGES'] = $messages; + return $result; + } + + /** + * this public function creates a array according to the data given in a node + * + * @param object $contentNode + * @return array + */ + public function createActivity ($contentNode) + { + $coordinates = array (); + $event = ''; + $typeRoute = ''; + $markerVisible = ''; + $typePM = ''; + $isRoute = 0; + $description = ''; + $isSubProcess = 0; + $trigger = ''; + $time = ''; + $typeTime = ''; + $isMessage = 0; + while ($contentNode) { + if ($contentNode->nodeType == XML_ELEMENT_NODE) { + $nameChild = $contentNode->nodeName; + $contentChild = $contentNode->firstChild; + if (strpos( $nameChild, 'Description' ) !== false) { + $description = $contentNode->nodeValue; + } + if (strpos( $nameChild, 'ExtendedAttributes' ) !== false) { + $result = $this->createExtended( $contentChild ); + } + if (strpos( $nameChild, 'BlockActivity' ) !== false) { + $isSubProcess = 1; + $idSubProcess = trim( str_replace( '-', '', $contentNode->getAttribute( 'ActivitySetId' ) ) ); + } + if (strpos( $nameChild, 'Event' ) !== false) { + while ($contentChild) { + if ($contentChild->nodeType == XML_ELEMENT_NODE) { + $nameInfo = $contentChild->nodeName; + $contentInfo = $contentChild->firstChild; + if (strpos( $nameInfo, 'StartEvent' ) !== false) { + $event = 'START'; + $trigger = $contentChild->getAttribute( 'Trigger' ); + } + if (strpos( $nameInfo, 'EndEvent' ) !== false) { + $event = 'END'; + $trigger = $contentChild->getAttribute( 'Trigger' ); + if ($trigger == '') { + $trigger = 'None'; + } + } + if (strpos( $nameInfo, 'IntermediateEvent' ) !== false) { + $event = 'INTERMEDIATE'; + $trigger = $contentChild->getAttribute( 'Trigger' ); + } + } + $contentChild = $contentChild->nextSibling; + } + if ($trigger != 'None') { + if ($trigger == 'Timer') { + while ($contentInfo) { + $nameTrigger = $contentInfo->nodeName; + $contentTrigger = $contentInfo->firstChild; + if (strpos( $nameTrigger, 'TriggerTimer' ) !== false) { + $time = $contentInfo->getAttribute( 'TimeCycle' ); + $typeTime = 'TimeCycle'; + if ($time == '') { + $time = $contentInfo->getAttribute( 'TimeDate' ); + $typeTime = 'TimeDate'; + } + } + $contentInfo = $contentInfo->nextSibling; + } + } + if ($trigger == 'Message') { + $typeMessage = ''; + $isMessage = 1; + while ($contentInfo) { + $nameTrigger = $contentInfo->nodeName; + $contentTrigger = $contentInfo->firstChild; + if (strpos( $nameTrigger, 'TriggerResultMessage' ) !== false) { + $typeMessage = $contentInfo->getAttribute( 'CatchThrow' ); + } + $contentInfo = $contentInfo->nextSibling; + } + } + } + } + + if (strpos( $nameChild, 'Route' ) !== false) { + $typePM = ''; + $typeRoute = $contentNode->getAttribute( 'GatewayType' ); + $markerVisible = $contentNode->getAttribute( 'MarkerVisible' ); + if ($markerVisible != '') { + $coordinates['ROUTE'] = $markerVisible; + } + if ($typeRoute != '') { + $coordinates['ROUTE'] = $typeRoute; + } + if ($typeRoute == '' and $markerVisible == '') { + $coordinates['ROUTE'] = 'EVALUATE'; + } + switch ($coordinates['ROUTE']) { + case 'AND': + $typePM = 'PARALLEL'; + break; + case 'true': + $typePM = 'EVALUATE'; + break; + case 'EVALUATE': + $typePM = 'EVALUATE'; + break; + case 'OR': + $typePM = 'PARALLEL-BY-EVALUATION'; + break; + case 'Complex': + $typePM = 'DISCRIMINATOR'; + break; + } + $isRoute = 1; + } + if (strpos( $nameChild, 'NodeGraphicsInfos' ) !== false) { + $coordinates = $this->findCoordinates( $contentNode ); + $coordinates['EVENT'] = $event; + $coordinates['TRIGGER'] = $trigger; + $coordinates['TIME'] = $time; + $coordinates['TYPE_TIME'] = $typeTime; + $coordinates['DESCRIPTION'] = $description; + $coordinates['TYPE_DISCRIMINATOR'] = $result['TYPE']; + $coordinates['CONDITION_DISCRIMINATOR'] = $result['CONDITION']; + if ($isRoute == 1) { + $coordinates['ROUTE'] = $typePM; + } else { + $coordinates['ROUTE'] = ''; + } + if ($isMessage == 1) { + $coordinates['MESSAGE'] = $typeMessage; + } else { + $coordinates['MESSAGE'] = ''; + } + } + } + $contentNode = $contentNode->nextSibling; + } + return $coordinates; + } + + /** + * This public function return the type and the condition of a discriminator + * + * @param object $contentNode + * @return array + */ + public function createExtended ($contentNode) + { + $result = array (); + $result['TYPE'] = ''; + $result['CONDITION'] = ''; + $contentExtended = $contentNode; + while ($contentExtended) { + if ($contentExtended->nodeType == XML_ELEMENT_NODE) { + $nameChildExtended = $contentExtended->nodeName; + $contentChildExtended = $contentExtended->firstChild; + if (strpos( $nameChildExtended, 'ExtendedAttribute' ) !== false) { + $name = $contentExtended->getAttribute( 'Name' ); + if ($name == 'option') { + $result['TYPE'] = $contentExtended->getAttribute( 'Value' ); + } + if ($name == 'condition') { + $result['CONDITION'] = $contentExtended->getAttribute( 'Value' ); + } + } + } + $contentExtended = $contentExtended->nextSibling; + } + return $result; + } + + /** + * This public function find the coordinates of a object + * + * @param object $contentNode + * @return array + */ + public function findCoordinates ($contentNode) + { + $coordinates = array (); + while ($contentNode) { + if ($contentNode->nodeType == XML_ELEMENT_NODE) { + $nameChild = $contentNode->nodeName; + $contentChild = $contentNode->firstChild; + if (strpos( $nameChild, 'NodeGraphicsInfos' ) !== false) { + while ($contentChild) { + if ($contentChild->nodeType == XML_ELEMENT_NODE) { + $nameInfo = $contentChild->nodeName; + $contentInfo = $contentChild->firstChild; + if (strpos( $nameInfo, 'NodeGraphicsInfo' ) !== false) { + $coordinates['Height'] = $contentChild->getAttribute( 'Height' ); + $coordinates['Width'] = $contentChild->getAttribute( 'Width' ); + $coordinates['BorderColor'] = $contentChild->getAttribute( 'BorderColor' ); + $coordinates['FillColor'] = $contentChild->getAttribute( 'FillColor' ); + while ($contentInfo) { + $nameCoordinate = $contentInfo->nodeName; + $contentCoordinate = $contentInfo->firstChild; + + if (strpos( $nameCoordinate, 'Coordinates' ) !== false) { + $coordinates['X'] = $contentInfo->getAttribute( 'XCoordinate' ); + $coordinates['Y'] = $contentInfo->getAttribute( 'YCoordinate' ); + } + $contentInfo = $contentInfo->nextSibling; + } + + } + } + $contentChild = $contentChild->nextSibling; + } + } + } + $contentNode = $contentNode->nextSibling; + } + return $coordinates; + } + + /** + * This public function find the coordinates of a object + * + * @param string $idRoute + * @param array $aRoutes + * @return array + */ + public function findCoordinatesTransition ($idRoute, $aRoutes) + { + $coordinates = array (); + $size = sizeof( $aRoutes ); + $count = 0; + $find = 0; + while ($count < $size and $find == 0) { + if ($aRoutes[$count]['ID'] == $idRoute) { + $coordinates['X'] = $aRoutes[$count]['X']; + $coordinates['Y'] = $aRoutes[$count]['Y']; + $find = 1; + } + $count = $count + 1; + } + return $coordinates; + } + + /** + * This public function create the array Routes + * + * @param array $dataTasks + * @param array $arrayRoutes + * @param array $aEvents + * @param array $aGateways + * @param string $idProcess + * @return array + */ + public function createArrayRoutes ($dataTasks, $arrayRoutes, $aEvents, $aGateways, $aEnd, $idProcess) + { + $numberRoutes = 0; + $posT = 0; + $routeTransitions = array (); + $dataRoutes = array (); + $findRoute = 0; + $hidden = array (); + $taskHidden = array (); + $countHidden = 0; + foreach ($arrayRoutes as $idRoute => $valueRoute) { + $idTransition = $valueRoute['0']; + $from = $valueRoute['1']; + $to = $valueRoute['2']; + $toPort = $valueRoute['3']; + $fromPort = $valueRoute['4']; + $routes['ROU_UID'] = $idTransition; + $routes['ID_PROCESS'] = $idProcess; + $routes['FROM'] = $from; + $routes['TO'] = $to; + $sequencial = 0; + $isEnd = 0; + $typeRoute = ''; + $typePM = ''; + $findRoute = 0; + $isEventIntermediate = 0; + foreach ($aGateways as $routeBase => $value) { + if ($value['0'] == $from) { + if ($findRoute == 0) { + $typeT = 'FROM'; + $valueRoute = $value['0']; + $typeRoute = $value['1']; + $positionX = $value['2']; + $positionY = $value['3']; + $sequencial = 1; + $findRoute = 1; + } else { + $hidden['ID_TASK'] = G::generateUniqueID(); + $hidden['ID_PROCESS'] = $idProcess; + $hidden['TAS_TITLE'] = ''; + $hidden['TASK_TYPE'] = 'HIDDEN'; + $hidden['DESCRIPTION'] = $countHidden; + $hidden['X'] = $positionX; + $hidden['Y'] = $positionY; + $taskHidden[] = $hidden; + $dataTasks[] = $this->createTask( $hidden ); + $countHidden = $countHidden + 1; + $routeTransitions[$posT]['ID'] = G::generateUniqueID(); + $routeTransitions[$posT]['ROUTE'] = $from; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; + $routeTransitions[$posT]['TOORFROM'] = 'FROM'; + $routeTransitions[$posT]['ROU_TYPE'] = $value['1']; + $routeTransitions[$posT]['CONDITION'] = ''; + $routeTransitions[$posT]['CONDITION_DIS'] = ''; + $routeTransitions[$posT]['TYPE_DIS'] = ''; + $posT = $posT + 1; + $from = $hidden['ID_TASK']; + } + } + if ($value['0'] == $to) { + if ($findRoute == 0) { + $typeT = 'TO'; + $valueRoute = $value['0']; + $typeRoute = $value['1']; + $positionX = $value['2']; + $positionY = $value['3']; + $sequencial = 1; + $findRoute = 1; + } else { + $hidden['ID_TASK'] = G::generateUniqueID(); + $hidden['ID_PROCESS'] = $idProcess; + $hidden['TAS_TITLE'] = ''; + $hidden['TASK_TYPE'] = 'HIDDEN'; + $hidden['DESCRIPTION'] = $countHidden; + $hidden['X'] = $positionX; + $hidden['Y'] = $positionY; + $taskHidden[] = $hidden; + $dataTasks[] = $this->createTask( $hidden ); + $countHidden = $countHidden + 1; + $routeTransitions[$posT]['ID'] = G::generateUniqueID(); + $routeTransitions[$posT]['ROUTE'] = $from; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; + $routeTransitions[$posT]['TOORFROM'] = 'TO'; + $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; + $routeTransitions[$posT]['CONDITION'] = ''; + $routeTransitions[$posT]['CONDITION_DIS'] = ''; + $routeTransitions[$posT]['TYPE_DIS'] = ''; + $posT = $posT + 1; + $from = $hidden['ID_TASK']; + $typeT = 'TO'; + $valueRoute = $value['0']; + $typeRoute = $value['1']; + $sequencial = 1; + } + } + } + if ($sequencial == 0) { + foreach ($aEvents as $id => $value) { + if ($routes['TO'] == $value['0']) { + if ($value['1'] === 'bpmnEventEndSignal' or $value['1'] === 'bpmnEventMessageEnd') { + $routes['TO'] = '-1'; + $dataRoutes[$numberRoutes] = $this->createRoute( $routes ); + $numberRoutes = $numberRoutes + 1; + $isEnd = 1; + } else { + $isEventIntermediate = 1; + } + } + } + } + if ($sequencial == 1) { + $routeTransitions[$posT]['ID'] = $idTransition; + $routeTransitions[$posT]['ROUTE'] = $valueRoute; + $routeTransitions[$posT]['FROM'] = $from; + $routeTransitions[$posT]['TO'] = $to; + $routeTransitions[$posT]['TOORFROM'] = $typeT; + $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; + $routeTransitions[$posT]['CONDITION'] = ''; + $routeTransitions[$posT]['CONDITION_DIS'] = ''; + $routeTransitions[$posT]['TYPE_DIS'] = ''; + $posT = $posT + 1; + $sequencial = 1; + } + if ($isEnd == 0 and $sequencial == 0 and $isEventIntermediate == 0) { + $dataRoutes[$numberRoutes] = $this->createRoute( $routes ); + $numberRoutes = $numberRoutes + 1; + } + } + foreach ($routeTransitions as $id => $key) { + $typeRoute = $key['ROU_TYPE']; + switch ($typeRoute) { + case 'bpmnGatewayExclusiveData': $typePM = 'EVALUATE'; - break; - case 'OR': + break; + case 'bpmnGatewayInclusive': $typePM = 'PARALLEL-BY-EVALUATION'; - break; - case 'Complex': + break; + case 'bpmnGatewayExclusiveEvent': + $typePM = 'EVALUATE'; + break; + case 'bpmnGatewayComplex': $typePM = 'DISCRIMINATOR'; - break; - } - $isRoute = 1; + break; + case 'bpmnGatewayParallel': + $typePM = 'PARALLEL'; + break; + } + $routeTransitions[$id]['ROU_TYPE'] = $typePM; } - if(strpos($nameChild,'NodeGraphicsInfos')!== false){ - $coordinates = $this->findCoordinates($contentNode); - $coordinates['EVENT'] = $event; - $coordinates['TRIGGER'] = $trigger; - $coordinates['TIME'] = $time; - $coordinates['TYPE_TIME'] = $typeTime; - $coordinates['DESCRIPTION'] = $description; - $coordinates['TYPE_DISCRIMINATOR'] = $result['TYPE']; - $coordinates['CONDITION_DISCRIMINATOR'] = $result['CONDITION']; - if($isRoute == 1){ - $coordinates['ROUTE']= $typePM; - } - else{ - $coordinates['ROUTE']=''; - } - if($isMessage == 1){ - $coordinates['MESSAGE']= $typeMessage; - } - else{ - $coordinates['MESSAGE']=''; - } - } - } - $contentNode = $contentNode->nextSibling; - } - return $coordinates; - } - - /** - * This function return the type and the condition of a discriminator - * @param object $contentNode - * @return array - */ - function createExtended($contentNode) - { - $result = array(); - $result['TYPE']= ''; - $result['CONDITION'] = ''; - $contentExtended = $contentNode; - while ($contentExtended) { - if ($contentExtended->nodeType == XML_ELEMENT_NODE) { - $nameChildExtended = $contentExtended->nodeName; - $contentChildExtended = $contentExtended->firstChild; - if(strpos($nameChildExtended,'ExtendedAttribute')!== false){ - $name = $contentExtended->getAttribute('Name'); - if($name == 'option'){ - $result['TYPE'] = $contentExtended->getAttribute('Value'); - } - if($name == 'condition'){ - $result['CONDITION'] = $contentExtended->getAttribute('Value'); - } - } - } - $contentExtended = $contentExtended->nextSibling; - } - return $result; - } - -/** - * This function find the coordinates of a object - * @param object $contentNode - * @return array - */ - function findCoordinates($contentNode) - { - $coordinates = array(); - while ($contentNode) { - if ($contentNode->nodeType == XML_ELEMENT_NODE) { - $nameChild = $contentNode->nodeName; - $contentChild = $contentNode->firstChild; - if(strpos($nameChild,'NodeGraphicsInfos')!== false){ - while ($contentChild) { - if ($contentChild->nodeType == XML_ELEMENT_NODE) { - $nameInfo = $contentChild->nodeName; - $contentInfo = $contentChild->firstChild; - if(strpos($nameInfo,'NodeGraphicsInfo')!== false){ - $coordinates['Height'] = $contentChild->getAttribute('Height'); - $coordinates['Width'] = $contentChild->getAttribute('Width'); - $coordinates['BorderColor'] = $contentChild->getAttribute('BorderColor'); - $coordinates['FillColor'] = $contentChild->getAttribute('FillColor'); - while ($contentInfo) { - $nameCoordinate = $contentInfo->nodeName; - $contentCoordinate = $contentInfo->firstChild; - - if(strpos($nameCoordinate,'Coordinates')!== false){ - $coordinates['X'] = $contentInfo->getAttribute('XCoordinate'); - $coordinates['Y'] = $contentInfo->getAttribute('YCoordinate'); - } - $contentInfo = $contentInfo->nextSibling; + $routes = $routeTransitions; + foreach ($routeTransitions as $key => $id) { + $findTo = 0; + $findFrom = 0; + foreach ($dataTasks as $keyHidden => $value) { + if ($id['FROM'] == $value['TAS_UID']) { + $findFrom = 1; } - - } - } - $contentChild = $contentChild->nextSibling; - } - } - } - $contentNode = $contentNode->nextSibling; - } - return $coordinates; - } - -/** - * This function find the coordinates of a object - * @param string $idRoute - * @param array $aRoutes - * @return array - */ - function findCoordinatesTransition($idRoute,$aRoutes) - { - $coordinates = array(); - $size = sizeof($aRoutes); - $count = 0; - $find = 0; - while($count < $size and $find == 0){ - if($aRoutes[$count]['ID'] == $idRoute){ - $coordinates['X'] = $aRoutes[$count]['X']; - $coordinates['Y'] = $aRoutes[$count]['Y']; - $find = 1; - } - $count = $count + 1; - } - return $coordinates; - } - - /** - * This function create the array Routes - * @param array $dataTasks - * @param array $arrayRoutes - * @param array $aEvents - * @param array $aGateways - * @param string $idProcess - * @return array - */ - function createArrayRoutes($dataTasks,$arrayRoutes,$aEvents,$aGateways,$aEnd,$idProcess) - { - $numberRoutes = 0; - $posT = 0; - $routeTransitions = array(); - $dataRoutes = array(); - $findRoute = 0; - $hidden = array(); - $taskHidden = array(); - $countHidden = 0; - foreach($arrayRoutes as $idRoute => $valueRoute){ - $idTransition = $valueRoute['0']; - $from = $valueRoute['1']; - $to = $valueRoute['2']; - $toPort = $valueRoute['3']; - $fromPort = $valueRoute['4']; - $routes['ROU_UID'] = $idTransition; - $routes['ID_PROCESS']= $idProcess; - $routes['FROM'] = $from; - $routes['TO'] = $to; - $sequencial = 0; - $isEnd = 0; - $typeRoute = ''; - $typePM = ''; - $findRoute = 0; - $isEventIntermediate = 0; - foreach ($aGateways as $routeBase => $value){ - if($value['0']==$from){ - if($findRoute == 0){ - $typeT = 'FROM'; - $valueRoute = $value['0']; - $typeRoute = $value['1']; - $positionX = $value['2']; - $positionY = $value['3']; - $sequencial = 1; - $findRoute = 1; - } - else{ - $hidden['ID_TASK'] = G::generateUniqueID(); - $hidden['ID_PROCESS'] = $idProcess; - $hidden['TAS_TITLE'] = ''; - $hidden['TASK_TYPE'] = 'HIDDEN'; - $hidden['DESCRIPTION'] = $countHidden; - $hidden['X'] = $positionX; - $hidden['Y'] = $positionY; - $taskHidden[] = $hidden; - $dataTasks[] = $this->createTask($hidden); - $countHidden = $countHidden + 1; - $routeTransitions[$posT]['ID'] = G::generateUniqueID(); - $routeTransitions[$posT]['ROUTE'] = $from; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; - $routeTransitions[$posT]['TOORFROM'] = 'FROM'; - $routeTransitions[$posT]['ROU_TYPE'] = $value['1']; - $routeTransitions[$posT]['CONDITION'] = ''; - $routeTransitions[$posT]['CONDITION_DIS'] = ''; - $routeTransitions[$posT]['TYPE_DIS'] = ''; - $posT = $posT + 1; - $from = $hidden['ID_TASK']; - } - } - if($value['0']==$to){ - if($findRoute == 0){ - $typeT = 'TO'; - $valueRoute = $value['0']; - $typeRoute = $value['1']; - $positionX = $value['2']; - $positionY = $value['3']; - $sequencial = 1; - $findRoute = 1; - } - else{ - $hidden['ID_TASK'] = G::generateUniqueID(); - $hidden['ID_PROCESS'] = $idProcess; - $hidden['TAS_TITLE'] = ''; - $hidden['TASK_TYPE'] = 'HIDDEN'; - $hidden['DESCRIPTION'] = $countHidden; - $hidden['X'] = $positionX; - $hidden['Y'] = $positionY; - $taskHidden[] = $hidden; - $dataTasks[] = $this->createTask($hidden); - $countHidden = $countHidden + 1; - $routeTransitions[$posT]['ID'] = G::generateUniqueID(); - $routeTransitions[$posT]['ROUTE'] = $from; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $hidden['ID_TASK']; - $routeTransitions[$posT]['TOORFROM'] = 'TO'; - $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; - $routeTransitions[$posT]['CONDITION'] = ''; - $routeTransitions[$posT]['CONDITION_DIS'] = ''; - $routeTransitions[$posT]['TYPE_DIS'] = ''; - $posT = $posT + 1; - $from = $hidden['ID_TASK']; - $typeT = 'TO'; - $valueRoute = $value['0']; - $typeRoute = $value['1']; - $sequencial = 1; - } - } - } - if($sequencial == 0){ - foreach($aEvents as $id => $value){ - if($routes['TO'] == $value['0']){ - if($value['1']==='bpmnEventEndSignal' or $value['1']==='bpmnEventMessageEnd' ){ - $routes['TO'] = '-1'; - $dataRoutes[$numberRoutes]= $this->createRoute($routes); - $numberRoutes = $numberRoutes +1; - $isEnd = 1; - } - else{ - $isEventIntermediate = 1; - } - } - } - } - if($sequencial == 1){ - $routeTransitions[$posT]['ID'] = $idTransition; - $routeTransitions[$posT]['ROUTE'] = $valueRoute; - $routeTransitions[$posT]['FROM'] = $from; - $routeTransitions[$posT]['TO'] = $to; - $routeTransitions[$posT]['TOORFROM'] = $typeT; - $routeTransitions[$posT]['ROU_TYPE'] = $typeRoute; - $routeTransitions[$posT]['CONDITION'] = ''; - $routeTransitions[$posT]['CONDITION_DIS'] = ''; - $routeTransitions[$posT]['TYPE_DIS'] = ''; - $posT = $posT + 1; - $sequencial = 1; - } - if($isEnd == 0 and $sequencial == 0 and $isEventIntermediate == 0){ - $dataRoutes[$numberRoutes]= $this->createRoute($routes); - $numberRoutes = $numberRoutes +1; - } - } - foreach($routeTransitions as $id => $key){ - $typeRoute = $key['ROU_TYPE']; - switch($typeRoute){ - case 'bpmnGatewayExclusiveData': - $typePM = 'EVALUATE'; - break; - case 'bpmnGatewayInclusive': - $typePM = 'PARALLEL-BY-EVALUATION'; - break; - case 'bpmnGatewayExclusiveEvent': - $typePM = 'EVALUATE'; - break; - case 'bpmnGatewayComplex': - $typePM = 'DISCRIMINATOR'; - break; - case 'bpmnGatewayParallel': - $typePM = 'PARALLEL'; - break; - } - $routeTransitions[$id]['ROU_TYPE'] = $typePM; - } - $routes = $routeTransitions; - foreach($routeTransitions as $key => $id){ - $findTo = 0; - $findFrom = 0; - foreach ($dataTasks as $keyHidden => $value){ - if($id['FROM']== $value['TAS_UID']){ - $findFrom= 1; - } - if($id['TO']== $value['TAS_UID']){ - $findTo = 1; - } - } - if($findTo == 0){ - foreach($routes as $keyR => $idR){ - if($id['TO'] == $idR['ROUTE']){ - $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; - $routeTransitions[$key]['ROUTE'] = $id['TO']; - $routeTransitions[$key]['TOORFROM'] = 'TO'; - } - } - } - if($findFrom == 0){ - foreach($routes as $keyR => $idR){ - if($id['FROM'] == $idR['ROUTE']){ - $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; - $routeTransitions[$key]['ROUTE'] = $id['FROM']; - $routeTransitions[$key]['TOORFROM'] = 'FROM'; - } - } - } - } - $result['ROUTES'] = $dataRoutes; - $result['TRANSITIONS']= $routeTransitions; - $result['NUMBER'] = $numberRoutes; - $result['TASKS'] = $dataTasks; - $result['HIDDEN'] = $taskHidden; - return $result; - } - - /** - * This function convert the array events in a array with the events end - * @param object $aEvents - * @param string $idProcess - * @return array - */ - function convertArrayEnd($aEvents,$idProcess) - { - $result = array(); - $posEnd = 1; - $endArray = array(); - foreach($aEvents as $id => $value){ - if($value['1']==='bpmnEventEndSignal' or $value['1']==='bpmnEventMessageEnd'){ - $result['ID_PROCESS'] = $idProcess; - $result['ID_TASK'] = $value['0']; - $endArray[$posEnd] = $result; - $posEnd = $posEnd+1; - } - } - return $endArray; - } - - /** - * This function create transitions from the array transitions for the new processmap - * @param array $task - * @param array $routes - * @param array $events - * @param array $countEvents - * @param array $arrayRoutes - * @param array $countRoutes - * @return array - */ - function createTransitionsPM($tasks,$routes,$events,$countEvents,$arrayRoutes,$countRoutes) - { - $cont = 0 ; - $dataRoutes = ''; - $endEvent = 1 ; - $taskParallel = ''; - $routeParallel = ''; - $taskSecJoin = ''; - $routeSecJoin = ''; - $taskDiscriminator = ''; - $taskEvaluate = ''; - $routeEvaluate = ''; - $taskParallelEv = ''; - $routeParallelEv = ''; - $taskSelect = ''; - $routeSelect = ''; - $routeEnd = ''; - $arraySecJoin = array(); - $position = 0; - $fillColor = ''; - $transitions = ''; - $arrayGateways = array(); - $countG = 0; - $gatPosX = 0; - $gatPosY = 0; - - foreach ($routes as $key => $row) { - if($row['ROU_TYPE'] == 'SEC-JOIN'){ - $arraySecJoin[$position] = array(); - $arraySecJoin[$position] = $row; - $position = $position + 1; - unset($routes[$key]); - } - } - $aux = $arraySecJoin ; - foreach ($arraySecJoin as $key => $row) { - $aux[$key]= $row['ROU_NEXT_TASK']; - } - if(sizeof($arraySecJoin) > 0){ - array_multisort($aux,SORT_ASC,$arraySecJoin); - unset($aux); - } - foreach ($routes as $key => $row) { - $uid[$key] = $row['TAS_UID']; - $case[$key] = $row['ROU_CASE']; - } - if(sizeof($routes) > 0){ - array_multisort($uid, SORT_ASC, $case, SORT_ASC, $routes); - } - $routes = array_merge($routes,$arraySecJoin); - foreach ($routes as $key => $val ) { - $end = 0; - $idRoute = $val['ROU_UID']; - $idTask = $val['TAS_UID']; - $nextTask = $val['ROU_NEXT_TASK']; - $condition = htmlentities($val['ROU_CONDITION']); - $toPort = $val['ROU_TO_PORT']; - $fromPort = $val['ROU_FROM_PORT']; - //If End Event - if($nextTask == "-1"){ - $end=1; - } - $typeRoute = $val['ROU_TYPE']; - $route = ''; - - //Get GAT_UID from ROUTE table based on ROU_UID - $oRoute = new Route ( ); - $aRouteDetails = $oRoute->load($idRoute); - $sGateUID = $aRouteDetails['GAT_UID']; - - //Get Gateway details from above GAT_UID - $oGateway = new Gateway ( ); - if($sGateUID != '') - { - $aGatewayDetails = $oGateway->load($sGateUID); - $gatPosX = $aGatewayDetails['GAT_X']; - $gatPosY = $aGatewayDetails['GAT_Y']; - } - - //if route is of SEQUENTIAL type,assign route id to GAT_UID - if($sGateUID == '') - $sGateUID = $idRoute; - - if ($typeRoute != "SEQUENTIAL" ){ - switch($typeRoute){ - case 'PARALLEL': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX'] + 60; - $coordinateY=$idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT'] ; - } - } - $positionX=$coordinateX+62; - $positionY=$coordinateY+55; - if($idTask != $taskParallel){ - $taskParallel = $idTask; - $routeParallel = $sGateUID; - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayParallel'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $taskParallel; - $arrayRoutes[$countRoutes]['2']= $routeParallel; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeParallel; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeParallel; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - break; - case 'SEC-JOIN': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$nextTask){ - $coordinateX=$idVal['TAS_POSX'] + 60; - $coordinateY=$idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - } - } - $positionX=$coordinateX+60; - $positionY=$coordinateY-45; - if($nextTask != $taskSecJoin){ - $taskSecJoin = $nextTask; - $routeSecJoin = $sGateUID; - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayParallel'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeSecJoin; - $arrayRoutes[$countRoutes]['2']= $taskSecJoin; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $routeSecJoin; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $routeSecJoin; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - break; - case 'EVALUATE': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX'] + 60; - $coordinateY=$idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - } - } - $positionX=$coordinateX+62; - $positionY=$coordinateY+55; - if($idTask != $taskEvaluate){ - $taskEvaluate = $idTask; - $routeEvaluate = $sGateUID; - if($nextTask != "-1"){ - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $taskEvaluate; - $arrayRoutes[$countRoutes]['2']= $routeEvaluate; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeEvaluate; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - } - else{ - if($nextTask !="-1"){ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeEvaluate; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - $routeEnd = $routeEvaluate; - } - } - break; - case 'PARALLEL-BY-EVALUATION': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX = $idVal['TAS_POSX'] + 60; - $coordinateY = $idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - } - } - $positionX=$coordinateX+62; - $positionY=$coordinateY+55; - if($idTask != $taskParallelEv){ - $taskParallelEv = $idTask; - $routeParallelEv = $sGateUID; - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayInclusive'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $taskParallelEv; - $arrayRoutes[$countRoutes]['2']= $routeParallelEv; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeParallelEv; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeParallelEv; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - break; - case 'SELECT': - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX'] + 60; - $coordinateY=$idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; + if ($id['TO'] == $value['TAS_UID']) { + $findTo = 1; } } - $positionX=$coordinateX+60; - $positionY=$coordinateY+40; - if($idTask != $taskSelect){ - $taskSelect = $idTask; - $routeSelect = $sGateUID; - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $taskSelect; - $arrayRoutes[$countRoutes]['2']= $routeSelect; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeSelect; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - if($nextTask !="-1"){ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeSelect; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else{ - $routeEnd = $routeSelect; - } - } - break; - case 'DISCRIMINATOR': - $coordinateX = 0; - $coordinateY = 0; - $optional = $val['ROU_OPTIONAL']; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$nextTask){ - $coordinateX=$idVal['TAS_POSX'] + 60; - $coordinateY=$idVal['TAS_POSY'] + 60; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; + if ($findTo == 0) { + foreach ($routes as $keyR => $idR) { + if ($id['TO'] == $idR['ROUTE']) { + $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; + $routeTransitions[$key]['ROUTE'] = $id['TO']; + $routeTransitions[$key]['TOORFROM'] = 'TO'; + } } } - $positionX=$coordinateX+60; - $positionY=$coordinateY-45; - if($nextTask != $taskDiscriminator){ - $taskDiscriminator = $nextTask; - $routeDiscriminator = $sGateUID; - $arrayGateways[$countG]['0'] = $sGateUID; - $arrayGateways[$countG]['1'] = 'bpmnGatewayComplex'; - $arrayGateways[$countG]['2'] = $gatPosX; - $arrayGateways[$countG]['3'] = $gatPosY; - $countG = $countG + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $routeDiscriminator; - $arrayRoutes[$countRoutes]['2']= $taskDiscriminator; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $routeDiscriminator; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; + if ($findFrom == 0) { + foreach ($routes as $keyR => $idR) { + if ($id['FROM'] == $idR['ROUTE']) { + $routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE']; + $routeTransitions[$key]['ROUTE'] = $id['FROM']; + $routeTransitions[$key]['TOORFROM'] = 'FROM'; + } + } } - else{ - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $routeDiscriminator; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; + } + $result['ROUTES'] = $dataRoutes; + $result['TRANSITIONS'] = $routeTransitions; + $result['NUMBER'] = $numberRoutes; + $result['TASKS'] = $dataTasks; + $result['HIDDEN'] = $taskHidden; + return $result; + } + + /** + * This public function convert the array events in a array with the events end + * + * @param object $aEvents + * @param string $idProcess + * @return array + */ + public function convertArrayEnd ($aEvents, $idProcess) + { + $result = array (); + $posEnd = 1; + $endArray = array (); + foreach ($aEvents as $id => $value) { + if ($value['1'] === 'bpmnEventEndSignal' or $value['1'] === 'bpmnEventMessageEnd') { + $result['ID_PROCESS'] = $idProcess; + $result['ID_TASK'] = $value['0']; + $endArray[$posEnd] = $result; + $posEnd = $posEnd + 1; } - break; } - } - if($end==1){ - if($typeRoute == "SEQUENTIAL"){ - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - $tas_uid =$idVal['TAS_UID']; + return $endArray; + } + + /** + * This public function create transitions from the array transitions for the new processmap + * + * @param array $task + * @param array $routes + * @param array $events + * @param array $countEvents + * @param array $arrayRoutes + * @param array $countRoutes + * @return array + */ + public function createTransitionsPM ($tasks, $routes, $events, $countEvents, $arrayRoutes, $countRoutes) + { + $cont = 0; + $dataRoutes = ''; + $endEvent = 1; + $taskParallel = ''; + $routeParallel = ''; + $taskSecJoin = ''; + $routeSecJoin = ''; + $taskDiscriminator = ''; + $taskEvaluate = ''; + $routeEvaluate = ''; + $taskParallelEv = ''; + $routeParallelEv = ''; + $taskSelect = ''; + $routeSelect = ''; + $routeEnd = ''; + $arraySecJoin = array (); + $position = 0; + $fillColor = ''; + $transitions = ''; + $arrayGateways = array (); + $countG = 0; + $gatPosX = 0; + $gatPosY = 0; + + foreach ($routes as $key => $row) { + if ($row['ROU_TYPE'] == 'SEC-JOIN') { + $arraySecJoin[$position] = array (); + $arraySecJoin[$position] = $row; + $position = $position + 1; + unset( $routes[$key] ); } - } - $positionX = $coordinateX + 92; - $positionY = $coordinateY + 40; - $evn_uid = $val['ROU_EVN_UID']; - if($evn_uid != ''){ - $oEvent = new Event(); - $aEvent = $oEvent->load($evn_uid); - - $events[$countEvents]['0'] = $evn_uid; - $events[$countEvents]['1'] = $aEvent['EVN_TYPE']; - $events[$countEvents]['2'] = $positionX-25; - $events[$countEvents]['3'] = $positionY+35; - $events[$countEvents]['4'] = $tas_uid; - $countEvents = $countEvents + 1; - - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $evn_uid; - $arrayRoutes[$countRoutes]['3']= $toPort; - $arrayRoutes[$countRoutes]['4']= $fromPort; - $arrayRoutes[$countRoutes]['5']= $typeRoute; - $countRoutes = $countRoutes + 1; - $end = 0; - $endEvent = 0; - } } - //For $typeRoute Evaluate Function - else{ - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - $tas_uid =$idVal['TAS_UID']; - } - } - $positionX = $coordinateX + $tas_width/1.5 + 19; - $positionY = $coordinateY + $tas_height/2; - $idTask = $routeEnd; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $idRoute; - $arrayRoutes[$countRoutes]['3']= $toPort; - $arrayRoutes[$countRoutes]['4']= $fromPort; - $arrayRoutes[$countRoutes]['5']= $typeRoute; - $countRoutes = $countRoutes + 1; - - $events[$countEvents]['0'] = $idRoute; - $events[$countEvents]['1'] = 'bpmnEventEmptyEnd'; - $events[$countEvents]['2'] = $positionX-25; - $events[$countEvents]['3'] = $positionY+35; - $events[$countEvents]['4'] = $tas_uid; - $countEvents = $countEvents + 1; - $end = 0; - $endEvent = 0; + $aux = $arraySecJoin; + foreach ($arraySecJoin as $key => $row) { + $aux[$key] = $row['ROU_NEXT_TASK']; } - } - else{ - if ($typeRoute == "SEQUENTIAL"){ - //Will Check for Intermediate Timer - $evn_uid = $val['ROU_EVN_UID']; - if($evn_uid != '') - { - $coordinateX=0; - $coordinateY=0; - foreach ($tasks as $taskVal => $idVal ){ - if($idVal['TAS_UID']==$idTask){ - $coordinateX=$idVal['TAS_POSX']; - $coordinateY=$idVal['TAS_POSY']; - $tas_width =$idVal['TAS_WIDTH']; - $tas_height =$idVal['TAS_HEIGHT']; - } + if (sizeof( $arraySecJoin ) > 0) { + array_multisort( $aux, SORT_ASC, $arraySecJoin ); + unset( $aux ); + } + foreach ($routes as $key => $row) { + $uid[$key] = $row['TAS_UID']; + $case[$key] = $row['ROU_CASE']; + } + if (sizeof( $routes ) > 0) { + array_multisort( $uid, SORT_ASC, $case, SORT_ASC, $routes ); + } + $routes = array_merge( $routes, $arraySecJoin ); + foreach ($routes as $key => $val) { + $end = 0; + $idRoute = $val['ROU_UID']; + $idTask = $val['TAS_UID']; + $nextTask = $val['ROU_NEXT_TASK']; + $condition = htmlentities( $val['ROU_CONDITION'] ); + $toPort = $val['ROU_TO_PORT']; + $fromPort = $val['ROU_FROM_PORT']; + //If End Event + if ($nextTask == "-1") { + $end = 1; } - $positionX = $coordinateX + $tas_width/1.5 + 19; - $positionY = $coordinateY + $tas_height/2; + $typeRoute = $val['ROU_TYPE']; + $route = ''; - $oEvent = new Event(); - $aEvent = $oEvent->load($evn_uid); - $events[$countEvents]['0'] = $evn_uid; - $events[$countEvents]['1'] = $aEvent['EVN_TYPE']; - $events[$countEvents]['2'] = $aEvent['EVN_POSX']; - $events[$countEvents]['3'] = $aEvent['EVN_POSY']; - $countEvents = $countEvents + 1; + //Get GAT_UID from ROUTE table based on ROU_UID + $oRoute = new Route(); + $aRouteDetails = $oRoute->load( $idRoute ); + $sGateUID = $aRouteDetails['GAT_UID']; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $evn_uid; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - $arrayRoutes[$countRoutes]['0']= G::generateUniqueID(); - $arrayRoutes[$countRoutes]['1']= $evn_uid; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= '1'; - $arrayRoutes[$countRoutes]['4']= '2'; - $countRoutes = $countRoutes + 1; - } - else - { - $arrayRoutes[$countRoutes]['0']= $idRoute; - $arrayRoutes[$countRoutes]['1']= $idTask; - $arrayRoutes[$countRoutes]['2']= $nextTask; - $arrayRoutes[$countRoutes]['3']= $toPort; - $arrayRoutes[$countRoutes]['4']= $fromPort; - $countRoutes = $countRoutes + 1; - } + //Get Gateway details from above GAT_UID + $oGateway = new Gateway(); + if ($sGateUID != '') { + $aGatewayDetails = $oGateway->load( $sGateUID ); + $gatPosX = $aGatewayDetails['GAT_X']; + $gatPosY = $aGatewayDetails['GAT_Y']; + } + + //if route is of SEQUENTIAL type,assign route id to GAT_UID + if ($sGateUID == '') { + $sGateUID = $idRoute; + } + if ($typeRoute != "SEQUENTIAL") { + switch ($typeRoute) { + case 'PARALLEL': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 62; + $positionY = $coordinateY + 55; + if ($idTask != $taskParallel) { + $taskParallel = $idTask; + $routeParallel = $sGateUID; + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayParallel'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $taskParallel; + $arrayRoutes[$countRoutes]['2'] = $routeParallel; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeParallel; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeParallel; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } + break; + case 'SEC-JOIN': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $nextTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY - 45; + if ($nextTask != $taskSecJoin) { + $taskSecJoin = $nextTask; + $routeSecJoin = $sGateUID; + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayParallel'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeSecJoin; + $arrayRoutes[$countRoutes]['2'] = $taskSecJoin; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $routeSecJoin; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $routeSecJoin; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } + break; + case 'EVALUATE': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 62; + $positionY = $coordinateY + 55; + if ($idTask != $taskEvaluate) { + $taskEvaluate = $idTask; + $routeEvaluate = $sGateUID; + if ($nextTask != "-1") { + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $taskEvaluate; + $arrayRoutes[$countRoutes]['2'] = $routeEvaluate; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeEvaluate; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } + } else { + if ($nextTask != "-1") { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeEvaluate; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $routeEnd = $routeEvaluate; + } + } + break; + case 'PARALLEL-BY-EVALUATION': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 62; + $positionY = $coordinateY + 55; + if ($idTask != $taskParallelEv) { + $taskParallelEv = $idTask; + $routeParallelEv = $sGateUID; + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayInclusive'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $taskParallelEv; + $arrayRoutes[$countRoutes]['2'] = $routeParallelEv; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeParallelEv; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeParallelEv; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } + break; + case 'SELECT': + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY + 40; + if ($idTask != $taskSelect) { + $taskSelect = $idTask; + $routeSelect = $sGateUID; + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $taskSelect; + $arrayRoutes[$countRoutes]['2'] = $routeSelect; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeSelect; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + if ($nextTask != "-1") { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeSelect; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $routeEnd = $routeSelect; + } + } + break; + case 'DISCRIMINATOR': + $coordinateX = 0; + $coordinateY = 0; + $optional = $val['ROU_OPTIONAL']; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $nextTask) { + $coordinateX = $idVal['TAS_POSX'] + 60; + $coordinateY = $idVal['TAS_POSY'] + 60; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + 60; + $positionY = $coordinateY - 45; + if ($nextTask != $taskDiscriminator) { + $taskDiscriminator = $nextTask; + $routeDiscriminator = $sGateUID; + $arrayGateways[$countG]['0'] = $sGateUID; + $arrayGateways[$countG]['1'] = 'bpmnGatewayComplex'; + $arrayGateways[$countG]['2'] = $gatPosX; + $arrayGateways[$countG]['3'] = $gatPosY; + $countG = $countG + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $routeDiscriminator; + $arrayRoutes[$countRoutes]['2'] = $taskDiscriminator; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $routeDiscriminator; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $routeDiscriminator; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } + break; + } + } + if ($end == 1) { + if ($typeRoute == "SEQUENTIAL") { + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + $tas_uid = $idVal['TAS_UID']; + } + } + $positionX = $coordinateX + 92; + $positionY = $coordinateY + 40; + $evn_uid = $val['ROU_EVN_UID']; + if ($evn_uid != '') { + $oEvent = new Event(); + $aEvent = $oEvent->load( $evn_uid ); + + $events[$countEvents]['0'] = $evn_uid; + $events[$countEvents]['1'] = $aEvent['EVN_TYPE']; + $events[$countEvents]['2'] = $positionX - 25; + $events[$countEvents]['3'] = $positionY + 35; + $events[$countEvents]['4'] = $tas_uid; + $countEvents = $countEvents + 1; + + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $evn_uid; + $arrayRoutes[$countRoutes]['3'] = $toPort; + $arrayRoutes[$countRoutes]['4'] = $fromPort; + $arrayRoutes[$countRoutes]['5'] = $typeRoute; + $countRoutes = $countRoutes + 1; + $end = 0; + $endEvent = 0; + } + } else { + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + $tas_uid = $idVal['TAS_UID']; + } + } + $positionX = $coordinateX + $tas_width / 1.5 + 19; + $positionY = $coordinateY + $tas_height / 2; + $idTask = $routeEnd; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $idRoute; + $arrayRoutes[$countRoutes]['3'] = $toPort; + $arrayRoutes[$countRoutes]['4'] = $fromPort; + $arrayRoutes[$countRoutes]['5'] = $typeRoute; + $countRoutes = $countRoutes + 1; + + $events[$countEvents]['0'] = $idRoute; + $events[$countEvents]['1'] = 'bpmnEventEmptyEnd'; + $events[$countEvents]['2'] = $positionX - 25; + $events[$countEvents]['3'] = $positionY + 35; + $events[$countEvents]['4'] = $tas_uid; + $countEvents = $countEvents + 1; + $end = 0; + $endEvent = 0; + } + } else { + if ($typeRoute == "SEQUENTIAL") { + //Will Check for Intermediate Timer + $evn_uid = $val['ROU_EVN_UID']; + if ($evn_uid != '') { + $coordinateX = 0; + $coordinateY = 0; + foreach ($tasks as $taskVal => $idVal) { + if ($idVal['TAS_UID'] == $idTask) { + $coordinateX = $idVal['TAS_POSX']; + $coordinateY = $idVal['TAS_POSY']; + $tas_width = $idVal['TAS_WIDTH']; + $tas_height = $idVal['TAS_HEIGHT']; + } + } + $positionX = $coordinateX + $tas_width / 1.5 + 19; + $positionY = $coordinateY + $tas_height / 2; + + $oEvent = new Event(); + $aEvent = $oEvent->load( $evn_uid ); + $events[$countEvents]['0'] = $evn_uid; + $events[$countEvents]['1'] = $aEvent['EVN_TYPE']; + $events[$countEvents]['2'] = $aEvent['EVN_POSX']; + $events[$countEvents]['3'] = $aEvent['EVN_POSY']; + $countEvents = $countEvents + 1; + + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $evn_uid; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + $arrayRoutes[$countRoutes]['0'] = G::generateUniqueID(); + $arrayRoutes[$countRoutes]['1'] = $evn_uid; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = '1'; + $arrayRoutes[$countRoutes]['4'] = '2'; + $countRoutes = $countRoutes + 1; + } else { + $arrayRoutes[$countRoutes]['0'] = $idRoute; + $arrayRoutes[$countRoutes]['1'] = $idTask; + $arrayRoutes[$countRoutes]['2'] = $nextTask; + $arrayRoutes[$countRoutes]['3'] = $toPort; + $arrayRoutes[$countRoutes]['4'] = $fromPort; + $countRoutes = $countRoutes + 1; + } + } + } } - } + $data = array (); + $data['GATEWAYS'] = $arrayGateways; + $data['TRANSITION'] = $arrayRoutes; + $data['EVENTS'] = $events; + return $data; } - $data = array(); - $data['GATEWAYS'] = $arrayGateways; - $data['TRANSITION'] = $arrayRoutes; - $data['EVENTS'] = $events; - return $data; - } - /** - * This function Removes duplicate values from an array bi-dimensional - * @param array $array - * @return array - */ - function super_unique($array) - { - $result = array_map("unserialize", array_unique(array_map("serialize", $array))); - foreach ($result as $key => $value){ - if ( is_array($value) ){ - $result[$key] = $this->super_unique($value); - } + /** + * This public function Removes duplicate values from an array bi-dimensional + * + * @param array $array + * @return array + */ + public function super_unique ($array) + { + $result = array_map( "unserialize", array_unique( array_map( "serialize", $array ) ) ); + foreach ($result as $key => $value) { + if (is_array( $value )) { + $result[$key] = $this->super_unique( $value ); + } + } + return $result; } - return $result; - } - /** - * This function create a array for open the process in the new processmap - * @param array $array - * @return array - */ - function createProcessPM($array) - { - $result = array(); - $result['0'] = $array['PRO_UID']; - $result['1'] = $array['PRO_TITLE']; - $result['2'] = $array['PRO_DESCRIPTION']; - return $result; - } - /** - * This function creates an array for the lane that will be created according to the data given in an array - * @param array $lanes - * @return array $lane - */ - function createSubProcessesPM($array) - { - $arrayLanes = array(); - $field = array(); - foreach ($array as $key=> $value){ - - $field['0'] = $value['SWI_UID']; - $field['1'] = $value['SWI_TEXT']; - $field['2'] = $value['SWI_X']; - $field['3'] = $value['SWI_Y']; - $field['4'] = '';//$value['SWI_WIDTH']; - $field['5'] = '';//$value['SWI_HEIGHT']; + /** + * This public function create a array for open the process in the new processmap + * + * @param array $array + * @return array + */ + public function createProcessPM ($array) + { + $result = array (); + $result['0'] = $array['PRO_UID']; + $result['1'] = $array['PRO_TITLE']; + $result['2'] = $array['PRO_DESCRIPTION']; + return $result; } - return $arrayLanes; - } - /** - * This function creates an array for the lane that will be created according to the data given in an array - * @param array $lanes - * @return array $lane - */ - function saveWebEntry($array) - { - $file = new DOMDocument(); - foreach($array as $key => $value){ - $link = $value->W_LINK; - // This split function has been DEPRECATED as of PHP 5.3.0. - // $link = split('>',$link); - // $link = split('<',$link[2]); - $link = explode('>',$link); - $link = explode('<',$link[2]); - $link = $link['0']; - $uid = $value->W_PRO_UID; - $name = $value->W_FILENAME; + /** + * This public function creates an array for the lane that will be created according to the data given in an array + * + * @param array $lanes + * @return array $lane + */ + public function createSubProcessesPM ($array) + { + $arrayLanes = array (); + $field = array (); + foreach ($array as $key => $value) { + + $field['0'] = $value['SWI_UID']; + $field['1'] = $value['SWI_TEXT']; + $field['2'] = $value['SWI_X']; + $field['3'] = $value['SWI_Y']; + $field['4'] = ''; //$value['SWI_WIDTH']; + $field['5'] = ''; //$value['SWI_HEIGHT']; + } + return $arrayLanes; } - } + /** + * This public function creates an array for the lane that will be created according to the data given in an array + * + * @param array $lanes + * @return array $lane + */ + public function saveWebEntry ($array) + { + $file = new DOMDocument(); + foreach ($array as $key => $value) { + $link = $value->W_LINK; + // This split public function has been DEPRECATED as of PHP 5.3.0. + // $link = split('>',$link); + // $link = split('<',$link[2]); + $link = explode( '>', $link ); + $link = explode( '<', $link[2] ); + $link = $link['0']; + $uid = $value->W_PRO_UID; + $name = $value->W_FILENAME; + } + } } + diff --git a/workflow/engine/methods/login/forgotPassword.php b/workflow/engine/methods/login/forgotPassword.php index e43798f18..14db83533 100755 --- a/workflow/engine/methods/login/forgotPassword.php +++ b/workflow/engine/methods/login/forgotPassword.php @@ -24,4 +24,5 @@ */ $G_PUBLISH = new Publisher (); $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'login/forgotPassword', '', array(), 'retrivePassword.php'); - G::RenderPage ( "publish" ); \ No newline at end of file + G::RenderPage ( "publish" ); + diff --git a/workflow/engine/methods/login/sysLogin.php b/workflow/engine/methods/login/sysLogin.php index bdac765c2..81d6fd125 100755 --- a/workflow/engine/methods/login/sysLogin.php +++ b/workflow/engine/methods/login/sysLogin.php @@ -131,11 +131,8 @@ if ($oServerConf->getProperty ('LOGIN_NO_WS')) { $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'login/sysLogin', '', $aField, 'sysLogin'); } -//g::dump($G_PUBLISH); G::RenderPage ("publish"); - - ?> + +